Ejercicios (sesiones) - Sesiones (1) - Soluciones

En esta página se muestran una parte de las soluciones de los ejercicios Sesiones (1). La solución completa se puede descargar de la página de soluciones.

En construcciónNo he terminado de actualizar esta página con las soluciones actuales. En el archivo para descargar se encuentra las soluciones completas actualizadas.

¡Atención!Para hacer estos ejercicios, se recomienda seguir el recorrido de la aplicación, suponiendo que el usuario introduce datos. Pero después 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).

Comprobación de formularios

Sesiones (1) 01 - Formulario Texto (1)

Este podría ser el orden en que se iría realizando este ejercicio:

  1. Primero, la página 2 debe recoger el dato enviado por el formulario de la página 1. Es el procedimiento habitual: función recoge(); variable para recoger el dato; variable auxiliar que indica la corrección del dato; comprobación y mensajes de error; si el dato es correcto, mensaje final.
  2. Si el dato es correcto, debemos guardarlo en una variable de sesión, para que la página 1 pueda acceder a él.
  3. Para que la página 2 pueda guardar datos en $_SESSION, debemos unir la página a la sesión. Conviene dar nombre a la sesión para que cada ejercicio utilice su propia matriz $_SESSION distinta del resto.
  4. La página 1 muestra el nombre guardado en $_SESSION.
  5. Para que la página 1 pueda usar datos de $_SESSION, debemos unir la página a la sesión. El nombre de la sesión debe ser el mismo en ambas páginas.
  6. Pero la primera vez que se abre la página, $_SESSION no contiene ningún dato e intentar imprimirlo provocaría un error, por lo que añadimos la condición de que la variable que vamos a imprimir exista.

sesiones-1-01-1.php

<?php
// Se accede a la sesión 5
session_name("sesiones-1-01");
session_start();
?>

<!DOCTYPE html>
...
<body>
  <h1>Formulario Texto 1 (Formulario)</h1>

<?php
// Si hay un texto guardado en la sesión, 6
if (isset($_SESSION["texto"])) {
    // se muestra 4
    print "  <p>El texto es: <strong>$_SESSION[texto]</strong>.</p>\n";
    print "\n";
}
?>

  <form action="sesiones-1-01-2.php" method="get">
    <p>Escriba texto:</p>
...

sesiones-1-01-2.php

<?php
// Se accede a la sesión 3
session_name("sesiones-1-01");
session_start();
?>

<!DOCTYPE html>
...
<body>
  <h1>Formulario Texto 1 (Resultado)</h1>

<?php
// Funciones auxiliares 1
function recoge($var)
{
    $tmp = (isset($_REQUEST[$var]))
    ? trim(htmlspecialchars($_REQUEST[$var], ENT_QUOTES, "UTF-8"))
    : "";
    return $tmp;
}

// 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";
} else {
    $textoOk = true;
}

// Si el texto es válido ...
if ($textoOk) {
  // guardamos el texto en la sesión 2
    $_SESSION["texto"] = $texto;
    // y lo mostramos
    print "  <p>El texto es: <strong>$texto</strong>.</p>\n";
}
?>

    <p><a href="sesiones-1-01-1.php">Volver a la primera página.</a></p>
...

Sesiones (1) 02 - Formulario Texto (2) - Solución A

Esta primera solución intenta parecerse lo más posible a la solución propuesta para el ejercicio anterior. Este podría ser el orden en que se iría realizando este ejercicio:

  1. Puesto que la página 2 redirige a la página 1, la página 2 no debe tener nada de HTML, ni ningún print.
  2. Primero, la página 2 debe recoger el dato enviado por el formulario de la página 1. Al principio es el procedimiento habitual: función recoge(); variable para recoger el dato; variable auxiliar que indica la corrección del dato, ...
  3. ... pero en la comprobación si no se recibe nada, no escribe ningún mensaje.
  4. Finalmente, si el dato recibido no es correcto, volvemos a la primera página.
  5. Y si el dato es correcto, el dato se guarda en una variable de sesión, para que la página 1 pueda acceder a él.
  6. Para que la página 2 pueda guardar datos en $_SESSION, debemos unir la página a la sesión. Conviene dar nombre a la sesión para que cada ejercicio utilice su propia matriz $_SESSION distinta del resto.
  7. Finalmente, la página 2 redirige a la página 1.
  8. La página 1 muestra el nombre guardado en $_SESSION.
  9. Para que la página 1 pueda usar datos de $_SESSION, debemos unir la página a la sesión. El nombre de la sesión debe ser el mismo en ambas páginas.
  10. Pero la primera vez que se abre la página, $_SESSION no contiene ningún dato e intentar imprimirlo provocaría un error, por lo que añadimos la condición de que la variable que vamos a imprimir exista.

