Vous êtes sur la page 1sur 8

Validacin de formularios con PHP

La validacin de datos ingresados por un usuario en un formulario es una necesidad


en las aplicaciones web, tanto por razones tcnicas, como por aspectos de segurid
ad. Cuando se envan datos de un formulario errneos al servidor web, este invierte
algn tiempo en procesar los datos, y si estos contienen errores o no estn en el fo
rmato deseado, invertir algn tiempo en procesarlos y en determinar si se pueden ut
ilizar esos datos.
ns desplegables y cuadros de lista resulta ms fcil porque el valor siempre ser uno d
e una lista de valores predefinidos. Si se establece desde la creacin del formula
rio un valor preestablecido, la validacin no ser necesaria.
Conectando con MySQL desde PHP
Para trabajar con bases de datos desde PHP se suele utilizar un proceso como el
siguiente: 1. Establecer conexin con el gestor de la base de datos. Esta conexin s
uele requerir que se indique el usuario, la contrasea y el servidor donde est aloj
ada la base de datos. Seleccionar la base de datos con la que se va a trabajar.
Este proceso puede estar incluido en el paso anterior si la funcin a utilizar ya
incluye el argumento para la base de datos. Componer una instruccin SQL que se de
sea ejecutar en el servidor MySQL y almacenarla en una variable de tipo cadena.
Enviar la consulta utilizando la variable, o de forma directa. Procesar el resul
tado obtenido despus de ejecutar la consulta. Mostrar el resultado en la pgina web
. Liberar los recursos utilizados en la consulta. Cerrar la conexin con el gestor
de base de datos.
Recuperar valores de formulario con PHP
Una vez enviado el formulario al servidor web, la secuencia de comando indicada
en el atributo action del elemento FORM se encarga de entrar en accin para proces
ar los datos. Para ello debe acceder a los valores ingresados en el formulario.
Estos valores PHP los recibe haciendo uso de las matrices superglobales asociati
vas $_POST y $_GET, en donde el nombre del campo de formulario se convierte en l
a clave y el valor introducido o seleccionado por el usuario el valor que deber s
er procesado en la secuencia de comando. La matriz asociativa que se vaya a util
izar depender del mtodo de envo seleccionado en el formulario, si el mtodo fue GET,
entonces la matriz superglobal a utilizar ser $_GET y si fue POST entonces deber u
tilizar $_POST. Lo anterior significa que si el elemento HTML es:
<input type="text" name="nombre" size="25" maxlength="30" />
2.
3.
4. 5. 6. 7. 8.
Debe considerar que el intrprete de PHP no hace ningn anlisis de la sintaxis MySQL
con que se construy la consulta. Para PHP, se trata nicamente de una cadena de car
acteres. Ser el programador el encargado de revisar su validez como sentencia SQL
.
Y el mtodo de envo empleado ha sido POST, el cdigo PHP para tomar este valor, sera:
<?php echo $_POST['nombre']; ?>
Conexin a Gestor de Base de datos
Como primer paso se debe establecer una conexin con el Gestor de Base de datos My
SQL,, usando la funcin:
mysql_connect(string Servidor, string Usuario, string Clave);
Cuando el mtodo de envo sea GET, los datos sern enviados en la cadena de consulta q
ue forma parte de la URL que es enviada al servidor. En cambio, cuando se usa el
mtodo POST los datos son incorporados en el cuerpo del mensaje HTTP que es envia

do desde el navegador al servidor.


Siendo: Servidor: Es el nombre (o la direccin IP) del servidor donde est MySQL. El
valor por defecto ser 'localhost'. Usuario: Es el nombre del usuario que va a ac
ceder a MySQL Clave: Es la clave correspondiente al usuario. Esta funcin nos devu
elve un valor de tipo int que sirve para identificar la conexin con el servidor S
QL, as que podremos asignarlo a una variable con la que referirnos a la conexin ab
ierta.
Validacin de los datos recibidos
Los primeros tipos de datos que se pueden validar, son las cajas de textos y las
reas de texto, en ambos casos se tienen campos en los que el usuario digita dire
ctamente los valores a enviar. Lo primero a determinar aqu es qu tipo de dato es e
l que se va a recibir. Adems, es conveniente evitar que el valor enviado en el ca
mpo de formulario est vaco. La validacin de otros tipos de campo de formulario, com
o casillas de verificacin, botones de opcin, me-

Por ejemplo, si todos pueden acceder al servidor, abriramos la conexin haciendo:


