Conexión

Nota: Al final de estas diapositivas hay una serie de ejercicios propuestos para los que terminen antes.

Establecer la conexión usando la extensión mysqli

$conexionPersonas = mysqli_connect('localhost', 'root', 'pp', 'personas')
	or die("hubo un error al conectar con la base de datos");

mysqli_set_charset($conexionPersonas, "utf8");

//mysqli_close($conexionPersonas);

Sentencias SQL

Convenio al escribir código SQL

Las instrucciones SQL deberían escribirse siempre en mayúsculas.

Crear una tabla

<?php
	include "../conexion.php";
	$sql = "CREATE TABLE IF NOT EXISTS persona(
	dni VARCHAR(9) NOT NULL PRIMARY KEY,
	nombre VARCHAR(30), 
	edad INT
	)";
	mysqli_query($conexionPersonas, $sql)
	or die(mysqli_error($conexionPersonas)."<br/>".$sql);
?>

Borrar una tabla

<?php
	
	include "../conexion.php";
	
	$sql = "DROP TABLE persona";
	
	mysqli_query($conexionPersonas, $sql)
	or die(mysqli_error($conexionPersonas)."<br/>".$sql); 			
				
?>

Insertar un registro

<?php
	include "../conexion.php";
	
	$sql = "INSERT INTO persona VALUES('53564783E','Juan', 27)";
	
	mysqli_query($conexionPersonas, $sql)	
	or die(mysqli_error($conexionPersonas)."<br/>".$sql); 			
			
?>

Ejercicio insercción

Crear usando phpmyadmin una tabla llamada “ejercicio_persona” e insertar mediante un formulario un registro de tres campos (nombre, altura y edad) recogidos de un formulario

Insercción múltiple

s
<?php
	include "../conexion.php";
	
	$sql = "INSERT INTO persona VALUES 
		('37485763P','Rodolfo', 24), 
		('37465829O','Sonia',79);";
	
	mysqli_query($conexionPersonas, $sql)
	or die(mysqli_error($conexionPersonas)."<br/>".$sql); 			
 				
?>

Eliminar registro

<?php
	
	include "../conexion.php";
	
	$sql = "DELETE FROM persona WHERE dni='37485763P'";

	mysqli_query($conexionPersonas, $sql)
	or die(mysqli_error($conexionPersonas)."<br/>".$sql); 			
		
?>

Actualizar registro


<?php

	include "../conexion.php";
	
	$sql = "UPDATE persona SET edad=84, nombre='Pablo' WHERE dni='37485763P'";

	mysqli_query($conexionPersonas, $sql)
	or die(mysqli_error($conexionPersonas)."<br/>".$sql); 			
				
?>

Consulta

<?php
	include "../conexion.php";

	$sql = "SELECT * FROM persona";	
	$result = mysqli_query($conexionPersonas, $sql)
	or die(mysqli_error($conexionPersonas)."<br/>".$sql); 			
	
	$row = mysqli_fetch_assoc($result);
	echo $row['nombre']; 
?>
broma consulta select

Consulta con bucle

<?php
	include "../conexion.php";

	$sql = "SELECT * FROM persona";	
	$result = mysqli_query($conexionPersonas, $sql)
	or die(mysqli_error($conexionPersonas)."<br/>".$sql); 			
	
	echo "<table>";
		while($row = mysqli_fetch_assoc($result)){
			echo "<tr><td>";
			echo $row['nombre'];
			echo "</td></tr>";
		}
	echo "</table>";
?>

Ejercicio - Consulta con bucle almacenando en una variable

Ejercicio combo

Cargar una combo con los valores que devuelva una consulta

Nota

Las sentencias SQL que modifican la base de datos deberían ser ubicadas al principio de la página.

Orden correcto para el código

Ejercicio eliminar registro

Pintar una tabla y un pequeño formulario en el que escribiendo alguno de los nombres que contiene la tabla y pulsando el botón de eliminar, podamos eliminar personas de la base de datos

Ejercicios alta, baja, modificación y consulta

Ejercicio lista invitados

Hacer cuatro páginas web para una lista de invitados. Una será el menú, otra para consultar los invitados, otra para dar de alta un nuevo invitado y otra para darlo de baja. La tabla que usaremos tendrá dos campos: nombre (VARCHAR) e ID (INT, AUTOINCREMENT, PK).