sesiones-1-02-1.php

<?php
// Se accede a la sesión 8
session_name("sesiones-1-02");
session_start();
?>

<!DOCTYPE html>
...
<body>
  <h1>Formulario Texto 2 (Formulario)</h1>

<?php
// Si hay un texto guardado en la sesión, 9
if (isset($_SESSION["texto"])) {
    // lo mostramos 7
    print "  <p>El texto es: <strong>$_SESSION[texto]</strong>.</p>\n";
    print "\n";
}
?>

  <form action="sesiones-1-02-2.php" method="get">
    <p>Escriba texto:</p>
...

sesiones-1-02-2.php

<?php
// Se accede a la sesión 5
session_name("sesiones-1-02");
session_start();

// Funciones auxiliares 1
function recoge($var)
{
    $tmp = (isset($_REQUEST[$var]))
    ? trim(htmlspecialchars($_REQUEST[$var], ENT_QUOTES, "UTF-8"))
    : "";
    return $tmp;
}

// Recogemos el texto
$texto   = recoge("texto");
$textoOk = false;

// Comprobamos el texto
if ($texto == "") {
  // Si el texto es vacío, no es correcto, pero no hacemos nada especial 2
} else {
    $textoOk = true;
}

// Si el texto no es válido ...
if (!$textoOk) {
    // ... volvemos al formulario 3
    header("Location:sesiones-1-02-1.php");
    exit;
} else {
    // ... guardamos el texto en la sesión 4
    $_SESSION["texto"] = $texto;
    // y volvemos al formulario 6
    header("Location:sesiones-1-02-1.php");
    exit;
}
?>

Sesiones (1) 02 - Formulario Texto (2) - Solución B

En esta segunda solución, vamos a simplificar la solución propuesta para en el apartado anterior. Las simplificaciones las haremos en la segunda página.

  1. La página 2 redirige siempre a la página 1, así que la función header() no hace falta que esté dentro del if y del else. Simplemente, se puede poner fuera, más concretamente después.
  2. La segunda página sólo tiene que guardar el texto en $_SESSION["texto"] si no es vacío y redirigir, por lo que podemos ahorrarnos la variable $textoOk.

Así, los pasos del programa serían:

  1. En la página 2 recogemos el dato enviado por el formulario de la página 1: función recoge() y variable para recoger el dato
  2. Enn la comprobación, si no se recibe nada, no escribe ningún mensaje.
  3. Pero si se ha recibido algo, el dato se guarda en una variable de sesión, para que la página 1 pueda acceder a él.
  4. Para que la página 2 pueda guardar datos en $_SESSION, debemos unir la página a la sesión. Conviene dar nombre a la sesión para que cada ejercicio utilice su propia matriz $_SESSION distinta del resto.
  5. Finalmente, la página 2 redirige a la página 1.
  6. La página 1 muestra el nombre guardado en $_SESSION.
  7. Para que la página 1 pueda usar datos de $_SESSION, debemos unir la página a la sesión. El nombre de la sesión debe ser el mismo en ambas páginas.
  8. Pero la primera vez que se abre la página, $_SESSION no contiene ningún dato e intentar imprimirlo provocaría un error, por lo que añadimos la condición de que la variable que vamos a imprimir exista.

sesiones-1-02-b-1.php

<?php
// Se accede a la sesión 7
session_name("sesiones-1-02-b");
session_start();
?>

<!DOCTYPE html>
...
<body>
  <h1>Formulario Texto 2 (Formulario)</h1>

<?php
// Si hay un texto guardado en la sesión, 8
if (isset($_SESSION["texto"])) {
    // lo mostramos 6
    print "  <p>El texto es: <strong>$_SESSION[texto]</strong>.</p>\n";
    print "\n";
}
?>

  <form action="sesiones-1-02-b-2.php" method="get">
    <p>Escriba texto:</p>
...

sesiones-1-02-b-2.php

<?php
// Se accede a la sesión 4
session_name("sesiones-1-02-b");
session_start();

// Funciones auxiliares 1
function recoge($var)
{
    $tmp = (isset($_REQUEST[$var]))
    ? trim(htmlspecialchars($_REQUEST[$var], ENT_QUOTES, "UTF-8"))
    : "";
    return $tmp;
}

// Recogemos el texto
$texto   = recoge("texto");

// Comprobamos el texto
if ($texto != "") {
    // Si el texto no es vacío, lo guardamos en la sesión
    $_SESSION["texto"] = $texto;
}

