Documentos de Académico
Documentos de Profesional
Documentos de Cultura
plantillas de los ejercicios que incluyen el código HTML "fijo" para ahorrarle trabajo.
En algunas páginas de ejercicios hay disponibles páginas con soluciones comentadas.
En la página de Soluciones de los ejercicios puede descargar las soluciones completas
de todos los ejercicios.
Para el ejemplo comentado aquí, puede descargar las plantillas del ejercicio o las
soluciones completas.
Solución
La página .php escrita por el alumno tiene que generar el mismo código HTML que el
ejemplo. Una manera de abordar la elaboración de la página .php es probar el ejemplo y
copiar el código HTML que genera el ejemplo en la página .php.
En ese código podemos dividir tres partes:
el bloque inicial, desde DOCTYPE hasta <h1> que será siempre el mismo, y que
ya está incluido en la plantilla.
las dos líneas que muestran los datos escritos por el usuario (el nombre y la
edad), que habrá que generar en un fragmento PHP.
el bloque final, desde el enlace de vuelta al formulario hasta el final, que será
siempre el mismo, y que también está incluido en la plantilla.
A continuación se muestra el código fuente con las líneas que habrá que generar en un
fragmento PHP resaltadas con un borde:
<!DOCTYPE html>
<html lang="es">
<head>
<meta charset="utf-8">
<title>
Ejemplo de recogida de datos sin comprobación (Resultado).
Recogida de datos. Ejemplos.
Ejercicios. PHP. Bartolomé Sintes Marco. www.mclibre.org
</title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="stylesheet" href="mclibre-php-ejercicios.css" title="Color">
</head>
<body>
<h1>Ejemplo de recogida de datos sin comprobación (Resultado)</h1>
<p>Su nombre es <strong>Pepito Conejo</strong>.</p>
<footer>
<p class="ultmod">
Última modificación de esta página:
<time datetime="2016-10-26">26 de octubre de 2016</time>
</p>
<p class="licencia">
Este programa forma parte del curso <strong><a
href="https://www.mclibre.org/consultar/php/">Programación
web en PHP</a></strong> de <a href="https://www.mclibre.org/"
rel="author" >Bartolomé Sintes Marco</a>.<br>
El programa PHP que genera esta página se distribuye bajo
<a rel="license" href="http://www.gnu.org/licenses/agpl.txt">licencia
AGPL 3 o posterior</a>.
</p>
</footer>
</body>
</html>
<body>
<h1>Ejemplo de recogida de datos sin comprobación (Resultado)</h1>
<?php
function recoge($var, $m = "")
{
if (!isset($_REQUEST[$var])) {
$tmp = (is_array($m)) ? [] : "";
} elseif (!is_array($_REQUEST[$var])) {
$tmp = trim(htmlspecialchars($_REQUEST[$var], ENT_QUOTES, "UTF-
8"));
} else {
$tmp = $_REQUEST[$var];
array_walk_recursive($tmp, function (&$valor) {
$valor = trim(htmlspecialchars($valor, ENT_QUOTES, "UTF-8"));
});
}
return $tmp;
}
$nombre = recoge("nombre");
$edad = recoge("edad");
<footer>
<p class="ultmod">
Última modificación de esta página:
<time datetime="2016-10-26">26 de octubre de 2016</time>
</p>
<p class="licencia">
Este programa forma parte del curso <strong><a
href="https://www.mclibre.org/consultar/php/">Programación
web en PHP</a></strong> de <a href="https://www.mclibre.org/"
rel="author" >Bartolomé Sintes Marco</a>.<br>
El programa PHP que genera esta página se distribuye bajo
<a rel="license" href="http://www.gnu.org/licenses/agpl.txt">licencia
AGPL 3 o posterior</a>.
</p>
</footer>
</body>
</html>
Por supuesto, la página podría contener un único fragmento PHP en la que todo el
código HTML fuera generado por instrucciones print.
El fragmento PHP que recoge y muestra los datos tiene la siguiente estructura:
Recogida de datos:
o primero se define la función recoge() comentada en la lección Recogida
de datos.
o después se guardan los dos datos del formulario en dos variables
utilizando la función recoge(). El nombre de las variables coincide con el
nombre de los controles (en este caso, $nombre y $edad)
Presentación de resultados:
o Como no hacemos ninguna comprobación, se escribe el mensaje
incluyendo las variables (aunque contengan información absurda).
$nombre = recoge("nombre");
$edad = recoge("edad");
print " <p>Su nombre es <strong>$nombre</strong>.</p>\n";
print "\n";
print " <p>Su edad es <strong>$edad</strong> años.</p>\n";
?>
Ejemplo
parte superior derecha de cada ejemplo hay un icono de enlace ( ) para abrir el
ejemplo en otra pestaña y poder ver fácilmente su código fuente HTML. Ese código
fuente se puede copiar y pegar en las páginas creadas por el alumno.
A continuación se muestra un ejemplo de ejercicio.
Solución
La página .php escrita por el alumno tiene que generar el mismo código HTML que el
ejemplo. Una manera de abordar la elaboración de la página .php es probar el ejemplo y
copiar el código HTML que genera el ejemplo en la página .php.
En ese código podemos dividir cuatro partes:
el bloque inicial, desde DOCTYPE hasta <h1>, que será siempre el mismo, y
que ya está incluido en la plantilla.
las tres líneas que muestran los avisos de error o los datos escritos por el usuario
(el nombre, la edad y la aceptación), que habrá que generar en un fragmento
PHP.
el bloque final, desde el enlace de vuelta al formulario hasta el final, que será
siempre el mismo, y que también está incluido en la plantilla.
A continuación se muestra el código fuente con las líneas que habrá que generar en
fragmentos PHP resaltadas con un borde:
<!DOCTYPE html>
<html lang="es">
<head>
<meta charset="utf-8">
<title>
Ejemplo de recogida de datos con comprobación (Resultado).
Recogida de datos. Ejemplos.
Ejercicios. PHP. Bartolomé Sintes Marco. www.mclibre.org
</title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="stylesheet" href="mclibre-php-ejercicios.css" title="Color">
</head>
<body>
<h1>Ejemplo de recogida de datos con comprobación (Resultado)</h1>
<footer>
<p class="ultmod">
Última modificación de esta página:
<time datetime="2016-10-26">26 de octubre de 2016</time>
</p>
<p class="licencia">
Este programa forma parte del curso <strong><a
href="https://www.mclibre.org/consultar/php/">Programación
web en PHP</a></strong> de <a href="https://www.mclibre.org/"
rel="author" >Bartolomé Sintes Marco</a>.<br>
El programa PHP que genera esta página se distribuye bajo
<a rel="license" href="http://www.gnu.org/licenses/agpl.txt">licencia
AGPL 3 o posterior</a>.
</p>
</footer>
</body>
</html>
<body>
<h1>Ejemplo de recogida de datos con comprobación (Resultado)</h1>
<?php
function recoge($var, $m = "")
{
if (!isset($_REQUEST[$var])) {
$tmp = (is_array($m)) ? [] : "";
} elseif (!is_array($_REQUEST[$var])) {
$tmp = trim(htmlspecialchars($_REQUEST[$var], ENT_QUOTES, "UTF-
8"));
} else {
$tmp = $_REQUEST[$var];
array_walk_recursive($tmp, function (&$valor) {
$valor = trim(htmlspecialchars($valor, ENT_QUOTES, "UTF-8"));
});
}
return $tmp;
}
$nombre = recoge("nombre");
$edad = recoge("edad");
$acepto = recoge("acepto");
$nombreOk = false;
$edadOk = false;
$aceptoOk = false;
if ($nombre == "") {
print " <p class=\"aviso\">No ha escrito su nombre.</p>\n";
print "\n";
} else {
$nombreOk = true;
}
if ($edad == "") {
print " <p class=\"aviso\">No ha escrito su edad.</p>\n";
print "\n";
} elseif (!is_numeric($edad)) {
print " <p class=\"aviso\">No ha escrito la edad como número.</p>\n";
print "\n";
} elseif (!ctype_digit($edad)) {
print " <p class=\"aviso\">No ha escrito la edad como número entero
positivo.</p>\n";
print "\n";
} elseif ($edad < 1 || $edad > 120) {
print " <p class=\"aviso\">La edad no está entre 1 y 120
años.</p>\n";
print "\n";
} else {
$edadOk = true;
}
if ($acepto == "") {
print " <p class=\"aviso\">No ha indicado si acepta las
condiciones.</p>\n";
print "\n";
} elseif ($acepto != "Sí" && $acepto != "No") {
print " <p class=\"aviso\">Por favor, indique si acepta o no las
condiciones.</p>\n";
print "\n";
} else {
$aceptoOk = true;
}
<footer>
<p class="ultmod">
Última modificación de esta página:
<time datetime="2016-10-26">26 de octubre de 2016</time>
</p>
<p class="licencia">
Este programa forma parte del curso <strong><a
href="https://www.mclibre.org/consultar/php/">Programación
web en PHP</a></strong> de <a href="https://www.mclibre.org/"
rel="author" >Bartolomé Sintes Marco</a>.<br>
El programa PHP que genera esta página se distribuye bajo
<a rel="license" href="http://www.gnu.org/licenses/agpl.txt">licencia
AGPL 3 o posterior</a>.
</p>
</footer>
</body>
</html>
Por supuesto, la página podría contener un único fragmento PHP en la todo el código
HTML fuera generado por instrucciones print.
El fragmento PHP que recoge y genera los datos tiene la siguiente estructura:
Recogida de datos:
o primero se define la función recoge() comentada en la lección Recogida
de datos.
o después se guardan los dos datos del formulario en dos variables
utilizando la función recoge(). El nombre de las variables coincide con el
nombre de los controles (en este caso, $nombre y $edad)
Comprobación de datos:
o primero se definen unas variables lógicas auxiliares, cuyo nombre es el
del control y la terminación Ok (en este caso, $nombreOk y $edadOk).
El valor (true o false) representa si el dato escrito por el usuario es
correcto o no. Estas variables se inicializan al valor false (es decir, se
empieza suponiendo que los datos escritos por el usuario son
incorrectos).
o después hay bloques if ... elseif ... else ... (uno por dato enviado por el
usuario) en el que se comprueba si el dato escrito por el usuario presenta
algún problema. Cada posible problema se evalúa en un condición. Si el
dato no presenta ningún problema, la variable lógica auxiliar se modifica
a true (es decir, que si no presenta ningún problema, se supone que el
dato es correcto).
$nombre = recoge("nombre");
$edad = recoge("edad");
$acepto = recoge("acepto");
$nombreOk = false;
$edadOk = false;
$aceptoOk = false;
if ($nombre == "") {
print " <p class=\"aviso\">No ha escrito su nombre.</p>\n";
print "\n";
} else {
$nombreOk = true;
}
if ($edad == "") {
print " <p class=\"aviso\">No ha escrito su edad.</p>\n";
print "\n";
} elseif (!is_numeric($edad)) {
print " <p class=\"aviso\">No ha escrito la edad como número.</p>\n";
print "\n";
} elseif (!ctype_digit($edad)) {
print " <p class=\"aviso\">No ha escrito la edad como número entero
positivo.</p>\n";
print "\n";
} elseif ($edad < 1 || $edad > 120) {
print " <p class=\"aviso\">La edad no está entre 1 y 120
años.</p>\n";
print "\n";
} else {
$edadOk = true;
}
if ($acepto == "") {
print " <p class=\"aviso\">No ha indicado si acepta las
condiciones.</p>\n";
print "\n";
} elseif ($acepto != "Sí" && $acepto != "No") {
print " <p class=\"aviso\">Por favor, indique si acepta o no las
condiciones.</p>\n";
print "\n";
} else {
$aceptoOk = true;
}