# Varios 1

## Situar el cursor en un control al cargar un formulario

Una forma de facilitar el uso de una página con controles es situar automáticamente el cursor en el control que probablemente va a utilizar el usuario, ahorrando al usuario el tener que hacer clic en ese control. Esto se puede conseguir mediante Javascript.

Una manera de hacerlo es asignar el atributo id del control sobre el que se quiere situar el cursor automáticamente y establecer el atributo onload del elemento body con el valor document.getElementById('XYZ').focus(), donde XYZ es el id del control, como muestra el ejemplo siguiente:

    <body onload="document.getElementById('cursor').focus()">
    <form action="validar1.php">
      <p>Al cargar esta página, el cursor sitúa automáticamente en la primera caja de texto:</p>
      <table>
        <tbody>
          <tr>
            <td>Usuario:</td>
            <td><input type="text" name="usuario" id="cursor" /></td>
          </tr>
          <tr>
            <td>Contraseña:</td>
            <td><input type="password" name="password" /></td>
          </tr>
        </tbody>
      </table>
      <p><input type="submit" value="Entrar" /></p>
    </form>
    </body>
| Al cargar esta página, el cursor se sitúa automáticamente en la primera caja de texto:
Usuario: |
Contraseña: |

Volver al principio de la página

## Diferencias entre print y echo

print y echo son dos sentencias de PHP prácticamente equivalentes y se puede utilizar cualquiera de las dos en las mismas situaciones. Sin embargo, hay alguna diferencia entre ellas:

- echo admite varios argumentos separados por comas, mientras que print sólo admite un argumento (los argumentos deben concatenarse con el operador punto):

      <?php
      $titulo = "Diferencias entre print y echo";
      echo "<p>", $titulo, "</p>";
      print "<p>".$titulo."</p>";
      ?>
  | <p>Diferencias entre print y echo</p> <p>Diferencias entre print y echo</p>

- print devuelve el resultado de la operación (1 si ha funcionado correctamente), mientras que echo no devuelve ningún resultado.

  Eso permite utilizar print en construcciones en que no se puede utilizar echo. Por ejemplo el siguiente ejemplo:

      <?php
      $numero = 5;
      print "<p>El número $numero es ";
      if ($numero >= 0) {
          print "positivo";
      } else  {
          print "negativo";
      }
      print "</p>";
      ?>
  | <p>El número 5 es positivo</p>

  puede escribirse utilizando el operador ternario ? : de la siguiente manera:

      <?php
      $numero = 5;
      print "<p>El número $numero es ";
      ($numero >= 0) ? print "positivo" : print "negativo";
      print "</p>";
      ?>
  | <p>El número 5 es positivo</p>

  En este caso la utilización de echo produciría un error:

      <?php
      $numero = 5;
      print "<p>El número $numero es ";
      ($numero >= 0) ? echo "positivo" : echo "negativo";
      print "</p>";
      ?>
  | Parse error: parse error, unexpected T_ECHO in ejemplo.php on line 4

- la gente que ha hecho pruebas de velocidad dice que echo es ligerísimamente más rápido que print, pero hacen falta generar miles de echo para notar alguna diferencia, por lo que la velocidad no es determinante para utilizar uno u otro.

En resumen, no parece haber una razón de peso para preferir usar print en vez de echo o viceversa. Parece que la elección de uno u otro es personal y basada en la costumbre o la familiaridad con otros lenguajes o entornos en los que uno de los dos está más extendido. En estos apuntes se utiliza preferentemente print.

Volver al principio de la página

## La función header()

La función header() permite enviar cabeceras http.

Las cabeceras deben enviarse antes de enviar la página (el texto de la página). Si no es así, las cabeceras no se podrán enviar y se mostrará un mensaje de aviso (si el servidor está configurado para mostrarlos), como muestra el ejemplo siguiente.

    <?php
    print "<p>Intento fallido de redirección</p>";
    header('Location: http://www.example.com');
    exit();
    ?>
| Intento fallido de redirección Warning: Cannot modify header information - headers already sent by (output started at ejemplo.php:2) in ejemplo.php on line 3

Hay que tener en cuenta que si PHP utiliza un buffer intermedio, creado por la directiva output_buffering, no se produciría este error y se realizaría la redirección.

### Redirigir una página con header("Location: ...")

La función header() se puede utilizar para redirigir automáticamente a otra página, enviando como argumento la cadena Location: seguida de la dirección absoluta o relativa de la página a la que queremos redirigir.

    <?php
    header('Location: http://www.example.com');
    ?>

Si se escriben varias cabeceras iguales, se aplicará la última. En el ejemplo siguiente, la página redirigiría a www.mclibre.org

    <?php
    header('Location: http://www.example.com');
    header('Location: http://www.mclibre.org');
    // Esta página redirige a www.mclibre.org
    ?>

Para asegurarnos de que cabeceras que se encuentran posteriormente anulan una cabecera, se puede utilizar la función exit(), que detiene el programa en ese punto, como muestra el ejemplo siguiente:

    <?php
    header('Location: http://www.example.com');
    exit();
    header('Location: http://www.mclibre.org');
    // Esta página redirige a www.example.com
    ?>

Ejemplo de uso de redirección: Supongamos que tenemos un formulario (confirmar.php) para confirmar una acción destructiva (borrar datos de una base de datos, por ejemplo) que envía la confirmación a destruir.php. Para tener en cuenta el caso de que un usuario acceda directamente a la página destruir.php sin haber confirmado la acción en confirmar.php, podemos hacer que se compruebe si se ha recibido la confirmación y en caso contrario redirigir a la página principal del sitio.

    <?php
    // destruir.php
    if (!isset($_REQUEST['si'])) {
        header('Location:index.php');
        exit();
    } else {
     ...
    ?>

Volver al principio de la página

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