// Volvemos al formulario 5
header("Location:sesiones-1-02-b-1.php");
?>

Sesiones (1) 03 - Formulario Palabra en mayúsculas - Solución A

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 correción.

Este podría ser el orden en que se iría realizando este ejercicio:

  1. En la página 2 recogemos el dato enviado por el formulario de la página 1: función recoge() y variable para recoger el dato
  2. Como la primera página muestra siempre la palabra (si es correcta al principio de la página, si es incorrecta en la caja de texto), la guardamos en la sesión.
  3. Por tanto, la página 2 debe conectarse a la sesión.
  4. En la comprobación, si el dato es vacío, se guarda el aviso correspondiente.
  5. Si la palabra no está en mayúsculas, se guarda el aviso correspondiente.
  6. Si la palabra es correcta, se borran los avisos que pudiera haber de intentos anteriores.
  7. Finalmente, volvemos a la primera página.
  8. La página 1 debe conectarse a la sesión.
  9. Si hay un error guardado en la sesión, el formulario muestra el aviso y la palabra en la caja de texto.
  10. Si no hay un error guardado en la sesión, el formulario muestra la caja de texto.
  11. La palabra correcta debe mostrarse cuando no hay error, pero cuando además hay alguna palabra guardada (ya que la primera vez que se acedee a la primera página no hay error, pero no debe mostrarse nada).

sesiones-1-03-1.php

<?php
// Se accede a la sesión 8
session_name("sesiones-1-03");
session_start();
?>

<!DOCTYPE html>
...
<body>
  <h1>Formulario Palabra en mayúsculas (Formulario)</h1>

  <form action="sesiones-1-03-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"])) {
    // Escribimos un aviso e incluimos el valor incorrecto en el control
    print "    <p><strong>Palabra:</strong> <input type=\"text\" name=\"palabra\" value=\"$_SESSION[palabra]\" size=\"20\" maxlength=\"20\" /> "
        . "<span class=\"aviso\">$_SESSION[error]</span></p>\n";
    print "\n";
} else {
    // Si no hemos detectado un error, lo mostramos... 10
    print "    <p><strong>Palabra:</strong> <input type=\"text\" name=\"palabra\" size=\"20\" maxlength=\"20\" /></p>\n";
    print "\n";
}
?>
...

sesiones-1-03-2.php

<?php
// Se accede a la sesión 3
session_name("sesiones-1-03");
session_start();

// Funciones auxiliares 1
function recoge($var)
{
    $tmp = (isset($_REQUEST[$var]))
    ? trim(htmlspecialchars($_REQUEST[$var], ENT_QUOTES, "UTF-8"))
    : "";
    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-1-03-1.php");
?>

Sesiones (1) 03 - Formulario Palabra en mayúsculas - Solución B

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:

  1. En la página 2 recogemos el dato enviado por el formulario de la página 1: función recoge() y variable para recoger el dato
  2. Borramos todas las variables de sesión establecidas anteriormente.
  3. Por tanto, la página 2 debe conectarse a la sesión.
  4. En la comprobación, si el dato es vacío, se guarda el aviso correspondiente.
  5. Si la palabra no está en mayúsculas, se guarda el aviso correspondiente y la palabra escrita por el usuario (para mostrarla en la caja de texto).
  6. Si la palabra es correcta, se guarda la palabra escrita por el usuario.
  7. Finalmente, volvemos a la primera página.
  8. La página 1 debe conectarse a la sesión.
  9. Si hay un error y un intento guardados en la sesión, el formulario muestra el aviso y la palabra en la caja de texto.
  10. Si hay un error guardado en la sesión, el formulario muestra el aviso.
  11. Si no hay un error guardado en la sesión, el formulario muestra la caja de texto.
  12. Si hay una palabra guardada en la sesión, la palabra correcta debe mostrarse antes del formulario (ya que la palabra sólo se guarda cuando es correcta).

sesiones-1-03-b-1.php

<?php
// Se accede a la sesión 8
session_name("sesiones-1-03-b");
session_start();
?>

<!DOCTYPE html>
...
<body>
  <h1>Formulario Palabra en mayúsculas (Formulario)</h1>

  <form action="sesiones-1-03-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"]) && isset($_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 "    <p><strong>Palabra:</strong> <input type=\"text\" name=\"palabra\" value=\"$_SESSION[intento]\" size=\"20\" maxlength=\"20\" /> "
  . "<span class=\"aviso\">$_SESSION[error]</span></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 "    <p><strong>Palabra:</strong> <input type=\"text\" name=\"palabra\" size=\"20\" maxlength=\"20\" /> "
      . "<span class=\"aviso\">$_SESSION[error]</span></p>\n";
  print "\n";
} else {
  // Si no hemos detectado un error, mostramos simplemenete el control 11
  print "    <p><strong>Palabra:</strong> <input type=\"text\" name=\"palabra\" size=\"20\" maxlength=\"20\" /></p>\n";
  print "\n";
}
?>
...

