Nos proponemos, al igual que en el ejercicio anterior, hacer una consulta, pero en este caso, el usuario podrá intervenir, eligiendo qué campos querrá ver en la consulta.
Para ver el ejercicio en funcionamiento, hagan clic aquí.
En primer lugar hacemos un simple formulario html para que el usuario elija los campos:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="es" lang="es">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Lista de ciclistas</title>
</head>
<body>
<h1>Lista de ciclistas</h1>
<!-- Hacemos el formulario en el que el usuario elegirá los campos de la consulta -->
<h3>Elija los campos que desea ver en la consulta:</h3>
<form action="consulta2.php" method="post">
<ul>
<li><input type="checkbox" name="dorsal">Dorsal</li>
<li><input type="checkbox" name="nombre">Nombre</li>
<li><input type="checkbox" name="edad">Edad</li>
<li><input type="checkbox" name="nomequipo">Nombre del equipo</li>
<li><input type="checkbox" name="director">Director</li>
</ul>
<input type="submit" value="Ver datos">
</form>
<!-- Deberíamos validar por javascript que se elija al menos un campo. Se omite. -->
</body>
</html>
Ahora, vemos el archivo que realiza y muestra la consulta. Las explicaciones están como comentarios:
Archivo “consulta2.php”
<?php
require('conexion.php');
?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="es" lang="es">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Lista de ciclistas</title>
</head>
<body>
<h1>Lista de ciclistas</h1>
<!-- Mostraremos los resultados en una tabla, así que armamos el encabezado de la misma -->
<table>
<tr>
<?php
$cantcampos=0;
$tablaciclista=$tablaequipo=false;
//Según lo que haya elegido el usuario, se arma la variable $campos:
//Si $_POST['dorsal'] está definido:
if (isset($_POST['dorsal'])) {
$campos='c.dorsal';
//Muestro la celda de encabezado de la tabla.
echo '<th>Dorsal</th>';
//Indico que la tabla "ciclista", participa de la consulta.
$tablaciclista=true;
//Incremento el contador de campos
$cantcampos++;
}
//Si $_POST['dorsal'] está definido:
if (isset($_POST['nombre'])) {
//Si *no* es el primer campo...
if($cantcampos) {
$campos.=',c.nombre';
}
//En cambio, si se trata del 1er campo:
else {
$campos='c.nombre';
$tablaciclista=true;
}
echo '<th>Nombre</th>';
$cantcampos++;
}
// (Los que siguen son todos parecidos)
if (isset($_POST['edad'])) {
if($cantcampos) {
$campos.=',c.edad';
}
else {
$campos='c.edad';
$tablaciclista=true;
}
echo '<th>Edad</th>';
$cantcampos++;
}
if (isset($_POST['director'])) {
if($cantcampos) {
$campos.=',e.director';
}
else {
$campos='e.director';
}
$tablaequipo=true;
echo '<th>Director</th>';
$cantcampos++;
}
if (isset($_POST['nomequipo'])) {
if(!$cantcampos) {
$campos='e.nomequipo';
$tablaequipo=true;
}
elseif(!$tablaequipo) {
$campos.=',c.nomequipo';
}
else {
$campos.=',e.nomequipo';
}
echo '<th>Equipo</th>';
$cantcampos++;
}
echo '</tr>';
// Si $cantcampos es 0, quiere decir que el usuario no eligió ningún campo:
if(!$cantcampos) die('Error: Hay que elegir al menos un campo.');
//Se arma la parte de la consulta que va después del FROM
if ($tablaequipo && $tablaciclista) {
$tablas='equipo e, ciclista c where e.nomequipo=c.nomequipo';
}
elseif ($tablaequipo) {
$tablas='equipo e';
}
else {
$tablas='ciclista c';
}
//Finalmente, la consulta queda:
$sql="SELECT $campos from $tablas";
// PARA PROBAR, descomentar la siguiente línea:
// echo $sql;
//Nos conectamos a la BD (la función está en el archivo requerido "conexion.php".
$con=conectar();
//Hacemos la consulta:
$result=mysql_query($sql);
/*mysql_fetch_row es igual que mysql_fetch_array, pero devuelve un array únicamente indexado, es decir, que solo puede ser referenciado por número (ej: $fila[0]), pero no por nombre (ej: $fila['dorsal']): */
while($fila=mysql_fetch_row($result)) {
//Mostramos los datos en un renglón de la tabla:
echo '<tr>';
foreach ($fila as $valor) echo "<td>$valor</td>";
echo '</tr>';
}
//Cerramos la conexión:
mysql_close($con);
?>
</table>
</body>
</html>
El código anterior requiere el archivo “conexión.php”, cuyo código es:
Archivo conexion.php
<?php
function conectar() {
$conexion = mysql_connect("SERVIDOR", "USUARIO", "CONTRASEÑA") or die ("Error al conectar al servidor");
mysql_select_db("NOMBRE_DE_LA_BD") or die ("Error al conectar a la BD");
return $conexion;
}
?>