You are on page 1of 10

http://www.elwebmaster.

com/editorial/taller-de-php-mysql-consultas-mas-usuadas

Taller de PHP: MySQL


Consultas
Hola de nuevo! Estuvieron practicando? Espero que s! En la clase de hoy ya vamos a empezar a trabajar con Php y MySQL al mismo tiempo, quiza recin hoy van a empezar a entender todo esto que les vengo diciendo de la creacin de sitios dinmicos obteniendo el contenido de la base de datos. Veamos entonces cmo utilizar Php y MySQL en conjunto

Tipos de Consultas
Bsicamente tenemos cuatro consultas a realizar entre PHP y MySQL que son las siguientes:

Select: busca informacin en la base de datos. Insert: ingresa informacin para almacenarla y luego ser obtenida mediante una consulta select. Update: actualiza la informacin guardada. Delete: obviamente borra la informacin. Con estas cuatro consultas es que nosotros vamos a desarrollar todos nuestros sitios webs, obviamente que a medida que avanza el curso vamos a ir aprendiendo elementos ms complejos, como uniones entre tablas por ejemplo, pero no nos apuremos.

Primeros pasos en PHP


Antes que nada en PHP a la hora de realizar una consulta SQL, debemos indicarle con qu base de datos queremos trabajar y conectarnos a la misma. Supongamos que tenemos nuestro archivo noticias.php, lo primero que tenemos que hacer es conectar con la base de datos:
<? // datos de configuracion $ip = localhost; $usuario = nombre_de_usuario_que_conecta_con_la_db; $password = password_de_la_db; $db_name = nombre_de_la_base_de_datos_que_usamos; // 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(); ?>

http://www.elwebmaster.com/editorial/taller-de-php-mysql-consultas-mas-usuadas

Con la funcin mysql_pconnect obtenemos la conexin con el servidor de base de datos, tenemos que completar entonces la ip al servidor, nombre de usuario y contrasea, una vez hecho esto guardamos la conexin en la variable $conn. En caso de que no conecte matamos la aplicacin (para que nuestro script no contine corriendo). Una vez que tenemos nuestra conexin le decimos con qu base de datos queremos trabajar, ya que es posible tener varias base de datos en un mismo servidor. Con mysql_select_db, le pasamos el nombre de la base de datos y la conexin que acabamos de crear y listo, ya tenemos todo preparado para comenzar con nuestras consultas. Bien, supongamos que tenemos nuestra tabla noticias con los siguientes campos idNoticia, Ttulo, Cuerpo y Estado. Vamos a realizar una consulta para traer el listado completo de noticias que estn almacenadas en esa tabla. A continuacin de lo que escribimos antes, siempre dentro de los <? ?> vamos a poner:
$query = SELECT idNoticia,titulo,cuerpo,estado FROM `noticias`"; $response = mysql_query($query, $conn); $c = 0; while( $row = mysql_fetch_assoc($response) ) { $noticia[$c] = $row; $c++; }

Fijense que hicimos una consulta SELECT y le indicamos los campos que queremos traer (no es necesario traer todos), luego en el FROM le decimos de qu Tabla (OJO, no confundan tabla con base de datos, por un lado tenemos la base de datos que fue la que elegimos al conectar y dentro de la base de datos tenemos muchas tablas, la semana pasada creamos una). Con mysql_query enviamos la consulta a la base de datos activa, le tenemos que decir qu queremos hacer y le pasamos la conexin ($conn). Luego con mysql_fetch_assoc obtenemos un array que corresponde con una fila, devolviendo en ese array los tres campos que nosotros le pedimos en este caso: idNoticia, Ttulo y Cuerpo. Y pasa el puntero a la siguiente lnea, es por eso, que usamos un while, recuerden que mientras que exista la lnea en la base de datos, nos va a devolver un array en la variable row y nosotros a ese array, para no perderlo, lo pasamos a un array que llamamos $noticia, as de esta forma, ya tenemos toda la informacin de la base de datos en esa variable y no tenemos que recurrir de nuevo a la base de datos si lo necesitamos usar ms adelante en el mismo script. Por ejemplo si queremos mostrar el ttulo de la primer noticia que tenemos en la base de datos ponemos <? echo $noticia[0]['titulo']; ?> y nos imprime en pantalla el ttulo.

http://www.elwebmaster.com/editorial/taller-de-php-mysql-consultas-mas-usuadas

Ordenar nuestras consultas


Ahora bien, yo quiero que la ltima noticia que ingrese me la traiga primero, como pasa en casi cualquier blog, esto se soluciona muy fcilmente agregando en nuestra consulta la orden ORDER BY y luego indicando cmo queremos que sea: DESC (descendente) o ASC (ascendente). Bsicamente nuestro query queda:
$query = SELECT idNoticia,titulo,cuerpo,estado FROM `noticias` ORDER BY idNoticia DESC";

Filtrar las consultas


