Php y Mysql.

Posted on June  14th, 2009 by Technology Department 

Fundamentos.

Php es un lenguaje de programación que se ejecuta en la maquina donde esta alojado, esto es, cuando una pagina que tiene código php se carga en tu navegador, parte del código puede ejecutarse en la maquina donde esta alojado y devolver una información diferente a la escrita en su código.

Pongamos un ejemplo.

Si escribimos la famosa frase del programador " Hola Mundo " en código html, entonces aparece simplemente esa frase. Si quieres que aparezca 5 veces, se debe escribir 5 veces y así para todo

En el caso de php, si quieres escribir la frase "Hola Mundo " entonces hay una sentencia para ello, pero si quieres escribirlo 5000 veces en pantalla, se procede a instalar un contador ( que no es visible en la pagina y que se ejecuta en el servidor donde esta alojado la página). Cuando se imprime la frase, el contador incremente una unidad, comprueba si ha llegado a 5000 y en caso contrario, vuelve a imprimir la frase.

Vemos la gran diferencia, o sea, " Podemos contar con funciones que nos ayudan a realizar paginas web".

PHP evoluciona constantemente y tienen ya varias versiones, cada una añadiendo nuevas funcionalidades.

El objetivo de esta unidad no es ser experto en PHP sino  conocer algunas de las tareas que se pueden realizar, y para ello vamos a aplicarlo a un portal de venta de objetos en nuestra comarca de La Serena y Don Benito, una especie de Segunda Mano local

Que es Mysql

Mysql es un gestor de base de datos encargados de gestionar los datos almacenados en una base de datos para ser mostrados en la pagina web.

La idea es la siguiente: Creamos una base de datos que a su vez tiene una tabla y esta tabla tiene varios registros. La similitud mas apropiada es la de un archivador.

Supongamos que tenemos almacenado en un archivador todos los cursos del centro. Entonces 3ºA estaría en ese archivador y seria una tabla con datos, así como 3ºB, etc.

Cada tabla ( curso ) tiene una serie de alumnos ( identificador ) y cada alumno una serie de datos propios de cada alumno, como su nombre, apellidos, calle, teléfono, etc. Estos son almacenados en registros.

O sea, que tenemos-> Base de datos -> Tabla -> registros

1º Crear una base de datos

Lo primero que vamos a crear es nuestra base de datos, encargada de almacenar los datos de los usuarios. Para que se pueda crear algo, primero es necesario entrar en el sistema, o sea, en la base de datos

Es necesario crear un archivo con los datos de la conexión, que llamaremos config.php. Este es un archivo que va a contener los siguientes elementos

a) Dirección de donde se localiza la base de datos. O sea, donde voy a conectarme. Este dato suele ser una dirección IP de donde se localiza la base o bien si esta en el  mismo servidor, la palabra localhost

b) Nombre de la base de datos.

c) Usuario para entrar en esa base de datos. Las base de datos tienen datos confidenciales y hay que protegerlos con usuario y contraseña y por tanto

d) La contraseña para entrar

El archivo tiene la siguiente expresión:

<?php
$db_host = "192.125.0.123";$db_user = "user";$db_pass = "mypassword";$db_name = "secondhand";$db_table = "board";
?>

Lo primero que aparece es el signo <?php. Esto indica que la pagina va a trabajar con php y por tanto en el servidor se requiere que el lenguaje php funcione para las peticiones que haga la pagina

