Conexión con base de datos MySQL con PHP y diseño de formularios
Hace algunos años para obtener tu Clave Única de
Registro de Población (CURP) era necesario
trasladarte a la oficina correspondiente para
tramitar una copia pero en la actualidad puedes
hacerlo a través de una página del gobierno de
México (https://www.gob.mx/curp/)
¿Cómo crees que funciona está página? ¿Por qué
crees que la página puede proporcionar tanta
información? ¿Crees que existe una base de datos
con la información de todos los ciudadanos?
¿Quiénes no podrían consultar su CURP?
Las páginas web pueden ser de dos tipos: estáticas y dinámicas. La primeras son aquellas
cuyos contenidos permanecen siempre igual, en cambio las páginas dinámicas se
caracterizan porque su contenido es variable y se actualiza de acuerdo con la información
que se quiera mostrar.
Existe un gran número de páginas y portales web que han sido creados con el lenguaje
PHP, generalmente es utilizado para la creación de páginas dinámicas.
Tomando en cuenta el desarrollo de un sistema
para una biblioteca, se está considerando que las
bases de datos sean manejadas de manera
dinámica por medio de un sistema Web; para ello
deberás implementar la integración entre PHP
(que es el lenguaje de programación que
manipulará los datos en el flujo de las páginas
WEB) y la base de datos que se había generado en
MySQL (que es el servidor donde se almacena los
datos estructurados).
Observa el proceso que se lleva a cabo en un sistema web lineal.
1. El usuario hace una solicitud de consulta de una página web.
2. Esta solicitud viaja por la nube de internet hasta que encuentra el servidor que tiene
almacenado esta página.
3 El servidor busca en su almacenamiento interno la página solicitada.
4. Una vez encontrada la envía de regreso a la nube de internet hacia el usuario, si él
necesita más información que se encuentra contenida en la página web recibida,
volverá a hacer una solicitud de información y con esta se repetiría el mismo
proceso, con esto se gastaría más datos de conexión.
1. El usuario realiza una solicitud en una página web.
2. La solicitud se envía vía internet para buscar el servidor que almacena los datos
de la página.
3. El servidor web realiza las consultas necesarias, por medio del código PHP, en el
servidor MySQL para que la información y las consultas sean almacenadas en una
página dinámica HTML.
4. La página dinámica regresa al usuario pasando vía internet, pero esta página
contiene más información, esta información permanece oculta hasta que el usuario decida consultarla, estas consultas ya se realizan en el mismo cliente y ya no es
necesario que vuelva a hacer una nueva solicitud de una nueva página web.
Las
flechas que se observan sin un número indica el procesamiento que se hace en el
servidor, donde interviene el lenguaje de programación PHP, el gestor de bases de
datos MySQL y la página HTML ya mencionada, entre los tres generan el resultado
del que ya se habló.
Para poder desarrollar una página dinámica con el uso del lenguaje PHP con MySQL, es
necesario revisar algunas definiciones para que comprendas cómo es la comunicación
en un sistema web dinámico.
● Aplicaciones WEB: Según Minera (2014) las aplicaciones se pueden clasificar en: portátiles, de escritorio y web. Para que una aplicación sea considerada aplicación web, esta debe ser ejecutada en el servidor web y no en el usuario, es decir, que los datos con los que se trabaja son procesados y almacenados en el servidor web, por ejemplo el sitio donde se obtiene la CURP, el proceso se ejecuta y los datos se encuentran en el servidor (computadora donde están guardados los archivos de esa página) y el usuario únicamente recibe la respuesta y el documento para imprimirse. Cabe mencionar que las aplicaciones portátiles son aquellas que pueden ser utilizadas sin instalarse en un equipo de cómputo, es decir sin ocupar espacio en disco y las de escritorio son aquellas que requieren instalarse en el equipo de cómputo y ejecutarse desde el mismo utilizando espacio en disco. Las aplicaciones (Apache e IIS son los exponentes más conocidos) se encargan de generar las respuestas, en los casos en los que es necesario, de otros actores como los mencionados antes: servidores de bases de datos (Oracle, SQL Server, MySQL, PostgreSQL, por ejemplo) y lenguajes de programación (PHP, ASP.net, JSP, o PERL, entre otros). (Minera, 2014) Es de gran importancia que los sistemas dinámicos contengan la integración del lenguaje de PHP, este lenguaje ayudará a manipular la información que se encuentra contenida en un servidor de base de datos, el HTML como constructor visual, debe estar viene estructurado para que la información que sea manipulada sea mostrada de manera eficiente.
● Arquitectura cliente-servidor: Es un modelo de software, en el que se determinan
dos figuras: el servidor que es el que procesa, ejecuta y almacena la información
y, el cliente que solicita o demanda la información.
El cliente hace una petición, presionando un botón o haciendo clic en un enlace (por
ejemplo, a través de un enlace), y el servidor deberá, por un procesamiento,
resolver la demanda y devolver una respuesta.
La aplicación cliente es el navegador web, desde esta clase de programas
accedemos a la interfaz del sistema para interactuar con él.
● Lenguajes de script de servidor: Las páginas web se crean mediante lenguaje
HTML, éste es un lenguaje muy limitado para atender a los requerimientos que
actualmente se exigen, como mostrar grandes cantidades de información
almacenada en una base de datos o la generación y ejecución de procesamiento de
datos. Por ello, aparecieron lenguajes y mejoras en el servidor, en donde el
programador añade al código HTML códigos de otro lenguaje (PHP), pero con la
diferencia, que este código no se le envía al cliente, sino que es el servidor el que
lo interpreta, lo ejecuta y el cliente recibirá una página HTML normal con los
resultados ya plasmados.
Un ejemplo básico para entender la interacción de un sistema web dinámico:
Cuando un usuario desea ingresar con su cuenta en un sistema web, como por ejemplo
ingresar a una cuenta de correo electrónico o a Facebook (normalmente realizada en
código HTML), se muestra un formulario de inicio de sesión; una vez que captura sus datos
y presiona el botón de acceso (login), la información es enviada o redireccionada a una
página construida en un lenguaje de programación (normalmente PHP). La página se
ejecuta en el servidor web, verifica si el usuario y contraseña está almacenada en la base
de datos MySQL. Cuando el usuario y contraseña están verificados habrá dos posibles
escenarios:
● Si la página no encuentra el usuario y contraseña se genera una respuesta negativa
por medio de una página con código PHP se crea una nueva página en HTML y
vuelve a solicitar los datos ingreso del usuario y contraseña.
● Si la página encuentra los datos del usuario en la base de datos, una página con
código PHP acepta su acceso y deja que el usuario ingrese al sitio web con su
sesión activa.
La integración entre PHP y HTML se usa por medio de una etiqueta, en ella se integran
todas las instrucciones de PHP.
● Etiqueta PHP: Cuando en un documento web queremos añadir código PHP se indica
por esta etiqueta:
El código PHP se coloca en la zona de la página web donde más nos interese
hacerlo. El cliente que está solicitando el sistema web dinámico, desea que se muestre textos
propios, para ello es necesario entender cómo es que se muestra la información.
● HTML usa PHP y PHP usa HTML: Como se ha visto anteriormente el código PHP se
incrusta dentro del código HTML. Lo interesante es que se puede incrustar código
HTML en el PHP y tendría sentido ya que las funciones de escritura (echo y print)
en realidad escriben hacia el resultado final, que en realidad es una página HTML
por lo que se puede hacer algo como:
Jorge";
● Bases de escritura: Las normas básicas para escribir el lenguaje PHP, son las
siguientes:
o Todas las líneas de código deben de finalizar con un punto y coma
o Se puede agrupar el código en bloques que se escriben entre llaves
o Una línea de código se puede partir o sangrar (añadir espacios al inicio) a
voluntad con el fin de que sea más legible, siempre y cuando no partamos
una palabra o un valor.
o PHP obliga a ser estricto con las mayúsculas y las minúsculas en algunos
casos como el nombre de las variables; sin embargo, con las palabras
reservadas del lenguaje no es estricto. Es decir, PHP entiende que WHILE,
while e incluso wHiLe es lo mismo al ser una palabra reservada. Sin
embargo $var y $VAR no son iguales al ser el nombre de una variable.
● Escribir en la salida: Aunque hay muchas funciones de escritura (para escribir en
lo que será la página final) las fundamentales son echo y print.
Echo es la más utilizada y en realidad es un comando del lenguaje. Tras echo se
pasa uno o más textos (más adelante diremos expresiones de cadena) que cuando
son literales se escriben entre comillas. Si se usa más de un texto, se separan con
comas:
Como cualquier lenguaje de programación, se maneja información interna por medio de
variables, para eso se necesita entender cómo es el manejo de las variables en PHP.
● Introducción a las variables: En todos los lenguajes de programación (y PHP no es
una excepción) Las variables son contenedores que sirven para almacenar los
datos que utiliza un programa. Dicho más sencillamente, son nombres que
asociamos a determinados datos.
o Las variables tienen un nombre (un identificador) que tiene que cumplir
estas reglas:
o Tiene que empezar con el símbolo $. Ese símbolo es el que permite
distinguir a una variable de otro elemento del lenguaje PHP.
o El segundo carácter puede ser el guión bajo (_) o bien una letra.
o A partir del tercer carácter se pueden incluir números, además de letras y
el guión bajo
o No hay límite de tamaño en el nombre
o Por supuesto el nombre de la variable no puede tener espacios en blanco
(de ahí la posibilidad de utilizar el guión bajo)
Distribución gratuita-Prohibida su venta
47
Es conveniente que los nombres de las variables indiquen de la mejor forma posible
su función. Es decir: $saldo es un buen nombre, pero $x123 no lo es, aunque sea
válido.
● Declarar: La primera sorpresa para los programadores de lenguajes estructurados
es que en PHP no es necesario declarar una variable. Simplemente se utiliza y ya
está. Es decir, si queremos que la variable $edad valga 15, haremos:
Los textos se encierran entre comillas (simples o dobles, aunque se aconseja usar
las dobles salgo cuando nos venga mejor las simples). Ejemplo:
● Tipos de datos
o Enteros: A las variables se les puede asignar valores enteros. Los números
enteros se usan tal cual. Pueden ser positivos o negativos:
o Flotante: Los números decimales en PHP son de tipo coma flotante. Este es
un formato decimal para máquinas digitales que se manejan muy rápido por
parte de un ordenador, ocupan poco en memoria, pero desgraciadamente
no son exactos. Ejemplos:
o Cadenas: Se denomina así a los textos, que en programación se les
denomina cadenas de caracteres o Strings. Se asignan a las variables
entrecomillado (en simples o dobles) el texto a asignar. Ejemplo:
Distribución gratuita-Prohibida su venta
48
o Booleanos: Sólo pueden tomar como valores TRUE (verdadero) o FALSE
(falso). Ejemplo:
● Operadores: Lo habitual al programar en PHP es utilizar expresiones que permiten
realizar comprobaciones o cálculos. Las expresiones dan un resultado que puede
ser de cualquiera de los tipos de datos comentados anteriormente (enteros,
decimales, booleanos, strings,…) (Sanchez, 2012)
o Aritméticos
Son:
Operador Significado
+ Suma
- Resta
* Multiplicación
/ División
% Modulo (resto)
Ejemplo de uso:
"; //escribe 17.5
echo $x-$y,"
"; // escribe 13.5 echo $x*$y,"
"; // escribe 31 echo $x/$y,"
"; //escribe 7.75 echo $x%$y,"
"; //escribe 1, sólo coge la parte entera ?> o Operadores condicionales: Sirven para comparar valores. Siempre devuelven valores booleanos. Son: Condicionante Significado Distribución gratuita-Prohibida su venta 49 < Menor > Mayor <= Menor o igual >= Mayor o igual == Igual, devuelve verdadero si las dos expresiones que compara son iguales === Equivalente, devuelve verdadero si las dos expresiones que compara son iguales y además del mismo tipo != Distinto ! No lógico (NOT) && “Y” lógico AND “Y” lógico || “O” lógico OR “O” lógico XOR "OR" exclusivo o Concatenación: El punto (.) es un operador que permite unir textos. Su uso es muy sencillo. Ejemplo: En el manejo de información y de variables, se presentan algunas condicionantes, en las cuales se utilizan las estructuras de control de PHP.
"; // escribe 13.5 echo $x*$y,"
"; // escribe 31 echo $x/$y,"
"; //escribe 7.75 echo $x%$y,"
"; //escribe 1, sólo coge la parte entera ?> o Operadores condicionales: Sirven para comparar valores. Siempre devuelven valores booleanos. Son: Condicionante Significado Distribución gratuita-Prohibida su venta 49 < Menor > Mayor <= Menor o igual >= Mayor o igual == Igual, devuelve verdadero si las dos expresiones que compara son iguales === Equivalente, devuelve verdadero si las dos expresiones que compara son iguales y además del mismo tipo != Distinto ! No lógico (NOT) && “Y” lógico AND “Y” lógico || “O” lógico OR “O” lógico XOR "OR" exclusivo o Concatenación: El punto (.) es un operador que permite unir textos. Su uso es muy sencillo. Ejemplo: En el manejo de información y de variables, se presentan algunas condicionantes, en las cuales se utilizan las estructuras de control de PHP.
● Estructuras de control: Hasta ahora las instrucciones que hemos visto, son
instrucciones que se ejecutan secuencialmente; es decir, podemos saber lo que
hace el programa leyendo las líneas de izquierda a derecha y de arriba abajo.
Las instrucciones de control de flujo permiten alterar esta forma de ejecución. A
partir de ahora habrá líneas en el código que se ejecutarán o no dependiendo de
una condición.
Distribución gratuita-Prohibida su venta
50
o Sentencia condicional: Se trata de una sentencia que, tras evaluar una
expresión lógica, ejecuta una serie de instrucciones en caso de que la
expresión lógica sea verdadera. Si la expresión tiene un resultado falso,
ejecutara otras instrucciones. Su sintaxis es:
Ejemplo de sentencia if-else:
=6){
echo "Aprobado";
}
else {
echo "Reprobado";
}
?>
o Sentencia switch: Esta instrucción se usa cuando tenemos instrucciones
que se ejecutan de forma diferente según evaluemos el conjunto de valores
posible de una expresión. Cada case contiene un valor de la expresión; si
efectivamente la expresión equivale a ese valor, se ejecutan las
instrucciones de ese case y de los siguientes. Distribución gratuita-Prohibida su venta
51
Ejemplo:
o Bucle while: Un bucle es un conjunto de sentencias que se repiten mientras
se cumpla una determinada condición. Los bucles agrupan instrucciones las
cuales se ejecutan continuamente hasta que una determinada condición que
se evalúa sea falsa.
● Recepción de datos de un formulario desde una página PHP: PHP permite recibir
los datos pasados por los parámetros usando dos variables, que son en realidad
dos arrays que contendrán todos los valores del formulario. Se trata de $_GET y de
$_POST cada una dedicada al método con su mismo nombre.
Puesto que son arrays (se estudian con profundidad más adelante) su manejo es
distinto al de una variable normal. Podemos entender que son contenedores de
todos los elementos del formulario.
Los controles del formulario que hayan recibido valores envían esos valores
asociados al nombre de control especificado en el atributo name. De modo que, si
el método de paso era POST, la página PHP accede al valor de ese control mediante:
<?php
Distribución gratuita-Prohibida su venta
55
$valor=$_POST[‘name’];
?>
Donde name es el nombre del control. (Sanchez, 2012)
Conexión a MySQL desde PHP
Antes de comenzar e interactuar con una base de datos, tenemos que establecer una
conexión entre PHP y el servidor de base de datos MySQL. Para hacerlo, PHP nos ofrece
la función mysql_connect. (Minera, Desarrollo PHP + MySQL, 2011)
Su sintaxis es:
<?php
mysql_connect(’servidor’,’nombre de usuario’,’password’);
?>
● Servidor: Cadena de caracteres que debe contener el nombre del servidor o bien
su dirección IP. Cuando hablamos de servidor nos referimos a la maquina en donde
se encuentra instalado el servidor de bases de datos MySQL. Si estarnos trabajando
en forma local podríamos utilizar corno nombre de servidor localhost o 127.0.0.1
corno dirección IP.
● Nombre de usuario: Se trata de nombre de usuario válido para poder tener acceso
a la base de datos en cuestión.
● Password: Corresponde a la contraseña que corresponde al nombre de usuario que
se ha ingresado anteriormente.
Ejemplo:
<?php
mysql_connect(’localhost’,’prueba’,’12345’);
?>
En el ejemplo conectamos con el servidor local de MySQL utilizando el usuario
prueba con contraseña 12345.
Si la conexión es correcta, la función devuelve los valores de la conexión (el enlace
a datos) que se suele asignar a una variable (en el ejemplo anterior se los queda
$con).
En el caso de que falle (por que el usuario no tiene esa contraseña, o el servidor no
está funcionando, etc. etc.), entonces la función devuelve falso. (Sanchez, PHP (III).
Sesiones y bases de datos, 2013)
Distribución gratuita-Prohibida su venta
56
● Captura de errores: Al utilizar bases de datos hay muchos posibles errores que
pueden ocurrir. De hecho, si no funciona la conexión, todo lo demás que nuestra
aplicación quisiera realizar, no sería posible.
o mysql_error: Muchas veces nos conviene capturar los errores que
proceden de la base de datos MySQL para desde el programa decidir lo
que hacer dependiendo del error y con esta instrucción, se devolverá el
último error detectado por MySQL.
Ejemplo:
<?php
$con=mysql_connect("localhost","prueba","12345");
if($con){
…
mysql_close($con);
}
else{
echo "Error: conexión no realizada, respuesta del servidor: ".
mysql_error($con)."Nº de error".mysql_errno($con);
}
?>
● Seleccionar base de datos: En MySQL las tablas pertenecen a una base de datos,
por lo que lo habitual es seleccionar la base de datos para de ese modo trabajar
de forma cómoda con las tablas y vistas de dicha base de datos.
PHP permite seleccionar la base de datos mediante la función mysql_select_db
a la que se le pasa el nombre de la base de datos (entre comillas, es decir como
string) y, opcionalmente, el nombre del enlace de base de datos (si no se indica
este parámetro se usa el último enlace a base de datos realizado con
mysql_connect). Existen varias formas de realizarlo:
o Seleccionando la base de datos:
<?php
$db = 'curso_php';
mysql_select_db($db) or die('No pude seleccionar la base de datos');
?>
En esta instrucción nos da la oportunidad de detectar el error de
conexión con la base de datos
o Definiendo en la instrucción SQL:
<?php
$res=mysql_db_query("base_ejemplo", "SELECT * FROM TABLA");
?>
Distribución gratuita-Prohibida su venta
57
En esta instrucción se determina que base de datos es la que se está
ejecutando y la instrucción SQL, los resultados se almacenan en una
variable para posteriormente se haga uso de dichos resultados (o false, si
falla la instrucción SQL).
● Método para mostrar la información de las tablas: Los conjuntos de resultados
pueden ser pasados como parámetro a otras funciones. La más interesante
para poder analizar los resultados es mysql_fetch_array. Esta función permite
recorrer fila a fila los resultados de un conjunto de resultados.
o Ejecutar una consulta simple:
<?php
$res=mysql_db_query("base_ejemplo", "SELECT * FROM TABLA");
?>
o Captura en el arreglo los resultados:
<?php
while($registros[] = mysql_fetch_array($res));
?>
El array devuelto ($registros) será del tipo multidimensional, con un
formato como el siguiente:
<?php
$registros = array(
array('campo1'=>'valor', 'campo2'=>'valor', 'campo7'=>'valor'),
array('campo1'=>'valor', 'campo2'=>'valor', 'campo7'=>'valor'),
);
?>
Es decir, que será un array, conteniendo otro array por cada registro
encontrado.
● Ejecución de instrucciones SQL: Por medio de la ejecución de instrucciones
nativas de MySQL como INSERT INTO, DELETE o UPDATE, la respuesta tendrá
como resultado un result set. Ejemplos:
o Insertar nuevos valores:
<?php
$sql = "
INSERT INTO usuarios
(username, email)
VALUES ('juanperez',
'jperez@algundominio.ext')
";
$result = mysql_query($sql) or die('No pude ejecutar la consulta');
?>
Distribución gratuita-Prohibida su venta
58
Una vez que ya conoces la sintaxis ejemplificada para una inserción de datos, vamos a
verlo gráficamente en una página con un formulario igual a los que ya has revisado en
temas anteriores.
Primero la página del formulario y su forma gráfica.
Como puedes observar en las ilustraciones, se está diseñando a través de HTML un
formulario para registrar un autor en la base de datos y posteriormente se te muestra de
forma gráfica como se ve en el navegador. Ahora vamos a ver la página que recibe la
información y cómo se hace la conjugación de lenguaje SQL con PHP, de igual manera
como ya se te mostró en el ejemplo anterior.
Distribución gratuita-Prohibida su venta
59
En la imagen anterior, como te darás cuenta en la primera parte se está haciendo una
conexión a la base de datos “biblioteca y a través de código PHP se está insertando un
nuevo autor con los datos contenidos en las cajas de texto llamadas “txtname” y “txtpais”.
Veamos el resultado en nuestra tabla.
o Buscar información
Después de haber conocido la forma de insertar registros en cualquier tabla de una base
de datos, es muy necesario saber la forma en la que le vas a proporcionar información a
tu cliente o usuario.
Distribución gratuita-Prohibida su venta
60
Debes analizar cada fragmento de código para saber cuáles son las instrucciones que se
están ejecutando:
$consulta="select * from autores where nombre like '%$_GET[txtsearch]%'";
$resultado=mysqli_query($conexion, $consulta)or die("No se puede consultar");
En la primera línea se está pidiendo que se busquen todos los campos de la tabla autores,
que coinciden con el nombre que el usuario escriba en una caja de texto que vamos a
incluir en la misma página y en la segunda, se da la instrucción de ejecutar la consulta
enviando un mensaje de error si esta no se completara.
if (!$resultado)
{
echo " ";
die;
}
Con esta instrucción podrás indicarle que si no encuentra ningún resultado coincidente,
que envíe un espacio en blanco, evitando así que aparezca el mensaje de error
anteriormente explicado.
$contador=1;
$filas=mysqli_num_rows($resultado);
while ($contador<=$filas)
{
$arreglo=mysqli_fetch_array($resultado);
Distribución gratuita-Prohibida su venta
61
echo $arreglo ['nombre'];
echo "<br>";
$contador++;
}
Por último es necesario hacer un conteo de los registros que se encontraron, esto se hará
con la instrucción “mysqli_num_rows”, guardando el resultado en una variable llamada
$filas. Con un ciclo vamos a recorrer registro por registro para obtener la información,
esto se logra con la instrucción “mysqli_fetch_array”, que nos permitirá obtener los
registros y guardarlos en un arreglo. Por último debemos imprimir ese arreglo indicando
el campo que queremos visualizar, en este caso es el nombre.
Con la instrucción anterior deberíamos obtener la siguiente ventana de resultado.
Si observas se están imprimiendo todos los nombres, ya que no hemos especificado en
una caja de texto, el que requerimos. De igual manera únicamente nos parecen los
nombres de una manera no muy bien presentada, por lo que se hace necesario, primero
hacer lo mismo pero especificando los demás campos que deseamos ver y por último
insertar este código dentro de las celdas de una tabla para que haya mayor orden. Éste es
el resultado:
Distribución gratuita-Prohibida su venta
62
o Eliminar un registro
<?php
$sql = "DETELE FROM usuarios WHERE username='juanperez'";
$result = mysql_query($sql) or die('No pudo eliminar el registro');
?>
o Actualizar un dato:
<?php
$sql = "UPDATE usuarios SET email ='jperez@algundominio.COM'";
$result = mysql_query($sql) or die('No pudo actualizar el registro');
Comentarios
Publicar un comentario