Y qu pasa si nosotros ahora queremos traer una consulta donde solo me traiga las noticias publicadas, es decir que estado sea igual a publicado. Para ello entre el FROM y el ORDER debemos ubicar una nueva clusula que es WHERE y ah le indicamos qu campo queremos que sea igual a qu, es decir:
$query = SELECT idNoticia,titulo,cuerpo,estado FROM `noticias` WHERE estado = 'publicado' ORDER BY idNoticia DESC";

Perfecto, eso es todo por hoy, ya a partir de la semana que viene veremos como ir insertando datos en la base mediante PHP.

Insertar datos en la base de datos


Buenos das alumnos! Hoy vamos a continuar con la insercin de datos en nuestra base, as ya tienen ms 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.

Cmo insertar nuevos registros en la base de datos?


En realidad la consulta para insertar los nuevos registros es bastante fcil si entendieron la clase anterior. Bsicamente 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 conexin con la misma. De igual modo esto se hace una vez, por lo general arriba de todo en cualquier script se pone la conexin con la base de datos y despus la variable que la guarda, $conn, en nuestro caso se utiliza para todas las consultas, ya sean de insertar, borrar, consultar, etc.

http://www.elwebmaster.com/editorial/taller-de-php-mysql-consultas-mas-usuadas

Casos de uso
Esta es la parte divertida, ver realmente cmo vamos a utilizar esta sentencia de MYSQL. Bsicamente lo que vamos a tener es un archivo que llamaremos subirnoticias.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 cmo se empieza a complicar todo :). Veamos la parte de HTML primero.
<html> < head> < title>Formulario de Notcias</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 atencin vern que el formulario no tiene nada de raro salvo que la accin 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:

http://www.elwebmaster.com/editorial/taller-de-php-mysql-consultas-mas-usuadas

<? // 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 conexin con la base de datos (esto lo voy a repetir siempre, para que quede bien grabadito :D). Luego hacemos uso de una condicin 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 enve el formulario, va a llegar tambin una variable $_POST['submit'] con valor 1. Si no est vacia, hacemos la insercin de la noticia. Ya ms 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 vern que uso unos {} en la sentencia de insercin 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

http://www.elwebmaster.com/editorial/taller-de-php-mysql-consultas-mas-usuadas

<? // 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 Notcias</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>

http://www.elwebmaster.com/editorial/taller-de-php-mysql-consultas-mas-usuadas

Actualizar y borrar registros (1)


Listo, ya aprendieron a insertar datos en una tabla, ahora nos falta saber cmo hacer si esos datos que insertamos los escribimos mal, o los queremos cambiar y, siendo un poquito ms extremos, no queremos que existan ms. Para ello, en la clase de hoy, les voy a explicar cmo es la sintaxis de las consultas de UPDATE y DELETE con la que lograremos nuestro objetivo.

Sintaxis
Bsicamente la sintaxis de PHP para estas consultas es bastante sencilla, por ejemplo, para actualizar una tabla:
$query = "UPDATE `nombre_tabla` set campo1 = 'valoresCampo1', campo2 = 'valoresCampo2' WHERE primaryKey = 'valorPrimaryKey' LIMIT 1"; $response = mysql_query($query, $conn);

Recordar pasar siempre la variable de conexin como primer medida, luego, hay que decirle en qu tabla queremos hacer el UPDATE, y luego le decimos qu campos vamos a modificar y con qu valores. Es muy importante tambin la clusula WHERE para indicarle que estn modificando una fila nicamente, si ustedes quieren modificar varias filas con el mismo valor, pueden quitar la clusula where y el limit 1, y de esta forma editaran toda la tabla. Para borrar es muy similar:
$query = DELETE FROM `nombre_tabla` WHERE primaryKey = 'valorPrimaryKey' LIMIT 1"; $response = mysql_query($query, $conn);

Incisto, tengan mucho cuidado con lo que pongan en el WHERE, pueden poner cualquier condicin, borrar por primary key o por muchos campos a la vez, pero mucho OJO porque pueden borrar toda la informacin que contiene la tabla. La clase que viene veremos algunos casos de usos de ambas consultas, y adems aadiremos consultas del tipo SELECT, necesarias para poder hacer un administrador de contenido decente. Hasta la semana que viene! Practiquen mucho!

Actualizar y borrar registros (2)


Hola de nuevo! Me imagino que habrn estado estudiando casi todo lo que estuvimos viendo hasta aqu, ya que en la clase de hoy vamos a dar una vueltita por casi todos los temas. Lo que vamos a hacer es continuar con nuestro ejemplo de la tabla de noticias, vamos a traer la noticia que queremos editar y para ello usaremos una variable get con la ID de la noticia. Luego con esa ID, haremos una consulta para traer todos los datos que

http://www.elwebmaster.com/editorial/taller-de-php-mysql-consultas-mas-usuadas

incluiremos en un formulario y a su vez enviaremos las variables post con los nuevos datos para editarla. Sencillo, no?

Editando una noticia


Supongamos que el archivo nuestro es editar-noticias.php, lo que vamos a hacer es llamarlo de la siguiente manera:
http://direccion.com/editar.php?idNoticia=23