Después de hacer el alta, para que no se repita la inserción de datos al refrescar la página, una solución sencilla es utilizar la siguiente línea:

header('Location: index.php');

Ejercicio librería

Hacer cinco páginas web para una librería. Una será el menú, otra para consultar los libros, otra para dar de alta un nuevo libro, otra para darlo de baja y otra para modificarlo. La tabla que usaremos tendrá 3 campos: id(PRIMARY KEY, AUTOINCREMENT), titulo (VARCHAR), precio (FLOAT).

Ejercicio actualiza cuadro

Hacer una página web con un cuadro de texto y una combo en la que se muestra un listado de personas. Cuando la combo cambia de valor el cuadro de texto se actualiza con la edad de la persona.

Para enviar el formulario cuando cambie la combo, le pondré este atributo a la combo:

onchange="this.form.submit()"

hospital

Ejercicio hospital I

NOTAS: Cuando pulse el botón de eliminar, haré un redireccionamiento a la página de consulta utilizando:
header("location:index.html");
Estructura general del código php en modificación.php:
if(isset($_POST['modificaButton'])){
….
}else if(isset($_POST['eliminaButton'])){
….
}
$sql = "select * from paciente where id=$id";...

Date format

<?php 
/*Con el siguiente código podremos recuperar una fecha de la base de datos y reorganizarla como queramos*/
$originalDate = "2010-03-21";
$newDate = date("d-m-Y", strtotime($originalDate));
?>

Ejercicio hospital II

NOTAS:
La fecha será un campo de tipo DATE.
Cuando pulse el botón de eliminar, haré un redireccionamiento a la página de consulta utilizando:
header("location:index.html");
Estructura general del código php en modificación.php:

if(isset($_POST['modificaButton'])){
….
}else if(isset($_POST['eliminaButton'])){
….
}
$sql = "select * from paciente where id=$id";...

BREAK!

Ejercicio hospital III

Hacer 5 páginas web para un hospital. Una será el menú. Otra para consultar los pacientes, otra para dar de alta un nuevo paciente, otra para darlo de baja y otra modificar su registro. La tabla de pacientes tiene 4 campos: id(PRIMARY KEY, AUTOINCREMENT), nombre (VARCHAR), apellidos (VARCHAR), fecha_alta(DATE). La sección de modificación, la desarrollaremos en los 6 pasos que veremos a continuación.

Ejercicio listado de equipos y jugadores

Realizar una página en la que mostraremos los equipos de primera división en una tabla.

La Imagen de la tabla será un hipervínculo. Al pulsar sobre la imagen, llevaremos al usuario a otra página en la que verá los jugadores del equipo seleccionado.

Ejercicio tabla compleja

Descargar base de datos

Recuperar los valores de la base de datos e imprimirlos según se muestra en pantalla.

Para ello iremos cargando de información el contenido de cada celda.

Utilizaremos un solo bucle while que tendrá dentro condicionales if con los que iremos armando la tabla de salida. Al tener un solo bucle while, ahorraremos recursos.

if($row['consola']=="ps2")
	$juegosPS2 .= $row['nombre']."<br/>";

Esta es la tabla que usaremos en este ejercicio:

<table border="1">
    <tr>
        <td rowspan="3">Celda1
	</td>
        <td rowspan="2">Celda2
	</td>
        <td>Celda2
	</td>
    </tr>
    <tr>
        <td>Celda3
	</td>
    </tr>
    <tr>
	<td>Celda4
	</td>
	<td>Celda5
	</td>
    </tr>
</table>

Ejercicio calidades

Para que las capas amarillas contenidas en la tabla aparezcan alineadas con la parte baja de la misma usaremos el siguiente estilo:

<td style='vertical-align:bottom'>

Paginación

Paginar 1

<?php
include "../conexion.php";	
/*el primer parámetro es el registro en el que empezamos y el segundo es el incremento de paginación*/
$sql = "SELECT * FROM jugador LIMIT 0,20";
$result = mysqli_query($conexionFutbol, $sql)
or die("error en la consulta");

while($row = mysqli_fetch_assoc($result)){
    echo $row['nombre']."</br>";
}
?>

Paginar II - ejercicio

Recojer como parámetro de la URL la página a la que voy y a partir de ella, poner en la consulta el registro a partir del cual comienzo a leer.

