Você está na página 1de 50

CURSO DE PHP

PLANTELES EDUCATIVOS EN
COMPUTACION EMPRESARIAL 2000.
S.C.

ZONA GUANAJUATO

Contenido
INTRODUCCION........................................................................................... 3
Primeros pasos............................................................................................ 3
Variables..................................................................................................... 3
Tip............................................................................................................ 4
Reconociendo variables.............................................................................. 4
Qu contenido pueden tener mis variables.................................................4
Tipo de variables......................................................................................... 5
Qu son las constantes y en qu se diferencian con las variables?..........5
Diferentes tipos de condicionales...............................................................6
Casos de uso............................................................................................... 6
if, else y elseif.......................................................................................... 6
Switch...................................................................................................... 7
Condicionales con HTML..........................................................................8
Qu son los operadores?...........................................................................9
Operadores aritmticos............................................................................9
Operadores de asignacin.......................................................................9
Operadores de comparacin..................................................................10
Operadores lgicos................................................................................ 10
En PHP existen cuatro tipos de bucles: while, do while, for y foreach....11
while......................................................................................................... 11
do while..................................................................................................... 12
for............................................................................................................. 12
foreach...................................................................................................... 13
Cmo armar un formulario para que sea procesado por Php?.................15
Inputs..................................................................................................... 16
Textarea.................................................................................................... 18
SelectBox.................................................................................................. 19
Recibiendo los datos................................................................................. 20
contacto_script.php................................................................................... 21
Expliquemos paso por paso...................................................................21
Qu esta pasando ac?........................................................................21
Cuerpo del Mensaje............................................................................... 22
Funcin mail.............................................................................................. 22

Script Completo........................................................................................ 23
Sintaxis..................................................................................................... 23
Calcular la edad de una persona...............................................................24
Las cookies y las sesiones.........................................................................25
Qu son las cookies?............................................................................... 25
Qu son las Sesiones?............................................................................. 25
Para qu usar Cookies si con las Sesiones se logra practicamente lo
mismo de forma ms rapida y ms segura?.............................................26
Qu es una Base de Datos?.....................................................................26
Importancia de las Bases de Datos...........................................................26
Interaccin................................................................................................ 27
Ventajas de MySQL.................................................................................... 27
Conectarse con PHP a MySQL...................................................................27
Qu otras alternativas existen?...............................................................28
Por qu usar phpMyAdmin?.....................................................................28
Cmo crear una tabla?............................................................................ 29
Qu son los ndices?................................................................................ 31
Tipos de Consultas..................................................................................... 32
Primeros pasos en PHP............................................................................... 32
Ordenar nuestras consultas..........................................................................33
Filtrar las consultas.................................................................................... 34
Cmo insertar nuevos registros en la base de datos?..........................34
Casos de uso.......................................................................................... 34
Sintaxis.................................................................................................. 36
Editando una noticia.............................................................................. 37
Borrando una noticia.............................................................................. 39
joins....................................................................................................... 40
Inner, Left y Right Joins..........................................................................40
Union..................................................................................................... 41
Count........................................................................................................ 42
Max y Min.................................................................................................. 42
SUM........................................................................................................... 42
LIMIT......................................................................................................... 42
Subiendo Imgenes a un Sitio...................................................................43
IDE para desarrollar en php......................................................................44
Importar datos en la db de un CSV...........................................................44

Conociendo la ip de nuestros navegantes.................................................45

Pgina 7 de 50

INTRODUCCION
Para empezar, PHP es un lenguaje de programacin para pginas web que permite
generar pginas dinmicas del lado del servidor. Para ser un poco ms preciso, nos
referimos por pginas dinmicas a aquellas pginas que van a cambiar su contenido
dependiendo de los valores que se le asignen.
Sin ir ms lejos, este mismo blog est programado en PHP y para ver los artculos se
utiliza siempre el mismo archivo, pero se muestra el contenido de acuerdo a la id del
artculo que se le est pidiendo.
Y por qu del lado del servidor? Esto significa que el cdigo PHP va a ser
interpretado en el servidor. As, lo que el usuario ver en pantalla ser el contenido
generado por la interpretacin del archivo PHP que el usuario est solicitando.
Una de las grandes ventajas que tiene PHP es su gran versatilidad a la hora de trabajar
con bases de datos, permitiendo realizar pginas con informacin almacenada en forma
persistente en bases de datos y mostrarla segn la peticin de los usuarios.

Primeros pasos
Dentro de un archivo PHP se puede alternar entre cdigo html y cdigo PHP. Esto
nos permite realizar pginas dinmicas de forma fcil: realizando toda la estructura con
html y luego agregando el contenido dinmico.
Imaginemos una pgina html comn, pero en lugar de ser index.html es index.php.
Cuando se quiera agregar cdigo PHP habr que hacerlo dentro de las etiquetas <?php
y ?> o <? y ?>, por ejemplo:
<html>
<head>
<title>hola mundo</title>
</head>
<body>
<h1>incluir cdigo PHP en html</h1>
<p><? ac va el cdigo PHP ?></p>
</body>
</html>

Variables
Las variables son elementos que creamos para asignarles un valor o dato especfico (que
puede cambiar a lo largo de nuestro archivo). En PHP, las variables se definen
anteponiendo el signo $, por ejemplo:
$hola = "hola mundo";

TALLER DE PHP

PECE2000

ZONA GUANAJUATO

Pgina 8 de 50

En el cdigo anterior definimos la variable hola la cual contiene la informacin hola


mundo. Noten que al final agregu un punto y coma (;). En PHP, siempre que se
termine una instruccin hay que aclararlo de esta forma.

Tip
Lo ideal a la hora de programar es definir todas las variables y realizar las operaciones
antes del cdigo html y en ese cdigo mostrar los resultados de nuestras variables. Por
ejemplo, un cdigo completo de hola mundo sera:
<? $hola = "hola mundo"; ?>
<html>
<head>
<title><? echo $hola; ?></title>
</head>
<body>
<h1>incluir cdigo PHP en html</h1>
<p><? echo $hola; ?></p>
</body>
</html>

La funcion echo lo que hace es imprimir una o ms cadenas de texto. En nuestro


ejemplo anterior, como la variable contena una cadena de texto (string), lo que el
navegador hubiera mostrado es:
<html>
<head>
<title>hola mundo</title>
</head>
<body>
<h1>incluir cdigo PHP en html</h1>
<p>hola mundo</p>
</body>
</html>

Reconociendo variables
Como expliqu en la clase anterior las variables anteponen el smbolo $, es decir
$variable, $queEsEsto, $no_se, son tres variables que se le pone el nombre que uno
quiere.

Qu contenido pueden tener mis variables


A una variable se le puede asignar cualquier tipo de informacin: una cadena de texto
(string), nmeros enteros (integer), un arreglo (array), true, false, null, etc;
As mismo, a una variable que antes era un string se le puede cambiar el tipo de
informacin sin ningn problema.
<?
$miVariable = "hola, esta es una cadena de texto";
$miVariable = 30;
$miVariable = array( 'hola', 'este', 'es', 'un', 'array' );

TALLER DE PHP

PECE2000

ZONA GUANAJUATO

Pgina 9 de 50
$miVariable = true;
?>

Si escribimos todo eso en nuestro cdigo php, el valor final que va a tener la variable
$miVariable va a ser true, todo el resto de la informacin asignada se pierde.

Tipo de variables
Existen dos tipos de variables en php, locales y globales, locales son aquellas que se
ejecutan en un nico mbito, es decir si yo defino una variable $local y a continuacin
uso una funcin que adentro contiene una variable llamada $local, van a ser
consideradas como dos variables diferentes y no va a pasar lo que pasa en el ejemplo
anterior que la informacin asignada prioritariamente a la variable $local se pierde.
Para crear una variable global que s puede ser accedida desde todos los mbitos de
nuestro script se debe aclarar, caso contrario es local.
<?
global $miGlobal = "esta es una variable global";
?>

Qu son las constantes y en qu se diferencian con las


variables?
Como bien lo dice el nombre, una constante es como una variable pero una vez definida
esta no puede cambiar su contenido en todo el script.
Para crear una constante debemos definirla de la siguiente manera:
<?
define('HOLA', 'Hola Mundo');
?>

De esa forma hemos definido la constante HOLA (por convencin se utilizan nombres
en mayscula para las constantes aunque no es obligatorio). Las constantes son ms
livianas que las variables en el uso de memoria del servidor y no pueden ser reescritas,
es decir, si en nuestro script tenemos lo siguiente:
<?
define('HOLA', 'Hola mundo');
define('HOLA', 'Chau mundo');
?>

Nuestro script de php va a interpretar la constante HOLA con la primer informacin


definida en ella, es decir Hola mundo y en el reporte de errores del servidor va a agregar
el error de que se intento definir nuevamente la constante HOLA.
Otra ventaja que tienen las constantes es que son GLOBALES, es decir se pueden
acceder desde cualquier mbito, dentro de una funcin, una clase, etc.

TALLER DE PHP

PECE2000

ZONA GUANAJUATO

Pgina 10 de 50

Por ltimo, para usar una constante la usamos directamente por el nombre que
definimos en el primer trmino, volviendo al ejemplo de Hola mundo de nuestra primer
clase, usando la constante sera de la siguiente forma:
<? define('HOLA', 'Hola mundo'); ?>
<html>
<head>
<title><? echo HOLA; ?></title>
</head>
<body>
<h1>incluir cdigo PHP en html</h1>
<p><? echo HOLA; ?></p>
</body>
</html>

y en el navegador se ver as:

A partir de esta clase vamos a empezar a ver con ms profundidad como podemos
aprovechar al mximo la programacin. Los condicionales son bsicamente el elemento
fundamental a la hora de hacer pginas dinmicas. Con ellos decidimos qu tipo de
accin realizar y son parte de la llamada estructura de control.

Diferentes tipos de condicionales


Tenemos 4 elementos a utilizar a la hora de necesitar una condicin:
if, else, elseif y switch

Casos de uso

if, else y elseif


La estructura if se utiliza para ejecutar una accion segn una determinada condicin. Por
ejemplo:
<?
if ( $fecha == '04.02.2008' ) {
echo "Hoy es 4 de Febrero de 2008";
}
?>

Por otro lado est muy relacionada con el else, que sirve para continuar con el proceso
si no se cumple la condicin.

TALLER DE PHP

PECE2000

ZONA GUANAJUATO

Pgina 11 de 50

Atencin! No es obligatorio que figure.


<?
if ( $usuario != false ) {
echo "Bienvenido de nuevo $usuario";
} else {
echo "Hola, si an no estas registrado puedes hacerlo ...";
}
?>

Si usamos el else se mostrar o la primer accin o la segunda. Por el contrario, si


usamos solo el if, en pantalla se mostrara el bloque de accin si se cumple la
condicion y seguir corriendo el script mostrando lo que viene a continuacion por
fuera de los { }.
Por ltimo, tenemos el elseif que nos permite usar varias condiciones hasta que se
cumpla una. Por ejemplo:
<?
if ( $hoy == 'Lunes' ) {
echo 'Hoy es Lunes, tenemos carne para almorzar';
} elseif ( $hoy == 'Martes' ) {
echo 'Hoy es Martes, tenemos fideos para almorzar';
} elseif ( $hoy == 'Miercoles' ) {
echo 'Hoy es Miercoles, tenemos estofado para almorzar';
} elseif ( $hoy == 'Jueves' ) {
echo 'Hoy es Jueves, tenemos pizza para almorzar';
} elseif ( $hoy == 'Viernes'{
echo 'Hoy es Viernes, tenemos tarta para almorzar';
} elseif ( $hoy == 'Sabado'{
echo 'Hoy es Sabado, tenemos ravioles para almorzar';
} else ( $hoy == 'Domingo'{
echo 'Hoy es Domingo, no almorzamos :(';
}
?>

El script va a correr hasta que se cumpla la condicin y entrar nicamente en esa


sentencia.

Switch
La estructura switch es una forma paralela a la usada en el ltimo caso. Se forma de la
siguiente manera:
<?
switch($hoy) {
case 'Lunes':
echo 'Hoy es Lunes, tenemos carne para almorzar';
break;
case 'Martes':
echo 'Hoy es Martes, tenemos fideos para almorzar';
break;
case 'Miercoles':
echo 'Hoy es Miercoles, tenemos estofado para almorzar';
break;
case 'Jueves':
echo 'Hoy es Jueves, tenemos pizza para almorzar';

TALLER DE PHP

PECE2000

ZONA GUANAJUATO

Pgina 12 de 50
break;
case 'Viernes':
echo 'Hoy es Viernes, tenemos tarta para almorzar';
break;
case 'Sabado':
echo 'Hoy es Sabado, tenemos ravioles para almorzar';
break;
case default:
echo 'Hoy es Domingo, no almorzamos
';
break;
}?>

Condicionales con HTML


Una de las grandes ventajas de PHP es que se puede entrelazar con HTML. Un claro
ejemplo de lo aprendido en esta clase, es cmo decidir qu mostrar y qu no en nuestro
HTML con un condicional de PHP.
En el caso siguiente mostrar el formulario para dejar comentarios de elWebmaster,
dependiendo si estamos registrados o no en nuestro sitio.

A continuacin, vers cmo queda el formulario en ambos casos:

Sesin iniciada como usuario registrado.

TALLER DE PHP

PECE2000

ZONA GUANAJUATO

Pgina 13 de 50

Usuario invitado. Sesin no iniciada.

Qu son los operadores?


Al realizar nuestros scripts constantemente estamos realizando operaciones que le dan
complejidad a nuestro trabajo. Existen cuatro tipo de operadores: aritmticos,
asignacin, lgicos y comparacin.

Operadores aritmticos
+ adicin de valores.
- resta de valores.
*

multiplicacion de
valores.

/ division de valores.
% resto de una division.
++

incrementa en una
unidad.

-- resta en una unidad.

Operadores de asignacin
=

asigna al primer miembro el segundo. Es decir $a = 4, le asigna el valor


4 a $a.

+=

asigna al primer miembro la suma del primer miembro con el segundo.


$a =4; $b = 5; $b += $a, ahora $b pasa a valer 9.

-= asigna al primer miembro la resta del primer miembro con el segundo.


*=

asigna al primer miembro la multiplicacion del primer miembro con el


segundo.

/= asigna al primer miembro la division del primer miembro con el

TALLER DE PHP

PECE2000

ZONA GUANAJUATO

Pgina 14 de 50
segundo.
%=

asigna al primer miembro el resto de la division del primer miembro


dividido el segundo.

.=

concatena el primer miembro con el segundo y se lo asigna al primero.


Es decir $a = Hola ; $b = Mundo. $a .= $b; ahora $a = Hola Mundo;

Operadores de comparacin
Este tipo de operadores se van a utilizar mucho en los condicionales, junto con los
operadores lgicos son los que le van a dar la complejidad a nuestro script.
comprueba si dos valores son iguales, por ejemplo if ($a == $b) si $b es igual $a,
== el condicional
devuelve TRUE y continua ejecutando el script.
!= comprueba si dos valores son distintos.

>

comprueba si el valor del primer miembro es mayor al segundo, por ejemplo if


( $a > 5), va a
devolver TRUE para todos aquellos valores de $a mayor a 5.

<

comprueba si el valor del primer miembro es menor al segundo.

>= comprueba si el valor del primer miembro es mayor o igual al segundo.


<= comprueba si el valor del primer miembro es menor o igual al segundo.

Operadores lgicos

operacion de negativa, por ejemplo dentro de un condicional se puede


realizar todo tipo de operaciones y funciones, una que veremos mas
adelante es una funcion propia de php que devuelve TRUE o FALSE
dependiendo si la variable esta vacia, entonces si nosotros preguntamos
if (!empty($a)) va a devolver si $a = 5, TRUE, ya que empty($a)
devuelve FALSE, pero !empty($a) seria como preguntar Si $a NO esta
vacia.

comparador Y. Dentro de un condicional es necesario que ambas


and condiciones se cumplan es decir if ( $a = 4 AND $b = 5 ) continua con el
script.
comparador O. Dentro de un condicional es necesario que se cumpla una
or de las dos condicione, es decir if ( $a = 4 OR $b = 5 ) con que $a = 4 o

$b = 5 el script va a continuar su ejecucion.


xor

va a devolver verdadero si al menos una de las dos condiciones es


verdadera pero no ambas.

TALLER DE PHP

PECE2000

ZONA GUANAJUATO

Pgina 15 de 50
&& es igual que el and
|| es igual que el or

Casi siempre nuestros script van a realizar tareas repetitivas, por ejemplo, una funcin
que muestra un listado de noticias, repite siempre la misma estructura, es decir, mostrar
un ttulo, mostrar una imagen, mostrar el autor, lo nico que cambia es el contenido,
pero la tarea que realiza es siempre la misma.
Una forma fcil de realizar una secuencia de instrucciones en forma repetitiva es
utilizando los BUCLES.

En PHP existen cuatro tipos de bucles: while, do while, for y foreach.


while
El while es un bucle que va a realizar una instruccin o conjunto de instrucciones
siempre y cuando la condicin ( lo vimos en la Clase 4 - Condicionales - ParteII ) se
cumpla, es decir sea verdadera. La comprobacin de la condicin la hace siempre al
principio.
La estructura es la siguiente:
<code>
<?
while ( condicion ) {
instrucciones
}
?>
</code>

Explicando un poco la sintaxis del while, lo que va entre ( ) es la condicin, puede ser
de cualquier tipo, ver si existe una variable, si una variable es menor a otra, si una
variable es verdadera, etc. Y entre { } va la instruccin o instrucciones.
Un ejemplo sencillo de este bucle puede ser mostrar una cuenta de 1 hasta 10.
<code>
<?
$c = 1;
while ( $c < 11) {
echo "$c <br>";
$c++;
}
?>
</code>

En la primer lnea definimos la variable $c con el valor 1, luego evaluamos la condicin


si $c es menor a 11, como es 1, se ejecutan las instrucciones.

TALLER DE PHP

PECE2000

ZONA GUANAJUATO

Pgina 16 de 50

En la primer linea de la instruccin mostramos en pantalla el valor de $c, en este caso 1,


y luego en la segunda linea de instrucciones le sumamos uno a $c ( con $c++ se le suma
un valor a la variable, es lo mismo a poner $c = $c + 1; ),
Al final de las instrucciones, el bucle vuelve a analizar la condicin, en este caso $c es
igual a 2, (recordar que le acabamos de sumar 1), sigue siendo verdadera la condicin
de que $c < 11, por lo que el bucle va a continuar con este proceso hasta que $c sea
igual a 11.

do while
Este bucle no difiere mucho del anterior:
<code>
<?
do {
intrucciones
} while ( condicion)
?>
</code>

La nica diferencia salvando la sintaxis es que primero ejecuta la instruccin y luego se


fija si cumple la condicin, en caso de ser verdadera la condicin, vuelve a ejecutar una
vez mas y as.

Vamos a ver que las expresiones tienen un encadenamiento determinado y deben


cumplir con ciertos parmetros. Esto es fundamental para que todo funcione de manera
correcta. Pero veamos esto en detalle, sin perder ms tiempo.

for
El bucle for tiene la siguiente sintaxis:
<?
for( expresion 1; expresion 2; expresion 3 ) {
instrucciones
}
?>

La expresin 1 se ejecuta una vez al comienzo del bucle, la expresin 2 es la condicin


que se debe cumplir y la expresin 3 se ejecuta al final de ejecutar las instrucciones en
cada iteracin.
Siguiendo el mismo ejemplo de la clase anterior, en la que vimos el bucle while, ahora
vamos a usar el mismo, mostrar la secuencia de nmeros del 1 al 10 pero con un for.
<?
for ($c = 1; $c < 11; $c++) {
echo "$c <br />";
}
?>

TALLER DE PHP

PECE2000

ZONA GUANAJUATO

Pgina 17 de 50

Al igual que como hicimos en el ejemplo del while, aqu seteamos $c = 1 (expresin 1
que se ejecuta por nica vez antes de comenzar el bucle), $c < 11 es la expresin 2, o
sea la condicin que queremos que se cumpla, y $c++ es la accin que se va a realizar al
finalizar la iteracin, igual que el while donde le ponamos el $c++ dentro de las
instrucciones.
Para bucles for se puede utilizar tambin una sintaxis alternativa.
<?
for ( expresion 1; expresion 2; expresion 3 ):
instrucciones
endfor;
?>

foreach
Este bucle es una forma rpida y sencilla de recorrer un arreglo o una matriz. En la clase
2 vimos que una variable poda contener un arreglo (array). Qu quiere decir esto? que
a una variable se le puede asignar un conjunto de elementos, por ejemplo la variable
$semana puede contener un arreglo con los das de la semana, para esto la definimos
as:
<?
$semana =
array( 'lunes','martes','mircoles',jueves','viernes','sbado','doming
o' );
?>

La sintaxis del foreach que nos va a permitir recorrer los array es la siguiente:
<?
foreach ( expresion1 as expresion2 ) {
instruccion
}
?>

En expresion1 ponemos nuestro array y en expresion2 definimos cmo queremos que se


llame el valor de cada elemento de nuestro array, en instrucciones lo que queremos
hacer cada iteracin.
Siguiendo nuestro ejemplo de la semana, el bucle va a recorrerse 7 veces, ya que
tenemos 7 das, si lo que queremos es mostrar un listado de los das que tenemos en
nuestro array debemos hacer lo siguiente:
<?
// definimos el arreglo con los das de la semana
$semana =
array( 'lunes','martes','mircoles',jueves','viernes','sbado','doming
o' );
// mostrarnos el mensaje inicial
echo "Los das de la semana son:<br />";

TALLER DE PHP

PECE2000

ZONA GUANAJUATO

Pgina 18 de 50

// comienza el bucle
foreach ( $semana as $dia ) {
echo "$dia <br />";
}
?>

De esta forma la variable $dia se va reemplazando con el siguiente valor que le


corresponde en el array por cada iteracin que realiza el foreach
Si todava no se perdieron, vamos a ver la forma de utilizar el foreach para recorrer un
arreglo que tiene definido ndices, en el ejemplo anterior vimos un array el cual no tena
definido ningn ndice, ahora vamos a ver un array un poco ms complejo:
<?
$noticia = array(
'titulo' => 'Php Clase 5 - Bucles',
'cuerpo' => 'Ac va el contenido de la clase 5 de php, mucho texto,
mucho mucho',
'autor' => 'Justi'
);
?>

Ahora que ya tenemos nuestro array ms complejo, vamos a ver el foreach sin mostrar
ndices y mostrndolos
<?
foreach ( $noticia as $valor ) {
echo "$valor<br />";
}
?>

En este ejemplo vamos a imprimir en pantalla lo siguiente:


Php Clase 5 - Bucles
Ac va el contenido de la clase 5 de php, mucho texto, mucho mucho
Justi

Y usando la expresin ms compleja:


<?
foreach ( $noticia as $indice => $valor ) {
echo "$indice: $valor<br />";
}
?>

obtenemos en pantalla
titulo: Php Clase 5 - Bucles
cuerpo: Ac va el contenido de la clase 5 de php, mucho texto, mucho
mucho
autor: Justi

Tip

TALLER DE PHP

PECE2000

ZONA GUANAJUATO

Pgina 19 de 50

Lo bueno de usar esta ltima expresin es que se puede manipular que mostrar en
pantalla dependiendo del ndice, supongamos que queremos imprimir nuestra noticia
pero queremos que los ttulos tengan un <h1> el cuerpo aparezca en un <p> y el autor
en un <span> usando los condicionales hacemos lo siguiente:
<?
foreach ( $noticia as $indice => $valor ) {
if ( $indice == 'titulo' ) { echo "<h1>$valor</h1>"; }
if ( $indice == 'cuerpo' ) {echo "<p>$valor</p>"; }
if ( $indice == 'autor' ) {echo "<span>$valor</span>"; }
}
?>

Cmo armar un formulario para que sea procesado por


Php?
En realidad no hay que hacer nada nuevo, simplemente armar el formulario en HTML,
pero como hay muchos diseadores que no saben cules son los campos que s o s hay
que tener, vamos a armar uno de cero y para que sea un poquito ms til, vamos a armar
un formulario de contacto.
Primero y principal hay que crear las etiquetas <form> con sus respectivos atributos.
<form action="contacto_script.php" method="post" id="contacto"></form>

Vamos a explicar un poquito que es cada atributo y para qu sirve:


action: aqu es donde vamos a hacer que se enven todos los datos, el archivo
contacto_script.php va a procesar toda la informacin enviada y decidir cmo
continuar, si hubo un error, si fue correcto, etc.
method: le especificamos cmo queremos que se enve la informacin, a travs del
mtodo POST o del mtodo GET.
Yo se lo que te ests preguntando ahora, qu diferencia hay entre cada mtodo No? El
temita es el siguiente, no tiene sentido que yo te escriba un prrafo de 1000 palabras con
las diferencias tcnicas que existen entre un mtodo y el otro para el protocolo HTTP
por lo que te lo voy a explicar crudamente para que sepas cundo emplear cada mtodo:
Basicamente se enva informacin a travs del mtodo POST cuando se desea que ese
envo de informacin sea oculto, o si se est enviando mucha informacin. Por lo
general la pgina que recibe esa informacin no va a ser re-cargada, ya que si hacemos
refresh en una pgina que acaba de recibir informacin va POST el navegador nos
avisar con un cartelito que estamos intentando recargar una pgina y que se va a enviar
toda la informacin de nuevo, por un lado es molesto y por otro puede que el navegador
no haya guardado correctamente toda la informacin enviada originalmente y falle.
El metodo GET, por el contrario, cuando completamos un formulario que enva los
datos atraves de GET, esta informacin nos va a aparecer en la URL del sitio, si se fijan,
TALLER DE PHP

PECE2000

ZONA GUANAJUATO

Pgina 20 de 50

cuando realizan una bsqueda en Google, esta se hace a travs de un formulario con
mtodo GET, ya que en la URL nos aparece toda la informacin que nosotros buscamos
ms otras variables.
Ahora bien Cundo es aconsejable usar uno u otro mtodo? Pues como dije justo en el
prrafo anterior, cuando se realiza un formulario de bsqueda, o un formulario para
filtrar la informacin mostrada o cambiar el orden de la informacin mostrada (En un
listado de departamentos en alquiler, cambiar el orden por mejor precio, por nmero de
ambientes, etc.) es aconsejable usar el metodo GET, ya que el usuario es muy probable
que entre en una pgina y luego vuelva para atrs, en esta vuelta para atras, esta
haciendo refresh de la pagina con los resultados de busqueda, si hubiese sido por POST,
el navegador hubiese mandado la alerta de que se esta intentando entrar en una pgina
que recibio informacion via POST y podra no mostrar la informacion correctamente.
Por el contrario, es aconsejable utilizar el mtodo POST cuando se desea enviar mucha
informacin, o es informacin que no va a cambiar por decisin del usuario, es decir, no
es un filtro, sino un formulario de contacto, para escribir una nueva entrada en nuestro
blog, crear un tema en un foro, etc.
id: lo usuamos para identificar el formulario, ya que podemos llegar a tener muchos
formularios en una misma pgina y queremos que se identifique bien cada formulario.
Aqui elegimos el nombre que queremos.
Listo, ya sabemos como configurar nuestro formulario, la clase que viene vamos a ver
que diferentes tipos de campos existen y como vamos a procesar esta informacin con
PHP.
Hola, bienvenidos a la octava clase del Taller de PHP! Esta clase estar dividida en dos
partes, por una cuestin de prolijidad. En esta primera parte vamos a ver algunos tipos
de campos que podemos tener en el formulario.
Los diferentes campos que podemos tener en un formulario son inputs, selectbox y
textarea. A su vez los inputs se dividen en de tipo texto, radio, checkbox, password,
hidden, button, submit, reset. Son un montn, as que veamos uno por uno.

Inputs
El ms comn de todos es el de tipo text. Este sirve para completar una sola linea de
texto y tiene que tener las siguientes propiedades.
<label for="input_campo">Nombre Campo</label>
<input id="input_campo" type="text" name="nombreCampo" value="" />

Bueno, ustedes seguramente ven lo de arriba y se estarn diciendo: Un momento,


cerebrito! Por lo que intentare explicar qu es cada cosa.
Primero van a ver una etiqueta label que no la nombr antes. Esta etiqueta no es
obligatoria incluirla, pero es lo correcto, con la misma le van a poder indicar un nombre
al campo para que todo el mundo sepa lo que est completando. En el for tienen que
incluir la id del campo y esto me da pie para explicar esta ltima.

TALLER DE PHP

PECE2000

ZONA GUANAJUATO

Pgina 21 de 50

La id del input es un identificador nico, no puede haber ningn otro elemento con este
nombre en toda la pgina. El nombre es a gusto de ustedes, pero por convencin se
utilizan nombres relacionados con el elemento que estn identificando.
Consejo: a la hora de crear una id es muy til, por experiencia propia, ponerle primero
el tipo de elemento html que es y luego que representa, si se fijan yo eleg input_campo,
ya que es un input y como us un nombre genrico le puse campo, pero ah podra ser
input_direccion, input_telefono, input_email. Esto les va a resultar til a la hora de
armar un CSS o realizar acciones con Javascript. Van a poder identificar el elemento
muy fcilmente.
Con type le indicamos el tipo de input que es, en este caso es un texto, name es
obligatorio y lo utilizaremos para levantar la variable POST y value es el contenido del
campo, si lo dejamos con las dos comillas y sin contenido por defecto no nos va a
aparecer nada en el campo, sino podemos completarlo con alguna frase del estilo para
que nos aparezca adentro del campo.
<label for="input_contacto">Nombre Campo</label>
<input id="input_contacto" type="text" name="nombreContacto"
value="Complete con sus nombres y apellidos" />

Estos dos campos se ven de la siguiente manera:

Bueno, los inputs de tipo text los utilizamos para casos en que el usuario debe completar
un solo regln. Como completar con sus nombres y apellidos, direccin, telfono, email,
etc.
Tambin tenemos los inputs de tipo Radio, cuya sintaxis es la siguiente:
<label for="input_si">Si</label><input id="input_si" type="radio"
name="suscribirse" value="si" />
<label for="input_no">No</label><input id="input_no" type="radio"
name="suscribirse" value="no" />

Qu tenemos ac? Fjense que name es el mismo para ambos inputs, lo que cambia es
el value (y la id obvio, no se puede repetir id en toda la pagina). Este tipo de campos es
autoexcluyente, slo se puede marcar una opcin, y por php se recibir nicamente el
valor que fue marcado. El mismo se ve de la siguiente manera:

TALLER DE PHP

PECE2000

ZONA GUANAJUATO

Pgina 22 de 50

Otro caso similar es el tipo Checkbox, los clsicos cuadraditos que se utilizan para tildar
y destildar, es muy comn ver este tipo de inputs antes de registrarnos en algn lugar y
que nos pregunten si estamos de acuerdo con los trminos y condiciones.
La sintaxis es la siguiente:
<input id=input_acuerdo" type="checkbox" name="acuerdoLegal" value="1"
/>

En caso de que NO este marcado por el usuario al momento de hacer un submit del
formulario, este campo no se enva y al procesarlo por Php, veremos que no existe la
variable POST correspondiente a este campo.
Otro tipo de input es Password, esta propiedad hace que el campo en lugar de ver el
texto que se escribe en l, aparezcan los clsicos redondelitos negros ocultando la
informacin.
<input id="input_password" type="password" name="password" value="" />

Luego tenemos el tipo Hidden, que es un campo oculto, en el podemos poner


informacin pre-definida que el usuario no tiene que completar, entonces no se muestra
pero si se enva.
<input type="hidden" name="idUsuario" value="25" />

Por ltimo vamos a ver el tipo Submit que es el campo que va a enviar nuestro
formulario
<input type="submit" name="submit" value="Enviar consulta" />

que se va a ver de la siguiente forma

De esta manera vimos casi todos los campos de tipo input, que ya sabemos que sirven
para que el usuario ingrese una lnea de texto que ser procesada luego. En la clase de
hoy vamos a ver los textarea, es decir, donde se deja el cuerpo del mensaje.

Textarea
Los textarea funcionan muy similar a un campo input de tipo text con la particularidad
de que se pueden agregar saltos de linea, es decir escribir bloque de textos completos
con diferentes prrafos.
La sintaxis es la siguiente:
TALLER DE PHP

PECE2000

ZONA GUANAJUATO

Pgina 23 de 50
<textarea id="textarea_comunicacion" name="comunicacion" rows="10"
cols="50"></textarea>

La id es exactamente igual que en los casos anteriores, con name vamos a definir el
nombre de la variable que vamos a levantar con PHP via POST, rows es el nmero de
filas que queremos que tenga nuestro campo y cols es el ancho.
Entre los tags <textarea> y </textarea> se puede incluir un texto para que aparezca por
defecto, por ejemplo:
<textarea id="textarea_comunicacion" name="comunicacion" rows="5"
cols="50">Escribe aqu lo que quieras</textarea>

Esta imagen es un ejemplo:

Hoy terminaremos con este tema, viendo el campo SelectBox.


Los selectbox sirven para presentarle al usuario un listado de opciones pre-fijadas y que
no puedan ser modificadas. Existen dos tipos de selectbox, aquellos donde el usuario
solo puede seleccionar una opcin, u otros donde se le permite seleccionar ms de una.

SelectBox
La sintaxis del que permite seleccionar slo uno es la siguiente:
<select id="select_sexo" name="sexo">
<option value="M">Masculino</option>
<option value="F">Femenino</option>
</select>

TALLER DE PHP

PECE2000

ZONA GUANAJUATO

Pgina 24 de 50

Nuevamente, el id y el name es lo mismo que los casos anteriores y ac se agrega una


nueva etiqueta option que es cada opcin que queremos que aparezca en el formulario.
Lo que esta entre las etiquetas <option> y </option> es lo que va a ver el usuario, pero
PHP va a obtener la informacin que figura en el atributo value. Y nicamente de la
opcin seleccionada.
Para hacerlo mltiple, hay que agregarle una propiedad extra a la etiqueta select.
<select id="select_gustos"
<option value="1">Me gusta
<option value="2">Me gusta
<option value="3">Me gusta
</select>

name="gustos" multiple="multiple">
jugar al Tennis</option>
jugar al Futbol</option>
jugar al Correr</option>

Para poder seleccionar mltiples opciones hay que dejar apretada la tecla Ctrl.
Ya terminamos con todo lo que tiene que ver con el formulario del lado del front end,
ahora slo nos resta ver el back end que es donde acta todo el proceso de PHP.
Hola, bienvenidos a la clase nmero once del Taller de PHP! Ya vimos todo el
frontend del formulario, ahora nos resta ver como levantamos las variables enviadas
atravs del mismo con PHP.
Hay que tener mucho cuidado en esta parte, como en general, dado que un pequeo
descuido al tipear el cdigo puede provocar un error al intentar enviar los datos a travs
del formulario. Sigue atentamente las indicaciones y no tendrs problemas!

Recibiendo los datos


Antes de ver como recibimos los datos, veamos como nos qued el formulario de
contacto completo. Supongamos que lo tenemos en el archivo contacto.php
<form action="contacto_script.php" method="post" id="contacto">
<label for="input_nombres">Nombre y Apellido</label><br />
<input id="input_nombres" type="text" name="nombres" value="" /><br
/><br />
<label for="input_email">Email</label><br />
<input id="input_email" type="text" name="email" value="" /><br
/><br />
<label for="input_sexo">Sexo</label><br />
<select id="select_sexo" name="sexo">
<option value="M">Masculino</option>
<option value="F">Femenino</option>
</select><br /><br />
<label for="textarea_mensaje">Mensaje</label><br />
<textarea id="textarea_mensaje" name="mensaje" rows="5"
cols="50"></textarea><br /><br />
<input type="submit" name="submit" value="Enviar consulta" />
</form>

TALLER DE PHP

PECE2000

ZONA GUANAJUATO

Pgina 25 de 50

Este formulario ser enviado al archivo contacto_script.php por el mtodo post. Ahora
la pregunta del milln es qu contiene el archivo contacto_script.php.

contacto_script.php
Este archivo va a interpretar los datos enviados a travs del formulario. Para ello lo que
vamos a hacer es primero ver si llegaron todos los parmetros y agregarlos cada uno a
una variable.
<?
// definimos las variables o marcamos el error
if ( !empty($_POST['nombres']) ) $nombres = $_POST['nombres']; else
$error = true;
if ( !empty($_POST['email']) ) $email = $_POST['email']; else $error =
true;
if ( !empty($_POST['sexo']) ) $sexo = $_POST['sexo']; else $error =
true;
if ( !empty($_POST['mensaje']) ) $mensaje = $_POST['mensaje']; else
$error = true;
?>

Expliquemos paso por paso.


Lo primero que hacemos es preguntar si NO est vaco el parmetro enviado por post,
ya que la funcin empty pregunta si esta vaco (va a responder si el contenido es un
string vacio, un cero o un false) pero como le anteponemos el ! estamos preguntando
por lo contrario.
En caso de que nuestra condicin se cumpla, asignamos a una variable el parmetro
recibido, caso contrario definimos una variable llamada error con contenido TRUE.
Esta ltima nos va a servir para hacer que todos los campos del formulario sean
obligatorios a la hora de enviarse.
Perfecto, ya tenemos definidas nuestras variables ahora vamos a verificar que no exista
la variable error, y si existe redireccionamos a una pgina con el mensaje de error.
// verificamos que no exista un error
if ( !empty($error) ) {
header( 'Location: contacto_error.php' );
die;
}

Qu esta pasando ac?


Lo mismo que antes, preguntamos si no est vaco error, si la respuesta a esta pregunta
es verdadera, tenemos un problema, uno de los campos del formulario no fue
completado, por lo que el script de php lo vamos a frenar y vamos a redireccionar al
usuario a una pgina que contenga el mensaje de error, esta pgina va a ser en este caso
contacto_error.php.
La redireccin la hacemos por medio de la funcin header( Location: ) que va a
hacer que recargue la nueva pgina que le estamos pasando, y tenemos que poner la
linea siguiente con el die para que se frene el script en ese momento y pueda ejecutarse
TALLER DE PHP

PECE2000

ZONA GUANAJUATO

Pgina 26 de 50

la funcin header, ya que si no frenamos el script, primero va a leer y ejecutar todo y


despus va a tener accin el header( Location: ).
La pgina contacto_error.php puede contener simplemente un mensaje que diga El
formulario de contacto no ha podido ser enviado, por favor asegrese de que haya
completado todos los campos correctamente. y un link a la pgina del formulario de
contacto para que vuelva a enviarlo.

Cuerpo del Mensaje


Nos resta por definir el cuerpo del mensaje que queremos recibir a travs del
formulario de contacto, el mismo puede ser algo as:
// definimos el cuerpo del email
$cuerpo = "
De: $nombres \n\r
Email: $email \n\r
Sexo: $sexo \n\r
Mensaje: \n\r
$mensaje
";

Como el e-mail llega como texto plano, debemos definirle los saltos de linea con \n\r.
Perfecto, ya definimos las variables, ya nos aseguramos que no tengo ningn error,
creamos el cuerpo del email, ahora lo que vamos a hacer es enviar el mensaje que
recibimos atravs del formulario a nuestra casilla de email. Para ello vamos a utilizar
una funcion de php que se llama mail()

Funcin mail
mail ( string $para , string $asunto , string $mensaje );
esta funcin va a responder true o false, dependiendo si se pudo ejecutar correctamente,
en nuestro script quedaria algo as:
// enviamos el email
if ( mail( 'direccion.del.destinatario@email.com','Recibiste un
mensaje a travs del formulario de contacto de tu sitio',$cuerpo ) ) {
header( 'Location: contacto_exitoso.php' );
die;
} else {
header( 'Location: contacto_error.php' );
die;
}

Fjense que en el primer parmetro de la funcin mail agregamos a dnde queremos que
se enve el mensaje, en el segundo parmetro ponemos el asunto y en el tercero el
cuerpo que definimos anteriormente.
Si la condicin es verdadera, es decir, el e-mail se envi correctamente redireccionamos
a una nueva pgina llamada contacto_exitoso.php, la cual contendr un mensaje del

TALLER DE PHP

PECE2000

ZONA GUANAJUATO

Pgina 27 de 50

estilo: El e-mail ha sido enviado correctamente, a la brevedad nos pondremos en


contacto con usted.
Y en caso de que no se cumpla redireccionamos a la pgina de error.

Script Completo
El script completo quedara algo asi:
<?
// definimos las variables o marcamos el error
if ( !empty($_POST['nombres']) ) $nombres = $_POST['nombres']; else
$error = true;
if ( !empty($_POST['email']) ) $email = $_POST['email']; else $error =
true;
if ( !empty($_POST['sexo']) ) $sexo = $_POST['sexo']; else $error =
true;
if ( !empty($_POST['mensaje']) ) $mensaje = $_POST['mensaje']; else
$error = true;
// verificamos que no exista un error
if ( !empty($error) ) {
header( 'Location: contacto_error.php' );
die;
}
// definimos el cuerpo del email
$cuerpo = "
De: $nombres \n\r
Email: $email \n\r
Sexo: $sexo \n\r
Mensaje: \n\r
$mensaje
";
// enviamos el email
if ( mail( 'direccion.del.destinatario@email.com','Recibiste un
mensaje a travs del formulario de contacto de tu sitio',$cuerpo ) ) {
header( 'Location: contacto_exitoso.php' );
die;
} else {
header( 'Location: contacto_error.php' );
die;
}
?>

Aprenderemos el uso de funciones, una de las mejores herramientas a la hora de


reutilizar cdigo. Con php podemos armar una funcin que ejecute un conjunto de
instrucciones. No perdamos ms tiempo! Comencemos.

Sintaxis
las funciones se pueden definir con la siguiente sintaxis:
<?php
function nomber($argumento1, $argumento2, ..., $argumento_n)

TALLER DE PHP

PECE2000

ZONA GUANAJUATO

Pgina 28 de 50
{
echo "Funcin de ejemplo.";
return $resultado;
}
?>

Vamos a explicar un poco, en el cuerpo de la funcin puede aparecer cualquier


instruccin, incluso otra funcin. Lo que s, recuerden que si definimos una variable por
fuera de la misma, nicamente se va a poder acceder a ella dentro de la funcin si es una
variable global (lo vimos en la clase 2).
Dentro de la funcin se pueden pasar tantos argumentos como se deseen. Los mismos
pueden ser una variable, un string, un objeto, etc.
En return lo que hacemos es decirle que queremos que nos devuelva la funcin.
Veamos un ejemplo ms til:

Calcular la edad de una persona


Por ejemplo una funcin que te dice la edad de una persona pasndole la fecha en
formato aaaa-mm-dd (ao-mes-da) puede ser como sigue:
<?
public function edad($nacimiento){
//restamos los aos (ao actual - ao cumpleaos)
$edad = date("Y") - ereg_replace("^(.{4}).*","\\1",$nacimiento);
//si pasamos de ao, pero an no cumplimos aos, resta 1
if( date("m-d") < ereg_replace(".*(.{5})$","\\1",$nacimiento) )
$edad--;
return $edad;
}
?>

No voy a explicar lo que hace adentro de la funcin porque ya lo veremos ms adelante


pero s bsicamente cmo se utiliza esta funcin. Por ejemplo nuestro archivo perfil
puede contener lo siguiente
Mi nombre es Hernn y tengo <? echo edad('1977-07-06'); ?> aos de
edad.

Y en pantalla esto se vera as:


Mi nombre es Hernn y tengo 30 aos de edad.
Por ahora seguro que este ejemplo no lo ven muy til, pero ya van a ver que en muchos
sitios que hagan con php los usuarios al momento de registrarse ponen su fecha de
nacimiento, y no es necesario pedirles su edad, ya que se calcula automticamente cada
vez que necesiten mostrarla con esta funcioncita.

TALLER DE PHP

PECE2000

ZONA GUANAJUATO

Pgina 29 de 50

Consejo: conviene tener un archivo funciones.php con todas las funciones de este tipo
que utilizan en el sitio, y lo incluyen en todas las pginas, ya van a ver que a la hora de
programar utilizan muchos procesos similares, si estos se incluyen en funciones, los
pueden llamar a todo momento y as ahorrar muchas lineas de cdigo y de tiempo. A
medida que avanzamos con el curso vamos a ir entendiendo igual la fuerza de tener
funciones.

Las cookies y las sesiones.


Estos conceptos son clave para que los usuarios no pierdan informacin al cambiar de
pgina o seccin en un sitio.
Seguro tendrs muchas dudas, as que empezemos la clase.

Qu son las cookies?


Bsicamente la definicin dice: Las Cookies son un mecanismo que sirve para
almacenar datos en el navegador del usuario remoto, para as poder identificar al usuario
cuando vuelva.
La definicin anterior seguro que les gener ms dudas que lo que les ayud, es por eso
que se los voy a explicar con un ejemplo.
Vieron, cuando ingresan a su email en Hotmail o Yahoo!, que se les pregunta si desean
recordar su contrasea? Bueno, eso lo que hace es generar una cookie que contenga su
email y su contrasea en su propio navegador (se guarda en la computadora de
ustedes).
De esta forma, cuando ustedes vuelven a abrir la pgina de Hotmail, el sitio busca si
tienen almacenada alguna cookie identificada por este sitio y, si la encuentra y el email
y la contrasea coinciden con la informacin que hotmail almacena en la base de datos,
los redirecciona directamente a su bandeja de entrada.
Cualquier cookie enviada desde un navegador al sitio que estamos realizando, php la va
a convertir en una variable, de la misma forma que ocurra con los mtodos $_GET y
$_POST.

Qu son las Sesiones?


Las sesiones por otro lado consisten en mecanismos para preservar ciertos datos a lo
largo de un sitio, se puede guardar informacin y cambiar de pgina en pgina sin
perder esa informacin (y sin necesidad de enviarla a travs de ningn formulario, ni va
get, ni va post), ya que la misma es guardada en el servidor con un identificador nico
de sesin (es nico por cliente) y en el navegador del usuario (cliente) se guarda una
cookie con la informacin de acceso a la sesin (el nmero de identificacin de
sesin).

TALLER DE PHP

PECE2000

ZONA GUANAJUATO

Pgina 30 de 50

De esta forma logramos mantener la informacin del usuario ms segura ya que la


misma se guarda en el servidor y no en la PC del usuario, y de esta forma evitamos que
solo se pueda acceder a esa informacin desde nuestra aplicacin.
Un caso muy comn en el uso de sesiones es para un carrito de compras, ustedes en
este tipo de sitios van eligiendo productos, y se van almacenando en una sesin, de esta
forma pueden cambiar de seccin en el sitio sin perder la informacin.
Por ejemplo en un supermercado online pueden cambiar de la seccion almacn a
productos congelados y su carrito de compras apesar de recargar una nueva pgina
contina con los productos seleccionados.
Las sesiones por lo general se acceden ms rpido que las cookies, ya que toda la
informacin al ser almacenada en el servidor, no hay que estar envindola del cliente al
servidor en forma constante.
Ya me imagino la siguiente pregunta:

Para qu usar Cookies si con las Sesiones se logra


practicamente lo mismo de forma ms rapida y ms
segura?
El problema que tienen las sesiones es que tienen un tiempo de expiracin que no puede
ser modificado desde la creacin de la misma, hay que modificarlo desde la
configuracin de php.
Lo malo de esto es que todas las sesiones duraran el mismo tiempo, a diferencia de las
cookies que el tiempo de vida de la misma se configura al momento de crearla.
Por otro lado, si se desea usar sesiones hay que inicializarlas antes de empezar a realizar
cualquier otra cosa en php y si a una pgina no se le avis que empiece a hacer uso de
sesiones, las mismas no van a correr, por lo que la aplicacin web no va a poder acceder
a la informacin de la misma, a diferencia de las cookies, donde no hay que avisar nada,
si existe la cookie, se lee y santo remedio.
Por el momento no voy a profundizar ms en el uso de sesiones y cookies, ya que
veremos cmo utilizarlas cuando comencemos con la creacin de nuestro blog, por
ahora es informacin suficiente como para que tengan nociones de qu son y en qu
casos se utilizan.

Qu es una Base de Datos?


Las bases de datos son un conjunto de datos almacenados sistemticamente para su uso
posterior. Gracias al avance de la informtica, la mayora de las bases de datos se
encuentran en formato digital, por lo que una de las formas para acceder a la
informacin guardada en ellas es a travs de una computadora.

TALLER DE PHP

PECE2000

ZONA GUANAJUATO

Pgina 31 de 50

Importancia de las Bases de Datos


Php ofrece interfaces para el acceso a la mayora de las bases de datos, entonces de esta
forma podremos almacenar y acceder a estos datos (se dice que los datos guardados de
esta forma son datos persistentes) a travs de una pgina web realizada en PHP.
Por ejemplo, un sitio como este, almacena todos los talleres en una base de datos, de
modo que, cuando ustedes acceden a la clase 10, el archivo encargado de mostrar todas
las clases, busca en la base de datos la clase 10 y muestra todo el contenido guardado.
Es siempre el mismo archivo el encargado de interactuar con la base de datos y es por
eso que se llaman pginas dinamicas, ya que es siempre la misma y slo cambia el
contenido que se muestra en ella.
La base de datos ms comn para utlizar con PHP es MySql, debido a que es muy
potente, gratuito y se encuentra en la mayora de los servicios de hosting de pginas
webs. Otras bases utilizadas son PostgreSQL, ODBC, Oracle, IBM DB2, etc.

Interaccin
La interaccin entre php y las base de datos se realiza a travs de herramientas propias
del lenguaje Php, por un lado, y escribiendo los pedidos a la base de datos en un idioma
universal, SQL (Structured Query Language) por otro, que podremos encontrar en todas
las bases de datos.
De todas formas no se asustn, SQL es muy sencillo (pero muy potente) y facil de
aprender.
Hasta la semana que viene.
MySQL es un sistema de base de datos open source (gratuito y modificable), y es
gracias a ello que se convirti en la base ms popular del mundo. Incluso su continuo
desarrollo y su impresionante popularidad estn haciendo que MySQL sea un
competidor directo de las grandes empresas como Oracle o IBM.
Este sistema de base de datos muy utilizado sobretodo con PHP es relacional, ya que
utiliza mltiples tablas para almacenar y organizar la informacin. Tambin es
multihilo porque se pueden realizar varias tareas concurrentemente. Y como ltima
caracterstica es multiusuario, pudiendo conectarse varios usuarios simultneamente.

Ventajas de MySQL

Es una base de datos muy rpida en la lectura en aplicaciones web,


convirtindola en la herramienta ideal para este tipo de aplicaciones.

Por otro lado est disponible en gran cantidad de plataformas y


sistemas, brindando a su vez, una conectividad muy segura.

Nos da tambin una potencia sin igual, ya que utiliza SQL como
lenguaje para consultar la base de datos (usar ese motor nos
ahorrar una gran cantidad de trabajo).

TALLER DE PHP

PECE2000

ZONA GUANAJUATO

Pgina 32 de 50

Tambin es muy portable por la misma caracterstica anterior, SQL es


fcilmente portable a otras plataformas y nos brinda una gran
escalabilidad, pudiendo manipular base de datos enormes con ms
de 50 millones de registros.

Conectarse con PHP a MySQL


PHP nos brinda muchsimas herramientas a la hora de conectarnos con MySQL,
pudiendo realizar conexiones simultneas y todo tipo de consultas para obtener
informacin (a medida que avance este curso, vamos ir viendo todas estas
posibilidades).
Bsicamente es necesario tener la IP del servidor de base de datos (por lo general se
encuentra en el mismo lugar fsico que el servidor apache con PHP, utilizando como IP
para conexin la palabra localhost). El nombre de usuario y contrasea de conexin y
el nombre de la base de datos a la que queremos conectarnos.
Con esos elementos ya podemos crear un script de conexin a la base de datos y poder
utilizar las funciones de PHP predefinidas para interactuar con la misma.

Este programa permite acceder a todas las funciones tpicas de la base de datos MySQL
de forma muy intuitiva. Bsicamente no se necesita tener conocimientos previos de base
de datos para comenzar a crear tablas y agregar contenido.

Qu otras alternativas existen?


Para la administracin de base de datos MySQL existen varias alternativas. Una de las
ms populares es un software llamado SQLyog, es un programa muy potente que deben
bajarse en sus computadoras, el mismo permite conectarse con varias base de datos,
guardar los accesos en el mismo para poder administrarlas fcilmente, se puede acceder
a la informacin guardada en ellas de forma muy rpida.
La desventaja que tiene es que NO es gratuito.

Por qu usar phpMyAdmin?


Una de las ventajas que tiene es que al tener una interfaz web no se necesita estar en la
computadora de cada uno, el mismo se instala en el mismo lugar del hosting, entonces
desde cualquier computadora con acceso a internet van a poder realizar consultas, y
acciones sobre la base de datos que esten utilizando para trabajar.
Otra ventaja que ya comente antes es que es muy intuitivo y se encuentra instalado en
casi todos los servicios de hosting, por lo que lo hace uno de esos programas que s o s
tienen que conocer.
Por otro lado si trabajan con sus laptop, que llevan de un lugar a otro, es muy bueno
tener tambin instalado SQLyog, el problema que tiene este programa es que el servidor
de base de datos tiene que estar configurado para que se pueda acceder desde un lugar

TALLER DE PHP

PECE2000

ZONA GUANAJUATO

Pgina 33 de 50

remoto (como phpMyAdmin se encuentra instalado en el mismo servidor de hosting, se


accede desde el mismo servidor a la base de datos), ya que en el servidor no hay que
instalar nada para comenzar a utilizarlo.
Bueno, es todo por hoy, a partir de la semana que viene ya comenzaremos con la
creacin de tablas, yo s que estas clases son un poco densas porque son slo teora,
pero son muy importantes ya que la importancia de realizar pginas dinmicas radica en
las base de datos.
Bienvenidos a otra clase del Taller de PHP! Seguimos con el tema de MySQL. La clase
pasada vimos qu era phpMyAdmin; hoy vamos a ver cmo crear las tablas usndolo
(esto siempre y cuando ya tengamos la Base de datos creada).
Adems veremos cmo crear una tabla en la base de datos, declarando la longitud y los
tipos de datos que manejaremos. Por ltimo conoceremos qu son los ndices y cmo se
relacionan con la tabla creada. Comencemos!
Como primer medida apenas entramos al sistema vamos a ver una pantalla como la
siguiente:

Fjense que a la izquierda (en el sector ms oscuro) esta el listado de base de datos y a la
derecha hay una serie de informacin.
Si la base de datos (a partir de ahora la llamaremos db, por data base, base de datos en
ingles) ya existe hacemos clic en la misma, caso contrario, escribimos en el formulario
de la derecha donde dice crear nueva base de datos o en ingls create new database
con el nombre que nosotros queremos y hacemos clic en el botn crear.
Perfecto, en este momento nuestra db no contiene ninguna tabla, para ver como creamos
tablas, vamos a crear una tabla que contenga datos de contactos de personas amigas
(una agenda).

TALLER DE PHP

PECE2000

ZONA GUANAJUATO

Pgina 34 de 50

Cmo crear una tabla?


En realidad esta parte es la ms fcil de todas, simplemente vamos al formulario donde
dice crear nueva tabla en la base de datos e incluimos el nombre que queremos usar,
para nuestro caso prctico va a ser agenda, en el siguiente campo del formulario
debemos incluir el numero de campos que queremos que contenga nuestra tabla, que va
a ser 5.
Se nos abre un nuevo formulario con los 5 campos para completar, en donde dice
campo o field dependiendo el idioma en que tengan phpMyAdmin, vamos a poner el
nombre que queremos que tengan nuestros campos. En tipo o type vamos a poner el
tipo de dato que vamos a usar.
Los ms utilizados son varchar, char, int, tinyint, text, datetime, timestamp y enum,
jaja, ustedes a esta altura del partido ya me habrn sacado la ficha y sabrn que yo los
hago esperar un poquito antes de explicar qu es cada cosa, pero estn equivocados, se
los voy a explicar ahora mismo.
varchar y char son similares, pero a su vez bastante diferentes, jeje. Siempre que se
utilicen estos dos tipos, hay que declarar la longitud de los mismos, si prestan atencin
al lado de declarar el tipo, tienen que declarar tambin la longitud. Los char tienen un
mximo de 255 caracteres (los varchar tambin). Por ejemplo si declaramos un char
de 30, se aadirn espacios a la derecha hasta la longitud especifica si lo que se incluye
es algo menos a estos caracteres. De todas formas cuando se recuperan los datos, estos
espacios se borran.
Los varchar tambin son cadenas de caracteres pero la diferencia es que la longitud es
variable. Tambin posee un mximo de 255 caracteres (para las versiones anteriores a
MySql 5.0.3 y de 65.535 para las superiores), pero la diferencia principal con los char
es que solo se almacenan los caracteres utilizados, si yo declaro un campo con 255
caracteres pero almaceno solo la palabra Hernn, no voy a ocupar el resto del espacio.
En los dos casos, si asignan un valor mayor al declarado, la cadena de caracteres se
trunca. Y esto me da pie para explicar el Text.
Text es tambin una cadena de texto pero esta permite almacenar mucha ms
informacin incluidos espacios en blanco y saltos de linea. Estos campos son utilizados
en general para almacenar informacin recibida a travs de campos de tipo textarea
(recuerden la clase de formularios).
Los int y tinyint son para almacenar nmeros enteros, el rango con signo del tinyint es
de -128 a 127 y sin signo de 0 a 255. Y los int son bastante ms grandes, con signo
van del -2147483648 a 2147483647 y sin signo de 0 a 4294967295.
Entre los tipos de datos de fecha y hora los dos ms comunes son datetime y
timestamp. La diferencia practicamente esta en la forma en que guarda la informacin,
datatime para el valor 0 la guarda como 0000-00-00 00:00:00 y timestamp como
00000000000000.

TALLER DE PHP

PECE2000

ZONA GUANAJUATO

Pgina 35 de 50

La diferencias practicas entre uno u otro es que por ejemplo TIMESTAMP admite
fechas entre 1970 y 2037 solamente, a diferencia de DATETIME que admite desde el
rango 1001-01-01 00:00:00 al 9999-12-31 23:59:59. Una de las ventajas que puede
tener TIMESTAMP es que el campo se puede poner que se actualice al momento de
cambiar cualquier otro valor almacenado, es muy comn utilizar este tipo para guarda la
fecha de modificacin de una lnea.
Por ltimo me queda explicar enum que tambin corresponde al tipo de datos de
caracteres, como el char y el varchar, la diferencia es que hay que especificar que
valores queremos que se puedan utilizar, y solo se va a poder completar el campo con
estos valores.
Bueno, ahora que expliqu cada tipo de dato, ya podemos crear nuestra tabla agenda,
para ello vamos a crear el primer campo con el nombre idAgenda, este campo va a ser
un int ya que va a ser el valor de identificacin nico de cada lnea que agreguemos, y
como no sabemos el tamao que tendr nuestra agenda, por las dudas le ponemos un
largo de 10, o sea, es un campo llamado idAgenda del tipo int(10). Por ltimo, como es
el identificador primario y se auto incrementa, vamos a tener que seleccionar en extra
el valor auto_increment y marcar el primer radio button con el iconito con una llave
que dice Primaria o Primary. Esto le indica que es la llave primaria de la tabla, el
valor nico que nos ayudara a identificar una fila almacenada.
El segundo campo lo llamaremos nombres y va a ser un varchar(255). El tercero va a
ser para almacenar los nmeros de telfono. Ac es donde surge la duda. Es un int o es
un varchar? Yo elegira varchar, ya que puede ser que se almacenen nmeros de telfono
con letras, o es posible separar un telfono en conjunto de dgitos, por ejemplo 45476789, en este caso si se hubiese elegido int, no sera un dato vlido para la tabla. El
cuarto campo vamos a llamarlo email, puede ser un varchar(100) y el ltimo un
enum llamado grupo, aqu en el campo longitud/valores vamos a incluir los
grupos posibles de la siguiente forma: familia, trabajo, amigos.
Finalmente hacemos clic en save y listo, ya tenemos nuestra tabla creada.

TALLER DE PHP

PECE2000

ZONA GUANAJUATO

Pgina 36 de 50

Qu son los ndices?


Los ndices (Key, o INDEX) son un grupo de datos que MySQL asocia con una o varias
columnas de la tabla. Prcticamente son usados para encontrar rpidamente los registros
que tengan un determinado valor en alguna de sus columnas. Es como un ndice en un
libro, sirve para avisarle por donde comenzar a buscar en lugar de tener que leer a travs
de toda la tabla para encontrar los registros que estbamos buscando.
Hay cuatro tipo de ndices, primary key (nuestro campo auto incremental es nuestra
primary key, es el identificador de nuestra fila, cuando nos refiramos a la informacin
guardada con idAgenda = 5, estamos buscando la informacin guardada en la fila donde
coincida con el idAgenda), unique, index y fulltext, el unique es para indicarle
que no se puede repetir ese valor en toda la tabla, por defecto el primary key ya es un
ndice unique. El index es el ndice como lo explique antes y fulltext sirve para
realizar bsquedas dentro del contenido con cadena de textos bsicamente.

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.

TALLER DE PHP

PECE2000

ZONA GUANAJUATO

Pgina 37 de 50

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();
?>

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++;
}

TALLER DE PHP

PECE2000

ZONA GUANAJUATO

Pgina 38 de 50

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.

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

TALLER DE PHP

PECE2000

ZONA GUANAJUATO

Pgina 39 de 50

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.

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

TALLER DE PHP

PECE2000

ZONA GUANAJUATO

Pgina 40 de 50

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 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
<?
// 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);

TALLER DE PHP

PECE2000

ZONA GUANAJUATO

Pgina 41 de 50
}
?>
<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>

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', set
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);

TALLER DE PHP

PECE2000

ZONA GUANAJUATO

Pgina 42 de 50

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

TALLER DE PHP

PECE2000

ZONA GUANAJUATO

Pgina 43 de 50
<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
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']}, set 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']}, set 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;

TALLER DE PHP

PECE2000

ZONA GUANAJUATO

Pgina 44 de 50
$response = mysql_query($query, $conn);
$noticia = mysql_fetch_assoc($response);
}
?>
<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);
}