sesiones-1-03-b-2.php

<?php
// Se accede a la sesión 3
session_name("sesiones-1-03-b");
session_start();

// Funciones auxiliares 1
function recoge($var)
{
    $tmp = (isset($_REQUEST[$var]))
    ? trim(htmlspecialchars($_REQUEST[$var], ENT_QUOTES, "UTF-8"))
    : "";
    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-1-03-b-1.php");
?>

Sesiones (1) 03 - Formulario Palabra en mayúsculas - Solución C

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 escribien bloques if que añaden texto en caso necesario.

Este podría ser el orden en que se iría realizando este ejercicio:

  1. En la página 2 recogemos el dato enviado por el formulario de la página 1: función recoge() y variable para recoger el dato
  2. Borramos todas las variables de sesión establecidas anteriormente.
  3. Por tanto, la página 2 debe conectarse a la sesión.
  4. En la comprobación, si el dato es vacío, se guarda el aviso correspondiente.
  5. Si la palabra no está en mayúsculas, se guarda el aviso correspondiente y la palabra escrita por el usuario (para mostrarla en la caja de texto).
  6. Si la palabra es correcta, se guarda la palabra escrita por el usuario.
  7. Finalmente, volvemos a la primera página.
  8. La página 1 debe conectarse a la sesión.
  9. Si hay un intento guardados en la sesión, añadimos el atributo value.
  10. Si hay un error guardado en la sesión, añadimos el error.
  11. Si hay una palabra guardada en la sesión, la palabra correcta debe mostrarse antes del formulario (ya que la palabra sólo se guarda cuando es correcta).

sesiones-1-03-c-1.php

<?php
// Se accede a la sesión 8
session_name("sesiones-1-03-c");
session_start();
?>

<!DOCTYPE html>
...
<body>
  <h1>Formulario Palabra en mayúsculas (Formulario)</h1>

  <form action="sesiones-1-03-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>Escriba una palabra en mayúsculas:</p>\n";
  print "\n";

  print "    <p><strong>Palabra:</strong> <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\" /> ";

  // 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-1-03-c-2.php

<?php
// Se accede a la sesión 3
session_name("sesiones-1-03-c");
session_start();

// Funciones auxiliares 1
function recoge($var)
{
    $tmp = (isset($_REQUEST[$var]))
    ? trim(htmlspecialchars($_REQUEST[$var], ENT_QUOTES, "UTF-8"))
    : "";
    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-1-03-c-1.php");
?>

Sesiones (1) 03 - Formulario Palabra en mayúsculas - Solución D

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:

  1. En la página 2 recogemos el dato enviado por el formulario de la página 1: función recoge() y variable para recoger el dato
  2. En la comprobación, si el dato es vacío, se guarda el aviso correspondiente y se borran el intento y la palabra anteriores.
  3. Si la palabra no está en mayúsculas, se guarda el aviso correspondiente y el intento y se borra la palabra anterior.
  4. Si la palabra es correcta, se guarda la palabra escrita por el usuario y se borran el intento y el error anteriores.
  5. Por tanto, la página 2 debe conectarse a la sesión.
  6. Finalmente, volvemos a la primera página.

sesiones-1-03-d-2.php

<?php
// Se accede a la sesión 5
session_name("sesiones-1-03-d");
session_start();

// Funciones auxiliares 1
function recoge($var)
{
    $tmp = (isset($_REQUEST[$var]))
    ? trim(htmlspecialchars($_REQUEST[$var], ENT_QUOTES, "UTF-8"))
    : "";
    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-1-03-d-1.php");
?>

Sesiones (1) 04 - Formulario Palabras en mayúsculas y minúsculas - Solución A

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 quevolver a escribir.

sesiones-1-04-1.php

<?php
// Se accede a la sesión 9
session_name("sesiones-1-04");
session_start();
?>

<!DOCTYPE html>
...
<body>
  <h1>Formulario Palabra en mayúsculas (Formulario)</h1>

  <form action="sesiones-1-04-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"]) && isset($_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><strong>Mayúsculas:</strong> <input type=\"text\" name=\"mayusculas\" value=\"$_SESSION[mayusculas]\" size=\"20\" maxlength=\"20\" /> "
        . "<span class=\"aviso\">$_SESSION[mayusculasError]</span></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><strong>Mayúsculas:</strong> <input type=\"text\" name=\"mayusculas\" value=\"$_SESSION[mayusculas]\" size=\"20\" maxlength=\"20\" /></p>\n";
    print "\n";
} else {
    // Si no hemos detectado un error, escribimos el control vacío 12
    print "    <p><strong>Mayúsculas:</strong> <input type=\"text\" name=\"mayusculas\" size=\"20\" maxlength=\"20\" /></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><strong>Minúsculas:</strong> <input type=\"text\" name=\"minusculas\" value=\"$_SESSION[minusculas]\" size=\"20\" maxlength=\"20\" /> "
    . "<span class=\"aviso\">$_SESSION[minusculasError]</span></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><strong>Minúsculas:</strong> <input type=\"text\" name=\"minusculas\" value=\"$_SESSION[minusculas]\" size=\"20\" maxlength=\"20\" /></p>\n";
    print "\n";
} else {
    // Si no hemos detectado un error, escribimos el control vacío
    print "    <p><strong>Minúsculas:</strong> <input type=\"text\" name=\"minusculas\" size=\"20\" maxlength=\"20\" /></p>\n";
    print "\n";
}
?>
...

sesiones-1-04-2.php

<?php
// Se accede a la sesión 3
session_name("sesiones-1-04");
session_start();

// Funciones auxiliares 1
function recoge($var)
{
    $tmp = (isset($_REQUEST[$var]))
    ? trim(htmlspecialchars($_REQUEST[$var], ENT_QUOTES, "UTF-8"))
    : "";
    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-1-04-1.php");
?>

Sesiones (1) 04 - Formulario Palabras en mayúsculas y minúsculas - Solución B

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-1-04-b-1.php

<?php
// Se accede a la sesión 9
session_name("sesiones-1-04-b");
session_start();
?>

<!DOCTYPE html>
...
<body>
  <h1>Formulario Palabra en mayúsculas (Formulario)</h1>

  <form action="sesiones-1-04-b-2.php" method="get">

<?php
//Si están guardadas en la sesión las dos palabras ... 14
if (isset($_SESSION["mayusculas"]) && isset($_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><strong>Mayúsculas:</strong> <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"]) && isset($_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\" /> ";

// 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><strong>Minúsculas:</strong> <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"]) && isset($_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\" /> ";

// 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-1-04-b-2.php

<?php
// Se accede a la sesión 3
session_name("sesiones-1-04-b");
session_start();

// Funciones auxiliares 1
function recoge($var)
{
    $tmp = (isset($_REQUEST[$var]))
    ? trim(htmlspecialchars($_REQUEST[$var], ENT_QUOTES, "UTF-8"))
    : "";
    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-1-04-1.php");
?>

Gráficos

Sesiones (1) 11 - Subir y bajar número

  1. Puesto que la página 2 redirige a la página 1, la página 2 no debe tener nada de HTML, ni ningún print.
  2. Primero, la página 2 debe recoger el dato enviado por el formulario de la página 1. En la página 1 hay 3 botones, pero los tres tienen el mismo name, por lo que sólo hay que recoger un dato.

    Como en los ejercicios anteriores: función recoge() y variable para recoger el dato

  3. El valor guardado en la sesión se modifica en la página 2, dependiendo del dato recibido (se aumenta, se reduce o se pone a cero).
  4. Para que la página 2 pueda guardar datos en $_SESSION, debemos unir la página a la sesión. Conviene dar nombre a la sesión para que cada ejercicio utilice su propia matriz $_SESSION distinta del resto.
  5. La variable de sesión se debe inicializar antes de modificarla (la manera más simple de hacerlo es darle valor si no existe).
  6. Finalmente, la página 2 redirige a la página 1.
  7. La página 1 muestra el número guardado en $_SESSION.
  8. Para que la página 1 pueda usar datos de $_SESSION, debemos unir la página a la sesión. El nombre de la sesión debe ser el mismo en ambas páginas.
  9. Pero la primera vez que se abre la página, $_SESSION no contiene ningún dato e intentar imprimirlo provocaría un error, por lo que damos valor a la variable si no existe.

sesiones-1-11-1.php

<?php
// Se accede a la sesión 7
session_name("sesiones-1-11");
session_start();

// Si el número no está guardado en la sesión, lo pone a cero
if (!isset($_SESSION["numero"])) {8
    $_SESSION["numero"] = 0;
}
?>

<!DOCTYPE html>
...
    <p>
      <button type="submit" name="accion" value="bajar" style="font-size: 4rem">-</button>

<?php
// Muestra el número, guardado en la sesión 6
print "      <span style=\"font-size: 4rem\">$_SESSION[numero]</span>\n";
?>

      <button type="submit" name="accion" value="subir" style="font-size: 4rem">+</button>
    </p>
...

sesiones-1-11-2.php

<?php
// Se accede a la sesión 3
session_name("sesiones-1-11");
session_start();

// Si el número no está guardado en la sesión, lo pone a cero (el valor inicial) 4
if (!isset($_SESSION["numero"])) {
    $_SESSION["numero"] = 0;
}

// Funciones auxiliares 1
function recoge($var)
{
    $tmp = (isset($_REQUEST[$var]))
    ? trim(htmlspecialchars($_REQUEST[$var], ENT_QUOTES, "UTF-8"))
    : "";
    return $tmp;
}

// Recogida de accion
$accion   = recoge("accion");

// Dependiendo de la acción recibida, modifica el número guardado 2
if ($accion == "cero") {
    $_SESSION["numero"] = 0;
} elseif ($accion == "subir") {
    $_SESSION["numero"] ++;
} elseif ($accion == "bajar") {
    $_SESSION["numero"] --;
}

// y vuelve al formulario 5
header("Location:sesiones-1-11-1.php");
?>

Sesiones (1) 12 - Mover un punto a derecha e izquierda

Este ejercicio es muy similar al anterior: mediante dos botones se aumenta o disminuye un valor. la diferencia es que en este ejercicio el valor no se muestra, pero se utiliza para situar un punto en una línea.

  1. Puesto que la página 2 redirige a la página 1, la página 2 no debe tener nada de HTML, ni ningún print.
  2. Primero, la página 2 debe recoger el dato enviado por el formulario de la página 1. En la página 1 hay 3 botones, pero los tres tienen el mismo name, por lo que sólo hay que recoger un dato.

    Como en los ejercicios anteriores: función recoge() y variable para recoger el dato.

  3. El valor que se utiliza en la página 1 se modifica en la página 2, dependiendo del dato recibido (se aumenta, se reduce o se pone a cero).
  4. Para que la página 2 pueda guardar datos en $_SESSION, debemos unir la página a la sesión. Conviene dar nombre a la sesión para que cada ejercicio utilice su propia matriz $_SESSION distinta del resto.
  5. La variable de sesión se debe inicializar antes de modificarla (la manera más simple de hacerlo es darle valor si no existe).
  6. Para que cuando el punto salga por un lado del dibujo entre por el otro, se debe comprobar si el valor supera los extremos y, en su caso, cambiarlo por el otro valor extremo.
  7. Finalmente, la página 2 redirige a la página 1.
  8. La página 1 dibuja el punto rojo en la imagen SVG utilizando el número guardado en $_SESSION.
  9. Para que la página 1 pueda usar datos de $_SESSION, debemos unir la página a la sesión. El nombre de la sesión debe ser el mismo en ambas páginas.
  10. Pero la primera vez que se abre la página, $_SESSION no contiene ningún dato e intentar imprimirlo provocaría un error, por lo que damos valor a la variable si no existe.

sesiones-1-12-1.php

<?php
// Se accede a la sesión 8
session_name("sesiones-1-12");
session_start();

// Si la posición no está guardada en la sesión, la pone a cero 9
if (!isset($_SESSION["posicion"])) {
    $_SESSION["posicion"] = 0;
}
?>

<!DOCTYPE html>
...
            <line x1=\"-300\" y1=\"10\" x2=\"300\" y2=\"10\" stroke=\"black\" stroke-width=\"5\" />
<?php
// Dibuja el círculo en su posición 7
print "            <circle cx=\"$_SESSION[posicion]\" cy=\"10\" r=\"8\" fill=\"red\" />\n";
?>
          </svg>
...

sesiones-1-12-2.php

<?php
// Se accede a la sesión 3
session_name("sesiones-1-12");
session_start();

// Si la posición no está guardada en la sesión, la pone a cero 4
if (!isset($_SESSION["posicion"])) {
    $_SESSION["posicion"] = 0;
}

// Funciones auxiliares 1
function recoge($var)
{
    $tmp = (isset($_REQUEST[$var]))
    ? trim(htmlspecialchars($_REQUEST[$var], ENT_QUOTES, "UTF-8"))
    : "";
    return $tmp;
}

// Recogida de accion
$accion   = recoge("accion");


// Dependiendo de la acción recibida, modifica el número guardado 2
if ($accion == "centro") {
    $_SESSION["posicion"] = 0;
} elseif ($accion == "izquierda") {
    $_SESSION["posicion"] -= 20;
} elseif ($accion == "derecha") {
    $_SESSION["posicion"] += 20;
}

// si sale por un lado, entra por el otro 5
if ($_SESSION["posicion"] > 300) {
    $_SESSION["posicion"] = -300;
} elseif ($_SESSION["posicion"] < -300) {
    $_SESSION["posicion"] = 300;
}

// y vuelve al formulario 6
header("Location:sesiones-1-12-1.php");
?>

Sesiones (1) 13 - Mover un punto en dos dimensiones

Este ejercicio es muy similar al anterior. La diferencia es que en este ejercicio se tendrán que guardar dos valores (coordenada X y coordenada Y) para situar el punto en el plano.

  1. Puesto que la página 2 redirige a la página 1, la página 2 no debe tener nada de HTML, ni ningún print.
  2. Primero, la página 2 debe recoger el dato enviado por el formulario de la página 1. En la página 1 hay 5 botones, pero los cinco tienen el mismo name, por lo que sólo hay que recoger un dato.

    Como en los ejercicios anteriores: función recoge() y variable para recoger el dato.

  3. Los dos valores que se utilizan en la página 1 se modifican en la página 2, dependiendo del dato recibido (se aumenta o se reduce uno de ellos o se ponen los dos a cero).
  4. Para que la página 2 pueda guardar datos en $_SESSION, debemos unir la página a la sesión. Conviene dar nombre a la sesión para que cada ejercicio utilice su propia matriz $_SESSION distinta del resto.
  5. Las variables de sesión se deben inicializar antes de modificarlas (la manera más simple de hacerlo es darles valor si no existen).
  6. Para que cuando el punto salga por un lado del dibujo entre por el otro, se debe comprobar si el valor supera los extremos y, en su caso, cambiarlo por el otro valor extremo.
  7. Finalmente, la página 2 redirige a la página 1.
  8. La página 1 constuye una imagen SVG utilizando los dos números guardados en $_SESSION.
  9. Para que la página 1 pueda usar datos de $_SESSION, debemos unir la página a la sesión. El nombre de la sesión debe ser el mismo en ambas páginas.
  10. Pero la primera vez que se abre la página, $_SESSION no contiene ningún dato e intentar imprimirlo provocaría un error, por lo que damos valor a las variables si no existen.

sesiones-1-13-1.php

<?php
// Se accede a la sesión 8
session_name("sesiones-1-13");
session_start();

// Si alguna posición no está guardada en la sesión, las pone a cero 9
if (!isset($_SESSION["x"]) || !isset($_SESSION["y"])) {
    $_SESSION["x"] = $_SESSION["y"] = 0;
}
?>

<!DOCTYPE html>
...
        <td>
          <svg version="1.1" xmlns="http://www.w3.org/2000/svg"
          width="400" height="400" viewbox="-200 -200 400 400" style="border: black 2px solid">

<?php
// Dibuja el círculo en su posición 7
print "            <circle cx=\"$_SESSION[x]\" cy=\"$_SESSION[y]\" r=\"8\" fill=\"red\" />\n";
?>

  </svg>
  </td>
...

sesiones-1-13-2.php

<?php
// Se accede a la sesión 3
session_name("sesiones-1-13");
session_start();

// Si alguna posición no está guardada en la sesión, las pone a cero 4
if (!isset($_SESSION["x"]) || !isset($_SESSION["y"])) {
    $_SESSION["x"] = $_SESSION["y"] = 0;
}

// Funciones auxiliares 1
function recoge($var)
{
    $tmp = (isset($_REQUEST[$var]))
    ? trim(htmlspecialchars($_REQUEST[$var], ENT_QUOTES, "UTF-8"))
    : "";
    return $tmp;
}

// Recogida de accion
$accion   = recoge("accion");

// Dependiendo de la acción recibida, modifica el número guardado 2
if ($accion == "centro") {
    $_SESSION["x"] = $_SESSION["y"] = 0;
} elseif ($accion == "izquierda") {
    $_SESSION["x"] -= 20;
} elseif ($accion == "derecha") {
    $_SESSION["x"] += 20;
} elseif ($accion == "arriba") {
    $_SESSION["y"] -= 20;
} elseif ($accion == "abajo") {
    $_SESSION["y"] += 20;
}

// si sale por un lado, entra por el otro 5
if ($_SESSION["x"] > 200) {
    $_SESSION["x"] = -200;
} elseif ($_SESSION["x"] < -200) {
    $_SESSION["x"] = 200;
}

// si sale por un lado, entra por el otro
if ($_SESSION["y"] > 200) {
    $_SESSION["y"] = -200;
} elseif ($_SESSION["y"] < -200) {
    $_SESSION["y"] = 200;
}

// y vuelve al formulario 6
header("Location:sesiones-1-13-1.php");
?>

Sesiones (1) 14 - Votar una opción

Este ejercicio es muy similar al anterior. La diferencia es que cada valor se utiliza en un dibujo distinto.

  1. Puesto que la página 2 redirige a la página 1, la página 2 no debe tener nada de HTML, ni ningún print.
  2. Primero, la página 2 debe recoger el dato enviado por el formulario de la página 1. En la página 1 hay 3 botones, pero los tres tienen el mismo name, por lo que sólo hay que recoger un dato.

    No hace falta comprobar el dato porque el programa sólo hará caso de los valores correctos.

  3. Los dos valores que se utilizan en la página 1 se modifican en la página 2, dependiendo del dato recibido (se aumenta uno de ellos o se ponen los dos a cero).
  4. Para que la página 2 pueda guardar datos en $_SESSION, debemos unir la página a la sesión. Conviene dar nombre a la sesión para que cada ejercicio utilice su propia matriz $_SESSION distinta del resto.
  5. Las variables de sesión se deben inicializar antes de modificarlas (la manera más simple de hacerlo es darles valor si no existen).
  6. Finalmente, la página 2 redirige a la página 1.
  7. La página 1 constuye la primera imagen SVG utilizando uno de los números guardados en $_SESSION. El número se utiliza en dos sitios.
  8. La página 1 constuye la segunda imagen SVG utilizando el otro número guardado en $_SESSION. El número se utiliza en dos sitios.
  9. Para que la página 1 pueda usar datos de $_SESSION, debemos unir la página a la sesión. El nombre de la sesión debe ser el mismo en ambas páginas.
  10. Pero la primera vez que se abre la página, $_SESSION no contiene ningún dato e intentar imprimirlo provocaría un error, por lo que damos valor a las variables si no existen.

sesiones-1-14-1.php

<?php
// Se accede a la sesión 8
session_name("sesiones-1-14");
session_start();

// Si algún contador no está guardado en la sesión, los pone a cero 9
if (!isset($_SESSION["a"]) || !isset($_SESSION["b"])) {
    $_SESSION["a"] =  $_SESSION["b"] = 0;
}
?>

<!DOCTYPE html>
...
      <tr>
        <td style="vertical-align: top;"><button type="submit" name="accion" value="a" style="font-size: 60px; line-height: 50px; color: hsl(200, 100%, 50%);">✔</button></td>
        <td>
<?php
// Dibujamos la primera barra 6
print "          <svg version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" \n";
print "            width=\"$_SESSION[a]\" height=\"50\">\n";
print "            <line x1=\"0\" y1=\"25\" x2=\"$_SESSION[a]\" y2=\"25\" stroke=\"hsl(200, 100%, 50%)\" stroke-width=\"50\" />\n";
print "          </svg>\n";
?>
        </td>
      <tr>
        <td><button type="submit" name="accion" value="b" style="font-size: 60px; line-height: 50px; color: hsl(35, 100%, 50%)">✔</button></td>
        <td>
<?php
// Dibujamos la segunda barra 7
print "          <svg version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" \n";
print "            width=\"$_SESSION[b]\" height=\"50\">\n";
print "            <line x1=\"0\" y1=\"25\" x2=\"$_SESSION[b]\" y2=\"25\" stroke=\"hsl(35, 100%, 50%)\" stroke-width=\"50\" />\n";
print "          </svg>\n";
?>
        </td>
      </tr>
    </table>
...

sesiones-1-14-2.php

<?php
// Se accede a la sesión 3
session_name("sesiones-1-14");
session_start();

// Si alguno de los números de votos no está guardado en la sesión, los pone a cero 4
if (!isset($_SESSION["a"]) || !isset($_SESSION["b"])) {
    $_SESSION["a"] =  $_SESSION["b"] = 0;
}

// Funciones auxiliares 1
function recoge($var)
{
    $tmp = (isset($_REQUEST[$var]))
    ? trim(htmlspecialchars($_REQUEST[$var], ENT_QUOTES, "UTF-8"))
    : "";
    return $tmp;
}

// Recogida de accion
$accion = recoge("accion");

// Dependiendo de la acción recibida, modifica el número correspondiente 2
if ($accion == "a") {
    $_SESSION["a"] += 10;
} elseif ($accion == "b") {
    $_SESSION["b"] += 10;
} elseif ($accion == "cero") {
    $_SESSION["a"] = $_SESSION["b"] = 0;
}

// y vuelve al formulario 5
header("Location:sesiones-1-14-1.php");
?>