Segundo encontramos sentencias como $nombre = "dato";. Veamos que significa signo. Empezamos por el dólar, que podía ser un €, pero los americanos se adelantaron. Cuando aparece una palabra  precedida de $ indica que generamos una variable y se le asigna un dato determinado. En este caso, como el dato va a ser siempre el mismo porque no vamos a cambiar los datos de conexión de la base da datos, colocamos unas dobles comillas (") indicando que :

$db_host = "192.125.0.123";

Hay que observar que acaba con el ;. Esto viene a decir que la instrucción ha terminado.

Pasamos a dar el siguiente valor, para ello necesitamos el dato de usuario:  $db_user = "user";

Vemos que se hace de igual forma, o sea damos a la variable db_user  el valor que nosotros tengamos asignado en nuestra base de datos. Si tu base de datos tiene un usuario que se llama manolo, entonces seria $db_user = "manolo".  De igual forma se hace para las dos variables siguientes.

El ultimo dato se refiere a la tabla elegida. hay que tener en cuenta que una vez realizada la conexión a la base de datos, tenemos que tomar los datos de una tabla. en este caso la llamamos board.

Para terminar este archivo, hay que indicar que se cierre el php, por lo que se usa ?>.

Creación de la tabla en la base de datos

Una vez que tenemos la base de datos con la información relativa a donde esta, como se llama, nombre usuario y contraseña, es necesario generar una tabla que guardará los datos de los usuarios. De nuevo mostramos el código php que va 1º entrar en la base de datos, 2º creará una tabla y 3º creará registros en la tabla. El código es, que formará parte del archivo install.php es:

<?php

// Incluimos el codigo anterior

include ("config.php");

mysql_connect($db_host, $db_user, $db_pass);
mysql_select_db($db_name );
mysql_query("CREATE TABLE `$db_table` (id INT NOT NULL AUTO_INCREMENT, PRIMARY KEY(id) ,
field_1 TEXT ,
field_2 TEXT ,
field_3 TEXT ,
field_4 TEXT ,
field_5 TEXT ,
field_6 TEXT ,
field_7 TEXT ,
field_8 TEXT ,
field_9 TEXT )") or die("Error! Table not be created.");

echo "Table created. ";  ?>

Vamos a ver que hace este trozo de código. Lo primero es la instrucción include, que como dice la palabra, incluye el código config.php en este archivo porque van a ser necesarios los datos que contienen. Es bueno utilizar esta sentencia porque ahorra trabajo y ordena el código.

Hay que destacar en cuanto al orden que cuando los códigos son muy largos es conveniente utilizar los signos // para hacer comentarios. De esta forma, lo que aparece después de // no tiene validez para php y nos permite aclaramos un poco cobre el código que escribimos o ha escrito otro programador.

mysql_connect (base, usuario, contraseña) -> Esta instrucción de php se conecta con la base de datos de nombre , que tiene un usuario y una contraseña. En este caso, estos datos se toman de la información del archivo config.php.

Una vez conectado con la base de datos, tenemos que elegir una base en concreto, porque nuestro servidor puede contener varias bases. Para ello se utiliza mysql_select_db($db_name ). Ver $db_name será reemplazada por el valor que tiene en el archivo config.php. Ya tenemos conexión con la base. Ahora es el momento de CREAR la tabla y para ello usamos esta instrucción:

mysql_query ( "create table" `$db_table `  (id INT NOT NULL AUTO_INCREMENT, PRIMARY KEY(id) ,
field_1 TEXT ,
field_2 TEXT ,  etc  etc 

mysqql_query hace una consulta a la base de datos, que en este caso, es una orden, la de crear una tabla {"create table" }  con el nombre  {$db_table} , que en nuestro caso será board y con las características que viene marcadas entre los paréntesis  id INT NOT NULL AUTO_INCREMENT, PRIMARY KEY(id). respecto a esto último, lo que se indica es que el identificador de cada registro tiene que ser in integer o sea un numero entero, que no debe ser nulo, para que se diferencie de otros registros, que cada vez se  añada un registro se incremente y que la clave principal para el acceso va a ser este identificador id. Por tanto cada anuncio nuevo va a tener un identificador  o numero de identidad. Por ejemplo, el anuncio 36 que hace referencia a la venta de un móvil puede tener un id = 55 que lo identifica de los demás y sus campos como el precio, nombre del dueño, etc, estarán referenciados a este id.

Por ultimo se reflejan los campos que se deben añadir. En este caso vamos a nombrarlos como field_1, field_2 ... especificando que son del tipo texto. También podemos nombrarlos como teléfono, nombre, apellido, precio ...

Al final de la sentencia mysql_query dice die. Esto significa que si no se produce la creación de la tabla, se debe abandonar.

La ultima instrucción dice:  echo "Table created. ";.   Esto significa que se escriba en pantalla ( echo ) la frase Table created, o Tabla creada
 

Formulario para la entrada de datos

Para entrar los datos en la base de datos, primero hace falta un formulario y este mandara los datos a otro archivo que gestionara los datos para ser incorporados en la base de datos

El formulario escrito en html es algo así:

<form enctype='multipart/form-data' action='process.php' method='POST'>
<div align="center">
<table border="1" cellspacing="1" style="border-collapse: collapse" width="743" cellpadding="5" height="371">
<tr><td height="22" width="45" bordercolor="#FFFFFF">
<img src="../../../image/obj_bbs.gif" width="45" height="45"></td>
<td height="22" width="72" bordercolor="#FFFFFF">
<font face="Verdana" size="2">Name</font></td>
<td height="22" width="617" bordercolor="#FFFFFF">
<font face="Verdana"><input type=text name='nombre' size=25>*</td></tr><tr>
 

Merece prestar atención en la etiqueta form que inicia el formulario y además habrá otra </form> al final que no viene escrita por no extender demasiado este código. Después de form aparece el modo de "manejar" los datos y a continuación que se va a hacer con los datos ( action ) que en este caso se indica que se envían al archivo process.php  por medio del método post ( existe otro llamado Get )

El resto del código es referente a la anchura de los campos, el color del borde tipo de borde, etc.

En la penúltima línea aparece input type = text  name = nombre. Esto nos dice que el primer campo que se completa es del tipo texto y se llama nombre.

El código completo se puede bajar una vez visto todo este script.

Archivo para introducir los datos en la base de datos

 

Tenemos un archivo llamado process.php que se va a encargar de introducir los datos en la base de datos. veamos que hay en su interior

<?php
include("global.inc.php");
$errors=0;
$error="Los siguientes errores ocurrieron...The following errors occured while processing your form input.<ul>";
pt_register('POST','telephone');
pt_register('POST','nombre');
pt_register('POST','email');
pt_register('POST','apellidos');
pt_register('POST','message');
pt_register('POST','object');
pt_register('POST','password');
pt_register('POST','image');
pt_register('POST','title');
pt_register('POST','prices');

 

if($nombre=="" || $email=="" || $apellidos=="" || $message=="" ){
$errors=1;
$error.="<li>No completo todo el formulario. Por favor vuelva a rellenar todos los campos....You did not enter one or more of the required fields. Please go back and try again.";
}
if(!eregi("^[a-z0-9]+([_\\.-][a-z0-9]+)*" ."@"."([a-z0-9]+([\.-][a-z0-9]+)*)+"."\\.[a-z]{2,}"."$",$email)){
$error.="<li> Formato de Correo no valido.....Invalid email address entered";
$errors=1;
}
if($errors==1) echo $error;
else{
include ("photo-validate.php");
include ("create.php");

$today = date("F j, Y, g:i");
include("config.inc.php");
$link = mysql_connect($db_host,$db_user,$db_pass);
if(!$link) die ('Could not connect to database: '.mysql_error());
mysql_select_db($db_name,$link);

$query = "INSERT into `".$db_table."` (field_1,field_2,field_3,field_4,field_5,field_6,field_7,field_8,field_9, field_10, field_11) VALUES ('" . $_POST['nombre'] . "','" . $_POST['apellidos'] . "','" . $_POST['email'] . "','" . $_POST['password'] . "','" . $_POST['telephone'] . "','" . $_POST['object'] . "','" . $_POST['message']. "','" . $_POST['title'] . "','photos/".$file_name."','" . $today . "','" . $_POST['prices'] . "')";
mysql_query($query);
mysql_close($link);

}
?>
<html><head><title> Gestion de anuncio </title></head><body>
<p align="center"><b>
<A HREF="javascript:history.back()"> <font color="#000080" size="4">Volver Atrás
</font> </A>
</b>
</body></html>

 

la línea include("global.inc.php"); indica que el archivo global.inc entra en juego para añadir una función que crea las variables de los campos de los formularios, esto es

si entramos un campo con el nombre "lugar", entonces por medio de ese archivo y una función que lleva ( que no vamos a ver ) genera la variable "$lugar".

Por simplicidad, vamos a emitir este archivo así como otros pues se sale del objetivo de este tema.

Veamos las siguientes líneas:

if($nombre=="" || $email=="" || $apellidos=="" || $message=="" ){
$errors=1;
En este caso, no dice ->if ( condicion) entonces {tarea}. La función if mira que hay dentro de los paréntesis y si se cumple, entonces se ejecuta lo que hay entre las llaves {}.

En este caso, comprueba si el correo, el campo apellidos, el message o el campo nombre están en blanco. Si esto ocurre, se hace  $errors=1; y además se asigna a la variable $error ( ver que es otra porque no tiene la s ) el texto No completo todo el formulario. Por favor vuelva a rellenar todos los campos..

Poco después se hace otra comprobación para ver si el campo email no lleva la @, o contiene otro tipo de error ( esta función no la veremos )

entonces si esto ocurre, se asigna a la variable $error otro texto ->Formato de Correo no valido. Después se comprueba si ha existido algún error en estos casos  ( if($errors==1) echo $error; ), o sea si algo se ha puesto mal en el formulario, entonces ordena que se imprima en pantalla el error.

Si todo esta bien entonces pasa a "else" y se ejecuta lo que viene a continuación, en este caso que se incluya dos nuevos archivos, el photo-validate  y el create.php
El primer archivo va a comprobar si el tipo de archivo de foto  es valido y el segundo va a generar fotos miniaturas de las fotos enviadas

Para ver estos archivos pinchar en Comprobador de tipo de fotos   y  Generador de thumb.

Veamos el siguiente trozo de código

1º $today = date("F j, Y, g:i");
2º include("config.inc.php");
3º $link = mysql_connect($db_host,$db_user,$db_pass);
4º if(!$link) die ('Could not connect to database: '.mysql_error());
5º mysql_select_db($db_name,$link);

la línea 1º genera la variable $today que nos permite saber la fecha y hora. Ver que  se hace igual a la función reservada  date con unos parámetros entre paréntesis que indica como debe aparecer la hora.

Una función reservada es una función propia de php, guardada en su propio sistema y que se ejecuta sola, o sea, " no hay que decir al sistema que debe hacer porque PHP ya lo sabe".

Hay muchas formas de mostrarse la fecha, y se puede consultar el manual de PHP para ver las distintas opciones.

La 2º línea llama a config.inc.php, el archivo que tiene los datos de la base de datos. Se llama porque dentro de poco vamos a introducir datos en registros de la tabla

3º Generamos la variable $link que contiene los datos para conectarse a la base de datos. Ver que tiene la instrucción mysql_connect para la conexión.

4º Comprueba si la conexión ha tenido éxito. Dice if(!$link) die. Esto significa que si lo que hay dentro del paréntesis no se cumple ( por eso se añade el signo ! al principio de la variable ) entonces se deja de ejecutar todo el programa y se imprime en pantalla No ha podido establecer conexión con la base de datos

La 5º selecciona la base de datos una vez conectado. $db_name es el nombre de la base de datos.

El siguiente apartado es crear un variable que va a contener la consulta. En este caso es la siguiente

$query = "INSERT into `".$db_table."` (field_1,field_2,field_3,field_4,field_5,field_6,field_7,field_8,field_9, field_10, field_11) VALUES ('" . $_POST['nombre'] . "','" . $_POST['apellidos'] . "','" . $_POST['email'] . "','" . $_POST['password'] . "','" . $_POST['telephone'] . "','" . $_POST['object'] . "','" . $_POST['message']. "','" . $_POST['title'] . "','photos/".$file_name."','" . $today . "','" . $_POST['prices'] . "')";

O sea, insertar en ( insert into ), la tabla ($db_table) datos en los registros field_1, field_2 ...... tomados  del formulario con valor $_POST['nombre'] ., $_POST['apellidos] ., $_POST['email'] .....

Todo tiene lógica pero se debe respetar la forma en la que se entran los datos, respetando las comillas, paréntesis, etc.

Esta sentencia se puede modificar con los valores que se quieran pero hay que respetar las palabras insert into para entrar los datos

Después tenemos  mysql_query($query); que realiza la consulta a la base de datos y mysql_close($link); que cierra la conexión con la base de datos.

Eureka, ya tenemos nuestro primer registro guardado en la base de datos.

Lo ultimo que se hace es cerrar php y abrir el código html para poner un javascript que permite volver a la pagina de atrás.

Problemas mas comunes con redireccion headers ( Cannot modify header information - headers already sent by)

Este tipo de errores aparece de forma sorprendente y aparentemente cumpliendo todos los criterios. Suele aparecer en la sentencia  header("Location:  otra-pagina.php");
 

1º Si aparece un espacio en blanco después del cierre de sesión ?> genera un error. Aseguranse que la última linea del codigo php es ?>

2º NO poner echo antes de la frase

3º no poner etiquetas html antes o despues del codigo php

 

Otras aplicaciones en php y Mysql

1º  Cargador de fotografías ( archivos ) con formularios html, php y Mysql

 

 

 

Dictionary:

More information 

Posted on 2009