En la clase de hoy vamos a ir un poquito ms all y tratar de realizar consultas ms


complejas, uniendo diferentes tablas, relacionndolas, etc.

joins
Las consultas con joins prcticamente son para unir tablas por medio de un campo.
Supongamos que tenemos dos tablas, la tabla usuarios y la tabla noticias. Ambas tienen
los siguientes campos:
usuarios [ idUsuario, nombre, apellido ]
noticias [ idNoticia, titulo, cuerpo, idAutor ]

TALLER DE PHP

PECE2000

ZONA GUANAJUATO

Pgina 45 de 50

Fijense que en la tabla noticias no dejamos registro del nombre de la persona que
escribi la noticia, dejamos solo la referencia a la tabla usuarios mediante una
identificacin nica. Esto nos permite que a la hora de mostrar la noticia, si el usuario
cambia uno de sus datos, ya sea porque el nombre estaba mal escrito, o una mujer que
se cas y ahora quiere que se vea el apellido del marido tambin, o cualquier otro
motivo, ahora solo va a tener que editar la tabla de usuarios, si nosotros hubiramos
puesto en la tabla noticias en lugar de idAutor, nombreDelAutor, al momento de
actualizar la tabla de usuarios, tambin tendramos que actualizar la de noticias.
Bueno, ms o menos ya entendieron cul es la idea al relacionar las tablas, ahora, qu
pasa si nosotros hacemos una consulta del tipo SELECT en la tabla de noticias para
traer el listado completo, no vamos a saber cul es el autor, solo vamos a tener un
numerito que hace referencia a la tabla de usuarios pero no sabemos el nombre, nos
tenemos que ir a fijar a esa tabla.
Para evitar tener que hacer una nueva consulta es que existe una forma de generar las
consultas agregando los joins y en una sola consulta chequeamos dos o ms tablas al
mismo tiempo.
La sintaxis es la siguiente:
SELECT noticias.titulo, noticias.cuerpo, usuarios.nombre,
usuarios.apellido FROM noticias INNER JOIN usuarios ON
noticias.idAutor = usuarios.idUsuario