Entonces en nuestro archivo (previo nos conectamos con la base de datos como siempre) vamos a tener un if para ver si existe una variable get idNoticia, en caso de que exista hacemos la consulta para traer los datos completos
if ( !empty($_GET['idNoticia']) ) { // traemos la noticia $query = SELECT idNoticia,titulo,cuerpo,estado FROM `noticias` WHERE idNoticia = {$_GET['idNoticia']} limit 1; $response = mysql_query($query, $conn); $noticia = mysql_fetch_assoc($response); }

Y luego, una vez que tenemos nuestra variable noticia con todos los datos de la base de datos, vamos a completar el formulario con los datos originales de la siguiente manera:
<h1>Agregar Nueva Noticia</h1> < form action=editar-noticias.php method=post> <label for=titulo>Ttulo</label><br /> < input id=titulo name=titulo value=<? echo $noticia['titulo']; ?> type=text /><br /><br /> < label for=cuerpo>Cuerpo</label><br /> < textarea id=cuerpo name=cuerpo rows=5 cols=50><? echo $noticia['cuerpo']; ?></textarea><br /><br /> < label for=estado>Estado</label> < select id=estado name=estado> <option value=publicado <? if ( $noticia['estado'] == publicado ) echo selected=selected; ?>>Publicado</option> < option value=borrado <? if ( $noticia['estado'] == borrado ) echo selected=selected; ?>>Borrado</option> < /select><br /><br /> < button type=submit name=submit value=1>Editar Noticia</button> < input name=idNoticia value=<? echo $noticia['idNoticia']; ?> type=hidden /> < /form>

Como vern hay dos cambios importantes con respecto al formulario de ingreso de noticias, en este completamos el atributo value con los datos originales. Y el otro

http://www.elwebmaster.com/editorial/taller-de-php-mysql-consultas-mas-usuadas

cambio es que agregamos un nuevo campo al formulario de tipo hidden, o sea, oculto con el valor de la ID de la noticia que estamos editando. Este formulario lo enviaremos a un archivo que contendr el script, puede ser este mismo archivo, de la misma forma que lo hicismos al ingresar una noticia. Si hiciramos eso, tendramos que tener entonces (antes de hacer nuestra consulta para traer la noticia) otro if para saber si recibimos las variables post para editarla.
if ( !empty($_POST['submit']) ) { $query = UPDATE `noticias` set titulo = {$_POST['titulo']}, set cuerpo = {$_POST['cuerpo']}, estado = {$_POST['estado']} WHERE idNoticia = {$_POST['idNoticia']} LIMIT 1; $response = mysql_query($query, $conn);

Nuestro archivo terminado queda de la siguiente manera:


<? // 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 de edicion if ( !empty($_POST['submit']) ) { $query = UPDATE `noticias` set titulo = {$_POST['titulo']}, set cuerpo = {$_POST['cuerpo']}, estado = {$_POST['estado']} WHERE idNoticia = {$_POST['idNoticia']} LIMIT 1; $response = mysql_query($query, $conn); } // si tenemos id de noticia if ( !empty($_GET['idNoticia']) ) { // traemos la noticia $query = SELECT idNoticia,titulo,cuerpo,estado FROM `noticias` WHERE idNoticia = {$_GET['idNoticia']} limit 1; $response = mysql_query($query, $conn); $noticia = mysql_fetch_assoc($response); } ?>

http://www.elwebmaster.com/editorial/taller-de-php-mysql-consultas-mas-usuadas

<html> < head> < title>Formulario de Edicin de Noticias</title> < /head> < body> <h1>Agregar Nueva Noticia</h1> < form action=editar-noticias.php method=post> <label for=titulo>Titulo</label><br /> < input id=titulo name=titulo value=<? echo $noticia['titulo']; ?> type=text /><br /><br /> < label for=cuerpo>Cuerpo</label><br /> < textarea id=cuerpo name=cuerpo rows=5 cols=50><? echo $noticia['cuerpo']; ?></textarea><br /><br /> < label for=estado>Estado</label> < select id=estado name=estado> <option value=publicado <? if ( $noticia['estado'] == publicado ) echo selected=selected; ?>>Publicado</option> < option value=borrado <? if ( $noticia['estado'] == borrado ) echo selected=selected; ?>>Borrado</option> < /select><br /><br /> < button type=submit name=submit value=1>Editar Noticia</button> < input name=idNoticia value=<? echo $noticia['idNoticia']; ?> type=hidden /> < /form> < /body>

Borrando una noticia


Para borrar una noticia lo vamos a hacer de la misma manera, utilizando una variable get que contenga la ID de la noticia que estamos borrando.
if ( !empty($_GET['idNoticia') ) { $query = DELETE FROM `noticias` WHERE idNoticia = {$_GET['idNoticia']} LIMIT 1; $response = mysql_query($query, $conn); }

Bueno, espero que les haya gustado la clase de hoy, hasta la semana que viene.

You might also like