¡Buenos dÃas alumnos! Hoy vamos a continuar con la inserción de datos en nuestra base, asà ya tienen más sentido nuestras consultas de la clase anterior.
Y para que se entiendan mejor vamos a seguir el ejemplo de la tabla noticias con los campos idNoticia ( int(11) - autoincremental), titulo (varchar( 255)), cuerpo (text) y estado (enum(’publicado’,'borrador’)) que vimos la semana pasada.
¿Cómo insertar nuevos registros en la base de datos?
En realidad la consulta para insertar los nuevos registros es bastante fácil si entendieron la clase anterior. Básicamente la sintaxis es como sigue:
$query = "INSERT INTO `nombre_tabla` (campo1,campo2) values (valoresCampo1,valoresCampo2)";
$response = mysql_query($query, $conn);
Recuerden que la tienen que realizar siempre antes de realizar cualquier tarea en el script con base de datos la conexión con la misma.
De igual modo esto se hace una vez, por lo general arriba de todo en cualquier script se pone la conexión con la base de datos y después la variable que la guarda, $conn, en nuestro caso se utiliza para todas las consultas, ya sean de insertar, borrar, consultar, etc.
Casos de uso
Esta es la parte divertida, ver realmente cómo vamos a utilizar esta sentencia de MYSQL. Básicamente lo que vamos a tener es un archivo que llamaremos “subir-noticias.php”, el cual separaremos en dos: por un lado todo nuestro script en php y por otro lo que tiene relacion con HTML. Ya van a ver cómo se empieza a complicar todo :).
Veamos la parte de HTML primero.
<html>
<head>
<title>Formulario de NotÃcias</title>
</head>
<body>
<h1>Agregar Nueva Noticia</h1>
<form action=”subir-noticias.php” method=”post”>
<label for=”titulo”>Titulo</label><br />
<input id=”titulo” type=”text” name=”titulo” value=”" /><br /><br />
<label for=”cuerpo”>Cuerpo</label><br />
<textarea id=”cuerpo” name=”cuerpo” rows=”5″ cols=”50″></textarea><br /><br />
<label for=”estado”>Estado</label><br />
<select id=”estado” name=”estado”>
<option value=”publicado”>Publicado</option>
<option value=”borrador”>Borrador</option>
</select><br /><br />
<button type=”submit” name=”submit” value=”1″>Enviar Noticia</button>
</form>
</body>
</html>
Si prestan atención verán que el formulario no tiene nada de raro salvo que la acción del mismo apunta al mismo archivo. ¿Por qué es esto? Porque, como dije antes, vamos a trabajar todo sobre un mismo archivo, separando lo que es PHP de lo que es HTML. Arriba del HTML vamos a poner todo nuestro script de PHP que va a ser como sigue:
<?
// datos de configuracion
$ip = ‘localhost’;
$usuario = ‘usuario’;
$password = ‘password’;
$db_name = ‘baseDeDatos’;
// conectamos con la db
$conn = mysql_pconnect($ip,$usuario,$password) or die();
// seleccionamos la base de datos
$huboerror = mysql_select_db($db_name,$conn) or die();
// si se envia el formulario
if ( !empty($_POST['submit']) ) {
$query = “INSERT INTO `noticias` (titulo,cuerpo,estado) values (’{$_POST['titulo']}’,'{$_POST['cuerpo']}’,'{$_POST['estado']}’)”;
$response = mysql_query($query, $conn);
}
?>
Fijense un par de cositas, arriba de todo pusimos la conexión con la base de datos (esto lo voy a repetir siempre, para que quede bien grabadito :D).
Luego hacemos uso de una condición mediante la sentencia if. Fijense que preguntamos si la variable “submit” no está vacia.
Nosotros en nuestro formulario le pusimos valor 1, entonces siempre que se envÃe el formulario, va a llegar también una variable $_POST['submit'] con valor 1. Si no está vacia, hacemos la inserción de la noticia. Ya más adelante veremos como hacer que algunos campos sean obligatorios y otros no, pero como siempre los voy a dejar con la intriga.
Por otro lado verán que uso unos {} en la sentencia de inserción de datos, esto es para que me tome solamente el indice que le estoy pasando del array $_POST, ya que estoy insertando una variable directamente dentro de un string que esta entre comillas dobles(”). Si yo no llegase a incluir los {} me insertaria el array $_POST dentro del String en lugar del valor correspondiente al indice ‘titulo’.
Perfecto ya tenemos nuestro script para agregar noticias. Aquà les dejo el script completo
<?
// datos de configuracion
$ip = ‘localhost’;
$usuario = ‘usuario’;
$password = ‘password’;
$db_name = ‘baseDeDatos’;
// conectamos con la db
$conn = mysql_pconnect($ip,$usuario,$password) or die();
// seleccionamos la base de datos
$huboerror = mysql_select_db($db_name,$conn) or die();
// si se envia el formulario
if ( !empty($_POST['submit']) ) {
$query = “INSERT INTO `noticias` (titulo,cuerpo,estado) values (’{$_POST['titulo']}’,'{$_POST['cuerpo']}’,'{$_POST['estado']}’)”;
$response = mysql_query($query, $conn);
}
?>
<html>
<head>
<title>Formulario de NotÃcias</title>
</head>
<body>
<h1>Agregar Nueva Noticia</h1>
<form action=”subir-noticias.php” method=”post”>
<label for=”titulo”>Titulo</label><br />
<input id=”titulo” type=”text” name=”titulo” value=”" /><br /><br />
<label for=”cuerpo”>Cuerpo</label><br />
<textarea id=”cuerpo” name=”cuerpo” rows=”5″ cols=”50″></textarea><br /><br />
<label for=”estado”>Estado</label><br />
<select id=”estado” name=”estado”>
<option value=”publicado”>Publicado</option>
<option value=”borrador”>Borrador</option>
</select><br /><br />
<button type=”submit” name=”submit” value=”1″>Enviar Noticia</button>
</form>
</body>
</html>
Hasta la semana que viene.
| << CLASE ANTERIOR |








Domingo, 1 de Junio de 2008 a las 19.49
!! Felicitaciones !! , gracias a tu sitio y a tus detalladas y excelentes explicaciones, he aprendido mucho en muy poco tiempo.
Da gusto encontrar sitios como este en la red.
Tengo un pequeño anillo web en desarrollo, mi hija cree y jura que yo soy un master en diseño web, je,je.
La verdad es que lo poco que sé, no da para la opción que ella quiere que yo le habilite en su futura meta.
Ella esta muy motivada en desarrollar su ‘mini-propia comunidad social’, a mi me parece fenomenal su iniciativa y como padre estoy muy interesado en apoyarla, pues esa serÃa una gran opción para entretenerla y despertarle sus reales inclinaciones en el mundo de la informática que es lo que más hasta ahora le atrae.
Ella desea que sus amigas puedan poner sus nombres en las paginas que mi hija les diseñe y a la vez los puedan publicar y cambiar cuando quieran de acuerdo a una variedad de letricas animadas y decoradas. De igual manera les piensa poner uno recursos para que ellas mismas publiquen en sus páginas, algo asà como myspace chiquitico, ja,ja.
El asunto es que cada nombre se harÃa de la unión de los gifs iguales a la cantidad de letras del nombre:
Por ej en el nombre de ANA de acuerdo a lo que le entiendo irÃa algo asà como A.gif+N.gif+A.gif.que genere una imagen que se publica de alguna forma y de alguna manera sube a una base de datos, etc.
De PHP no sé mucho pero de acuerdo al tutorial que hay en tu sitio, veo que con un poquito de estudio y una buena cuota de tiempo, lo iré conociendo y mejorando.
Me puedes decir cuanto me cobras por el script y la explicación de su funcionamiento?
Soy Colombiano pero hace 18 años que vivimos en Puerto Rico, de hecho mi hija es Boricua y acaba de cumplir sus 15 Añitos, Este script serÃa algo que me caerÃa como anillo al dedo para complementarle su regalito de los 15.
Cordial saludo y nuevamente Felicitaciones por tu excelente aporte y sitio web.
Lunes, 2 de Junio de 2008 a las 11.13
Hola, lo que queres hacer con el nombre es bastante facil.
Supongamos que tenemos nuestra variable $nombre = “ana”, lo que tienes que hacer es primero ver el largo de la cadena de texto. Eso lo hacemos con la funcion strlen de la siguiente forma
$nroDeLetas = strlen($nombre);Una vez que tenemos el largo ya podemos trabajar con un for para ir letra por letra.
for( $c = 0; $c < $nroDeLetras; $c++ ) {
echo "<img src='{$nombre[$c]}' />";
}
Lo que va a hacer ese bucle es ir pasando por $nombre[0], $nombre[1] y $nombre[2] que corresponde a cada letra, el indice 0 es para la primer A, el indice 1 es para la N y el indice 2 es para la segunda A.
Espero que te sirva, saludos.
Jueves, 5 de Junio de 2008 a las 22.27
Gracias Justi, Bueno, encontrar tu respuesta, aparte de ser gesto de buen seguimiento y fina cortesÃa, es una muestra de que en realidad este sitio impone la dinámica y las ganas que se necesitan en este desagradecido mundillo de la informática, en el cual todos pedimos mucho y muy pocos retribuÃmos o agradecemos lo recibido.
Aplauso grande. Estudiaré con juicio lo que me dices del php, desde ya veo, que estoy muy distante de comprender bien, lo que sé que muy seguramente expusiste para los que saben de manera clara, sencilla y práctica.
Saludo y sigue con tu sitio sin pausa ni tregua, éxito en tus planes y proyectos.
Lunes, 9 de Junio de 2008 a las 05.30
no me guarda nada no marca error pero no guarda nada
a que se puede deber???
Lunes, 9 de Junio de 2008 a las 09.49
Hola, lo primero: muchas gracias por la información. Mi duda es la siguiente:
¿cómo hago para que, por ejemplo, el campo “cuerpo” pueda contener código html?
Sé que se utiliza htmlentities y en otro sitio html_entity_decode(), pero no tengo claro cómo serÃa el código php.
Muchas gracias.
Martes, 10 de Junio de 2008 a las 11.10
Hola MarÃa, yo por lo general guardo la información en html tal cual como la escriben en base de datos, solo evito que me pongan código malisioso que pueda romper la base de datos, pero no me gusta modificar lo que escribio un usuario.
El tema de los htmlentities es a la hora de mostrar la información que esta guardada en base de datos, lo que hace es que un codigo html no se vea como tal, sino como un string, es decir reemplaza por ejemplo un <html> por & lt;html& gt; y evitas que se muestre el codigo html en pantalla.
Por ejemplo si yo NO quiero que en cuerpo haya codigo html, yo lo guardo tal cual como lo escribe el usuario, pero a la hora de mostrar, cuando hago el echo lo pongo de la siguiente manera:
< ? echo htmlentities($cuerpo); ?>
Y de esta forma evitamos que ejecuten html en nuestro sitio.
Viernes, 20 de Junio de 2008 a las 09.42
Muchas gracias Justi! Repasando algunas páginas me he dado cuenta que, efectivamente, me aceptan html sin problemas, el problema venÃa por el tamaño del texto que era demasiado grande, pero bueno, esto no tiene que ver con el html
Al ser páginas internas sà necesito que acepte código html, pero tomo nota de lo que comentas para otro tipo de páginas donde no interesa que puedan generar código.
Gracias de nuevo!
Sábado, 21 de Junio de 2008 a las 12.48
Gracias por sus aportaciones, son de buena calidad y bien explicadas. Me gustaria si le es posible a alguno de ustedes ayudarme a insertar registros a una tabla usando los datos de un archivo de texto separados por coma.
Domingo, 6 de Julio de 2008 a las 12.18
En un formulario que he creado, todos los datos que el formulario recolecta se insertan sin problema en la base de datos, menos el campo en el cual va la ip del usuario que navega en mi sitio, siendo que el resultado que me muestra es ‘<?php echo, que es una parte de la instrución (<input type=”hidden” name=”ip” value=”>), esto me deja totalmente desquiciado, porque en otra base de datos y en el servidor de prueba, el campo funciona bien y registra la ip del visitante. SabrÃa decirme a que puede deberse esta situación?
Viernes, 8 de Agosto de 2008 a las 22.10
Hola la verdad no me sale no c en ke este el error
Domingo, 5 de Octubre de 2008 a las 20.18
Hola Justi, hice un cambio de acuerdo a como tengo yo una tabla en mi diseño.
$query = “INSERT INTO personas (nombre) values (’{$_POST['nombre']}’,'{$_POST['apellido']}’,'{$_POST['email']}’)”;
pero cuando voy a ver el registro en la BD, el email va a parar al campo nombre de la BD. y los otros dos valores no los almacena, ni siquiera deja los campos en NULL parece que les entrara aire XD
A que se debe eso?
Salu2,
Domingo, 12 de Octubre de 2008 a las 11.46
Hola quiero aportar aquà al maestro, que primero felicitarlo, vaya joya de oro que nos estas dejando!…
miren, el problema que German tiene me pasa a mi mismo. seguro que ya lo resolvio., por favor corrijanme si me equivoco, pero esta linea tiene unos errores $query = “INSERT INTO `noticias` (titulo,cuerpo,estado) values (’{$_POST['titulo']}’,’{$_POST['cuerpo']}’,’{$_POST['estado']}’)â€;
Primero decirles que tengan cuidado con las comillas y apostrofes que se estropean al colocarlos en blogs o pegarlos en la web. por ejemplo ’{$_POST['titulo']}’ deberia de ser con ( ‘ ) asà —> ‘{$_POST['titulo']}’, bueno el problema de esa linea es que veo que no a selecionado la base de datos. yo en php my admin me fui a: primero seleccione la tabla noticias. después, en el menú de arriba le dà insertar, y llene un registro. dejando vacÃo solo el de id.
http://img91.imageshack.us/img91/1501/pantallazogq8.png
ahà dejo la foto para que me entiendan. ahora le di continuar y me sale lo siguiente
http://img231.imageshack.us/img231/1621/pantallazo1bm5.png
//de inicio la cosa cambia…
//primero selecionan la base de datos, en mi caso noti. y luego la tabla…
INSERT INTO `noti`.`noticias` (
`idNoticia` ,
`titulo` ,
`cuerpo` ,
`estado`
)
VALUES (
NULL , ‘Mi punto de vista.’, ‘Prueba de una noticia…. muajajaj!’, ‘borrador’
);
// y se fijan en los values cada uno va separado por comas y con apostrofes o comilla simple.
Bueno maestro corrÃgeme si me equivoque.
INSERT INTO `noti`.`noticias` (
`idNoticia` ,
`titulo` ,
`cuerpo` ,
`estado`
)
VALUES (
NULL , ‘Mi punto de vista.’, ‘Prueba de una noticia…. muajajaj!’, ‘borrador’
);
como resultado me dio esto
Lunes, 24 de Noviembre de 2008 a las 19.07
Ante todo felicitarte por la claridad y la simplicidad con la que explicas los temas, haciendolos amenos, agradables y entendibles a la vez.
Despues de Leer todas las clases y me refiero a todas, decidi probar creando en mi base de datos la tabla “noticias” y dentro de ella sus respectivos campos al pie de la letra sin perder detalle alguno. Aclaro que mi base de datos esta alojada en un servidor web y no en mi equipo local (creo que ahi esta el problema).
Una vez creada la tabla con pypMyAdmin, me dedique a escribir el codigo php al pie de la letra tal y cual se muestra en esta pagina.
El resultado, no me sale nada, tanto en el internet explorer como en el firefox.
Por favor te suplico me ayudes a entender que me falta para que me salga ya que en otra pagina encontre ejemplos parecidos y de otra manera algo asi por ejemplo: me sale, pero ahora estoy confundido que entendi mal.
Sin otro particular y esperando una pronta respuesta, te saluda atte.
Diego Gonzalez
Miércoles, 3 de Diciembre de 2008 a las 18.25
que no te sale?
Jueves, 4 de Diciembre de 2008 a las 02.20
Primero que nada debo felicitarte y agradecer un material tan didactico y completo a la vez, realmente ha sido un placer ir siguiendo tus clases para aprender este lenguaje, mi consulta se repite con algo que esta sin respuesta mas arriba, tengo el formulario funcionando y al llenar los campos y darle submit, este se vuelve a poner en blanco, pero no ingresan las entradas a la base de datos =(, si lo hago a traves de phpadmin puedo agregarle informacion a la DB pero a traves del formulario no hay caso. alguna idea de que puede ser?
Lunes, 22 de Diciembre de 2008 a las 13.17
Holas que tal!
Me encanta este curso, estuve busando por mucho tiempo algo asÃ! te agradezco !
Pero Quiero decirte que tienes un error en el código, por eso no permite insertar datos en la Base de Datos!
—————————-
Tienes
$query = “INSERT INTO ‘noticias’ (titulo,cuerpo,estado) values (’{$_POST['titulo']}’,'{$_POST['cuerpo']}’,'{$_POST['estado']}’)”;
—————————-
Y debe quedar:
$query = “INSERT INTO noticias (titulo,cuerpo,estado) values (’{$_POST['titulo']}’,'{$_POST['cuerpo']}’,'{$_POST['estado']}’)”;
—————————-
También la Variable “$response” no es llamada por nada, asà que la elimine y el código quedo de la siguiente manera:
———————

Con la variable:
$response = mysql_query($query, $conn);
———————
Sin la Variable:
mysql_query($query, $conn);
——————–
Solo saque las comillas en noticias como pueden ver y elimine la variable $response!
el Código completo quedarÃa asÃ:
—————-
Codigo completo para insertar registro:
—————-
Formulario de NotÃcias
Agregar Nueva Noticia
Titulo
Cuerpo
Estado
Publicado
Borrador
Enviar Noticia
———————-
Bueno eso querÃa aclarar, ya que me quede trabado en esto hasta que logre la solución con algo de ayuda, espero que les pueda ayudar en algo!
Saludos! y sigan con el curso je!
Lunes, 22 de Diciembre de 2008 a las 13.20
Perdon, el código no salio! :s
veamos si ahora si:
————–
// datos de configuracion
$ip = ‘localhost’;
$usuario = ‘tu_user’;
$password = ‘tu_pass’;
$db_name = ‘tu_base_de_Datos’;
// conectamos con la db
$conn = mysql_pconnect($ip,$usuario,$password) or die();
// seleccionamos la base de datos
$huboerror = mysql_select_db($db_name,$conn) or die();
// si se envia el formulario
if ( !empty($_POST['submit']) ) {
$query = “INSERT INTO noticias (titulo,cuerpo,estado) values (’{$_POST['titulo']}’,'{$_POST['cuerpo']}’,'{$_POST['estado']}’)”;
mysql_query($query, $conn);
}
Asà si funciona!
Sábado, 27 de Diciembre de 2008 a las 01.29
Concuerdo con carlos con eso de quitar la comila“ que es en si una tilde invertida, pues igual funciona, yo tuve problemas con esto, pero al final use mis conocimientos de sql que usaba en SqlServer y Oracle, al igual que en mysql cuando hacia las conexiones y consultas en java y visual basic jeje y si funciona sin nada de esas comillas, ademas evito poner directamente la variable del post ($Post['campo']) en la sentencia de sql ya que es como una proteccion guardarla en variable asi se eviatria los famosos sql injection de cierta forma. Bueno espero seguir atento al curso, recien voy por la clase de manipulacion de archivos pero vine para aca a ver si ayudaba en algo a la people.
Martes, 14 de Abril de 2009 a las 13.59
Estoy intentando seguir vuestros pasos pero me sale este error.
Warning: mysql_pconnect() [function.mysql-pconnect]: Unknown MySQL server host ‘‘localhost’’ (1) in /home/riberad/public_html/principal/bdatos/conectar3.php on line 8
Jueves, 16 de Abril de 2009 a las 13.02
el problema fernando es que no esta encontrando la base de datos corriendo en la misma maquina donde estan los archivos, puede ser por dos cosas, o que el host de la base de datos no sea “localhost” sino una ip externa, o que este apagado el servicio de base de datos.
Lunes, 18 de Mayo de 2009 a las 07.10
Hola Justi
Muchas gracias por sostener este espacio de aprendizaje y conocimiento. Siempre vengo a este sitio cuando tengo dudas y siempre he encotrado muy buena voluntad de ayuda.
Ahora estoy haciendo una encuesta que tiene más de 500 variables y decidà trabajar con PHP, MySQL,(instalé Xampp) el código de PHP lo genero desde Dreamweaver CS3 (que me resulta más fácil) he podido hacer bien la conexión con la Base de Datos, pero se me da la duda ya dentro de Dreamweaver. Una vez creado mi formulario (son varias páginas) cada elemento a insertar debe ser de los que aparecen en la opción formulario, o deben ser Objetos PHP o Datos dinámicos.
No sabÃa si colocar esta consulta en el taller de dreamweaver o aqui, lo hice por este taller porque se trata más profundamente la relación con la Bases de Datos.
Muchas Gracias, saludos
Lunes, 18 de Mayo de 2009 a las 12.44
@marita, hola marita, te conviene insertar en la base de datos los datos que se envian atraves del formulario. Saludos.
Martes, 19 de Mayo de 2009 a las 07.37
Gracias Justi
Ya lo hice y funciona muy bien la conexión con la BD, ahora tendré que resolver el tema del volumen de datos, son aproximadamente 850 campos, (los ingreso en 7 páginas) calculo que serÃa bueno ir pasando a la base por bloques. Respecto a poner botones de anterior y siguiente en las páginas (para que quien haga la encuesta pueda ir viendo que contestó) cómo tendré que manejar el registro para que no haya re inserciones? Muchas Gracias, Saludo
Marita