PHP Y MYSQL

Anuncio
mailxmail - Cursos para compartir lo que sabes
PHP y MySQL. Aplicaciones Web:
PHP y base de datos MySQL
(décima parte)
Autor: Johnny Zulca Mamani
1
mailxmail - Cursos para compartir lo que sabes
Presentación del curso
Programación de aplicaciones Web con PHP y MySQL. Ahora te enseñaremos a
conectar a una Base de Datos desde la Web con PHP. Conoce las funciones PHP para
manipulación de la Base de Datos MySQL. Aprende a realizar las consultas a la Base
de Datos MySQL desde la Web. También te enseñaremos, entre otros, a realizar la
actualización de datos desde la Web en una Base de Datos MySQL.
2
mailxmail - Cursos para compartir lo que sabes
1. Listado de funciones PHP para MySQL
PHP y Base de Datos MySQL
Listado de Funciones PHP para MySQL
Estas funciones le permiten acceder a servidores de base de datos MySQL. Puede
encontrar más información sobre MySQL en su página web http://wwwmysql.com.
3
mailxmail - Cursos para compartir lo que sabes
2. Conexión a una base de datos desde la web
Conectar a una Base de Datos desde la Web con PHP
Una de las características más importantes de PHP es su integración con diversos
motores de base de datos.
PHP está construido para generar en forma sencilla páginas Web dinámicas a partir
de información almacenda en la base de datos. A continuación mostramos las
funciones más importantes y ejemplos típicos de uso para una base MySQL.
Conexión a la base de datos
$db_link = mysql_connect("host", "usuario", "password");
opcionales: [host] [usuario] [password]
por ejemplo:
$db_link = mysql_connect("localhost", "root", "");
La función realiza la conexión al servidor de base de datos MySQL; devuelve false si
hubo algun error en la conexión o un link de conexión a la base si la conexión fue
exitosa, el link es un número que indica la sesión dentro de MySQL. Para finalizar la
conexión se debe utilizar la función:
mysql_close();
Selección de la base de datos a utilizar
Esta función configura cual es la base de datos que se utilizará por omisión. En este
caso el db_link a utilizar en esta función es el link que se obtuvo al ejecutar la
función mysql_connect.
La función mysql_select_db devuelve false si se encuentra algun error, por ejemplo
que no exista la base de datos.
mysql_select_db("nombre_base_datos", "db_link");
opcional: [db_link]
por ejemplo:
mysql_select_db("libreria", $dblink);
Cerrar la conexión
Esta función nos sirve para cerrar la conexión a la base de datos que se usa.
mysql_close($db_link);
opcinal: [db_link]
Liberar memoria despues de realizar una consulta
mysql_free_result($result);
4
mailxmail - Cursos para compartir lo que sabes
5
mailxmail - Cursos para compartir lo que sabes
3. Proyecto Librería Virtual
Proyecto Librería Virtual
Del proyecto de la librería virtual, hay un sección enfocada a la búsqueda de un
libro, para ello tenemos un formulario, donde se ingresan los datos requeridos para
la búsqueda. Y así se realizan las siguientes tareas desde que se realiza la petición y
nos retorno una respuesta:
- Lleva una petición web
- Una búsqueda mediante un formulario.
- El formulario llama a una página que le brinda los resultados.
- El motor PHP se conecta a la base de datos consulta la información y retorna una
respuesta datos.
Funciones PHP para manipular Base de Datos MySQL
Consultas a la base de datos
La función mysql_query devuelve falso en caso de que el query no pueda ejecutarse
(error de SQL) o bien un resultado (result set) en los casos que devuelve algun tipo
de dato como por ejemplo un select.
$result = mysql_query("consulta", "db_link");
opcinal: [db_link]
por ejemplo:
$result = mysql_query("update clientes set ciudad=´Lima´ where idcliente=2",
$db_link);
por ejemplo:
$query = "insert into clientes (nombre, direccion) values(`Pedro´,´Los Claveles
200´)";
$result = mysql_query($query, $db_link);
Cantidad de filas consultadas o modificadas
Filas Consultadas: Esta función devuelve la cantidad de filas que se obtuvieron
luego de ejecutar una instrucción de consulta como por ejemplo la función select.
$cantidad = mysql_num_rows($result);
por ejemplo:
$query = "select nombre, telefono from contactos where edad between 20 and
25 and sexo =´f´";
$result = mysql_query($query, $db_link);
$result = mysql_num_rows($result);
Filas Modificadas: Devuelve cuantos registros fueron afectados por una consulta
(query) con insert, update o delete.
$cantidad = mysql_affected_rows($db_link);
por ejemplo:
6
mailxmail - Cursos para compartir lo que sabes
por ejemplo:
$cuantos = mysql_affected_rows($db_link);
7
mailxmail - Cursos para compartir lo que sabes
4. Obtener registros de una consulta
Obtener registros de una consulta
Obtener datos en un result set
$var = mysql_fetch_rows($result_set);
por ejemplo:
$query = "select nombre, telefono from contactos where edad between 20 and
25 and sexo =´f´";
$result = mysql_query($query, $db_link);
$rs = mysql_fetch_rows($result); //obtiene el primer lemento del vector de
indice 0
//para extraer todos los elementos se debe recorrer este vector
while($rs = mysql_fetch_rows($result))
{
print("Columna 0: $rs[0] Columna 1: $rs[1]");
}
Obtener datos en un vector
$var = mysql_fetch_array(id_resultado, tipo_resultado);
tipo_resultado pude tomar los siguentes valores:
MYSQL_ASSOC: usted solo tendrá índices asociativos,
MYSQL_NUM: solo obtendrá los índices numéricos y
MYSQL_BOTH: obtendrá una matriz con índices asociativos y numéricos
$var = mysql_fetch_array($result);
por ejemplo:
$query = "select nombre, telefono from contactos where edad between 20 and
25 and sexo =´f´";
$result = mysql_query($query, $db_link);
$rs = mysql_fetch_array($result); //obtiene el primer elemento del vector de
indice 0
//para extraer todos los elementos se debe recorrer este vector asociativo
while($rs = mysql_fetch_array ($result))
{
print("Columna 0: $rs["nombre"]");
}
8
mailxmail - Cursos para compartir lo que sabes
5. Consultas a la Base de Datos MySQL desde la Web
(primera parte)
Hacer consultas a la Base de Datos MySQL desde la Web
Al realizar una búsqueda de un libro o libros que satisfacen cierto criterio de
búsqueda como el que sigue:
El código del formulario es el siguiente:
buscador.html - Una formulario para el ingreso de criterios de búsqueda: "tipo
búsqueda" y "termino a buscar"
<html>
<head>
<title>Catálogo de Búsqueda Librería Online</title>
</head>
<body>
<h1>Catálogo de Búsqueda Librería Online</h1>
<form action="resultados.php" method="post">
Elige Tipo de Búsqueda:<br>
<select name="tipobusqueda">
<option value="autor">Autor
<option value="titulo">Título
<option value="isbn">ISBN
</select>
<br>Escribe Término Búsqueda:<br>
<input name="terminobusqueda" type="text">
<br><input type="submit" value="Buscar">
</form>
</body>
</html>
Son necesarias estas funciones:
Función: conectarse a la base de datos
function db_connect()
{
$coneccion = mysql_pconnect("localhost", "root", "");
if (!$coneccion)
return false;
if (!mysql_select_db("libreria"))
return false;
return $coneccion;
}
9
mailxmail - Cursos para compartir lo que sabes
6. Consultas a la Base de Datos MySQL desde la Web
(segunda parte)
Función: obtener resultados en un array
function db_result_to_array($resultado)
{
$res_array = array();
for ($contador=0; $row = mysql_fetch_array($resultado); $contador++)
$res_array[$contador] = $row;
return $res_array;
}
Función: validar entradas de formulario.
function valida_entradas($form_vars)
{
foreach ($form_vars as $key => $value){
if (!isset($key) || ($value == ""))
return false;
}
return true;
}
Función: búsqueda de libros en la base de datos.
function search_libros($criterio, $termino_busqueda, &$num_libros)
{
$conn = db_connect();
$query = "select * from libros where ".$criterio." like
'%".$termino_busqueda."%' order by titulo asc";
$resultado = mysql_query($query);
if (!$resultado)
return false;
$num_libros = mysql_num_rows($resultado);
if ($num_libros == 0)
return false;
$resultado = db_result_to_array($resultado);
return $resultado;}
10
mailxmail - Cursos para compartir lo que sabes
7. Consultas a la Base de Datos MySQL desde la Web
(tercera parte)
Resultados.php - scritp php se hace la consulta a la base de datos y se
visualiza los resultados.
<html>
<head>
<title>Resultados de la Búsqueda en la Librería Online</title>
</head>
<body>
<h1>Resultados de la Búsqueda en la Librería Online</h1>
<?
if (!valida_entradas($_POST)){
echo "No has introducido los detalles de la busqueda. Por favor vuelve e
inténtalo de nuevo.";
exit;
}
$num_resultados = 0;
$libros_array = search_libros($_POST["tipobusqueda"],
trim($_POST["terminobusqueda"]), $num_resultados);
?>
<p>Número de libros encontrados: <? echo $num_resultados;?></p>
<?
if($num_resultados > 0)
{?
>
<table width="70%" border="1" cellpadding="4" cellspacing="0">
<tr><td>ISBN</td><td>Titulo</td><td>Autor</td><td>Precio</td></tr>
<?
foreach ($libros_array as $libro)
{
?>
<tr>
<td><? echo $libro["isbn"];?></td><td><? echo $libro["titulo"];?></td>
<td><? echo $libro["autor"];?></td><td><? echo
number_format($libro["precio"],2) ;?></td></tr>
<?
}
?>
</table>
<?
}?
>
</body>
</html>
11
mailxmail - Cursos para compartir lo que sabes
8. Actualización de datos desde la Web en una Base
de Datos MySQL (primera parte)
Actualizar datos desde la Web en una Base de Datos MySQL
Lo que vamos a realizar hoy es una actualización de datos para la tabla de usuarios
de la aplicación "Librería Online", donde lo que viene es la actualización del
password de un usuario en particular. Para este caso estaremos tocando el tema de
sessiones que explicaremos luego en otra sección.
form_cambiar_password.php -- El codigo es solo del formulario en que ingresamos
los datos necesarios para la practica
<?php
session_start();
$username = "admin";
$_SESSION["username"] = $username;
session_register("username");
?>
<html>
<head><title>Cambiar password</title></head>
<body>
<form action="cambiar_password.php" method="post">
<table>
<tr><td>Contraseña anterior:</td>
<td><input type="password" name="anterior_password" size="16"
maxlength="16"></td></tr>
<tr><td>Nueva Contraseña:</td>
<td><input type="password" name="nuevo_password" size="16"
maxlength="16"></td></tr>
<tr><td>Repite Nueva Contraseña:</td>
<td><input type="password" name="nuevo_password2" size="16"
maxlength="16"></td></tr>
<tr><td colspan="2"><input type="submit" value="Cambiar
Contraseña"></td></tr>
</table>
</form>
</body>
</html>
cambiar_password.php - En este formulario se lleva a cabo el proceso de
actualización de los datos directamente a la base de datos, a la tabla "usuarios".
12
mailxmail - Cursos para compartir lo que sabes
9. Actualización de datos desde la Web en una Base
de Datos MySQL (segunda parte)
Son necesarias estas funciones:
Funcion: conectarse a la base de datos
Funcion: busqueda y verificar usuario con su respectivo password
$conn = db_connect();
if (!$conn)
return 0;
$resultado = mysql_query("select * from usuarios where
usuario='".$username."' and contrasena = '".$password."'");
if (!$resultado)
return 0;
if (mysql_num_rows($resultado)>0)
return 1;
else
return 0;
Funcion: actualizar datos de usuario (password)
function cambiar_password($username, $anterior_password, $nuevo_password)
{
if (login($username, $anterior_password))
{
if (!($conn = db_connect()))
return false;
$resultado = mysql_query( "update usuarios set contrasena =
'".$nuevo_password."' where usuario = '".$username."'");
if (!$resultado)
return false;
else
return true;
}
else
return false;
}
<?
session_start();
?>
<html>
<head>
<title>Cambiar Password</title>
</head>
<body>
<?
$username = $_SESSION["username"];
$nuevo_password = $_POST["nuevo_password"];
$nuevo_password2 = $_POST["nuevo_password2"];
13
mailxmail - Cursos para compartir lo que sabes
$nuevo_password2 = $_POST["nuevo_password2"];
$anterior_password = $_POST["anterior_password"];
if ($nuevo_password!=$nuevo_password2)
echo "Contraseña escrita no era la misma. No cambiado.";
else
if (strlen($nuevo_password)>16 || strlen($nuevo_password)<6)
echo "Nueva contraseña debe estar entre 6 y 16 caracteres. Prueba de
nuevo.";
else{
if (cambiar_password($username, $anterior_password, $nuevo_password))
echo "Contraseña cambiada.";
else
echo "La contraseña no ha podido cambiarse.";
}
?>
</body>
</html>
14
mailxmail - Cursos para compartir lo que sabes
10. Borrar datos desde la web en una base de datos
MySQL (primera parte)
Borrar datos desde la Web en una Base de Datos MySQL
La práctica de este tema es también acerca de la tabla libros, aquí lo que haremos
es; de un listado de libros que se tengan en la base de datos, listados en una tabla
HTML, cada fila represntara los datos de un libro y además agregado un boton que
nos diga borrar este registro y pulsando este, nos enviará a otra página que haga el
proceso.
lista_libros.php - una tabla con todo el listado de libros.
Son necesarias estas funciones:
Función: conectarse a la base de datos
Función: Obtener libros almacenada en la base de datos
function get_libros() //todos los libros
{
$conn = db_connect();
$query = "select * from libros order by titulo asc";
$resultado = mysql_query($query);
if (!$resultado)
return false;
$num_libros = mysql_num_rows($resultado);
if ($num_libros ==0)
return false;
$resultado = db_result_to_array($resultado);
return $resultado;
}
<html>
<head>
<title>Listado de Libros</title>
</head>
<body>
<h2>Listado de Libros</h2>
<table width="70%" border="1" cellpadding="4" cellspacing="0">
<tr><td>ISBN</td><td>Titulo</td><td>Autor</td>
<td>Precio</td><td>Accion</td></tr>
<?
$libros_array=get_libros();
foreach ($libros_array as $libro)
{?
>
<tr>
<td><? echo $libro["isbn"];?></td>
<td><? echo $libro["titulo"];?></td>
<td><? echo $libro["autor"];?></td>
<td><? echo number_format($libro["precio"],2);?></td>
<td><input type="button" onclick="document.location.href='<? echo
15
mailxmail - Cursos para compartir lo que sabes
<td><input type="button" onclick="document.location.href='<? echo
"borrar_libro.php?isbn=".stripslashes($libro["isbn"]);?>' " value="eliminar">
</td>
</tr>
<?
}?
>
</table>
</body>
</html>
16
mailxmail - Cursos para compartir lo que sabes
11. Borrar datos desde la web en una base de datos
MySQL (segunda parte)
borrar_libro.php - la página que hace el proceso de eliminar un libro seleccionado
Son necesarias estas funciones:
Función: conectarse a la base de datos
Función: obtener resultados en un array
Función: obtener libros almacenada en la base de datos
Función: borrar libro de la tabla Libros en la base de datos
function borrar_libro($isbn)
{
if (!($conn = db_connect()))
return false;
$resultado = mysql_query( "delete from libros where isbn= '$isbn' ");
if (!$resultado)
return false;
else
return true;
}
<html>
<head>
<title>Listado de Libros</title>
</head>
<body>
<?
$isbn = $_GET["isbn"];
if(borrar_libro($isbn))
echo "Libro borrado.";
else
echo "No se ha podido borrar este libro de ISBN ".$isbn;
?>
<h2>Listado de Libros</h2>
<table width="70%" border="1" cellpadding="4" cellspacing="0">
<tr><td>ISBN</td><td>Titulo</td><td>Autor</td>
<td>Precio</td><td>Accion</td></tr>
<?
$libros_array=get_libros();
foreach ($libros_array as $libro)
{?
>
<tr>
<td><? echo $libro["isbn"];?></td>
<td><? echo $libro["titulo"];?></td>
<td><? echo $libro["autor"];?></td>
<td><? echo number_format($libro["precio"],2);?></td>
<td><input type="button" onclick="document.location.href='<? echo
"borrar_libro.php?isbn=".stripslashes($libro["isbn"]);?>' " value="eliminar">
</td>
17
mailxmail - Cursos para compartir lo que sabes
</td>
</tr>
<?
}?
>
</table>
</body>
</html>
18
mailxmail - Cursos para compartir lo que sabes
12. Añadir datos a la base de datos MySQL desde la
Web (primera parte)
Añadir datos a la base de datos MySQL desde la Web
form_agregar_libro.php - formulario para ingresar los datos del nuevo libro.
Son necesarias estas funciones:
Función: conectarse a la base de datos
Función: obtener resultados en un array
Función: obtener listado de categorías de la base de datos
function get_categorias()
{
$conn = db_connect();
$query = "select idcategoria, nombre from categorias";
$resultado = mysql_query($query);
if (!$resultado)
return false;
$num_cats = mysql_num_rows($resultado);
if ($num_cats == 0)
return false;
$resultado = db_result_to_array($resultado);
return $resultado;
}
<html>
<head>
<title>Agregar un Libro a Librería Online</title>
</head>
<body>
<h1>Agregar Nuevo Libro</h1>
<form action="agregar_libro.php" method="post">
<table>
<tr><td>ISBN:</td>
<td><input type="text" name="isbn" size="6"></td></tr>
<tr><td>Autor:</td>
<td><input type="text" name="autor" size="20"></td></tr>
<tr><td>Titulo:</td>
<td><input type="text" name="titulo" size="20"></td></tr>
<tr><td>Categoria:</td>
<td><select name="idcat">
<?
$cat_array=get_categorias();
foreach ($cat_array as $categoria)
{
?>
<option value="<? echo $categoria["idcategoria"];?>"><? echo
$categoria["nombre"];?></option>
<?
}
19
mailxmail - Cursos para compartir lo que sabes
}
?>
</select></td>
</tr>
<tr><td>Precio:</td>
<td><input type="text" name="precio" size="6"></td></tr>
<tr><td>Descripcion:</td>
<td><textarea name="descripcion" cols="20" rows="4"></textarea>
</td></tr>
<tr><td colspan="2">
<input type="submit" value="Agregar Libro" name="btnAgregar">
</td></tr>
</table>
</form>
</body>
</html>
20
mailxmail - Cursos para compartir lo que sabes
13. Añadir datos a la base de datos MySQL desde la
Web (segunda parte)
agregar_libro.php - script del proceso de agregar datos del nuevo libro.
Son necesarias estas funciones:
Función: conectarse a la base de datos
Función: obtener resultados en un array
Función: validar ntradas del formulario
Función: Obtener libros almacenada en la base de datos
Función: agregar nuevo libro
function agregar_libro($isbn, $titulo, $autor, $idcat, $precio, $descripcion)
{
$conn = db_connect();
$query = "select * from libros where isbn='$isbn'";
$resultado = mysql_query($query);
if (!$resultado || mysql_num_rows($resultado)!=0)
return false;
$query = "insert into libros values ('$isbn', '$autor', '$titulo', '$idcat', '$precio',
'$descripcion')";
$resultado = mysql_query($query);
if (!$resultado)
return false;
else
return true;
}
<html>
<head>
<title>Agregar un Libro a Librería Online</title>
</head>
<body>
<h1>Agregar Nuevo Libro</h1>
<?
if (valida_entradas($_POST))
{
if(agregar_libro($_POST["isbn"], $_POST["titulo"], $_POST["autor"],
$_POST["idcat"], $_POST["precio"], $_POST["descripcion"]))
echo "Libro ".$_POST["titulo"]." ha sido añadido a la base de datos.<br>";
else
echo "Libro ".$_POST["titulo"]." no ha podido ser añadido a la base de
datos.<br>";
}?
>
<h2>Listado de Libros</h2>
<table width="70%" border="1" cellpadding="4" cellspacing="0">
<tr><td>ISBN</td><td>Titulo</td><td>Autor</td><td>Precio</td></tr>
<?
$libros_array=get_libros();
21
mailxmail - Cursos para compartir lo que sabes
$libros_array=get_libros();
foreach ($libros_array as $libro)
{?
>
<tr>
<td><? echo $libro["isbn"];?></td>
<td><? echo $libro["titulo"];?></td>
<td><? echo $libro["autor"];?></td>
<td><? echo number_format($libro["precio"],2);?></td>
</tr>
<?
}?
>
</table>
</body>
</html>
NOTA: Con este capítulo hemos llegado al final del curso.
22
Descargar