De esta forma unimos ambas tablas, fjense que en las columnas primero aclaramos a
que tabla pertenece lo que queremos traer y despus el nombre del campo, lo mismo que
cuando declaramos el INNER JOIN le tenemos que indicar con qu tabla queremos unir
y despus en ON le avisamos de qu forma es que unimos. Al final de esta consulta se
puede poner sin problemas filtros del tipo WHERE, tambin ORDER BY y LIMIT.

Inner, Left y Right Joins


Existen varios tipos de joins, los tres ms comunes son los que puse en el ttulo :). El
inner join no va a mostrar ni un solo resultado si la condicin de unin entre tablas no
se cumple. Por ejemplo, si tenemos una noticia que tiene idAutor = 5 y en la tabla de
usuarios se borr ese usuario, la noticia con el autor 5 no se va a mostrar si hacemos la
consulta del tipo INNER.
Por el contrario si la consulta es del tipo LEFT se van a mostrar igual los resultados de
las noticias con el autor 5 pero los datos del usuario van a aparecer en blanco. Y si es del
tipo RIGHT, lo que hace esto es darle ms peso a la segunda tabla, por ejemplo,
tenemos aparte de las tablas anteriores una tabla ms que es noticiasImgenes donde
dejamos registro de las imgenes que le asignamos a una noticia
noticiasImagenes [idImagen, idNoticia, archivo]
Se puede dar el caso en que una noticia tenga varias imgenes, si nosotros hacemos la
consulta de la siguiente forma:

