Justi Lunes, 26 de Mayo de 2008 a las 13.00
   Imprimir artículo
elWebmaster.com

Taller de PHP: Insertar datos en la base de datos

Taller de PHP: Insertar bases de datos¡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  

CLASE SIGUIENTE >>

Enviar a Del.icio.us Enviar a Meneame Enviar a Digg Enviar a Fresqui Enviar a Enchilame

Comentarios (12)

  1. Fajil dice:

    !! 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.

  2. Justi dice:

    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.

  3. Fajil dice:

    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.

  4. Angeles dice:

    no me guarda nada no marca error pero no guarda nada :( a que se puede deber???

  5. María dice:

    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.

  6. Justi dice:

    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.

  7. María dice:

    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!

  8. javier espinosa dice:

    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.

  9. Juan dice:

    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?

  10. salvador dice:

    Hola la verdad no me sale no c en ke este el error

  11. German Franco dice:

    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,

  12. Dk dice:

    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

Deja tu opinión

© 2007 - 2008 elWebmaster.com | Powered by Wordpress | Diseño CSS y XHTML válido. | Algunos íconos basados en FamFamFam Mini
Iniciar Sesión