# Ejercicios - Sesiones - Comentarios

Esta página contiene comentarios ampliados con fragmentos de código PHP.

## Sesiones 1

### Comentarios ampliados

Volver al principio de la página

## Sesiones 2

### Comentarios ampliados

- El programa se compone de una única página. Por tanto, el formulario debe enviar los datos a la propia página. En el atributo action podemos escribir:
  - el nombre de la página

        print "<form action=\"pagina.php">";

  - $_SERVER[PHP_SELF], que contiene la ruta de la página

        print "<form action=\"$_SERVER[PHP_SELF]\">";

  Las dos opciones son correctas. La ventaja de la segunda opción es que seguiría funcionando aunque cambiaramos el nombre del fichero php.

- Como la creación y destrucción de la sesión debe hacer antes de hacer ningún print, la estructura del programa debería ser algo parecido a esto:

      creación de la sesión
      recogida y validacion de datos (sin imprimir nada aunque se detecten errores)
      destrucción de la sesión (en su caso)
      cabecera
      mensajes de error (en su caso)
      formulario
      imprimir valroes guardado en $_SESSION
      pie

- La página debe recoger los dos campos enviado por el formulario: el texto a guardar ($nombre) y el botón submit pulsado ($accion).

  En el ejemplo no hay dos botones submit, sólo hay uno (el otro botón del formulario es un botón reset, para borrar los valores del formulario antes de enviarlo), pero hay un enlace que llama a la propia página enviando una acción como si fuera un botón, así que es como si hubiera dos botones.

- La página debe comprobar que los valores recibidos son correctos, es decir:
  - que $nombre está compuesto únicamente por letras y espacios
  - que el botón pulsado es uno de los tres posibles (Añadir, Cerrar o vacío)
- Si hay que guardar los datos en la matriz sesión, podemos crear un índice numérico contando los datos que ya hay almacenados, por lo que la instrucción podría ser algo de este estilo:

      $numeroDatos = count($_SESSION);
      if ($nombreOk && ($nombre!='')) {
          $_SESSION['nombre_'.$numeroDatos] = $nombre;
      }

- El formulario tiene un único campo de texto y dos botones: Añadir (de tipo submit) y Borrar (de tipo reset).

  En el ejemplo, el botón Añadir tiene el atributo name, pero no es imprescindible, se puede hacer el programa sin ponerle name, ya que si llega el campo nombre sabemos que se ha hecho clic en Añadir.

- Para listar los valores de $_SESSION, basta un bucle foreach

      print "<p>Datos introducidos:</p>\n<ul>\n";
      foreach ($_SESSION as $valor) {
          print "  <li>$valor</li>\n";
      }
      print "</ul>\n";

- El enlace para cerrar la sesión tiene que enviar el campo accion con el valor Cerrar, por ejemplo:

      print "<p><a href=\"$_SERVER[PHP_SELF]?accion=Cerrar\">Cerrar sesión
        (se perderán los datos almacenados).</a></p>\n";

  Es equivalente poner un formulario con un botón submit con name "accion" y value "Cerrar" que poner un enlace cuyo href sea el mismo al que produciría un formulario (un formulario de method GET, claro).

Volver al principio de la página

Esta obra está bajo una licencia de Creative Commons Reconocimiento-CompartirIgual 3.0 España.