TALLER DE PHP

PECE2000

ZONA GUANAJUATO

Pgina 46 de 50
SELECT noticias.titulo, noticias.cuerpo, noticiasImagenes.archivo FROM
noticias RIGHT JOIN noticiasImagenes ON noticias.idNoticia =
noticiasImagenes.idNoticia

Vamos a lograr que nos traiga como resultado tantas lneas como imgenes tenemos
asignadas, repitiendo los datos de las noticias, por ejemplo, puede ser que los resultados
sean as:
idNoticia - titulo - imagen
1 - Taller de PHP - php.jpg
1 - Taller de PHP - logo.gif

Union
Otro tipo de consulta ms compleja son los UNION, que sirve para combinar resultados
de varias consultas del tipo SELECT. La sintaxis es:
SELECT ... UNION [ALL | DISTINCT] SELECT

El union puede ser UNION ALL o UNION DISTINCT, con la primer opcin va a traer
todos los resultados encontrados en ambas tablas, y con DISTINCT solo los diferentes.
Supongamos que tenemos dos tablas de noticias, una para las noticias publicadas y otra
para el borrador, y nosotros queremos traer en una misma consulta todos los datos de
ambas tablas ordenados por orden de fecha de creacin, en estos casos es que tenemos
que hacer la consulta del tipo UNION, para poder ordenar datos de dos tablas diferentes
intercalando los datos entre un conjunto y otro.
Buenas, en la clase de hoy vamos a ver una forma de traer valores puntuales de la base
de datos.
Tambin veremos cmo evitar hacer cuentas o clculos complejos y cmo aplicar
count, los tipos de consultas max y min, sum y limit.
As que manos a la obra y ya saben que cualquier duda que vaya surgiendo pueden
dejrmela en los comentarios que tratar de responderlos a medida que van llegando.