$IdConexion = mysql_connect("localhost","","");
mysql_drop_db(string NombreBD, int IdConexion);
Por ejemplo, si queremos eliminar la base de datos que acabamos de crear, haramos
:
<?php mysql_drop_db($NombreBD, $IdConexion); ?>
Ser til tener los datos en variables (las posteriores modificaciones son as ms senci
llas), por ejemplo, en las siguientes lneas guardamos el nombre del servidor, usu
ario y clave en variables, y abrimos la conexin:
<?php $Servidor = "localhost"; $Usuario = "admin"; $Clave = "pass4321"; $IdConex
ion = mysql_connect($Servidor, $Usuario, $Clave); ?>
donde $NombreBD e $IdConexion son las variables que tenamos definidas antes, una
con el nombre de la base de datos y otra con el identificador de la conexin.
Abrir una base de datos existente
Por ltimo, podemos escoger sobre qu base de datos de las existentes queremos traba
jar, para ello, usaremos la funcin:
mysql_select_db(string NombreBD, int IdConexion);
Adems, esto podemos grabarlo en un archivo, por ejemplo, ConexionBD.php, y en lug
ar de escribir lo anterior, poner:
<?php include("ConexionBD.php"); ?>
Por ejemplo, si queremos abrir una base de datos cuyo nombre sea "Usuarios", har
emos lo siguiente:
<?php $NombreBD = "Usuarios"; mysql_select_db($NombreBD, $IdConexion); ?>
As podremos usar este pequeo script de conexin al servidor de bases de datos en los
scripts que lo requieran. Una vez abierta la conexin, tenemos las siguientes opc
iones:
Crear una nueva base de datos Borrar una base de datos existente Abrir un
a base de datos existente
Siendo, $IdConexion el identificador de la conexin abierta.
Ejecutar una consulta (query)
Para ejecutar una consulta se usa la funcin:
mysql_query(string Consulta, int IdConexion);
Crear una base de datos
Podemos crear una nueva base de datos usando la funcin:
mysql_create_db(string NombreBD, int IdConexion);
NombreBD ser el nombre que queramos darle a la base de datos IdConexion es el ide
ntificador de la conexin abierta Por ejemplo, teniendo abierta una conexin, cuyo i
dentificador hemos guardado en la variable $IdConexion, para crear una base de d
atos cuyo nombre sea "PruebaBD", haremos:
<?php $NombreBD = "PruebaBD"; mysql_create_db($NombreBD, $IdConexion); ?>
Como se aprecia en la definicin, hemos de pasarle como parmetro obligatorio una ca
dena en la que debe estar almacenada la consulta a realizar y, como parmetro opci
onal, el identificador de la conexin abierta (si no se especifica, se toma el que
est activo en ese momento). Adems, devuelve un identificador de consulta, que pod
emos almacenar en una variable para referirnos luego a dicha consulta. Lo que ha
cemos con esta funcin es enviar la sentencia SQL al servidor MySQL para que sta se
a ejecutada. Una vez hecha la consulta, hay que saber cmo recuperar los datos; es
to es lo que hacemos en las siguientes lneas:

$ResultQuery = mysql_fetch_array($IdConsulta); print("Usuario: ".$ResultQuery["U


SUARIO"]."<B>"); print("E-mail: ".$ResultQuery[1]."<P>");
Borrar una base de datos existente
Hay que recordar que borrar una base de datos eliminar toda la informacin que sta t
uviera, incluida la estructura de las tablas, no dejando rastro alguno de la bas
e de datos en el servidor. La funcin para eliminar una base de datos es:
Tenemos varias funciones para recuperar los datos de una consulta. Una de ellas
es, como vemos en el ejemplo, mysql_fetch_array();. Esta funcin devuelve en un ar
ray el contenido de la sentencia SELECT, identificando cada elemento con un camp
o de la base de datos y avanzando a la siguiente fila. Para ello, debe-

mos pasarle el identificador de consulta devuelto por mysql_query();. Observamos


, adems, que como ndice podemos especificar tanto su posicin numrica (los arrays van
del 0 al N-1, donde N es el nmero de elementos) como, entre comillas, el nombre
del campo. Si queremos recorrer todas las filas devueltas por el SELECT, tendrem
os que ir haciendo la asignacin fila a fila hasta que ya no queden filas. Para sa
ber cuntas filas devuelve un SELECT, tenemos la funcin mysql_num_rows();. Esta fun
cin, cuya definicin vemos:
mysql_num_rows(int IdConsulta);
ahora tiene que agregar una mysqli_connect, mysqli_query, etc.
letra
i.
As:
Es recomendable comprobar el resultado del intento de conexin con la base de dato
s para evitar errores al intentar ejecutar consultas con la base de datos. Puede
utilizar cualquier mtodo que estime conveniente para este propsito. A continuacin
se le presenta una de tantas formas para poder realizar esta comprobacin:
if(mysqli_connect_errno()){ printf("Fall la conexin: %s\n", mysqli_connect_error()
); exit(0); } //Ac el cdigo a ejecutar si la conexin se realiz de forma exitosa
Devuelve un entero, que ser el nmero de filas del SELECT, de la consulta correspon
diente al identificador IdConsulta. Al igual que tenemos mysql_fetch_array();, h
ay una funcin que se llama mysql_fetch_row();. Hace lo mismo, pero con una salved
ad, y es que no se puede usar el nombre del campo en el array que devuelve como
si fuera una manera de indexar. Es decir, slo admite referencias numricas a los ca
mpos de la consulta. Hay que tener en cuenta que el primero es el 0.
Seleccionar la base de datos de trabajo
Notar que en PHP 5 el constructor mysqli() indica la base de datos con la que se
desea trabajar usando el cuarto argumento del mtodo. Sin embargo, para poder camb
iar esta base de datos de trabajo, tendr que usar la funcin mysqli_select_db() a l
a que se puede acceder utilizando el enfoque orientado a objetos o basado en pro
cedimientos:
mysqli_select_db($cn, $db);
Utilizacin de la extensin MySQLi
La biblioteca MySQLi es una extensin de PHP para trabajar de una forma ms rpida y e
ficiente con el gestor MySQL. Con esta biblioteca es posible utilizar sintaxis o
rientada a objetos y orientada a procedimientos.
Realizar consultas a la base de datos
Para realizar una consulta a la base de datos se puede utilizar la funcin mysqli_
query(). Esta funcin recibe como argumento la consulta que se desea ejecutar en e
l servidor de base de datos. Resulta conveniente configurar esta consulta en una
variable de tipo cadena, en lugar de hacerlo directamente dentro de la funcin. P
or ejemplo:
$qr = "SELECT * FROM libros WHERE " . $tipobusqueda . " LIKE '%" . $cadenabusque
da . "%'";
Configurar una conexin con MySQL
PHP 5 proporciona una nueva biblioteca para conectarse con bases de datos de MyS
QL. Esta biblioteca se denomina mysqli. Esta biblioteca permite utilizar una sin
taxis orientada a objetos, as como, la sintaxis tradicional basada en procedimien
tos. Para conectarse a la base de datos MySQL se utiliza la siguiente sintaxis:
@ $cn = mysqli_connect([string host [, string userdb [, string passdb [, string
db]]]]);

En la prctica casi siempre se ver obligado a concatenar sentencias SQL con variabl
es de PHP. Estas variables muy probablemente sern establecidas por el ingreso de
informacin de parte del usuario a travs de formularios. El siguiente paso es envia
r la consulta al servidor MySQL para que sea ejecutada. Para ello se requiere un
a instruccin como la siguiente. Se muestra siempre la instruccin orientada a objet
o y la basada en procedimientos:
$rs = mysqli_query($cn, $db);
En la instuccin anterior se ha utilizado el operador de supresin de errores, @, pa
ra evitar que se muestren los errores reportados por PHP y que usted pueda imple
mentar formas ms elegantes para presentar los errores al usuario. La funcin mysqli
_connect() devuelve un puntero en lugar de un objeto. Adems, puede utilizar las f
unciones que la biblioteca mysqli proporciona, recordando que en este caso dicha
s funciones conservan la misma sintaxis que proporcionaba la biblioteca mysql_co
nnect, mysql_query, etc. Con la salvedad que

Recuperar el resultado de la consulta


Existen un conjunto de funciones para dividir los resultados del identificador o
del objeto de resultados utilizando diversos mtodos o formas. Se pueden utilizar
funciones como mysqli_fetch_assoc(), mysqli_fetch_row(), mysqli_fetch_array y m
ysqli_fetch_object(). Es conveniente obtener antes de aplicar estas funciones el
nmero de registros devueltos al ejecutar la consulta. Para esto puede utilizarse
la propiedad num_rows del objeto de resultados o la funcin mysqli_num_rows(), si
utiliz el enfoque basado en procedimientos.
$nr = mysqli_num_rows();
Se pueden liberar los conjuntos de resultados mediante el llamado al mtodo $rs->f
ree() o con mysqli_free_result(), si utiliza el enfoque basado en procedimientos
. Despus de esto es conveniente cerrar la conexin con la base de datos. Para ello
puede utilizar:
mysqli_close($cn);
La funcin mysqli_num_rows() indica el nmero de filas devueltas por la consulta. La
utilidad de obtener el nmero de filas devuelto est en que al hacerlo facilita el
procesamiento de los resultados mediante cualquiera de las formas de lazos o buc
les de PHP. Por ejemplo, de la siguiente forma:
for($i=0; $i<$nr; $i++){ //Procesamiento del resultado }
En cada iteracin adentro del ciclo o lazo se puede utilizar una funcin como $rs->f
etch_assoc() (o mysqli_fetch_assoc() si est utilizando el enfoque por procedimien
tos). El bucle no se ejecutar si el conjunto de resultados est vaco. La funcin mysql
i_fetch_assoc() obtiene cada fila del conjunto de resultados y devuelve la fila
actual en forma de matriz asociativa, con cada clave en forma de nombre de atrib
uto y cada valor con su valor correspondiente en la matriz. Para procesar cada f
ila del conjunto de resultados se puede utilizar una variable que contendr los el
ementos de la matriz devuelta en cada iteracin, de la siguiente forma:
mysqli_fetch_assoc($rs);
Una vez obtenida una fila mediante alguna de las instrucciones anteriores, ser po
sible obtener cada campo para mostrarlos adecuadamente en una tabla o lista. De
la siguiente forma:
while($row = while($row = mysqli_fetch_assoc()) echo stripslashes($row['autor'])
; }
Se ha utilizado la funcin stripslashes para quitar las comillas que se han escapa
do para evitar problemas con las consultas MySQL. Desconectarse de la base de da
tos

Vous aimerez peut-être aussi