Cada página tendrá veinte registros.

Ejercicio – Añadir tres enlaces que nos permitirán paginar.

<a href="index.php?pag=0">Pagina 1</a>

Ejercicio – Generar enlaces paginación

Utilizando el bucle for y la siguiente consulta, generar los enlaces de paginación.

SELECT count(*) AS 'num_reg' FROM jugador

Ejercicio mostrar sólo 10 enlaces

Mostrar sólo 10 enlaces, con centro en la página en la que estoy.

Nota:

Nos puede resultar útil usar esta línea de código:

$pagInicial = ($pag<5)?0:$pag-5;

Ejercicio - siempre 10

Al resolver el ejercicio anterior, si voy a la última página se me mostrarán 5 enlaces en lugar de diez. Hacer los ajustes necesarios para que se vean diez enlaces.

$pagInicial = ($pag<5)?0:$pag-5;
if($pagInicial+10>$numPags){
	$pagFinal = $numPags;
	$pagInicial = $numPags-10;
}else{
	$pagFinal = $pagInicial+10;
}

Ejercicio Optimización paginación

$sql = "SELECT SQL_CALC_FOUND_ROWS * FROM jugador LIMIT $registroAlQueVoy,$incrementoPaginacion";
$result = mysqli_query($conexionFutbol, $sql) or die("error en la consulta 1");


$sql2 = "SELECT FOUND_ROWS() AS 'num_reg'";
$result2 = mysqli_query($conexionFutbol, $sql2);

Ejercicio - resaltar página actual

Ejercicio – Añadir los botones anterior y siguiente, que paginan una vez hacia delante o una vez hacia detrás, según el caso

Ejercicio listado libros

Ejercicio listado libros I - consultar

Ejercicio listado libros II - insertar

Nota:
Pasarle parámetros al action de un formulario directamente en su URL funciona sólo si estamos enviando la información por POST. En caso contrario, la URL que definimos en el action y la que generamos dinámicamente entran en conflicto y los parámetros definidos explícitamente en el action del formulario no son enviados.
<form method="post" action="ServletController?action=alta"></p>

Para programar la opción de agregar un nuevo registro, tenemos dos opciones:

Ejercicio listado libros III - borrar

Lo más sencillo será utilizar un formulario para cada fila, de tal forma que abarque todas las celdas de cada registro.Esta opción no valida el código html.

Si escogemos la opción de utilizar un formulario que envuelva a toda la tabla podremos obtener la id del libro que queremos eliminar utilizando un

<input type="hidden" name="identificador">
en el que almacenaremos la id del libro correspondiente al botón pulsado. Para lograr esto utilizaremos en el onclick del botón de baja llamaré a la función baja(id):
function borra(id){
	document.getElementById("action").value = "baja";
	document.getElementById("idEnviada").value = id;
	document.getElementById("formulario").submit();
}

(No puede haber en un formulario dos elementos con el mismo name, así que generaré los name del formulario utilizando la id de cada libro ).

Ejercicio listado libros IV - Modificar

Podemos usar la siguiente función:

function modificar(id){
	document.getElementById("action").value = "modificar";
	document.getElementById("idEnviada").value = id;
	document.getElementById("modifica_titulo").value = document.getElementById("titulo_"+id).value;
	document.getElementById("modifica_precio").value = document.getElementById("precio_"+id).value;
	document.getElementById("formulario").submit();
}

Ejercicio listado libros V – paginar

Con paginación

Variables de sesión

login

Manejo de variables de sesión

login.php
<?php
    session_start();
    $_SESSION['sid'] = session_id();
    echo $_SESSION['sid'];
?>

<br/><br/><a href="pagina2.php">Ir a pagina 2</a>
pagina2.php
<?php 
	session_start();
	echo $_SESSION['sid']."</br>";
?>

session_start(); debe estar siempre en la primera línea de código, antes incluso que un retorno de carro o un espacio en blanco.

Inyección SQL

Ejemplo de inyección SQL

Nombre de usuario introducido: blabla' or 1=1

SELECT * FROM Users WHERE nombre = 'blabla' or 1=1

Ejercicio login

El usuario no podrá acceder a pagina2.php a no ser que se haya logueado anteriormente.

Para hacer log out:

<?php 
	session_start();
	session_destroy();
?>

Login