Count
El count nos va a dar el nmero de veces que se repite un valor en la db, es decir el
nmero de registros almacenados que correspondan con nuestra consulta. Por ejemplo,
en nuestra tabla de noticias, si queremos saber cuntas noticias hay publicadas entonces
la consulta que hacemos es:
SELECT COUNT(*) FROM noticias WHERE estado = 'publicado';

Ahora que pasa si queremos agregar algn otro campo en la consulta, por ejemplo el
nmero de noticias publicadas por cada autor:
SELECT autor, count(*) FROM noticias GROUP BY autor;

TALLER DE PHP

PECE2000

ZONA GUANAJUATO

Pgina 47 de 50

Fjense que agregamos a la consulta GROUP BY que nos permite agrupar por el valor
que queremos, por ejemplo, la consulta anterior nos traera como resultados posibles:
Justi - 3
Juan Manuel - 8
Wilkilen - 1

Max y Min
Otro tipo de consulta muy comn es traer el valor mximo o mnimo de un listado de
valores. Supongamos que tenemos una tabla de productos con sus respectivos precios, si
queremos traer el precio mximo o mnimo lo hacemos de la siguiente manera:
SELECT MAX(precio) FROM productos;
SELECT MIN(precio) FROM productos;

Y si queremos saber, por ejemplo, cul es el precio promedio del producto con id 15
podemos hacer:
SELECT AVG(precio) FROM productos WHERE idProducto = 15;

