Tutorial PHP Parte 2
Tutorial PHP Parte 2
Tutorial PHP Parte 2
<html>
<head>
<title>Problema</title>
</head>
<body>
<?php
function mostrartitulo($men)
{
echo "<h1 style=\"text-
align:center\">"; echo $men;
echo "</h1>";
}
mostrartitulo("Primer titulo");
echo "<br>";
mostrartitulo("Segundo
segundo");
?>
</body>
</html>
Para mostrar el titulo centrado utilizamos el elemento h1 de HTML y definimos un estilo
centrado para el mismo.
Si vemos la función, notamos que lo más trabajoso es definir todos los elementos HTML
para crear el titulo. Es importante notar que en PHP para introducir las dobles comillas
dentro de un string debemos anteceder el carácter ' \'; para introducir el carácter ' \'
debemos escribir \\.
Las llamadas a la función las hacemos por medio de su nombre y pasamos el único
parámetro que requiere:
mostrartitulo("Primer titulo");
echo "<br>";
mostrartitulo("Segundo segundo");
Las funciones nos permiten tener un programa más ordenado y facilitan la reutilización
del código.
Más adelante veremos como hacer archivos con rutinas comunes a muchas páginas.
Una función puede retornar un dato, supongamos que necesitamos una función que nos
retorne el promedio de dos valores, el código sería:
<html>
<head>
<title>Problema</title>
</head>
<body>
<?php
function retornarpromedio($valor1,$valor2)
{
$pro=$valor1/$valor2
; return $pro;
}
$v1=100;
$v2=50;
$p=retornarpromedio($v1,$v2)
; echo $p;
?>
</body>
</html>
Cuando una función retorna un dato debemos emplear la palabra clave return seguida
del valor que devuelve.
$p=retornarpromedio($v1,$v2);
Si queremos que retorne más de un dato debemos emplear parámetros por referencia.
Supongamos que necesitamos ahora que una función nos retorne el cuadrado y cubo de
un número:
<html>
<head>
<title>Problema</title>
</head>
<body>
<?php
function cuadradocubo($valor,&$cuad,&$cub)
{
$cuad=$valor*$valor;
$cub=$valor*$valor*$valor;
}
cuadradocubo(2,$c1,$c2);
echo "El cuadrado de 2 es:".
$c1."<br>"; echo "El cubo de 2 es:".
$c2;
?>
</body>
</html>
Es decir, cuando le antecedemos el carácter ampersand al parámetro, es por referencia.
function cuadradocubo($valor,&$cuad,&$cub)
{
$cuad=$valor*$valor;
$cub=$valor*$valor*$valor;
}
Problema propuesto.
Confeccionar un formulario que solicite la carga del nombre de usuario y su clave en dos
oportunidades. En la página que se procesan los datos del formulario implementar una
función que imprima un mensaje si las dos claves ingresadas son distintas.
Uno de los empleos principales de PHP es el acceso a una base de datos en el servidor.
Las operaciones básicas se hacen empleando como lenguaje el SQL.
PHP implementa distintas funciones según la base de datos a emplear. Existen funciones
actualmente para acceder a los siguientes servidores de bases de datos:
- MySQL
- Microsoft SQL Server
- Oracle
- PostgreSQL
- SysBase
- FrontBase
- Informix
- InterBase
- Ingres
- mSQL
- dBase
- SQLlite
Para crear una base de datos el WampServer instala también un programa codificado en
PHP que nos permite interactuar con el MySQL.
Este programa se llama PHPMyAdmin (como veremos nos permite crear las bases de
datos, tablas, índices, usuarios etc.)
Para iniciar el PHPMyAdmin debemos presionar el botón izquierdo del mouse sobre el
ícono del WampServer que se encuentra en la bandeja del sistema:
En el PHPMyAdmin ingresamos:
Es importante también hacer notar que en el campo codigo debemos marcar en Indice el
valor "primary" y tildar la columna A_I:
Por último presionamos el botón guardar y ya tenemos la tabla "alumnos" creada en la
base de datos "base1":
Luego de crear una base de datos y sus tablas (Vamos a trabajar con la base de datos
ya creada: base1, que contiene la tabla alumnos), veremos como agregar registros.
Necesitamos dos páginas para este proceso, una será el formulario de carga de datos y
la siguiente será la que efectúe la inserción en la tabla.
<html>
<head>
<title>Problema</title>
</head>
<body>
<h1>Alta de Alumnos</h1>
<form action="pagina2.php"
method="post"> Ingrese nombre:
<input type="text"
name="nombre"><br> Ingrese mail:
<input type="text"
name="mail"><br> Seleccione el
curso:
<select name="codigocurso">
<option value="1">PHP</option>
<option value="2">ASP</option>
<option value="3">JSP</option>
</select>
<br>
<input type="submit" value="Registrar">
</form>
</body>
</html>
El formulario es bastante similar a los que venimos desarrollando en puntos anteriores,
tal vez lo distinto es cómo emplearemos el control "select" del curso a desarrollar:
<select name="codigocurso">
<option value="1">PHP</option>
<option value="2">ASP</option>
<option value="3">JSP</option>
</select>
Cada opción tiene su respectivo valor (en este caso los números 1,2 y 3) y los textos a
mostrar PHP, ASP y JSP. El dato que se envía a la otra página es el código de curso
(esto debido a que definimos la propiedad value).
<html>
<html>
<head>
<title>Problema</title>
</head>
<body>
<?php
$conexion=mysqli_connect("localhost","root","","base1")
or die("Problemas con la conexión");
mysqli_query($conexion,"insert into
alumnos(nombre,mail,codigocurso) values
('$_REQUEST[nombre]','$_REQUEST[mail]',
$_REQUEST[codigocurso])")
or die("Problemas en el
select".mysqli_error($conexion)); mysqli_close($conexion);
$conexion=mysqli_connect("localhost","root","","base1") or
die("Problemas con la conexión");
La función mysqli_connect se conecta a una base de datos de tipo MySql, el primer
parámetro es la dirección donde se encuentra el gestor de base de datos (en este caso
en el mismo servidor por lo que indicamos esto con "localhost), el segundo parámetro
es el nombre de usuario de la base de datos ("root" en nuestro caso, que es el usuario
por defecto que crea MySql para el administrador), seguidamente indicamos la clave del
usuario root (por defecto al instalar el Wamp se crea con clave vacía) y por último
indicamos el nombre de la base de datos a conectarnos (en nuestro ejemplo ya creamos
la base de datos llamada: base1 que tiene la tabla alumnos)
En caso de haber algún error en la llamada a la función la misma retorna false por lo que
se ejecuta la instrucción seguida del operador or, en nuestro caso llamamos a la función
die que detiene la ejecución del programa y muestra el mensaje por pantalla.
Los campos de tipo varchar SQL requiere que encerremos entre comillas simples, esto
sucede para el nombre y el mail; en cambio, para el codigocurso esto no debe ser así.
Otra cosa a tener en cuenta es que los subíndices de los vectores asociativos no deben ir
entre simples comillas ya que se encuentran dentro de un string, sino se producirá un
error.
En caso que MySql detecte un error, retorna false esta función, por lo que se ejecuta la
instrucción posterior al or, es decir la función die que mostrará el error generado por
MySql llamando a la función mysqli_error().
Debemos pasar desde PHP un string con este comando para que MySQL lo ejecute y
retorne todas las filas de la tabla alumnos.
Veremos entonces como recuperar los datos almacenados en la tabla alumnos de la base
de datos "base1".
<?php
$conexion=mysqli_connect("localhost","root","","base1") or
die("Problemas con la conexión");
while ($reg=mysqli_fetch_array($registros))
{
echo "Codigo:".$reg['codigo']."<br>";
echo "Nombre:".$reg['nombre']."<br>";
echo "Mail:".$reg['mail']."<br>";
echo "Curso:";
switch ($reg['codigocurso']) {
case 1:echo "PHP";
break;
case 2:echo "ASP";
break;
case 3:echo "JSP";
break;
}
echo "<br>";
echo "<hr>";
}
mysqli_close($conexion);
?>
</body>
</html>
La primer parte es similar a lo visto hasta ahora, es decir nos conectamos con el
servidor de base de datos y seleccionamos la base de datos base1:
$conexion=mysqli_connect("localhost","root","","base1") or
die("Problemas con la conexión");
El comando SQL que nos permite recuperar datos de tablas se llama SELECT. Indicamos
los campos a rescatar de la tabla y luego de la palabra clave from indicamos el nombre
de la tabla:
while ($reg=mysqli_fetch_array($registros))
Para rescatar registro a registro los datos obtenidos por el select debemos llamar a la
función mysqli_fetch_array. Esta función retorna un vector asociativo con los datos del
registro rescatado, o false en caso de no haber más registros. Es decir que si retorna un
registro se almacena en el vector $reg y la condición del while se valida como verdadero
y pasa a ejecutarse el bloque del while:
{
echo "Codigo:".$reg['codigo']."<br>";
echo "Nombre:".$reg['nombre']."<br>";
echo "Mail:".$reg['mail']."<br>";
echo "Curso:";
switch ($reg['codigocurso']) {
case 1:echo "PHP";
break;
case 2:echo "ASP";
break;
case 3:echo "JSP";
break;
}
echo "<br>";
echo "<hr>";
}
El bloque del while muestra el contenido del registro rescatado por la función
mysql_fetch_array. Como vemos, para rescatar cada campo accedemos mediante el
vector asociativo $reg indicando como subíndice un campo indicado en el select:
$reg['codigo']
Cada vez que llamamos a la función mysqli_fetch_array nos retorna el siguiente
registro.
Problema propuesto.
Confeccionar un programa que recupere los datos de la tabla cursos de la base de datos
base1. Mostrar el código de curso y su nombre.
El proceso de consulta de datos de una tabla es similar al del listado, la diferencia es que
se muestra sólo aquel o aquellos que cumplen la condición por la que buscamos.
Haremos un programa que nos permita consultar los datos de un alumno ingresando su
mail para su búsqueda. Tengamos en cuenta que no puede haber dos alumnos con el
mismo mail, por lo que la consulta nos puede arrojar uno o ningún registro.
<html>
<head>
<title>Problema</title>
</head>
<body>
<form action="pagina2.php"
method="post"> Ingrese el mail del
alumno a consultar:
<input type="text" name="mail">
<br>
<input type="submit" value="buscar">
</form>
</body>
</html>
Por otro lado tenemos el archivo "pagina2.php" que se encarga de buscar el mail
ingresado en el formulario:
<html>
<head>
<title>Problema</title>
</head>
<body>
<?php
$conexion=mysqli_connect("localhost","root","","base1")
or die("Problemas con la conexión");
if ($reg=mysqli_fetch_array($registros))
{
echo "Nombre:".
$reg['nombre']."<br>"; echo
"Curso:";
switch ($reg['codigocurso'])
{ case 1:echo "PHP";
break;
case 2:echo "ASP";
break;
case 3:echo "JSP";
break;
}
}
else
{
echo "No existe un alumno con ese mail.";
}
mysqli_close($conexion);
?>
</body>
</html>
Lo más importante está en el comando select:
Acá es donde con la clausula where seleccionamos sólo el registro que cumple con la
condición que el mail sea igual al que ingresamos.
Como sólo puede haber un registro que cumpla la condición, llamamos a la función
mysqli_fetch_array en un if y no una estructura repetitiva como el listado:
if ($reg=mysqli_fetch_array($registros))
En caso de retornar un vector asociativo la condición del if se verifica como verdadera y
pasa a mostrar los datos, en caso de retornar false se ejecuta el else.
Problema propuesto.
Para eliminar filas en una tabla debemos utilizar el comando SQL delete.
<html>
<head>
<title>Problema</title>
</head>
<body>
<form action="pagina2.php"
method="post"> Ingrese el mail del
alumno a borrar:
<input type="text" name="mail">
<br>
<input type="submit" value="buscar">
</form>
</body>
</html>
Por otro lado tenemos el archivo "pagina2.php" que se encarga de buscar el mail
ingresado en el formulario y en caso que exista se procede a borrarlo:
<html>
<head>
<title>Problema</title>
</head>
<body>
<?php
$conexion=mysqli_connect("localhost","root","","base1")
or die("Problemas con la conexión");
$registros=mysqli_query($conexion, "select codigo from alumnos
where mail='$_REQUEST[mail]'") or
die("Problemas en el select:".mysqli_error($conexion));
if ($reg=mysqli_fetch_array($registros))
{
mysqli_query($conexion,"delete from alumnos where
mail='$_REQUEST[mail]'") or
die("Problemas en el select:".mysqli_error($conexion));
echo "Se efectuó el borrado del alumno con dicho mail.";
}
else
{
echo "No existe un alumno con ese mail.";
}
mysqli_close($conexion);
?>
</body>
</html>
En esta segunda página efectuamos dos llamadas a la función mysqli_query, una para
consultar si existe el mail ingresado y otra para efectuar el borrado del registro
respectivo. Si no existe el mail ingresado mostramos un mensaje de tal situación.
Problema propuesto.
Vimos en el concepto anterior que podemos borrar una o más filas de una tabla
indicando en el where del comando SQL delete la condición que debe cumplir la fila para
ser borrada.
Para borrar todos los registros de una tabla debemos llamar al comando delete de SQL
sin disponer la cláusula where.
<html>
<head>
<title>Problema</title>
</head>
<body>
<?php
$conexion=mysqli_connect("localhost","root","","base1")
or die("Problemas con la conexión");
De las actividades con una tabla esta es la más larga. Vamos a resolverlo
implementando tres páginas, la primera un formulario de consulta del mail de un
alumno, la segunda otro formulario que nos permita cargar su mail modificado y la
última registrará el cambio en la tabla.
<html>
<head>
<title>Problema</title>
</head>
<body>
<form action="pagina2.php"
method="post"> Ingrese el mail del
alumno:
<input type="text" name="mail"><br>
<input type="submit" value="buscar">
</form>
</body>
</html>
La segunda página es la más interesante y con conceptos nuevos:
<html>
<head>
<title>Problema</title>
</head>
<body>
<?php
$conexion=mysqli_connect("localhost","root","","base1")
or die("Problemas con la conexión");
<form action="pagina3.php"
method="post"> Ingrese nuevo mail:
<input type="text" name="mailnuevo" value="<?php echo $reg['mail'] ?>">
<br>
<input type="hidden" name="mailviejo" value="<?php echo $reg['mail'] ?>">
<input type="submit" value="Modificar">
</form>
<?php
}
else
echo "No existe alumno con dicho mail";
?>
</body>
</html>
Lo primero que podemos observar es que si el if se verifica verdadero se ejecuta un
bloque que contiene código HTML:
if ($reg=mysqli_fetch_array($registros))
{
?>
<form action="pagina3.php" method="post">
Ingrese nuevo mail:
<input type="text" name="mailnuevo" value="<?php echo $reg['mail'] ?>">
<br>
<input type="hidden" name="mailviejo" value="<?php echo $reg['mail'] ?
>">
<input type="submit" value="Modificar">
</form>
<?php
}
Si queremos que el control text se cargue con el mail ingresado en el formulario anterior
debemos cargar la propiedad value con dicho valor:
oblema</title>
Problema propuesto.
Efectuar la modificación del nombre del curso de la tabla "cursos". Para la búsqueda
ingresar el código de curso.
En un primer paso vimos como efectuar el alta en la tabla alumnos, ahora vamos a ver
como resolver el problema del alta de un alumno seleccionando el curso de la tabla
"cursos".
<html>
<head>
<title>Problema</title>
</head>
<body>
<form action="pagina2.php"
method="post"> Ingrese nombre:
<input type="text"
name="nombre"><br> Ingrese mail:
<input type="text"
name="mail"><br> Seleccione el
curso:
<select name="codigocurso">
<?php
$conexion=mysqli_connect("localhost","root","","base1")
or die("Problemas con la conexión");
$registros=mysqli_query($conexion,"select codigo,nombrecurso
from cursos") or
die("Problemas en el
select:".mysqli_error($conexion)); while
($reg=mysqli_fetch_array($registros))
{
echo "<option value=\"$reg[codigo]\">$reg[nombrecurso]</option>";
}
?>
</select>
<br>
<input type="submit" value="Registrar">
</form>
</body>
El algoritmo es similar a cuando trabajamos con una tabla, pero el control "select" lo
cargamos con los datos de la tabla "cursos":
while ($reg=mysqli_fetch_array($registros))
{
echo "<option value=\"$reg[codigo]\">$reg[nombrecurso]</option>";
}
Dentro del while generamos todas las opciones que contiene el "select" imprimiendo el
campo nombrecurso y asociando el campo codigo a la propiedad value(que es en
definitiva el código que necesitamos rescatar en la otra página)
Tengamos en cuenta que cuando queremos imprimir una comilla doble dentro de un
string en PHP debemos escaparla con el caracter \
La página que efectúa el insert es exactamente la misma que vimos anteriormente:
<html>
<head>
<title>Problema</title>
</head>
<body>
<?php
$conexion=mysqli_connect("localhost","root","","base1")
or die("Problemas con la conexión");
Ahora veremos como imprimir todos los alumnos inscriptos a los cursos junto al nombre
del curso donde está inscripto. Los datos se encuentran en las tablas "alumnos" y
"cursos".
En caso de no recordar los conceptos de relaciones de tablas en SQL pueden repasar los
mismos en el tutorial de MySQL Ya.
<html>
<head>
<title>Problema</title>
</head>
<body>
<?php
$conexion=mysqli_connect("localhost","root","","base1") or
die("Problemas con la conexión");
while ($reg=mysqli_fetch_array($registros))
{
echo "Codigo:".$reg['codigo']."<br>";
echo "Nombre:".$reg['nombre']."<br>";
echo "Mail:".$reg['mail']."<br>";
echo "Curso:".
$reg['nombrecurso']."<br>"; echo "<hr>";
}
mysqli_close($conexion);
?>
</body>
Hay varias cosas nuevas cuya sintaxis necesitamos analizar, la primera es como hacer el
apareo con la tabla cursos:
Luego de las palabras claves inner join, indicamos la tabla que necesitamos aparear,
podemos crear un alias de una tabla mediante la palabra clave as. En el resto de la
consulta, en vez de indicar el nombre de la tabla, hacemos referencia al
alias(generalmente un nombre más corto).
Seguidamente de la palabra clave on, indicamos los campos por los que apareamos las
tablas, en nuestro caso el codigo de la tabla cursos con el codigocurso de la tabla
alumnos.
Otro punto a tener en cuenta es indicar en el select que campos debemos rescatar de las
tablas, es decir, indicarle a que tabla pertenece en el caso que tengan el mismo nombre:
En este caso rescatamos el código del alumno (y no el código de curso). Debemos crear
un alias si dos tablas tienen el mismo nombre de campo para evitar confusión; como
ocurre aquí con el campo codigo de las tablas alumnos y cursos. También creamos un
alias para la tabla alumnos.
Cuando rescatamos los datos y los mostramos en la página, hacemos referencia al alias
del campo:
while ($reg=mysqli_fetch_array($registros))
{
echo "Codigo:".$reg['codigo']."<br>";
echo "Nombre:".$reg['nombre']."<br>";
echo "Mail:".$reg['mail']."<br>";
echo "Curso:".$reg['nombrecurso']."<br>";
echo "<hr>";
}
Problema propuesto.
Hay en MySQL funciones que nos permiten contar registros, calcular sumas, promedios,
obtener valores máximos y mínimos. Veamos la función count.
<html>
<head>
<title>Problema</title>
</head>
<body>
<?php
$conexion=mysqli_connect("localhost","root","","base1") or
die("Problemas con la conexión");
El select no tiene cláusula where ya que debemos contar todos los alumnos y no los de
algún curso en particular.
$reg=mysqli_fetch_array($registros);
Problema propuesto.
Confeccionar un programa que muestre por pantalla los nombres de todos los cursos y
al final la cantidad total de cursos.
Para resolver este problema tenemos que plantear tres páginas, una donde ingresemos
el mail del alumno, la segunda donde se pueda cambiar el curso y por última una que
permita modificar la tabla "alumnos" con el nuevo curso seleccionado.
La primer página de ingreso del mail es:
<html>
<head>
<title>Problema</title>
</head>
<body>
<form action="pagina2.php"
method="post"> Ingrese el mail del
alumno:
<input type="text" name="mail"><br>
<input type="submit" value="buscar">
</form>
</body>
</html>
La segunda página y la más importante en cuanto a novedades es la siguiente:
<html>
<head>
<title>Problema</title>
</head>
<body>
<?php
$conexion=mysqli_connect("localhost","root","","base1") or
die("Problemas con la conexión");
La primera consulta de la tabla alumnos es para verificar si existe un alumno con el mail
ingresado por teclado:
Para que aparezca seleccionado el curso actual debemos inicializar lo marca option con
el texto selected. Es decir que el if dentro del while se verifica verdadero una solo vez.
<html>
<head>
<title>Problema</title>
</head>
<body>
<?php
$conexion=mysqli_connect("localhost","root","","base1")
or die("Problemas con la conexión");
$registros=mysqli_query($conexion,"update alumnos
set
codigocurso=$_REQUEST[codigocurso]
where mail='$_REQUEST[mailviejo]'") or
die("Problemas en el
select:".mysqli_error($conexion)); echo "El curso fue
modificado con exito";
?>
</body>
Problema propuesto.
Entre las muchas posibilidades que nos brinda SQL, una es agrupar registros y obtener
información resumida de tablas.
<html>
<head>
<title>Problema</title>
</head>
<body>
<?php
$conexion=mysqli_connect("localhost","root","","base1")
or die("Problemas con la conexión");
Hay varias partes importantes en este código; primero, en el select indicamos que
cuente la cantidad de registros de la tabla "alumnos":
Como necesitamos rescatar el nombre del curso hacemos el apareo con la tabla
"cursos":
group by alu.codigocurso"
Con esta cláusula se hace un corte de control por cada grupo de registros que tienen el
mismo código de curso almacenado.
Luego mostramos el nombre de curso con la cantidad de inscriptos para dicho curso:
while ($reg=mysqli_fetch_array($registros))
{
echo "Nombre del curso:".$reg['nombrecurso']."<br>";
echo "Cantidad de inscriptos:".$reg['cantidad']."<br>";
echo "<hr>";
}
Problema propuesto.
31 - Parámetros en un hipervínculo.
Hasta ahora hemos visto como enviar datos de una página a otra mediante formularios.
Otra forma muy utilizada que complementa la anterior es como parámetro en un
hipervínculo.
Confeccionaremos una página que muestre tres hipervínculos, cada uno tiene por
objetivo mostrar en una página las tablas de multiplicar del 2, del 3 o la del 5.
La primer página es un archivo HTML puro, ya que sólo disponemos las marcas de
hipervínculos:
<html>
<head>
<title>Problema</title>
</head>
<body>
<A href="pagina2.php?tabla=2">Tabla del 2</A> <br>
<A href="pagina2.php?tabla=3">Tabla del 3</A> <br>
<A href="pagina2.php?tabla=5">Tabla del 5</A>
</body>
</html>
Es decir, luego del caracter "?" indicacamos el nombre del parámetro y seguidamente el
valor del mismo.
La página que rescata el valor pasado como parámetro es la siguiente:
<html>
<head>
<title>Problema</title>
</head>
<body>
<?php
echo "Listado de la tabla del $_REQUEST[tabla]
<br>"; for($f=1;$f<=10;$f++)
{
$valor=$f*$_REQUEST['tabla']
; echo $valor."-";
}
?>
</body>
</html>
Es decir que con el mismo vector asociativo $_REQUEST recuperamos los datos enviados
por parámetro en la llamada a la página.
Problema propuesto.
Confeccionar un programa que muestre una página con todos los nombres de la tabla
"cursos". Los nombres deben aparecer como hipervínculos a otra página que deberá
mostrar todos los alumnos inscriptos a dicho curso. Como parámetro en el hipervínculo,
pasar el código de curso.
32 - Paginación de registros.
En situaciones en las cuales una consulta retorna muy muchos datos, en vez de
enviarlos todos al navegador, se puede enviar un conjunto limitado de registros. Luego,
mediante hipervínculos, ver el resto de datos. Por ejemplo, cuando hacemos búsquedas
con el servidor google, generalmente no nos retorna todas las direcciones donde se
encuentran los resultados buscados, nos retorna páginas con 10 enlaces por página
(pensemos el tiempo de transferencia si nos retornara 1.000.000 de enlaces).
<?php
if (isset($_REQUEST['pos']))
$inicio=$_REQUEST['pos']
; else
$inicio=0;
?>
<html>
<head>
<title>Problema</title>
</head>
<body>
<?php
$conexion=mysqli_connect("localhost","root","","base1") or
die("Problemas con la conexión");
$registros=mysqli_query($conexion,"select alu.codigo as
codigo,
nombre,
mail,
codigocurso,
nombrecurso
from alumnos as alu
inner join cursos as cur on
cur.codigo=alu.codigocurso
limit $inicio,2") or
die("Problemas en el select:".mysqli_error($conexion));
$impresos=0;
while ($reg=mysqli_fetch_array($registros))
{
$impresos++;
echo "Codigo:".$reg['codigo']."<br>";
echo "Nombre:".$reg['nombre']."<br>";
echo "Mail:".$reg['mail']."<br>";
echo "Curso:".$reg['nombrecurso']."<br>";
echo "<hr>";
}
if ($inicio==0)
echo "anteriores ";
else
{
$anterior=$inicio-2;
echo "<a href=\"pagina1.php?pos=$anterior\">Anteriores </a>";
}
if ($impresos==2)
{
$proximo=$inicio+2;
echo "<a href=\"pagina1.php?pos=$proximo\">Siguientes</a>";
}
else
echo "siguientes";
mysqli_close($conexion)
;
?>
</body>
</html>
La función isset retorna verdadero si existe la variable que le pasamos como parámetro,
en este caso le estamos pasando la componente pos del vector asociativo $_REQUEST.
Cuando llamamos por primera vez a esta página, lo hacemos : pagina1.php sin
parámetros, por lo que el if se verifica como falso. Es decir la variable $inicio se carga
con el valor 0.
Otro concepto importante es la cláusula limit que es propia del gestor MySQL. Mediante
esta cláusula limitamos la cantidad de registros que retorna el select. El primer valor del
limit indica a partir de cual registro y el segundo la cantidad de registros. Es decir si un
select sin limit retorna 100 registro, luego utilizando por ejemplo la sintaxis limit 50,25
nos retornará, de esa lista de 100 registros, a partir del registro de la posición 50, 25
registros.
En nuestro problema indicamos que retorne desde valor que tenga la variable $inicio y
como cantidad 2 (páginas con 2 registros):
$registros=mysqli_query($conexion,"select alu.codigo as
codigo,
nombre,
mail,
codigocurso,
nombrecurso
from alumnos as alu
inner join cursos as cur on
cur.codigo=alu.codigocurso
limit $inicio,2") or
die("Problemas en el select:".mysqli_error($conexion));
$impresos=0;
while ($reg=mysqli_fetch_array($registros))
{
$impresos++;
echo "Codigo:".$reg['codigo']."<br>";
echo "Nombre:".$reg['nombre']."<br>";
echo "Mail:".$reg['mail']."<br>";
echo "Curso:".$reg['nombrecurso']."<br>";
echo "<hr>";
}
Ahora vemos dónde dispondremos los hipervínculos, hacia adelante o atrás:
if ($inicio==0)
echo "anteriores ";
else
{
$anterior=$inicio-2;
echo "<a href=\"pagina1.php?pos=$anterior\">Anteriores </a>";
}
Si la variable $inicio vale 0 significa que no hay registros antes de éste, por lo que sólo
mostramos un texto "anteriores". En caso que la variable $inicio sea distinta de 0, se
ejecuta el else, donde disponemos un hipervínculo con la misma página e inicializando el
parámetro pos con el valor de $inicio menos 2.
Si el contador $impresos tiene el valor 2 significa que posiblemente hay más registros
por mostrar y debemos disponer un hipervínculo con la misma página pero inicializando
el parámetro pos con el valor de $inicio más 2:
if ($impresos==2)
{
$proximo=$inicio+2;
echo "<a href=\"pagina1.php?pos=$proximo\">Siguientes</a>";
}
else
echo "siguientes";
Problema propuesto.
Confeccionar un programa que muestre los registros de la tabla "cursos" con páginas de
3 registros.
Se necesita en muchas ocasiones este algoritmo, por ejemplo para subir fotos,
documentos, programas, etc.
Veamos los puntos que tenemos que respetar cuando efectuamos el upload de archivos:
Se define una nueva propiedad para la etiqueta form, con esta indicamos que dentro del
formulario de carga se envían archivos. Hay que tener mucho cuidado cuando tipeamos
esta propiedad, si nos equivocamos en algún caracter el proceso de upload no
funcionará.
<html>
<head>
<title>Problema</title>
</head>
<body>
<?php
copy($_FILES['foto']['tmp_name'],$_FILES['foto']['name']);
echo "La foto se registro en el servidor.<br>";
$nom=$_FILES['foto']
['name']; echo "<img
src=\"$nom\">";
?>
</body>
</html>
Cuando se ejecuta esta página, ya está almacenado en el servidor el archivo, en una
carpeta temporal. Ahora nos hace falta copiar el mismo a la carpeta donde se encuentra
nuestra página (en definitiva nuestro sitio de internet). Para esto llamamos a la función
copy:
copy($_FILES['foto']['tmp_name'],$_FILES['foto']['name']);
$nom=$_FILES['foto']['name'];
echo "<img src=\"$nom\">";
Problema propuesto.
Confeccionar un programa que permita hacer multiples upload con una página (por
ejemplo que permita seleccionar hasta 3 archivos)