En esta página se muestran una parte de las soluciones de los ejercicios Sesiones (2).
Si lo prefiere, puede descargar unas posibles soluciones completas de estos ejercicios.
Para hacer estos ejercicios, se recomienda seguir el recorrido de la aplicación, suponiendo que el usuario introduce datos. Pero una vez completada la aplicación hay que comprobar desde el principio (cerrando el navegador previamente) que la aplicación funciona correctamente (es decir, que la aplicación tiene en cuenta que la primera vez que se ejecuta, todavía no hay datos).
Nota: La diferencia entre las dos soluciones propuestas para este ejercicio es que la solución B sigue el procedimiento recomendado en estos apuntes de crear una variable auxiliar $xxOk por cada variable que recoge un control del formulario, mientras que la solución A no utiliza esa variable auxiliar ya que en este caso solamente se recoge un control.
La página 1 del ejercicio debe mostrar el último texto escrito por el usuario, texto que es recogido por la segunda página. Para compartir esa información (el texto) entre ambas páginas recurriremos a una variable de sesión, por ejemplo $_SESSION["texto"].
Este podría ser el orden en que se iría realizando este ejercicio:
sesiones-2-1-1.php
<?php
// Accedemos a la sesión5
session_name("sesiones-2-1");
session_start();
?>
<!DOCTYPE html>
// ...
<body>
<h1>Formulario Texto 1 (Formulario)</h1>
<?php
// Si hay un texto guardado en la sesión, lo mostramos 6
if (isset($_SESSION["texto"])) {
print " <p>El último texto escrito es: <strong>$_SESSION[texto]</strong>.</p>\n"; 4
print "\n";
}
?>
<form action="sesiones-2-1-2.php" method="get">
<p>Escriba texto:</p>
// ...
sesiones-2-1-2.php
<?php
// Accedemos a la sesión 3
session_name("sesiones-2-1");
session_start();
?>
<!DOCTYPE html>
// ...
<body>
<h1>Formulario Texto 1 (Resultado)</h1>
<?php
// Función de recogida de datos 1
function recoge($key, $type = "")
{. . .
if (!is_string($key) && !is_int($key) || $key == "") {
trigger_error("Function recoge(): Argument #1 (\$key) must be a non-empty string or an integer", E_USER_ERROR);
} elseif ($type !== "" && $type !== []) {
trigger_error("Function recoge(): Argument #2 (\$type) is optional, but if provided, it must be an empty array or an empty string", E_USER_ERROR);
}
$tmp = $type;
if (isset($_REQUEST[$key])) {
if (!is_array($_REQUEST[$key]) && !is_array($type)) {
$tmp = trim(htmlspecialchars($_REQUEST[$key]));
} elseif (is_array($_REQUEST[$key]) && is_array($type)) {
$tmp = $_REQUEST[$key];
array_walk_recursive($tmp, function (&$value) {
$value = trim(htmlspecialchars($value));
});
}
}
return $tmp;
}
// Recogemos el texto
$texto = recoge("texto");
// Comprobamos el texto y escribimos avisos si es necesario
if ($texto == "") {
print " <p class=\"aviso\">No ha escrito su nombre.</p>\n";
print "\n";
} else {2
// Si el texto es válido, guardamos el texto en la sesión ...
$_SESSION["texto"] = $texto;
// y lo mostramos
print " <p>El texto es: <strong>$texto</strong>.</p>\n";
print "\n";
}
?>
<p><a href="sesiones-2-1-1.php">Volver a la primera página.</a></p>
// ...
Nota: La diferencia entre las dos soluciones propuestas para este ejercicio es que la solución B sigue el procedimiento recomendado en estos apuntes de crear una variable auxiliar $xxOk por cada variable que recoge un control del formulario, mientras que la solución A no utiliza esa variable auxiliar ya que en este caso solamente se recoge un control.
Se muestra únicamente la parte de la segunda página en la que aparece la variable auxiliar $textoOk.
sesiones-2-1-b-2.php
<?php
// ...
// Recogemos el texto
$texto = recoge("texto");
$textoOk = false;
// Comprobamos el texto y escribimos avisos si es necesario
if ($texto == "") {
print " <p class=\"aviso\">No ha escrito su nombre.</p>\n";
print "\n";
} else {
$textoOk = true;
}
// Si el texto es válido,
if ($textoOk) {
// guardamos el texto en la sesión
$_SESSION["texto"] = $texto;
// y lo mostramos
print " <p>El texto es: <strong>$texto</strong>.</p>\n";
print "\n";
}
?>
<p><a href="sesiones-2-1-b-1.php">Volver a la primera página.</a></p>
// ...
Nota: La diferencia entre las dos soluciones propuestas para este ejercicio es que en la solución A $_SESSION["texto"] nunca es vacío, es decir, antes de que el usuario escriba texto en el formulario $_SESSION["texto"] no existe, mientras que en la solución B $_SESSION["texto"] existe siempre, pero tiene un valor vacío hasta que el usuario escribe texto en el formulario.
Este podría ser el orden en que se iría realizando este ejercicio:
sesiones-2-2-1.php
<?php
// Accedemos a la sesión 6
session_name("sesiones-2-2");
session_start();
?>
<!DOCTYPE html>
// ...
<body>
<h1>Formulario Texto 2 (Formulario)</h1>
<?php
// Si hay un texto guardado en la sesión, lo mostramos 7
if (isset($_SESSION["texto"])) {
print " <p>El texto es: <strong>$_SESSION[texto]</strong>.</p>\n"; 5
print "\n";
}
?>
<form action="sesiones-2-2-2.php" method="get">
<p>Escriba texto:</p>
// ...
sesiones-2-2-2.php
<?php
// Accedemos a la sesión 3
session_name("sesiones-2-2");
session_start();
// Función de recogida de datos 1
function recoge($key, $type = "")
{. . .
if (!is_string($key) && !is_int($key) || $key == "") {
trigger_error("Function recoge(): Argument #1 (\$key) must be a non-empty string or an integer", E_USER_ERROR);
} elseif ($type !== "" && $type !== []) {
trigger_error("Function recoge(): Argument #2 (\$type) is optional, but if provided, it must be an empty array or an empty string", E_USER_ERROR);
}
$tmp = $type;
if (isset($_REQUEST[$key])) {
if (!is_array($_REQUEST[$key]) && !is_array($type)) {
$tmp = trim(htmlspecialchars($_REQUEST[$key]));
} elseif (is_array($_REQUEST[$key]) && is_array($type)) {
$tmp = $_REQUEST[$key];
array_walk_recursive($tmp, function (&$value) {
$value = trim(htmlspecialchars($value));
});
}
}
return $tmp;
}
// Recogemos el texto
$texto = recoge("texto");
// Si el texto no es vacío, lo guardamos en la sesión 2
if ($texto != "") {
$_SESSION["texto"] = $texto;
}
// Volvemos al formulario 4
header("Location:sesiones-2-2-1.php");
Nota: La diferencia entre las dos soluciones propuestas para este ejercicio es que en la solución A $_SESSION["texto"] nunca es vacío, es decir, antes de que el usuario escriba texto en el formulario $_SESSION["texto"] no existe, mientras que en la solución B $_SESSION["texto"] existe siempre, pero tiene un valor vacío hasta que el usuario escribe texto en el formulario.
Este podría ser el orden en que se iría realizando este ejercicio:
sesiones-2-2-b-1.php
<?php
// Accedemos a la sesión 1
session_name("sesiones-2-2-b");
session_start();
// Si no existe la variable de sesión, la creamos vacía 2
if (!isset($_SESSION["texto"])) {
$_SESSION["texto"] = "";
}
?>
<!DOCTYPE html>
// ...
<body>
<h1>Formulario Texto 2 (Formulario)</h1>
<?php// Si hay un texto no vacío guardado en la sesión, lo mostramos 3
if ($_SESSION["texto"] != "") {
print " <p>El último texto escrito es: <strong>$_SESSION[texto]</strong>.</p>\n";
print "\n";
}
?>
<form action="sesiones-2-2-b-2.php" method="get">
<p>Escriba texto:</p>
// ...
sesiones-2-2-b-2.php
<?php
// Accedemos a la sesión 4
session_name("sesiones-2-2-b");
session_start();
// Si no existe la variable de sesión, la creamos vacía 5
if (!isset($_SESSION["texto"])) {
$_SESSION["texto"] = "";
}
// Función de recogida de datos 6
function recoge($key, $type = "")
{. . .
if (!is_string($key) && !is_int($key) || $key == "") {
trigger_error("Function recoge(): Argument #1 (\$key) must be a non-empty string or an integer", E_USER_ERROR);
} elseif ($type !== "" && $type !== []) {
trigger_error("Function recoge(): Argument #2 (\$type) is optional, but if provided, it must be an empty array or an empty string", E_USER_ERROR);
}
$tmp = $type;
if (isset($_REQUEST[$key])) {
if (!is_array($_REQUEST[$key]) && !is_array($type)) {
$tmp = trim(htmlspecialchars($_REQUEST[$key]));
} elseif (is_array($_REQUEST[$key]) && is_array($type)) {
$tmp = $_REQUEST[$key];
array_walk_recursive($tmp, function (&$value) {
$value = trim(htmlspecialchars($value));
});
}
}
return $tmp;
}
// Recogemos el texto
$texto = recoge("texto");
// Si el texto no es vacío, lo guardamos en la sesión 7
if ($texto != "") {
$_SESSION["texto"] = $texto;
}
// Volvemos al formulario 8
header("Location:sesiones-2-2-b-1.php");
Este ejercicio es parecido al anterior. La diferencia es que si la palabra escrita por el usuario es incorrecta, el formulario muestra un mensaje de error y la palabra incorrecta en la caja de texto para su corrección.
Este podría ser el orden en que se iría realizando este ejercicio:
sesiones-2-3-1.php
<?php
// Accedemos a la sesión 8
session_name("sesiones-2-3");
session_start();
?>
<!DOCTYPE html>
// ...
<body>
<h1>Formulario Palabra en mayúsculas (Formulario)</h1>
<form action="sesiones-2-3-2.php" method="get">
<?php
// Si no hemos detectado un error y hay guardada una palabra en la sesión ... 11
if (!isset($_SESSION["error"]) && isset($_SESSION["palabra"])) {
// ... mostramos la palabra
print " <p>Ha escrito una palabra en mayúsculas: <strong>$_SESSION[palabra]</strong>.</p>\n";
print "\n";
}
print " <p>Escriba una palabra en mayúsculas:</p>\n";
print "\n";
// Si hemos detectado un error 9
if (isset($_SESSION["error"])) {
// Mostramos el control, añadiendo el aviso e incluyendo el valor incorrecto en el control
print " <p>\n";
print " <label>\n";
print " Escriba una palabra en mayúsculas:\n";
print " <input type=\"text\" name=\"palabra\" value=\"$_SESSION[palabra]\" size=\"20\" maxlength=\"20\">\n";
print " </label>\n";
print " <span class=\"aviso\">$_SESSION[error]</span>\n";
print " </p>\n";
print "\n";
} else {
// Si no hemos detectado un error, lo mostramos... 10
print " <p>\n";
print " <label>\n";
print " Escriba una palabra en mayúsculas:\n";
print " <input type=\"text\" name=\"palabra\" size=\"20\" maxlength=\"20\">\n";
print " </label>\n";
print " </p>\n";
print "\n";
}
?>
// ...
sesiones-2-3-2.php
<?php
// Accedemos a la sesión 3
session_name("sesiones-2-3");
session_start();
// Función de recogida de datos 1
function recoge($key, $type = "")
{. . .
if (!is_string($key) && !is_int($key) || $key == "") {
trigger_error("Function recoge(): Argument #1 (\$key) must be a non-empty string or an integer", E_USER_ERROR);
} elseif ($type !== "" && $type !== []) {
trigger_error("Function recoge(): Argument #2 (\$type) is optional, but if provided, it must be an empty array or an empty string", E_USER_ERROR);
}
$tmp = $type;
if (isset($_REQUEST[$key])) {
if (!is_array($_REQUEST[$key]) && !is_array($type)) {
$tmp = trim(htmlspecialchars($_REQUEST[$key]));
} elseif (is_array($_REQUEST[$key]) && is_array($type)) {
$tmp = $_REQUEST[$key];
array_walk_recursive($tmp, function (&$value) {
$value = trim(htmlspecialchars($value));
});
}
}
return $tmp;
}
// Recogemos la palabra
$palabra = recoge("palabra");
// Guardamos la palabra en la sesión 2
$_SESSION["palabra"] = $palabra;
// Comprobamos la palabra
if ($palabra == "") {
// Si no se recibe palabra, guardamos en la sesión el mensaje de error 4
$_SESSION["error"] = "No ha escrito ninguna palabra";
} elseif (!ctype_upper($palabra)) {
// Si la palabra está en minúsculas, guardamos en la sesión el mensaje de error 5
$_SESSION["error"] = "No ha escrito la palabra en mayúsculas";
} else {
// Si la palabra es correcta, borramos el error anterior que pudiera haber en la sesión 6
unset($_SESSION["error"]);
}
// Volvemos al formulario 7
header("Location:sesiones-2-3-1.php");
Esta solución establece tres variables de sesión en vez de las dos de la solución anterior: el mensaje de error, la palabra correcta y la palabra incorrecta.
Este podría ser el orden en que se iría realizando este ejercicio:
sesiones-2-3-b-1.php
<?php
// Accedemos a la sesión 8
session_name("sesiones-2-3-b");
session_start();
?>
<!DOCTYPE html>
// ...
<body>
<h1>Formulario Palabra en mayúsculas (Formulario)</h1>
<form action="sesiones-2-3-b-2.php" method="get">
<?php
//Si hay guardada una palabra en la sesión ... 12
if (isset($_SESSION["palabra"])) {
// ... mostramos la palabra
print " <p>Ha escrito una palabra en mayúsculas: <strong>$_SESSION[palabra]</strong>.</p>\n";
print "\n";
}
print " <p>Escriba una palabra en mayúsculas:</p>\n";
print "\n";
if (isset($_SESSION["error"], $_SESSION["intento"])) {
// Si hemos detectado un error y el usuario había escrito una palabra para corregir 9
// Mostramos el control, añadiendo el aviso e incluyendo el valor incorrecto en el control
print " <label>\n";
print " Escriba una palabra en mayúsculas:\n";
print " <input type=\"text\" name=\"palabra\" value=\"$_SESSION[intento]\" size=\"20\" maxlength=\"20\">\n";
print " </label>\n";
print " <span class=\"aviso\">$_SESSION[error]</span>\n";
print " </p>\n";
print "\n";
} elseif (isset($_SESSION["error"])) {
// Si hemos detectado un error, pero no hay palabra para corregir 10
// Mostramos el control, añadiendo el aviso
print " <label>\n";
print " Escriba una palabra en mayúsculas:\n";
print " <input type=\"text\" name=\"palabra\" size=\"20\" maxlength=\"20\">\n";
print " </label>\n";
print " <span class=\"aviso\">$_SESSION[error]</span>\n";
print " </p>\n";
print "\n";
} else {
// Si no hemos detectado un error, mostramos simplemente el control 11
print " <p>\n";
print " <label>\n";
print " Escriba una palabra en mayúsculas:\n";
print " <input type=\"text\" name=\"palabra\" size=\"20\" maxlength=\"20\">\n";
print " </label>\n";
print " </p>\n";
print "\n";
}
?>
// ...
sesiones-2-3-b-2.php
<?php
// Accedemos a la sesión 3
session_name("sesiones-2-3-b");
session_start();
// Función de recogida de datos 1
function recoge($key, $type = "")
{. . .
if (!is_string($key) && !is_int($key) || $key == "") {
trigger_error("Function recoge(): Argument #1 (\$key) must be a non-empty string or an integer", E_USER_ERROR);
} elseif ($type !== "" && $type !== []) {
trigger_error("Function recoge(): Argument #2 (\$type) is optional, but if provided, it must be an empty array or an empty string", E_USER_ERROR);
}
$tmp = $type;
if (isset($_REQUEST[$key])) {
if (!is_array($_REQUEST[$key]) && !is_array($type)) {
$tmp = trim(htmlspecialchars($_REQUEST[$key]));
} elseif (is_array($_REQUEST[$key]) && is_array($type)) {
$tmp = $_REQUEST[$key];
array_walk_recursive($tmp, function (&$value) {
$value = trim(htmlspecialchars($value));
});
}
}
return $tmp;
}
// Recogemos la palabra
$palabra = recoge("palabra");
// Borramos todos los datos anteriores 2
unset($_SESSION["intento"]);
unset($_SESSION["error"]);
unset($_SESSION["palabra"]);
// Comprobamos la palabra
if ($palabra == "") {
// Si no se recibe palabra, guardamos en la sesión el mensaje de error 4
$_SESSION["error"] = "No ha escrito ninguna palabra";
} elseif (!ctype_upper($palabra)) {
// Si la palabra está en minúsculas, guardamos en la sesión el mensaje de error y el intento anterior 5
$_SESSION["error"] = "No ha escrito la palabra en mayúsculas";
$_SESSION["intento"] = $palabra;
} else {
// Si la palabra es correcta, borramos el error anterior que pudiera haber en la sesión 6
$_SESSION["palabra"] = $palabra;
}
// Volvemos al formulario 7
header("Location:sesiones-2-3-b-1.php");
Esta solución es una variante de la anterior. La segunda página es igual, la diferencia está en la primera página. En vez de escribir un control completo distinto dependiendo de las variables guardadas en la sesión de la solución B, en esta solución el control se escribe en varios print y entre medias se escriben bloques if que añaden texto en caso necesario.
Este podría ser el orden en que se iría realizando este ejercicio:
sesiones-2-3-c-1.php
<?php
// Accedemos a la sesión 8
session_name("sesiones-2-3-c");
session_start();
?>
<!DOCTYPE html>
// ...
<body>
<h1>Formulario Palabra en mayúsculas (Formulario)</h1>
<form action="sesiones-2-3-c-2.php" method="get">
<?php
//Si hay guardada una palabra en la sesión ... 11
if (isset($_SESSION["palabra"])) {
// ... mostramos la palabra
print " <p>Ha escrito una palabra en mayúsculas: <strong>$_SESSION[palabra]</strong>.</p>\n";
print "\n";
}
print " <p>\n";
print " <label>\n";
print " Escriba una palabra en mayúsculas:\n";
print " <input type=\"text\" name=\"palabra\" ";
// Si hay que incluir el intento anterior en value, lo incluimos 9
if (isset($_SESSION["intento"])) {
print "value=\"$_SESSION[intento]\" ";
}
print "size=\"20\" maxlength=\"20\">\n";
print " </label>\n";
// Si hay que incluir un aviso, lo incluimos 10
if (isset($_SESSION["error"])) {
print "<span class=\"aviso\">$_SESSION[error]</span></p>\n";
}
print "\n";
?>
// ...
sesiones-2-3-c-2.php
<?php
// Accedemos a la sesión 3
session_name("sesiones-2-3-c");
session_start();
// Función de recogida de datos 1
function recoge($key, $type = "")
{. . .
if (!is_string($key) && !is_int($key) || $key == "") {
trigger_error("Function recoge(): Argument #1 (\$key) must be a non-empty string or an integer", E_USER_ERROR);
} elseif ($type !== "" && $type !== []) {
trigger_error("Function recoge(): Argument #2 (\$type) is optional, but if provided, it must be an empty array or an empty string", E_USER_ERROR);
}
$tmp = $type;
if (isset($_REQUEST[$key])) {
if (!is_array($_REQUEST[$key]) && !is_array($type)) {
$tmp = trim(htmlspecialchars($_REQUEST[$key]));
} elseif (is_array($_REQUEST[$key]) && is_array($type)) {
$tmp = $_REQUEST[$key];
array_walk_recursive($tmp, function (&$value) {
$value = trim(htmlspecialchars($value));
});
}
}
return $tmp;
}
// Recogemos la palabra
$palabra = recoge("palabra");
// Borramos todos los datos anteriores 2
unset($_SESSION["intento"]);
unset($_SESSION["error"]);
unset($_SESSION["palabra"]);
// Comprobamos la palabra
if ($palabra == "") {
// Si no se recibe palabra, guardamos en la sesión el mensaje de error 4
$_SESSION["error"] = "No ha escrito ninguna palabra";
} elseif (!ctype_upper($palabra)) {
// Si la palabra está en minúsculas, guardamos en la sesión el mensaje de error y el intento anterior 5
$_SESSION["error"] = "No ha escrito la palabra en mayúsculas";
$_SESSION["intento"] = $palabra;
} else {
// Si la palabra es correcta, borramos el error anterior que pudiera haber en la sesión 6
$_SESSION["palabra"] = $palabra;
}
// Volvemos al formulario 7
header("Location:sesiones-2-3-c-1.php");
Esta solución es una variante de la anterior, en la que sólo cambia la segunda página. En vez de borrar todas las variables de sesión anteriores y en el bloque if elseif else establecer las variables necesarias, en esta solución en cada opción del bloque if elseif else se borran o establecen cada una de las variables de la sesión.
Este podría ser el orden en que se iría realizando este ejercicio:
sesiones-2-3-d-2.php
<?php
// Accedemos a la sesión 5
session_name("sesiones-2-3-d");
session_start();
// Función de recogida de datos 1
function recoge($key, $type = "")
{. . .
if (!is_string($key) && !is_int($key) || $key == "") {
trigger_error("Function recoge(): Argument #1 (\$key) must be a non-empty string or an integer", E_USER_ERROR);
} elseif ($type !== "" && $type !== []) {
trigger_error("Function recoge(): Argument #2 (\$type) is optional, but if provided, it must be an empty array or an empty string", E_USER_ERROR);
}
$tmp = $type;
if (isset($_REQUEST[$key])) {
if (!is_array($_REQUEST[$key]) && !is_array($type)) {
$tmp = trim(htmlspecialchars($_REQUEST[$key]));
} elseif (is_array($_REQUEST[$key]) && is_array($type)) {
$tmp = $_REQUEST[$key];
array_walk_recursive($tmp, function (&$value) {
$value = trim(htmlspecialchars($value));
});
}
}
return $tmp;
}
// Recogemos la palabra
$palabra = recoge("palabra");
// Comprobamos la palabra, guardamos el dato que queremos enseñar y borramos el resto
if ($palabra == "") {
// Si no se recibe palabra, guardamos en la sesión el mensaje de error 2
unset($_SESSION["intento"]);
$_SESSION["error"] = "No ha escrito ninguna palabra";
unset($_SESSION["palabra"]);
} elseif (!ctype_upper($palabra)) {
// Si la palabra está en minúsculas, guardamos en la sesión el mensaje de error y el intento anterior 3
$_SESSION["intento"] = $palabra;
$_SESSION["error"] = "No ha escrito la palabra en mayúsculas";
unset($_SESSION["palabra"]);
} else {
// Si la palabra es correcta, guardamos en la sesión la palabra 4
unset($_SESSION["intento"]);
unset($_SESSION["error"]);
$_SESSION["palabra"] = $palabra;
}
// Volvemos al formulario 6
header("Location:sesiones-2-3-d-1.php");
Este ejercicio es parecido al anterior. La diferencia es que como hay dos controles, tenemos el doble de variables de sesión. Además, hay que tener en cuenta que si un control se escribe bien, pero el otro se escribe mal, el valor correcto se debe incluir en el control para que el usuario no lo tenga que volver a escribir.
sesiones-2-4-1.php
<?php
// Accedemos a la sesión 9
session_name("sesiones-2-4");
session_start();
?>
<!DOCTYPE html>
// ...
<body>
<h1>Formulario Palabras en mayúsculas y minúsculas (Formulario)</h1>
<form action="sesiones-2-4-2.php" method="get">
<?php
//Si no hemos detectado error en la palabra en mayúsculas y hay guardada una palabra en la sesión ... 14
if (
!isset($_SESSION["mayusculasError"]) && !isset($_SESSION["minusculasError"])
&& isset($_SESSION["mayusculas"], $_SESSION["minusculas"])
) {
// ... mostramos la palabra
print " <p>Ha escrito una palabra en mayúsculas: <strong>$_SESSION[mayusculas]</strong>.</p>\n";
print "\n";
print " <p>Ha escrito una palabra en minúsculas: <strong>$_SESSION[minusculas]</strong>.</p>\n";
print "\n";
}
print " <p>Escriba una palabra en mayúsculas y otra en minúsculas:</p>\n";
print "\n";
// Si hemos detectado un error en la palabra en mayúsculas
if (isset($_SESSION["mayusculasError"])) {
// Escribimos un aviso e incluimos el valor incorrecto en el control 10
print " <p>\n";
print " <label>\n";
print " Mayúsculas:\n";
print " <input type=\"text\" name=\"mayusculas\" value=\"$_SESSION[mayusculas]\" size=\"20\" maxlength=\"20\">\n";
print " </label>\n";
print " <span class=\"aviso\">$_SESSION[mayusculasError]</span>\n";
print " </p>\n";
print "\n";
} elseif (isset($_SESSION["minusculasError"])) {
// Si hemos detectado un error en la palabra en minúsculas, incluimos el valor correcto en el control 11
print " <p>\n";
print " <label>\n";
print " Mayúsculas:\n";
print " <input type=\"text\" name=\"mayusculas\" value=\"$_SESSION[mayusculas]\" size=\"20\" maxlength=\"20\">\n";
print " </label>\n";
print " </p>\n";
print "\n";
} else {
// Si no hemos detectado un error, escribimos el control vacío 12
print " <p>\n";
print " <label>\n";
print " Mayúsculas:\n";
print " <input type=\"text\" name=\"mayusculas\" size=\"20\" maxlength=\"20\">\n";
print " </label>\n";
print " </p>\n";
print "\n";
}
// Si hemos detectado un error en la palabra en minúsculas 13
if (isset($_SESSION["minusculasError"])) {
// Escribimos un aviso e incluimos el valor incorrecto en el control
print " <p>\n";
print " <label>\n";
print " Minúsculas:\n";
print " <input type=\"text\" name=\"minusculas\" value=\"$_SESSION[minusculas]\" size=\"20\" maxlength=\"20\">\n";
print " </label>\n";
print " <span class=\"aviso\">$_SESSION[minusculasError]</span>\n";
print " </p>\n";
print "\n";
} elseif (isset($_SESSION["mayusculasError"])) {
// Si hemos detectado un error en la palabra en mayúsculas, incluimos el valor correcto en el control
print " <p>\n";
print " <label>\n";
print " Minúsculas:\n";
print " <input type=\"text\" name=\"minusculas\" value=\"$_SESSION[minusculas]\" size=\"20\" maxlength=\"20\">\n";
print " </label>\n";
print " </p>\n";
print "\n";
} else {
// Si no hemos detectado un error, escribimos el control vacío
print " <p>\n";
print " <label>\n";
print " Minúsculas:\n";
print " <input type=\"text\" name=\"minusculas\" size=\"20\" maxlength=\"20\">\n";
print " </label>\n";
print " </p>\n";
print "\n";
}
?>
// ...
sesiones-2-4-2.php
<?php
// Accedemos a la sesión 3
session_name("sesiones-2-4");
session_start();
// Función de recogida de datos 1
function recoge($key, $type = "")
{. . .
if (!is_string($key) && !is_int($key) || $key == "") {
trigger_error("Function recoge(): Argument #1 (\$key) must be a non-empty string or an integer", E_USER_ERROR);
} elseif ($type !== "" && $type !== []) {
trigger_error("Function recoge(): Argument #2 (\$type) is optional, but if provided, it must be an empty array or an empty string", E_USER_ERROR);
}
$tmp = $type;
if (isset($_REQUEST[$key])) {
if (!is_array($_REQUEST[$key]) && !is_array($type)) {
$tmp = trim(htmlspecialchars($_REQUEST[$key]));
} elseif (is_array($_REQUEST[$key]) && is_array($type)) {
$tmp = $_REQUEST[$key];
array_walk_recursive($tmp, function (&$value) {
$value = trim(htmlspecialchars($value));
});
}
}
return $tmp;
}
// Recogemos las dos palabras
$mayusculas = recoge("mayusculas");
$minusculas = recoge("minusculas");
// Guardamos las palabras en la sesión 2
$_SESSION["mayusculas"] = $mayusculas;
$_SESSION["minusculas"] = $minusculas;
// Comprobamos la palabra en mayúsculas
if ($mayusculas == "") {
// Si no se recibe palabra, guardamos en la sesión el mensaje de error 4
$_SESSION["mayusculasError"] = "No ha escrito ninguna palabra";
} elseif (!ctype_upper($mayusculas)) {
// Si la palabra está en minúsculas, guardamos en la sesión el mensaje de error 5}
$_SESSION["mayusculasError"] = "No ha escrito la palabra en mayúsculas";
} else {
// Si la palabra es correcta, borramos los posibles errores anteriores 6
unset($_SESSION["mayusculasError"]);
}
// Comprobamos la palabra en minúsculas 7
if ($minusculas == "") {
// Si no se recibe palabra, guardamos en la sesión el mensaje de error
$_SESSION["minusculasError"] = "No ha escrito ninguna palabra";
} elseif (!ctype_lower($minusculas)) {
// Si la palabra está en mayúsculas, guardamos en la sesión el mensaje de error
$_SESSION["minusculasError"] = "No ha escrito la palabra en minúsculas";
} else {
// Si la palabra es correcta, borramos los posibles errores anteriores
unset($_SESSION["minusculasError"]);
}
// Volvemos al formulario 8
header("Location:sesiones-2-4-1.php");
Como en el caso del ejercicio 3, en el que se han ofrecido varias soluciones, esta solución es algo distinta a la anterior.
sesiones-2-4-b-1.php
<?php
// Accedemos a la sesión 9
session_name("sesiones-2-4-b");
session_start();
?>
<!DOCTYPE html>
// ...
<body>
<h1>Formulario Palabras en mayúsculas y minúsculas (Formulario)</h1>
<form action="sesiones-2-4-b-2.php" method="get">
<?php
//Si están guardadas en la sesión las dos palabras ... 14
if (isset($_SESSION["mayusculas"], $_SESSION["minusculas"]) ) {
// ... mostramos las dos palabras
print " <p>Ha escrito una palabra en mayúsculas: <strong>$_SESSION[mayusculas]</strong>.</p>\n";
print "\n";
print " <p>Ha escrito una palabra en minúsculas: <strong>$_SESSION[minusculas]</strong>.</p>\n";
print "\n";
}
print " <p>Escriba una palabra en mayúsculas y otra en minúsculas:</p>\n";
print "\n";
print " <p>\n";
print " <label>\n";
print " Mayúsculas:\n";
print " <input type=\"text\" name=\"mayusculas\" ";
if (isset($_SESSION["mayusculasIntento"])) {
// Si hemos detectado un intento incorrecto en la palabra en mayúsculas, incluimos el intento en el control 10
print "value=\"$_SESSION[mayusculasIntento]\" ";
} elseif (isset($_SESSION["minusculasError"], $_SESSION["mayusculas"])) {
// Si la palabra en mayúsculas es correcta, pero hemos detectado un error en la palabra en minúsculas, incluimos la palabra correcta en el control 11
print "value=\"$_SESSION[mayusculas]\" ";
}
print "size=\"20\" maxlength=\"20\">\n";
print " </label>\n";
// Si hemos detectado un error en la palabra en mayúsculas 12
if (isset($_SESSION["mayusculasError"])) {
// Escribimos el aviso
print "<span class=\"aviso\">$_SESSION[mayusculasError]</span>";
}
print "</p>\n";
print "\n";
print " <p>\n";
print " <label>\n";
print " Minúsculas:\n";
print " <input type=\"text\" name=\"minusculas\" ";
if (isset($_SESSION["minusculasIntento"])) {
// Si hemos detectado un intento incorrecto en la palabra en minúsculas, incluimos el intento en el control 13
print "value=\"$_SESSION[minusculasIntento]\" ";
} elseif (isset($_SESSION["mayusculasError"], $_SESSION["minusculas"])) {
// Si la palabra en minúsculas es correcta, pero hemos detectado un error en la palabra en mayúsculas, incluimos la palabra correcta en el control
print "value=\"$_SESSION[minusculas]\" ";
}
print "size=\"20\" maxlength=\"20\">\n";
print " </label>\n";
// Si hemos detectado un error en la palabra en minúsculas
if (isset($_SESSION["minusculasError"])) {
// Escribimos el aviso
print "<span class=\"aviso\">$_SESSION[minusculasError]</span>";
}
print "</p>\n";
print "\n";
?>
// ...
sesiones-2-4-b-2.php
<?php
// Accedemos a la sesión 3
session_name("sesiones-2-4-b");
session_start();
// Función de recogida de datos 1
function recoge($key, $type = "")
{. . .
if (!is_string($key) && !is_int($key) || $key == "") {
trigger_error("Function recoge(): Argument #1 (\$key) must be a non-empty string or an integer", E_USER_ERROR);
} elseif ($type !== "" && $type !== []) {
trigger_error("Function recoge(): Argument #2 (\$type) is optional, but if provided, it must be an empty array or an empty string", E_USER_ERROR);
}
$tmp = $type;
if (isset($_REQUEST[$key])) {
if (!is_array($_REQUEST[$key]) && !is_array($type)) {
$tmp = trim(htmlspecialchars($_REQUEST[$key]));
} elseif (is_array($_REQUEST[$key]) && is_array($type)) {
$tmp = $_REQUEST[$key];
array_walk_recursive($tmp, function (&$value) {
$value = trim(htmlspecialchars($value));
});
}
}
return $tmp;
}
// Recogemos las dos palabras
$mayusculas = recoge("mayusculas");
$minusculas = recoge("minusculas");
// Borramos los valores anteriores 2
session_unset();
// Comprobamos la palabra en mayúsculas
if ($mayusculas == "") {
// Si no se recibe palabra, guardamos en la sesión el mensaje de error 4
$_SESSION["mayusculasError"] = "No ha escrito ninguna palabra";
} elseif (!ctype_upper($mayusculas)) {
// Si la palabra está en minúsculas, guardamos en la sesión el mensaje de error y la palabra 5
$_SESSION["mayusculasIntento"] = $mayusculas;
$_SESSION["mayusculasError"] = "No ha escrito la palabra en mayúsculas";
} else {
// Si la palabra es correcta, guardamos en la sesión la palabra 6
$_SESSION["mayusculas"] = $mayusculas;
}
// Comprobamos la palabra en minúsculas 7
if ($minusculas == "") {
// Si no se recibe palabra, guardamos en la sesión el mensaje de error
$_SESSION["minusculasError"] = "No ha escrito ninguna palabra";
} elseif (!ctype_lower($minusculas)) {
// Si la palabra está en mayúsculas, guardamos en la sesión el mensaje de error y la palabra
$_SESSION["minusculasIntento"] = $minusculas;
$_SESSION["minusculasError"] = "No ha escrito la palabra en minúsculas";
} else {
// Si la palabra es correcta, guardamos en la sesión la palabra
$_SESSION["minusculas"] = $minusculas;
}
// Volvemos al formulario 8
header("Location:sesiones-2-4-1.php");
sesiones-2-5-1.php
<?php
// Accedemos a la sesión
session_name("sesiones-2-5");
session_start();
// Borrramos los datos guardados en intentos anteriores
// salvo el avisoNombre que puede tener que mostrarse en esta página
unset($_SESSION["nombre"]);
unset($_SESSION["apellidos"]);
unset($_SESSION["avisoApellidos"]);
?>
<!DOCTYPE html>
// ...
<body>
<h1>Formulario en dos pasos (Formulario 1)</h1>
<form action="sesiones-2-5-2.php" method="get">
<p>Escriba su nombre:</p>
<p>
<label>
Nombre:
<input type="text" name="nombre" size="20" maxlength="20">
</label>
<?php
// Si hay un aviso guardado en la sesión, lo mostramos
if (isset($_SESSION["avisoNombre"])) {
print " <span class=\"aviso\">$_SESSION[avisoNombre]</span>\n";
}
?>
</p>
// ...
sesiones-2-5-2.php
<?php
// Accedemos a la sesión
session_name("sesiones-2-5");
session_start();
// Función de recogida de datos
function recoge($key, $type = "")
{. . .
if (!is_string($key) && !is_int($key) || $key == "") {
trigger_error("Function recoge(): Argument #1 (\$key) must be a non-empty string or an integer", E_USER_ERROR);
} elseif ($type !== "" && $type !== []) {
trigger_error("Function recoge(): Argument #2 (\$type) is optional, but if provided, it must be an empty array or an empty string", E_USER_ERROR);
}
$tmp = $type;
if (isset($_REQUEST[$key])) {
if (!is_array($_REQUEST[$key]) && !is_array($type)) {
$tmp = trim(htmlspecialchars($_REQUEST[$key]));
} elseif (is_array($_REQUEST[$key]) && is_array($type)) {
$tmp = $_REQUEST[$key];
array_walk_recursive($tmp, function (&$value) {
$value = trim(htmlspecialchars($value));
});
}
}
return $tmp;
}
// Recogemos el nombre
$nombre = recoge("nombre");
// Comprobamos el nombre
if ($nombre == "") {
// Si no hay nombre, guardamos el aviso en la sesión
$_SESSION["avisoNombre"] = "No ha escrito su nombre";
// y volvemos a la página 1
header("Location:sesiones-2-5-1.php");
exit;
} else {
// Si hay nombre, borramos el aviso que se podría haber generado en intentos anteriores,
unset($_SESSION["avisoNombre"]);
// guardamos el nombre en la sesión
$_SESSION["nombre"] = $nombre;
// y pasamos a la página 3
header("Location:sesiones-2-5-3.php");
exit;
}
sesiones-2-5-3.php
<?php
// Accedemos a la sesión
session_name("sesiones-2-5");
session_start();
// Si accedemos a esta página sin haber guardado antes un nombre en la sesión ...
if (!isset($_SESSION["nombre"])) {
// volvemos a la página 1
header("Location:sesiones-2-5-1.php");
exit;
}
?>
<!DOCTYPE html>
// ...
<body>
<h1>Formulario en dos pasos (Formulario 2)</h1>
<form action="sesiones-2-5-4.php" method="get">
<p>Escriba sus apellidos:</p>
<p>
<label>
Apellidos:
<input type="text" name="apellidos" size="30" maxlength="30">
<?php
// Si hay un aviso guardado en la sesión, lo mostramos
if (isset($_SESSION["avisoApellidos"])) {
print " <span class=\"aviso\">$_SESSION[avisoApellidos]</span>\n";
}
?>
</label>
</p>
// ...
sesiones-2-5-4.php
<?php
// Accedemos a la sesión
session_name("sesiones-2-5");
session_start();
// Si accedemos a esta página sin haber guardado antes un nombre en la sesión ...
if (!isset($_SESSION["nombre"])) {
// volvemos a la página 1
header("Location:sesiones-2-5-1.php");
exit;
}
// Función de recogida de datos
function recoge($key, $type = "")
{. . .
if (!is_string($key) && !is_int($key) || $key == "") {
trigger_error("Function recoge(): Argument #1 (\$key) must be a non-empty string or an integer", E_USER_ERROR);
} elseif ($type !== "" && $type !== []) {
trigger_error("Function recoge(): Argument #2 (\$type) is optional, but if provided, it must be an empty array or an empty string", E_USER_ERROR);
}
$tmp = $type;
if (isset($_REQUEST[$key])) {
if (!is_array($_REQUEST[$key]) && !is_array($type)) {
$tmp = trim(htmlspecialchars($_REQUEST[$key]));
} elseif (is_array($_REQUEST[$key]) && is_array($type)) {
$tmp = $_REQUEST[$key];
array_walk_recursive($tmp, function (&$value) {
$value = trim(htmlspecialchars($value));
});
}
}
return $tmp;
}
// Recogemos los apellidos
$apellidos = recoge("apellidos");
if ($apellidos == "") {
// Si no hay apellidos, guardamos el aviso en la sesión
$_SESSION["avisoApellidos"] = "No ha escrito sus apellidos";
// y volvemos a la página 3
header("Location:sesiones-2-5-3.php");
exit;
} else {
// Si hay apellidos, borramos el aviso que se podría haber generado en intentos anteriores,
unset($_SESSION["avisoApellidos"]);
// guardamos los apellidos en la sesión
$_SESSION["apellidos"] = $apellidos;
// y pasamos a la página 5
header("Location:sesiones-2-5-5.php");
exit;
}
sesiones-2-5-5.php
<?php
// Accedemos a la sesión
session_name("sesiones-2-5");
session_start();
// Si accedemos a esta página sin haber guardado antes un nombre y unos apellidos en la sesión ...
if (!isset($_SESSION["nombre"]) || !isset($_SESSION["apellidos"])) {
// volvemos a la página 1
header("Location:sesiones-2-5-1.php");
exit;
}
?>
<!DOCTYPE html>
// ...
<body>
<h1>Formulario en dos pasos (Resultado)</h1>
<?php
// Mostramos los datos recibidos
print " <p>Su nombre y apellidos son: <strong>$_SESSION[nombre] $_SESSION[apellidos]</strong>.</p>\n";
print "\n";
?>
// ...
sesiones-2-6-1.php
<?php
// Accedemos a la sesión
session_name("sesiones-2-6");
session_start();
// Borrramos los datos guardados en intentos anteriores
// salvo el aviso1 que puede tener que mostrarse en esta página
unset($_SESSION["palabra1"]);
unset($_SESSION["palabra2"]);
unset($_SESSION["aviso2"]);
?>
<!DOCTYPE html>
// ...
<body>
<h1>Formulario de confirmación (Formulario 1)</h1>
<form action="sesiones-2-6-2.php" method="get">
<p>Escriba una palabra (con letras mayúsculas, letras minúsculas y números):</p>
<p>
<label>
Palabra:
<input type="text" name="palabra1" size="20" maxlength="20">
</label>
<?php
// Si hay un aviso guardado en la sesión, lo mostramos
if (isset($_SESSION["aviso1"])) {
print " <span class=\"aviso\">$_SESSION[aviso1]</span>\n";
}
?>
</p>
// ...
sesiones-2-6-2.php
<?php
// Accedemos a la sesión
session_name("sesiones-2-6");
session_start();
// Función de recogida de datos
function recoge($key, $type = "")
{. . .
if (!is_string($key) && !is_int($key) || $key == "") {
trigger_error("Function recoge(): Argument #1 (\$key) must be a non-empty string or an integer", E_USER_ERROR);
} elseif ($type !== "" && $type !== []) {
trigger_error("Function recoge(): Argument #2 (\$type) is optional, but if provided, it must be an empty array or an empty string", E_USER_ERROR);
}
$tmp = $type;
if (isset($_REQUEST[$key])) {
if (!is_array($_REQUEST[$key]) && !is_array($type)) {
$tmp = trim(htmlspecialchars($_REQUEST[$key]));
} elseif (is_array($_REQUEST[$key]) && is_array($type)) {
$tmp = $_REQUEST[$key];
array_walk_recursive($tmp, function (&$value) {
$value = trim(htmlspecialchars($value));
});
}
}
return $tmp;
}
// Recogemos la palabra1
$palabra1 = recoge("palabra1");
// Comprobamos la palabra1
if ($palabra1 == "") {
// Si no hay palabra1, guardamos el aviso en la sesión
$_SESSION["aviso1"] = "No ha escrito nada";
// y volvemos a la página 1
header("Location:sesiones-2-6-1.php");
exit;
} elseif (!ctype_alnum($palabra1)) {
// Si la palabra1 no son todo letras o números, guardamos el aviso en la sesión
$_SESSION["aviso1"] = "No ha escrito una sola palabra con letras y números";
// y volvemos a la página 1
header("Location:sesiones-2-6-1.php");
exit;
} else {
// Si hay palabra1, borramos el aviso que se podría haber generado en intentos anteriores,
unset($_SESSION["aviso1"]);
// guardamos la palabra1 en la sesión
$_SESSION["palabra1"] = $palabra1;
// y pasamos a la página 3
header("Location:sesiones-2-6-3.php");
exit;
}
sesiones-2-6-3.php
<?php
// Accedemos a la sesión
session_name("sesiones-2-6");
session_start();
// Si accedemos a esta página sin haber guardado antes la palabra1 en la sesión ...
if (!isset($_SESSION["palabra1"])) {
// volvemos a la página 1
header("Location:sesiones-2-6-1.php");
exit;
}
?>
<!DOCTYPE html>
// ...
<body>
<h1>Formulario de confirmación (Formulario 2)</h1>
<form action="sesiones-2-6-4.php" method="get">
<p>Repita la palabra que acaba de escribir:</p>
<p>
<label>
Palabra:
<input type="text" name="palabra1" size="20" maxlength="20">
</label>
<?php
// Si hay un aviso guardado en la sesión, lo mostramos
if (isset($_SESSION["aviso2"])) {
print " <span class=\"aviso\">$_SESSION[aviso2]</span>\n";
}
?>
</p>
// ...
sesiones-2-6-4.php
<?php
// Accedemos a la sesión
session_name("sesiones-2-6");
session_start();
// Si accedemos a esta página sin haber guardado antes una palabra1 en la sesión ...
if (!isset($_SESSION["palabra1"])) {
// volvemos a la página 1
header("Location:sesiones-2-6-1.php");
exit;
}
// Función de recogida de datos
function recoge($key, $type = "")
{. . .
if (!is_string($key) && !is_int($key) || $key == "") {
trigger_error("Function recoge(): Argument #1 (\$key) must be a non-empty string or an integer", E_USER_ERROR);
} elseif ($type !== "" && $type !== []) {
trigger_error("Function recoge(): Argument #2 (\$type) is optional, but if provided, it must be an empty array or an empty string", E_USER_ERROR);
}
$tmp = $type;
if (isset($_REQUEST[$key])) {
if (!is_array($_REQUEST[$key]) && !is_array($type)) {
$tmp = trim(htmlspecialchars($_REQUEST[$key]));
} elseif (is_array($_REQUEST[$key]) && is_array($type)) {
$tmp = $_REQUEST[$key];
array_walk_recursive($tmp, function (&$value) {
$value = trim(htmlspecialchars($value));
});
}
}
return $tmp;
}
// Recogemos la palabra2
$palabra2 = recoge("palabra2");
if ($palabra2 == "") {
// Si no hay palabra2, guardamos el aviso en la sesión
$_SESSION["aviso2"] = "No ha escrito nada";
// y volvemos a la página 3
header("Location:sesiones-2-6-3.php");
exit;
} elseif (!ctype_alnum($palabra2)) {
// Si la palabra2 no son todo letras o números, guardamos el aviso en la sesión
$_SESSION["aviso2"] = "No ha escrito una sola palabra con letras y números";
// y volvemos a la página 3
header("Location:sesiones-2-6-3.php");
exit;
} elseif ($_SESSION["palabra1"] != $palabra2) {
// Si las palabras son distintas, borramos el aviso que se podría haber generado en intentos anteriores,
unset($_SESSION["aviso2"]);
// Guardamos el aviso en la sesión
$_SESSION["aviso1"] = "No ha escrito la misma palabra. Comience de nuevo.";
// y volvemos a la página 1
header("Location:sesiones-2-6-1.php");
exit;
} else {
// Si hay palabra2, borramos el aviso que se podría haber generado en intentos anteriores,
unset($_SESSION["aviso2"]);
// guardamos la palabra2 en la sesión
$_SESSION["palabra2"] = $palabra2;
// y pasamos a la página 5
header("Location:sesiones-2-6-5.php");
exit;
}
sesiones-2-6-5.php
<?php
// Accedemos a la sesión
session_name("sesiones-2-6");
session_start();
// Si accedemos a esta página sin haber guardado antes la palabra1 y la palabra2 en la sesión ...
if (!isset($_SESSION["palabra1"]) || !isset($_SESSION["palabra2"])) {
// volvemos a la página 1
header("Location:sesiones-2-5-1.php");
exit;
}
?>
<!DOCTYPE html>
// ...
<body>
<h1>Formulario de confirmación (Resultado)</h1>
<?php
// Mostramos la palabra confirmada
print " <p>Ha escrito y confirmado la palabra: <strong>$_SESSION[palabra1]</strong>.</p>\n";
print "\n";
?>
// ...
index.php
La página index.php no contiene código PHP.
nombre-1.php
<?php
// Accedemos a la sesión
session_name("sesiones-2-7");
session_start();
?>
<!DOCTYPE html>
// ...
<body>
<h1>Nombre (1)</h1>
<?php
// Si hay un nombre guardado en la sesión, ...
if (isset($_SESSION["nombre"])) {
// lo mostramos
print " <p>Usted ya ha escrito que su nombre es: <strong>$_SESSION[nombre]</strong></p>\n";
print "\n";
}
?>
<form action="nombre-2.php" method="get">
<p>Escriba su nombre:</p>
<p>
<label>
Nombre:
<input type="text" name="nombre" size="20" maxlength="20">
</label>
<?php
// Si hay un aviso guardado en la sesión, lo mostramos
if (isset($_SESSION["avisoNombre"])) {
print " <span class=\"aviso\">$_SESSION[avisoNombre]</span>\n";
}
?>
</p>
// ...
nombre-2.php
<?php
// Accedemos a la sesión
session_name("sesiones-2-7");
session_start();
// Función de recogida de datos
function recoge($key, $type = "")
{. . .
if (!is_string($key) && !is_int($key) || $key == "") {
trigger_error("Function recoge(): Argument #1 (\$key) must be a non-empty string or an integer", E_USER_ERROR);
} elseif ($type !== "" && $type !== []) {
trigger_error("Function recoge(): Argument #2 (\$type) is optional, but if provided, it must be an empty array or an empty string", E_USER_ERROR);
}
$tmp = $type;
if (isset($_REQUEST[$key])) {
if (!is_array($_REQUEST[$key]) && !is_array($type)) {
$tmp = trim(htmlspecialchars($_REQUEST[$key]));
} elseif (is_array($_REQUEST[$key]) && is_array($type)) {
$tmp = $_REQUEST[$key];
array_walk_recursive($tmp, function (&$value) {
$value = trim(htmlspecialchars($value));
});
}
}
return $tmp;
}
// Recogemos el nombre
$nombre = recoge("nombre");
if ($nombre == "") {
// Si no hay nombre, guardamos el aviso en la sesión
$_SESSION["avisoNombre"] = "No ha escrito su nombre";
// y volvemos a la página nombre-1
header("Location:nombre-1.php");
exit;
} else {
// Si hay nombre, borramos el aviso que se podría haber generado en intentos anteriores,
unset($_SESSION["avisoNombre"]);
// guardamos el nombre en la sesión
$_SESSION["nombre"] = $nombre;
// y volvemos a index
header("Location:index.php");
exit;
}
apellidos-1.php
<?php
// Accedemos a la sesión
session_name("sesiones-2-7");
session_start();
?>
<!DOCTYPE html>
// ...
<body>
<h1>Apellidos (1)</h1>
<?php
// Si hay unos apellidos guardados en la sesión, ...
if (isset($_SESSION["apellidos"])) {
// lo mostramosn
print " <p>Usted ya ha escrito que sus apellidos son: <strong>$_SESSION[apellidos]</strong></p>\n";
print "\n";
}
?>
<form action="apellidos-2.php" method="get">
<p>Escriba sus apellidos:</p>
<p>
<label>
Apellidos:
<input type="text" name="apellidos" size="30" maxlength="30">
</label>
<?php
// Si hay un aviso guardado en la sesión, lo mostramos
if (isset($_SESSION["avisoApellidos"])) {
print " <span class=\"aviso\">$_SESSION[avisoApellidos]</span>\n";
}
?>
</p>
// ...
apellidos-2.php
<?php
// Accedemos a la sesión
session_name("sesiones-2-7");
session_start();
// Función de recogida de datos
function recoge($key, $type = "")
{. . .
if (!is_string($key) && !is_int($key) || $key == "") {
trigger_error("Function recoge(): Argument #1 (\$key) must be a non-empty string or an integer", E_USER_ERROR);
} elseif ($type !== "" && $type !== []) {
trigger_error("Function recoge(): Argument #2 (\$type) is optional, but if provided, it must be an empty array or an empty string", E_USER_ERROR);
}
$tmp = $type;
if (isset($_REQUEST[$key])) {
if (!is_array($_REQUEST[$key]) && !is_array($type)) {
$tmp = trim(htmlspecialchars($_REQUEST[$key]));
} elseif (is_array($_REQUEST[$key]) && is_array($type)) {
$tmp = $_REQUEST[$key];
array_walk_recursive($tmp, function (&$value) {
$value = trim(htmlspecialchars($value));
});
}
}
return $tmp;
}
// Recogemos los apellidos
$apellidos = recoge("apellidos");
if ($apellidos == "") {
// Si no hay apellidos, guardamos el aviso en la sesión
$_SESSION["avisoApellidos"] = "No ha escrito sus apellidos";
// y volvemos a la página apellidos-1
header("Location:apellidos-1.php");
exit;
} else {
// Si hay apellidos, borramos el aviso que se podría haber generado en intentos anteriores,
unset($_SESSION["avisoApellidos"]);
// guardamos los apellidos en la sesión
$_SESSION["apellidos"] = $apellidos;
// y volvemos a index
header("Location:index.php");
exit;
}
ver.php
<?php
// Accedemos a la sesión
session_name("sesiones-2-7");
session_start();
?>
<!DOCTYPE html>
// ...
<body>
<h1>Ver datos</h1>
<?php
if (!isset($_SESSION["nombre"]) && !isset($_SESSION["apellidos"])) {
// Si no hay nombre ni apellidos en la sesión, lo dice
print " <p>Usted no ha escrito todavía ni su nombre ni sus apellidos</p>\n";
print "\n";
} elseif (isset($_SESSION["nombre"]) && !isset($_SESSION["apellidos"])) {
// Si hay nombre pero no hay apellidos en la sesión, lo dice
print " <p>Usted <strong>sólo</strong> ha escrito que su nombre es: <strong>$_SESSION[nombre]</strong></p>\n";
print "\n";
} elseif (!isset($_SESSION["nombre"]) && isset($_SESSION["apellidos"])) {
// Si no hay nombre pero sí apellidos en la sesión, lo dice
print " <p>Usted <strong>sólo</strong> ha escrito que sus apellidos son: <strong>$_SESSION[apellidos]</strong></p>\n";
print "\n";
} else {
// Si hay nombre y apellidos en la sesión, lo dice
print " <p>Usted ha escrito que su nombre es: <strong>$_SESSION[nombre]</strong></p>\n";
print "\n";
print " <p>Usted ha escrito que sus apellidos son: <strong>$_SESSION[apellidos]</strong></p>\n";
print "\n";
}
?>
// ...
borrar.php
<?php
// Accedemos a la sesión
session_name("sesiones-2-7");
session_start();
// Destruimos la sesión
session_destroy();
?>
<!DOCTYPE html>
// ...