SUM
Por ltimo tenemos la suma. Por ejemplo, si tenemos un carrito de compras y
seleccionamos 5 productos y queremos saber cunto es el total a pagar por el usuario
con id 3 deberamos hacer:
SELECT sum(precio) FROM carrito WHERE idUsuario = 3;

LIMIT
Algo que es muy comn tambin es limitar la cantidad de registros que queremos traer
de la base de datos, por lo general algunas tablas pueden llegar a tener miles de registros
y traer a todos hara demasiado uso de servidor y demorara demasiado para lo que
realmente necesita el script, es por ello que es muy comun limitar las consultas a la
cantidad de resultados que necesitamos (si es que realmente conocemos este dato).
Por ejemplo si hacemos una consulta con un count(*) porque queremos saber el total de
registros de una tabla, al final le colocaremos LIMIT 1.
SELECT count(*) FROM productos LIMIT 1;

Otra forma de usar el limit es pasndole dos argumentos en lugar de uno, por ejemplo, si
ponemos:
SELECT * FROM productos LIMIT 5,10;

TALLER DE PHP

PECE2000

ZONA GUANAJUATO

Pgina 48 de 50

El primer valor que ponemos es desde qu registro queremos empezar a traer (el
primero es 0) y el segundo cuntos valores, por lo que la consulta anterior va a traer
desde el producto con id 6 al 15.
Es muy comn utilizar el limit con dos argumentos cuando se desea hacer un paginado.