Nota!! Si el collate de una base de datos termina en ci (case insensitive), esta no distinguirá entre mayúsculas y minúsculas.

Ejercicio mensajería

Mensajería

Enviar un array

<?php 
if(isset($_REQUEST["enviar"])){
    $opt = $_REQUEST["opt"];
    foreach ($opt as $value) {
        echo $value."<br/>";
    }
}
 ?>
 <form action="#">
	<input type="checkbox" name="opt[]" value="aaaa">
	<input type="checkbox" name="opt[]" value="bbbb">
	<input type="checkbox" name="opt[]" value="cccc">
	<input type="submit" name="enviar">
 </form>

Ejercicio – crear un programa de mensajería

ejercicio mensajería con PHP y MySQL
mensaje
id remitente destinatario mensaje
1 1 1 Hola!
2 1 2 Qué pasa tron!
3 1 1 Hola Caracola
4 1 2 Te odio
usuario
id nombre pass
1 pp kk
2 kk kk

Consulta multitabla
$sql = "SELECT mensaje, nombre FROM mensaje, usuario WHERE mensaje.destinatario='$id' AND usuario.id=mensaje.remitente";

Ejercicio – al consultar los mensajes debe poder verse el autor de los mismos

Foro

Foro

Ejercicio – crear un foro

ejercicio foro con PHP y MySQL
usuario
id nombre pass
1 pp pp
2 kk kk
comentario
id id_usuario id_hilo comentario
1 2 7 es super guay!
2 2 8 En pablomonteserin.com los vendes muy buenos
hilo
id id_usuario nombre_hilo texto_hilo
7 1 Escoger ordenador Dónde comprar uno bueno
8 1 ¿Qué opinas de Ubuntu? Dudas sobre Ubuntu

Ejercicio – crear un foro con fechas

Añadiremos a las tablas de hilos y de comentarios un nuevo campo llamado fecha de tipo timestamp y utilizaremos la funcíón NOW(), de SQL.

Ejercicio – que se muestre el autor del hilo y del comentario

Ejercicios PHP y MySQL

Ejercicio checks

  1. Imprimir todas las checks.
  2. Recuerda el radio de la opción seleccionada.
  3. Tras enviar el formulario, las checks deben recordar el valor seleccionado.
  4. Debemos generar una cadena de texto con todos los valores enviados por el array de las checks separados por comas.
  5. Si pulsamos sobre “Enviar” habiendo seleccionado el radio de “Estadios” deben aparecer las características de los mismos.
  6. Recuperar también los jugadores.
    select JUGADORES.nombre 'nombreJugadores', EQUIPOS.nombre 'nombreEquipos' 
    from JUGADORES, EQUIPOS
    where JUGADORES.equipo_cod in(".$equiposCheckadosSeparadosPorComas.")
    and JUGADORES.equipo_cod=EQUIPOS.equipo_cod order by EQUIPOS.nombre";

Añadir paginación al ejercicio anterior

Usaremos cun código similar a este para marcar la página a la que vamos:


href='index.php?enviar=Enviar&opcion=jugadores®istroAlQueVoy=15&arrayDeEquipos[]=15,16'

Ejercicio - Contador

Hacer un contador de visitas que aproveche las funcionalidades de la modalidad AI (autoincrementado de la base de datos).

Para recuperar los datos usaremos:

select max(contador)'cuentaVisitas' from contador1;

Ejercicio – contador II

Ahora haremos un contador utilizando un sólo registro para almacenar la información (utilizando la sentencia sql update en vez de insert)

Ejercicio – contador III

Hacer un contador usando imágenes. Tener en cuenta que con la función substr puedo coger un trozo de una cadena de texto y con la función strlen puedo contar los caracteres de una cadena de texto.

Ejercicio contador IV

Cargaremos una hoja de estílos u otra dependiendo de si el contador contiene un número par o impar. Esta hoja de estílos hará que la única capa de nuestra página web se visalice en naranja cuando el contador sea par y en rosa cuando sea impar.

Ejercicio – contador V

El contador debe funcionar mediante la pulsación de un botón.

Ejercicio – el contador tendrá un include que contendrá todo el código php necesario para que pueda funcionar.

Ejercicio – Encapsular el código del ejercicio anterior en el método imprimir, que estará definido dentro del fichero 7_funciones.php