La clase anterior fue la ltima en lo que respecta a MySQL y base de datos. S que no
es un tema sencillo (incluso tuve que aadir una clase extra por all) pero todo es
prctica, constancia y consultas.
Por eso dejar esta clase exclusivamente para que dejen sus comentarios con dudas o
inquietudes que les puedan surgir. Tienen tiempo hasta el prximo lunes. Prometo
responder todos los comentarios e incluso ir dando ejemplos para ser ms claro.
Prefiero que cerremos el tema de esta forma para retomar el taller luego con
Manipulacin de Archivos, algo diferente a lo que vimos hasta ahora.

Hoy es el da de las respuestas a todas esas dudas de modo que no veremos solamente
un tema sino que el mismo ir variando de acuerdo a cada pregunta. La idea es que
todos podamos aprovechar para afianzar lo que estuvimos viendo. Comencemos!

Subiendo Imgenes a un Sitio


Estoy haciendo un sitio web para una inmobiliaria, ya tengo las tablas y hago
consultas y lo que tengo hecho est funcionando.El problema es que no s cmo
insertar fotos a la tabla, lo he intentado como tipo de datos bloc y cuando hago la
consulta me da todos los datos pero en la foto slo me salen garabatos, estoy
empezando en esto y me encanta, solo quera saber si me puedes explicar o si puedes
hacer una leccin de cmo solucionar ese problema.
Cuando agregamos imgenes en forma dinmica a un sitio, a pesar de que las mismas se
pueden guardar en base de datos, lo ms conveniente, por una cuestin de performance,
es guardar toda la informacin relacionada con la imagen en la base de datos como
puede ser el nombre del archivo, peso de la imagen, etc, pero el archivo lo guardamos
fsicamente en el servidor, en el mismo lugar donde estn nuestros scripts de php, puede
ser dentro de una carpeta llamada Uploads o Subidas.
Para ello php nos da una herramienta para poder recibir imgenes a travs de un
formulario y guardarla en donde deseamos. El proceso para subir arhivos al servidor
ser explicado en la clase 26 y la manipulacin de imgenes para crear nuevas de
diferentes tamaos en la clase 27.

IDE para desarrollar en php


Utilizais algn IDE para desarrollar en php o simplemente un editor de texto?

TALLER DE PHP

PECE2000

ZONA GUANAJUATO

Pgina 49 de 50

Por IDE nos referimos a la herramienta que utilizamos para programar nuestros script,
es ms una cuestin de gustos que otra cosa el cul es la mejor.
En un principio yo utilizaba Dreamweaver, ya que trabajaba un poco en forma visual y
un poco en modo cdigo. Luego cuando ya practicamente hacia todo en modo cdigo
pase a usar Zend Studio, ambas opciones son desarrolladas por empresas privadas, por
lo que hay que abonar por ellas, como alternativa gratuita a estas opciones est Eclipse,
excelente programa que compite cabeza a cabeza con Zend, de hecho actualmente yo
estoy usando Eclipse con un plugin de Zend Studio obteniendo las mejores
caractersticas de ambos programas.

Importar datos en la db de un CSV


Me gustara, si le es posible a alguno de ustedes, que me ayduaran a insertar registros
a una tabla usando los datos de un archivo de texto separados por coma.
Excell una de las caractersticas que tiene es que nos permite guardar informacin en un
archivo de texto plano separando cada campo por comas, este tipo de archivo se llama
CSV.
Mediante phpMyAdmin podemos importar directamente este archivo en una tabla de
mysql.
Algunas cuestiones a tener en cuenta son que en la tabla estn los campos en el mismo
nmero y orden que se encuentran en el archivo de Excell o csv si es que ya est
convertido, por ejemplo, si mi tabla mysql que se llama usuarios tiene nombre, apellido
y edad como campos, en el csv tendra que tener solo tres campos por lnea.
Luego de tener en cuenta esto vamos a ingresar en nuestro phpMyAdmin, hacer clic en
la tabla donde queremos importar los datos y arriba a la derecha hay una opcin que
dice importar. Ah vamos a buscar el archivo que queremos subir, y nos va a preguntar
un par de cositas como por ejemplo por que caracter estn separados los campos, ya
viene por defecto el ;, si esta todo correcto, hacemos clic en GO y listo, ya tenemos
nuestra completa desde un CSV.

Conociendo la ip de nuestros navegantes


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 instrucin (<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. Sabra decirme a que
puede deberse esta situacin?
PHP nos brinda una herramienta muy potente para que podamos dejar registro de la ip
de los navegantes de nuestro sitio, para ello tenemos que utilizar la variable
$_SERVER["REMOTE_ADDR"]

TALLER DE PHP

PECE2000

ZONA GUANAJUATO

Pgina 50 de 50

Que nos va a devolver la ip del usuario, con esta variable podemos hacer lo que
queremos, o un:
<? echo $_SERVER["REMOTE_ADDR"]; ?>

para ser agregado en un formulario en el campo hidden, o sino, mucho ms seguro, es


agregarlo directamente en el script que vamos a correr para guardar la informacin
recibida desde el formulario y guardar en la db directamente, por ms que el script que
guarda la informacin corra en el servidor y el usuario no llega a ver todo el proceso
que realiza PHP, igual obtiene la ip del usuario que hizo la peticin por lo que no
tendremos ningn problema.

TALLER DE PHP

PECE2000

ZONA GUANAJUATO

Você também pode gostar