SlideShare une entreprise Scribd logo
1  sur  6
Télécharger pour lire hors ligne
Utilizando formularios


PHP dinámico
                                       ¿Que valor tiene register_globals en tu php.ini?
                                          Cuando hablábamos de la configuración de PHP, hacíamos alusión a la directiva
Lo que hemos visto hasta el            register_globals y decíamos que tenía dos opciones de configuración: ON y OFF. Decíamos
momento, solo nos ha servido para      también que según el valor que tuviera esa configuración cambiaría el modo de afrontar
escribir una serie de scripts PHP y    diversos asuntos.
ver los resultados de su ejecución,
pero aún no hemos visto de qué           Habíamos optado por ponerla como: register_globals=ON, pero no está de más el
forma se puede lograr que
                                       comprobarlo.
interactúen el cliente y el
servidor.
                                          Busquemos el fichero php.ini que estará en el directorio Windows –salvo que el
Veamos cómo hacerlo.                   directorio en que tienes instalado Windows se llame de otra manera– abrámoslo y
                                       comprobemos que es cierto que register_globals=ON. Si no fuera así, modificaríamos
                                       esa directiva y guardaríamos los cambios.
Envío a través del
navegador
                                           ¡Cuidado!
La forma más simple de que un            Antes de hacer una modificación en php.ini ó en httpd.conf desactiva el servidor Apache.
cliente pueda enviar valores a un        Cuando hayas acabado con los cambios vuelve a ponerlo en marcha (de lo contrario te
servidor es incluir esos valores en
                                         aparecerá el mensaje: no se puede encontrar el servidor) y ya arrancará atendiendo a la
la propia petición, insertándolos
directamente en la barra de              nueva configuración. ¡No te olvides nunca de hacerlo así! Te evitarás un montón de
direcciones del navegador.               sobresaltos.

Forma de envío
                                       Tabla de multiplicar
Deberá insertarse –en la barra de
direcciones del navegador– lo
siguiente:                              <?
                                        /* Escribamos una instrucción, que imprima en pantalla
pagina.php?n1=v1&n2=v2                     el valor de una variable ($a), una "x" que hará funciones de aspa
                                           en la presentación, otra variable ($b), el signo igual
donde
                                           y $a*$b que es el producto de ambas variables
pagina.php será la dirección de la         El simbolo de multiplicar es (*)       */
página que contiene el script que       print ($a." x ".$b." = ".$a*$b);
ha de procesar los valores              # Añadamos una bobadilla, para animar... ;-)
transferidos.                           print ("<br> ¡¡Ya eres mayorcit@.. Deberías saberte la tabla");
                                        ?>
? es un carácter obligatorio que
indica que detrás de él van a ser
insertados nombres de variables y                                       ejemplo13.php
sus valores.

n1, n2, etcétera representan los
nombres de las variables.
                                         Ejecuta este ejemplo y observa lo que aparece. ¿Sólo x =0? ¿y la otra línea?

= es el separador de los nombres          El resultado es lógico. No hemos asignado valores a las variables $a y $b y por eso no
de las variables y sus valores         escribió su valor. Sin embargo, a la hora de multiplicar -recuerda que una variable vacía
respectivos.                           es interpretada como cero a la hora de hacer operaciones– la interpretó como cero y –con
                                       muy buen criterio– nos respondió que cero por cero es cero.
v1, v2,... simbolizan el valor
asignado a cada una de las                Escribamos ahora en la barra de direcciones del navegador la siguiente dirección:
variables.                             http://localhost/cursoPHP/ejemplo13.php?a=21&b=456, (también puedes pulsar en este
& es el símbolo que separa los         enlace) y podremos comprobar que 21 x 456 = 9576 .
distintos bloques variable = valor.
                                          Hagamos un nuevo experimento. Vayamos a php.ini y cambiemos la configuración.
Los nombres de las variables           Pongamos register_globals= OFF. ¡No te olvides de apagar el servidor antes de hacer
nunca llevan el signo $.               estos cambios!
Los valores de las variables –sean       Una vez hecho el cambio, pulsemos de nuevo en el enlace, y veremos que esta vez no
números o cadenas– nunca se            ha recibido los valores de a y b y nos ha dado cero como resultado.
escriben entre comillas.
                                         Lo intentaremos con este nuevo script manteniendo register_globals=OFF.
Se pueden incluir tantos nombre =
valor como se desee. La única
restricción es la longitud máxima       <?
permitida por el método GET (el
utilizado en este caso) que se sitúa    /* Modifiquemos la instrucción anterior
en torno a los 2.000 caracteres.           y utilicemos las variables predefinidas
                                           $HTTP_GET_VARS['a'], $HTTP_GET_VARS['b']
Recepción de datos                         en vez de $a y $b que utilizabamos en el ejemplo anterior */

Cuando es recibida por el servidor
                                        # Pongamos un comentario de advertencia. Recuerda que <br>
la petición de un documento con         # sirve para insertar un salto de línea en la salida
extensión .php en la que tras el        print ("Este resultado es el que utiliza $HTTP_GET_VAR<br>");
signo ? se incluyen una o varias
parejas nombre = valor, los             print ($HTTP_GET_VARS['a']." x ".$HTTP_GET_VARS['b']." = ".
nombres de las variables y sus                                           $HTTP_GET_VARS['a']*$HTTP_GET_VARS
valores respectivos se incluyen, de     ['b']);
forma automática, en variables
predefinidas del tipo:                  /* Ahora trataremos de comprobar que también podemos
$HTTP_GET_VARS['n1']
                                            utilizar la superglobal $_GET como $_GET['a'] y $_GET['b']
                                                con iguales resultados que las anteriores */
$HTTP_GET_VARS['n2']

en las que n1, n2, ... coinciden        # Un comentario para identificar el origen del resultado
exactamente con nombres
asignados a cada una de las
                                        print("<br>El resultado siguiente ha sido generado usando $_GET <br>");
variables en esa transferencia.

Cada una de esas variables              print ($_GET['a']." x ".$_GET['b']." = ".$_GET['a']*$_GET['b']);
contendrá como valor aquel que
hubiera recibido a través de la          ?>
petición.

Si la versión de PHP es superior a                                          ejemplo14.php
la 4.1.0, esos mismos valores se
incluirán en variables
superglobales del tipo $_GET de
modo que –en el supuesto de que            Escribamos ahora en la barra de direcciones del navegador la siguiente dirección:
la versión lo soporte– los valores      http://localhost/cursoPHP/ejemplo14.php?a=21&b=456, (o pulsemos directamente en
de la petición también (esta            este enlace) y podremos comprobar que 21 x 456 aún es igual 9576.
opción no excluye la anterior)
estarían disponibles en:
                                           ¡Cuidado!
$_GET['n1']
                                          Aquí, más que nunca, conviene reiterar, una vez más, los errores de sintaxis más frecuentes:
$_GET['n2']

Según el modo en que esté                     s   Los nombres de variables son distintos si se cambian mayúsculas y minúsculas. Pon
configurado el php.ini podría                     mucho cuidado en escribirlos correctamente.
caber una tercera posibilidad de              s   Los nombres de las variables predefinidas, tales como $HTTP_GET_VARS, $_GET,
registro de esos valores.                         etcétera van en mayúsculas.
                                              s   No olvides poner punto y coma al final de cada línea de instrucciones.
Si la directiva register_globals –en
                                              s   Presta atención a la apertura/cierre de comillas y mucha más atención aún si se trata
el fichero php.ini– está
configurada con la opción ON, los                 de comillas anidadas. En este caso procura usar (") para las exteriores y (') para las
valores transferidos desde el                     interiores.
navegador –además de ser
recogidos en las variables
anteriores– son asignados a otras
variables del tipo: $n1, $n2, ...          ¡Cuidado!
cuyos nombres son el resultado de
anteponer el símbolo $ a los              En modo local puedes establecer las configuraciones de php.ini a tu antojo y, además, estás
nombres de las variables
                                          utilizando una versión –4.3.11– de PHP que permite superglobales. Esta versión –junto con
contenidas en la petición.
                                          la posibilidad de modificar php.ini– te permite utilizar cualquiera de las opciones de
La elección a la hora de escribir los     transferencia de variables.
scripts de uno u otro tipo de             Pero, si pretendes publicar tus páginas utilizando un hosting ajeno debes cerciorarte de cual
variable debe hacerse teniendo en         es su versión de PHP –no todos tienen instaladas versiones superiores a 4.1.0– y conocer la
cuenta que:                               configuración de sus php.ini.
– Esta última –sin duda la más            Ten en cuenta que allí no vas a poder modificar las configuraciones y de no tener en cuenta
cómoda– tiene el problema de que          estos aspectos, puedes verte obligad@ a modificar tu código fuente para adecuarlo a la
sólo es válida cuando                     configuración de tu hosting.
register_globals=on y, además, es
la más insegura de todas.
                                        Un formulario
– La superglobal $_GET tiene una
sintaxis más corta que su
alternativa y, además, añade como        <HTML>
ventaja su condición de                  <HEAD>
superglobal, que permite                 </HEAD>
utilizarla en cualquier ámbito sin       <BODY>
necesidad de declararla
expresamente como global. Es la
opción del futuro. Su único              <!-- Un formulario debe empezar siempre con una etiqueta de este tipo <form ...>
inconveniente es que puede no            en la que será obligatorio indicar con esta sintaxis action='nombre.extension'
estar disponible en hostings que         nombre.extension debe contener el nombre (o la ruta completa en el caso de que
aún mantienen versiones antiguas         estuviera en un directorio o hosting distinto del que alberga el documento que
de PHP.                                  contiene el formulario desde el que se realiza la petición) Es opcional incluir method
                                         que puede tener dos valores method='GET' ó method='POST', por defecto (cuando
Envío a través de                        no se indica) el envio se realizará usando method='GET' También es opcional -a los
formularios                              efectos de PHP- incluir name. Ese valor es útil cuando se incluyen scripts del lado del
                                         cliente del tipo JavaScript //--> <form name='mi_formulario' action='formu1.php'
                                         method='post'> <!-- Pueden incluirse textos dentro del formulario --> Escribe tu
La interacción cliente–servidor que
                                         nombre: <!-- Uno de los tipos de campos posibles es el tipo texto su sintaxis
acabamos de ver, resulta
incómoda en su uso y no
                                         (hablamos de HTML) requiere la etiqueta <input type='text'> que indica el
demasiado estética.                      contenido del texto esa etiqueta debe incluir obligatoriamente un name='nombre' el
                                         nombre a usar serán caracteres alfabéticos, sin tildes ni eñes y sin espacios. Salvo
Hay una segunda opción –la de            excepciones que comentaremos no puede usarse el mismo nombre para dos campos
uso más frecuente– que es la             distintos el value='' puede no contener nada entre las comillas tal como ocurre aquí o
utilización de formularios.              contener el texto que por defecto queremos que aparezca en ese campo al cargar el
                                         formulario. el size=xx es opcional. Su utilidad es la de ajustar el tamaño de la
Los formularios no son ele- mentos
                                         ventana al número de caracteres que se indiquen //--> <input type='text'
propios de PHP –actúan del lado
del cliente– y su estudio es más         name='nombre' value='' size=15><br> Escribe tu clave: <!-- <input
propio del ámbito de HTML que de         type='password'> solo se diferencia del anterior en que en el momento de
PHP.                                     rellenarlo se sustituyen los carecteres visualizados (no el contenido) por asteriscos //--
                                         > <input type='password' name='clave' value=''><br> Elige tu color de coche
En cualquier caso –por si te fuera       favorito:<br> <!-- Los <input type='radio'> permite optar entre varios valores
necesario– aquí a la derecha tienes      posibles. Habrá que repetirlos tantas veces como opciones queramos habilitar. Todos
un formulario, en el que se              los input –correspondientes a la misma opción– deben tener el mismo nombre
comenta la sintaxis de sus
                                         (name) value='loquesea' deberá tener un valor distinto en cada uno de ellos. Ese
elementos más comunes.
                                         valor (loquesea) será transferido a través del formulario Si queremos que una opción
                                         aparezca marcada (por defecto) al cargar el formulario, deberemos incluir en su
Interpretación de los                    etiqueta la palabra checked los contenidos de value no se visualizan en el navegador
datos recibidos a través                 por lo que conviene incluir una descripción de los valores después de cerrar la etiqueta
de formularios                           de cada input Al enviar el formulario solo se transmite el value correspondiente a la
                                         opción seleccionada //--> <input type='radio' name='color' value='Rojo'>Rojo</br>
Igual que ocurría en el caso             <input type='radio' checked name='color' value='Verde'>Verde</br> <input
anterior, los datos enviados a           type='radio' name='color' value='Azul'>Azul</br> Elige los extras:<br> <!-- Cada
través de un formulario son              uno de los <input type='checkbox'> requiere un nombre distinto (name) y un
recogidos en diferentes tipos de         valor (value) permite optar entre varios Esos valor (loquesea) serám transferido a
variables predefinidas, pero ahora       través del formulario cuando la casilla de verificación esté marcada Si queremos que
se añade una nueva particularidad.       una casilla aparezca marcada (por defecto) al cargar el formulario, deberemos incluir
                                         en su etiqueta la palabra checked los contenidos de value tampoco aquí se visualizan
Existe la posibilidad de dos
                                         en el navegador por lo que conviene incluir una descripción de los valores después de
métodos (method) de envío:
                                         cerrar la etiqueta de cada input Al enviar el formulario solo se transmite los value
'GET' y 'POST'. En el caso anterior
decíamos que se utilizaba el
                                        correspondiente a la opcion marcadas //--> <input type='checkbox'
método GET, pero en el caso de          name="acondicionado" value="Aire"> Aire acondicionado<br> <input
los formularios son posibles ambos
                                        type='checkbox' checked name="tapiceria" value="Tapicieria"> Tapiceria en
métodos. Conviene tenerlo en
cuenta.                                 piel<br> <input type='checkbox' name="llantas" value="aluminio"> Llantas de
                                        aluminio<br> ¿Cual es el precio máximo<br> que estarías dispuesto a pagar? <!-- La
Método GET                              etiqueta <input type='select'> requiere un nombre y requiere también una
                                        etiqueta de cierre </select> Entre ambas -apertura y cierre- deben incluirse las
No se diferencia en nada del            diferentes opciones entre las de etiquetas <option>valor<option> Al enviar el
descrito para el supuesto anterior.     formulario se transmite lo contenido después de opción en la opción seleccionada si
Utiliza las mismas variables
                                        dentro de una etiqueta option escribimos selected será esa la que aparezca por
predefinidas, las utiliza con
idéntica sintaxis y se comporta de
                                        defecto al cargarse el formulario//--> <select name="precio"> <Option>Menos de
igual forma en lo relativo a las        6.000 euros</option> <Option>6.001 - 8.000 euros</option> <Option selected
opciones de register_globals.           >8.001 - 10.000 euros</option> <Option>10.001 - 12.000 euros</option>
                                        <Option>12.001 - 14.000 euros</option> <Option>Más de 14.000 euros</option>
Los nombres de las variables son        </select>
en este caso, los incluidos como        <!-- Las áreas de texto deben tener una etiqueta de apertura <textarea
name en cada una de las                 name='checkbox'> seguida de una etiqueta de cierre </textarea> Dentro de la
etiquetas del formulario.               etiqueta de apertura puede incluirse rows=xx (indicará el número de filas) cols=yy
Respecto a los valores de cada          (indicará el ancho expresado en número de caracteres) y opcionalmente un value='lo
variable, éstos serían los recogidos    que sea...' que puede contener el texto que -por defecto- pretendemos que aparezca
del formulario. En los casos de         en ese espacio en el momento de cargar rl formulario //--> <br> Escribe aquí
campos tipo: text, password y           cualquier otro comentario:<br> <textarea rows=5 cols=50 name='texto'></
textarea serían los valores             textarea><br> <!-- El <input type='hidden'> permite insertar en un formulario
introducidos por el usuario en cada     una valor oculto que no requiere ser cumplimentado por el usuario y que no aparece
uno de esos campos.                     visible en el documento requiere un name y un value //--> <input type="hidden"
                                        name='oculto' value='Esto iría oculto'><br> <!-- El <input type='submit'> es el
En el caso de los campos tipo radio
                                        encargado de ejecutar la action incluida en la etiqueta de apertura del formulario que
–en el que varias opciones pueden
tener el mismo nombre– recogería        en este caso sería la llamada a la página que se indica en la action El texto que
el valor indicado en la casilla         incluyamos en value='enviar...' será el que se visualice en el propio botón de envio //--
marcada; mientras que si se trata       > <input type="submit" value="enviar"> <!-- El <input type='reset'> permite
de campos tipo checkbox se              borrar todos los contenidos del formulario y reestablecer los valores por defecto de
transferirían únicamente las            cada campo //--> <input type="reset" value="borrar"> <!-- La etiqueta </form> es
variables –y los valores– que           la etiqueta de cierre del formulario //--> </FORM> </BODY> </HTML>
corresponden a las casillas
marcadas.

Si se tratara de un campo tipo            No incluiremos la opción Ver ejemplo hasta que hayamos elaborado los documentos
hidden se transferiría el valor        formuxx.php incluidos en la action de este formulario.
contenido en su etiqueta y, por
último, en el caso del select sería    Scripts para recoger los datos del formulario anterior
transferido como valor de la
variable la parte del formulario          Insertaremos ahora los diferentes tipos scripts utilizables, especificando las condiciones
contenida entre las etiquetas          de utilización de cada uno de ellos.
<option></option> de la opción
seleccionada.                            Los hemos llamado formu1.php, formu2.php, etcétera.
Método POST                               Debajo del código fuente de cada uno de ellos, hemos incluido dos enlaces. En el
En el caso de que el método de
                                       primero de ellos se utiliza el formulario que vemos aquí arriba modificando únicamente el
envío sea POST hay una diferencia      valor de action para adecuarlo al nombre de cada script.
a tener en cuenta en cuanto a las
variables que recogen la                 En el segundo de los enlaces utilizaremos un formulario en el que, además de las
información. Ahora será:               modificaciones anteriores, se utilice GET como método.

$HTTP_POST_VARS['n1']                     De esta forma, tendrás la oportunidad de comprobar el funcionamiento o no
                                       funcionamiento anunciado en cada uno de los supuestos.
quien haga la función atribuida en
el método anterior a:                    Sería buena idea que experimentaras con ellos tanto bajo register_globals=ON como
                                       cuando esté en modo OFF.
$HTTP_GET_VARS['n1']

y ocurrirá algo similar con las          Este primero funcionará tanto cuando el método sea POST como cuando sea GET.
superglobales, que pasarían a ser      Requiere que el php.ini contenga la opción register_globals=ON
del tipo:
                                        <?
$_POST['n1']
                                        echo   "El method que ha usado fué: ",$REQUEST_METHOD,"<br>";
en sustitución del $_GET['n1']          echo   $nombre,"<br>";
usado en el caso del método GET         echo   $clave,"<br>";
                                        echo   $color,"<br>";
Si register_globals está en On el       echo   $acondicionado,"<br>";
comportamiento de las variables         echo   $tapiceria,"<br>";
directas es idéntico con ambos          echo   $llantas,"<br>";
métodos.
                                        echo   $precio,"<br>";
                                        echo   $texto,"<br>";
Identificación del método               echo   $oculto,"<br>";
de envío                                ?>

PHP recoge en una variable el                               «Con action = POST»       «Con action = GET»
método utilizado para enviar los
datos desde un formulario. Se
trata de la variable
REQUEST_METHOD.                          Este otro requiere que el método especificado en el formulario de envío sea POST.
                                         El valor de register_globals no afectaría a su funcionalidad.
Puede ser invocada como una
variable directa (en caso de que
                                        <?
register globals esté en on) o a
través de una de las variables de
                                        echo "El method usado fué: ",$HTTP_SERVER_VARS[REQUEST_METHOD],"<br>";
servidor.                               echo $HTTP_POST_VARS['nombre'],"<br>";
                                        echo $HTTP_POST_VARS['clave'],"<br>";
En el primer caso la variable se        echo $HTTP_POST_VARS['color'],"<br>";
llamaría:                               echo $HTTP_POST_VARS['acondicionado'],"<br>";
                                        echo $HTTP_POST_VARS['tapiceria'],"<br>";
$REQUEST_METHOD
                                        echo $HTTP_POST_VARS['llantas'],"<br>";
y en el segundo:                        echo $HTTP_POST_VARS['precio'],"<br>";
                                        echo $HTTP_POST_VARS['texto'],"<br>";
$HTTP_SERVER_VARS                       echo $HTTP_POST_VARS['oculto'],"<br>";
[REQUEST_METHOD]                       ?>
Cuando PHP permita el uso de
variables superglobales se puede                          «Con action = POST»       «Con action = GET»
utilizar:

$_SERVER[REQUEST_METHOD]
                                         Para utilizar eficazmente este script es necesario que el método especificado en el
Una advertencia importante.           formulario de envío sea GET.
                                          El valor de register_globals no afectaría a su funcionalidad.
Observa que en este caso no se
incluyen comillas dentro del
corchete como ocurría con todos        <?
los nombres de variable                echo "El method usado fué: ",$HTTP_SERVER_VARS[REQUEST_METHOD],"<br>";
anteriores.                            echo $HTTP_GET_VARS['nombre'],"<br>";
                                       echo $HTTP_GET_VARS['clave'],"<br>";
                                       echo $HTTP_GET_VARS['color'],"<br>";
Diferencias ente los
                                       echo $HTTP_GET_VARS['acondicionado'],"<br>";
métodos GET y POST
                                       echo $HTTP_GET_VARS['tapiceria'],"<br>";
                                       echo $HTTP_GET_VARS['llantas'],"<br>";
Las diferencias entre uno y otro       echo $HTTP_GET_VARS['precio'],"<br>";
método son las siguientes:             echo $HTTP_GET_VARS['texto'],"<br>";
Método GET
                                       echo $HTTP_GET_VARS['oculto'],"<br>";
                                       ?>
Las particularidades de este
método son las siguientes:
                                                          «Con action = POST»       «Con action = GET»
– Al ser enviado el formulario se
carga en el navegador la dirección
especificada como action, se le         Este otro requiere que el método especificado en el formulario de envío sea POST y
añade un ? y a continuación se        que la versión de PHP soporte variables superglobales.
incluyen los datos del formulario.      El valor de register_globals no afectaría a su funcionalidad.
Todos los datos de la petición van
a ser visibles desde la barra de
direcciones del navegador.             <?
                                       echo "El method usado fué: ",$_SERVER[REQUEST_METHOD],"<br>";
– Únicamente son aceptados los         echo $_POST['nombre'],"<br>";
caracteres ASCII.                      echo $_POST['clave'],"<br>";
– Tiene una limitación en el           echo $_POST['color'],"<br>";
tamaño máximo de la cadena que         echo $_POST['acondicionado'],"<br>";
contiene los datos a transferir. En    echo $_POST['tapiceria'],"<br>";
IE esa limitación es de 2.083          echo $_POST['llantas'],"<br>";
caracteres.                            echo $_POST['precio'],"<br>";
                                       echo $_POST['texto'],"<br>";
Método POST                            echo $_POST['oculto'],"<br>";
No tiene las limitaciones indicadas
                                       ?>
para el caso de GET en lo relativo
a visibilidad ni en cuanto a
                                                          «Con action = POST»       «Con action = GET»
aceptación de caracteres no ASCII.

Este método de transferencia de
datos es el más habitual cuando se      En este supuesto sería necesario que el método especificado en el formulario de envío
utilizan formularios.                 sea GET y que la versión de PHP instalada en el servidor que lo aloja soporte variables
                                      superglobales.
Tipos de contenidos de los              El valor de register_globals no afectaría a su funcionalidad.
formularios
                                       <?
Respecto a los formularios, vamos      echo "El method que ha usado fué: ",$_SERVER[REQUEST_METHOD],"<br>";
a contemplar un último aspecto: la     echo $_GET['nombre'],"<br>";
forma de encriptar de los datos en     echo $_GET['clave'],"<br>";
el momento de la transmisión           echo $_GET['color'],"<br>";
(ENCTYPE).                             echo $_GET['acondicionado'],"<br>";
                                       echo $_GET['tapiceria'],"<br>";
Puede especificarse dentro de la       echo $_GET['llantas'],"<br>";
etiqueta<form> utilizando la           echo $_GET['precio'],"<br>";
sintaxis: enctype='valor'.
                                       echo $_GET['texto'],"<br>";
En el caso de que no se                echo $_GET['oculto'],"<br>";
especifique, tomará el valor           ?>
application / x-www-form-
urlencoded, sea GET o POST el
método que se utilice.                                    «Con action = POST»       «Con action = GET»

El método POST admite
multipart/form-data como una          La variable $_REQUEST
opción alternativa a la anterior.
Suele utilizarse cuando se trata de
enviar grandes cantidades de             PHP también dispone –a partir de su versión 4.1.0– de la variable $_REQUEST (de
datos, formularios en los que se      tipo superglobal) que aúna las funcionalidades de $_GET y $_POST y que recoge en
adjuntan ficheros, datos no ASCII     variables del tipo $_REQUEST['nombre'] tanto los valores transferidos mediante el
o contenidos binarios.                método GET como mediante POST

Las diferencias básicas entre            $_REQUEST, a diferencia de $_GET y $_POST, no dispone de equivalentes en
ambos modos de encriptación son       versiones anteriores. Ello quiere decir, no existe una variable (no superglobal) del tipo
las siguientes:                       $HTTP_REQUEST_VARS con $HTTP_GET_VARS o con $HTTP_POST_VARS.
En el tipo application/x-www-
                                        En este ejemplo hemos incluido dos scripts que solo solo se diferencian en el method
form-urlencoded los nombres de
control y los valores se
                                      especificado en el formulario.
transforman en secuencias de
escape, es decir, convirtiendo cada
                                        Al ejecutarlos podremos comprobar que, independientemente del método usado,
byte en una cadena %HH, donde         $_REQUEST recoge los valores transferidos desde el formulario.
HH es la notación hexadecimal del
valor del byte.                        <?
                                       /* Al ejecutar por primera vez el script la variable pepe será nula
Además, los espacios son
convertidos en signos +, los
                                          ya que no se ha transferido aún el formulario. Al pulsar sucesivamente
saltos de línea se representan            en el botón Enviar iremos visualizando los valores que se vayan
como %0D%0A, el nombre y el
                                          transfiriendo */
valor se separan con el signo = y      print "He recibido la variable pepe con valor: ".$_REQUEST['pepe'];
los diferentes bloques nombre/
                                       /* al enviar el formulario se recargará este mismo documento
valor, se separan con el carácter &.
                                       ya que hemos puesto action="" */
En cuanto a la encriptación tipo       ?>
multipart/form-data, sigue las         <form name="prueba" method="post" action="">
reglas de las transferencias MIME,     <input type="text" name="pepe" value=''>
que comentaremos más adelante          <input type="submit" value="enviar">
cuando tratemos el tema del
correo electrónico.

    ¡Cuidado!
                                                          «Con action = POST»          «Con action = GET»
  Cuando se incluye una
  cadena vacía ("") como valor
  de action en un formulario
  se recargará el mismo                 Ejercicio nº 9
  documento como respuesta
                                       Crea dos documentos llamados respectivamente formulario1.php y visor1.php. En el
  al envío del formulario.
                                       primero de ellos incluye un formulario que permita recoger datos personales y académicos
                                       de tus alumnos, utilizando todos los tipos de campos de formulario que conozcas. Los datos
La seguridad en los envíos             insertados en ese formulario deberán ser visualizados después de su envío –con cualquier
de datos                               configuración de register_globals y con cualquier versión PHP– a través del documento
                                       visor1.php. Utiliza los recursos estéticos –fondos, colores, tipografía, etcétera– que estimes
El tema de la seguridad es una
                                       oportunos para una correcta presentación
preocupación constante entre los
usuarios de Internet.

Cuando utilizamos las técnicas que
venimos comentando en esta              Ejercicio nº 10
página –nos referimos siempre al
caso de servidores remotos–            Con criterios similares en cuanto a estética y funcionalidad a los del ejercicio anterior, te
corremos dos tipos de riesgo de        proponemos que crees dos nuevos documentos con nombres formulario2.php y visor2.
seguridad que no estaría de más        php. En este caso el formulario deberá poder recoger el nombre y apellidos de un alumno
tener en cuenta.                       hipotético al que debemos formularle dos preguntas. La primera de ellas con cuatro posibles
El riesgo de que la información sea    respuestas entre las que deba elegir como válida una de ellas. La segunda, también con
interceptada durante el proceso de     cuatro respuestas, deberá permitir marcar las respuestas correctas que pueden ser: todas,
transmisión desde el cliente hasta     ninguna, o algunas de ellas.
el servidor lo compartimos con         El alumno debería poder insertar sus datos personales en el formulario y elegir las
todos los demás usuarios de la         respuestas a las preguntas formuladas. Al pulsar en el botón de envío, los datos del alumno
Red, pero hay otro –el riesgo de       y las respuestas elegidas deben visualizarse a través del documento visor2.php.
daños en los contenidos de nuestro
espacio de servidor– que es
exclusivamente nuestro.

La transparencia del método GET                                          Anterior   Indice   Siguiente
es tal, que incluso muestra –en el
momento del envio– todos los
datos en la barra de direcciones
del navegador. Eso permite que
cualquier usuario pueda conocer a
simple vista la ruta completa hasta
el script, así como los nombres y
valores de las variables.

Cuando se usa el método POST los
formularios son un poco más
discretos, pero igual de
transparentes. El código de
cualquier formulario estará
accesible sólo con ir a la opción
Ver código fuente y allí estarán de
nuevo todos los datos: nombre del
script, nombres de las variables,
etcétera, con lo que, cualquier
usuario y desde cualquier sitio,
puede acceder a ese script.

No haría falta ni usar nuestro
formulario. Bastaría guardar una
copia del mismo en el ordenador
del visitante y después –haciendo
ligerísimos retoques– se podría
acceder a nuestro script sin
necesidad de utilizar el formulario
alojado en nuestro servidor.

Si pensamos que uno de nuestros
scripts puede estar diseñado con el
fin de modificar algunos de los
contenidos de nuestro espacio –
borrar datos, por ejemplo–
seguramente sería cuestión de
empezar a preocuparnos, y mucho
más si en nuestro servidor
tenemos datos importantes.

Existen formas de evitar, o al
menos reducir, este tipo de
riesgos. Restringir a usuarios
autorizados el uso de algunos
subdirectorios es una de ellas,
almacenar datos importantes fuera
del directorio root del servidor es
otra y el uso de algunas de las
variables predefinidas como
elementos de protección puede ser
una tercera.

Hacemos este comentario a título
meramente informativo. Por el
momento nos basta con manejar
los formularios, pero queremos
que tengas presente la existencia
de ese tipo de riesgos. Más
adelante, ve- remos la manera de
tratar de evitarlos.

    Ejercicio nº 8

  Crea dos documentos
  llamados respectivamente
  color1.php y color2.php.
  En el primero de ellos incluye
  un formulario en el que -
  mediante un menú de
  opciones– se pueda elegir
  uno de entre cinco colores
  (especifica como value el
  código hexadecimal de cada
  uno de ellos).
  Al enviar los datos, deberá
  cargarse la página color2.
  php con el color de fondo
  correspondiente a la opción
  seleccionada en el
  formulario.

Contenu connexe

Tendances (20)

Php1
Php1Php1
Php1
 
Curso php y_my_sql
Curso php y_my_sqlCurso php y_my_sql
Curso php y_my_sql
 
32 Php. Etiquetas Html
32 Php. Etiquetas Html32 Php. Etiquetas Html
32 Php. Etiquetas Html
 
17 Php. Otras Variables
17 Php. Otras Variables17 Php. Otras Variables
17 Php. Otras Variables
 
Mini manual php
Mini manual phpMini manual php
Mini manual php
 
Php informacion
Php informacion Php informacion
Php informacion
 
Php1
Php1Php1
Php1
 
Manual de php basico
Manual de php basicoManual de php basico
Manual de php basico
 
php
phpphp
php
 
El shell-bash
El shell-bashEl shell-bash
El shell-bash
 
Curso Bash 2
Curso Bash 2Curso Bash 2
Curso Bash 2
 
Script
ScriptScript
Script
 
Php basico y avanzado
Php basico y avanzadoPhp basico y avanzado
Php basico y avanzado
 
Curso Bash 3
Curso Bash 3Curso Bash 3
Curso Bash 3
 
49 Php. Funciones De Usuario
49 Php. Funciones De Usuario49 Php. Funciones De Usuario
49 Php. Funciones De Usuario
 
Variables y Bucles
Variables y BuclesVariables y Bucles
Variables y Bucles
 
Manual basico de PHP
Manual basico de PHPManual basico de PHP
Manual basico de PHP
 
Php1 sesión 6
Php1 sesión 6Php1 sesión 6
Php1 sesión 6
 
El lenguaje php
El lenguaje phpEl lenguaje php
El lenguaje php
 
Curso Bash 1
Curso Bash 1Curso Bash 1
Curso Bash 1
 

En vedette

Lineamiento CE-FEITEC transitorio 2014
Lineamiento CE-FEITEC transitorio 2014Lineamiento CE-FEITEC transitorio 2014
Lineamiento CE-FEITEC transitorio 2014
Freelance
 
Recursos y servicios de información para enfermeria
Recursos y servicios de información para enfermeria Recursos y servicios de información para enfermeria
Recursos y servicios de información para enfermeria
CIRIA UDLAP
 
Proyecto el Diario como Objeto de Conocimiento en la Historia Antigua
Proyecto el Diario como Objeto de Conocimiento en la Historia AntiguaProyecto el Diario como Objeto de Conocimiento en la Historia Antigua
Proyecto el Diario como Objeto de Conocimiento en la Historia Antigua
El Arcón de Clio
 
El origen del mal
El origen del mal El origen del mal
El origen del mal
tecnosicema
 
Propuesta base Reforma Total Estatuto Orgánico feitec
Propuesta base Reforma Total Estatuto Orgánico feitecPropuesta base Reforma Total Estatuto Orgánico feitec
Propuesta base Reforma Total Estatuto Orgánico feitec
Freelance
 
Imp+vs+pret+review
Imp+vs+pret+reviewImp+vs+pret+review
Imp+vs+pret+review
nidree
 

En vedette (20)

Repaso tema 4_lg_quinto
Repaso tema 4_lg_quintoRepaso tema 4_lg_quinto
Repaso tema 4_lg_quinto
 
Soccer street
Soccer streetSoccer street
Soccer street
 
Grupo 12 Tema VI 2014 1
Grupo 12 Tema VI 2014 1Grupo 12 Tema VI 2014 1
Grupo 12 Tema VI 2014 1
 
Pizarra digital
Pizarra digitalPizarra digital
Pizarra digital
 
Síntesis del foro i
Síntesis del foro iSíntesis del foro i
Síntesis del foro i
 
Sesion 4
Sesion 4Sesion 4
Sesion 4
 
Lineamiento CE-FEITEC transitorio 2014
Lineamiento CE-FEITEC transitorio 2014Lineamiento CE-FEITEC transitorio 2014
Lineamiento CE-FEITEC transitorio 2014
 
Recursos y servicios de información para enfermeria
Recursos y servicios de información para enfermeria Recursos y servicios de información para enfermeria
Recursos y servicios de información para enfermeria
 
Clase 05
Clase 05Clase 05
Clase 05
 
2. 7. El Tranquilo Mar del Corazón - Capítulo II Sección VII
2. 7. El Tranquilo Mar del Corazón - Capítulo II Sección VII2. 7. El Tranquilo Mar del Corazón - Capítulo II Sección VII
2. 7. El Tranquilo Mar del Corazón - Capítulo II Sección VII
 
Foursquare (Solsonès)
Foursquare (Solsonès)Foursquare (Solsonès)
Foursquare (Solsonès)
 
Deuda técnica
Deuda técnicaDeuda técnica
Deuda técnica
 
Proyecto el Diario como Objeto de Conocimiento en la Historia Antigua
Proyecto el Diario como Objeto de Conocimiento en la Historia AntiguaProyecto el Diario como Objeto de Conocimiento en la Historia Antigua
Proyecto el Diario como Objeto de Conocimiento en la Historia Antigua
 
Sociedad conocinf
Sociedad conocinfSociedad conocinf
Sociedad conocinf
 
El pago y conformidad de cumplimiento del contrato
El pago y conformidad de cumplimiento del contratoEl pago y conformidad de cumplimiento del contrato
El pago y conformidad de cumplimiento del contrato
 
El origen del mal
El origen del mal El origen del mal
El origen del mal
 
Situación del mecenazgo en las universidades públicas españolas
Situación del mecenazgo en las universidades públicas españolasSituación del mecenazgo en las universidades públicas españolas
Situación del mecenazgo en las universidades públicas españolas
 
Propuesta base Reforma Total Estatuto Orgánico feitec
Propuesta base Reforma Total Estatuto Orgánico feitecPropuesta base Reforma Total Estatuto Orgánico feitec
Propuesta base Reforma Total Estatuto Orgánico feitec
 
Imp+vs+pret+review
Imp+vs+pret+reviewImp+vs+pret+review
Imp+vs+pret+review
 
Acciones para atender gestión residencias estudiantiles
Acciones para atender gestión residencias estudiantilesAcciones para atender gestión residencias estudiantiles
Acciones para atender gestión residencias estudiantiles
 

Similaire à 19 Php. Utilizando Formularios (20)

PHP mode on
PHP mode onPHP mode on
PHP mode on
 
Php1
Php1Php1
Php1
 
Php
PhpPhp
Php
 
Manuan de php y MySql-1.pdf
Manuan de php y MySql-1.pdfManuan de php y MySql-1.pdf
Manuan de php y MySql-1.pdf
 
PPH MySql - FIEI - UNFV Clase02
PPH MySql - FIEI - UNFV Clase02PPH MySql - FIEI - UNFV Clase02
PPH MySql - FIEI - UNFV Clase02
 
Intro phpmin53
Intro phpmin53Intro phpmin53
Intro phpmin53
 
Php
PhpPhp
Php
 
16 Php. Variables Predefinidas
16 Php. Variables Predefinidas16 Php. Variables Predefinidas
16 Php. Variables Predefinidas
 
Guia N2 Proyectos Web Php
Guia N2   Proyectos Web   PhpGuia N2   Proyectos Web   Php
Guia N2 Proyectos Web Php
 
Introducción a PHP
Introducción a PHPIntroducción a PHP
Introducción a PHP
 
Curso php y_mysql
Curso php y_mysqlCurso php y_mysql
Curso php y_mysql
 
Ensayo php
Ensayo phpEnsayo php
Ensayo php
 
Manual+php+básico
Manual+php+básicoManual+php+básico
Manual+php+básico
 
Php
PhpPhp
Php
 
Manual de php con ejercicios
Manual de php con ejerciciosManual de php con ejercicios
Manual de php con ejercicios
 
Manualdephpconejercicios 150226132934-conversion-gate01
Manualdephpconejercicios 150226132934-conversion-gate01Manualdephpconejercicios 150226132934-conversion-gate01
Manualdephpconejercicios 150226132934-conversion-gate01
 
Php
PhpPhp
Php
 
TAREA DE ORGANIZADORES GRAFICO DEL PHP
TAREA DE ORGANIZADORES GRAFICO DEL PHPTAREA DE ORGANIZADORES GRAFICO DEL PHP
TAREA DE ORGANIZADORES GRAFICO DEL PHP
 
TAREA DE ORGANIZADORES GRAFICO DEL PHP
TAREA DE ORGANIZADORES GRAFICO DEL PHPTAREA DE ORGANIZADORES GRAFICO DEL PHP
TAREA DE ORGANIZADORES GRAFICO DEL PHP
 
Introducción a php
Introducción a phpIntroducción a php
Introducción a php
 

Plus de José M. Padilla

Informe Riesgos y amenazas en cloud computing. INTECTO-CERT
Informe Riesgos y amenazas en cloud computing. INTECTO-CERTInforme Riesgos y amenazas en cloud computing. INTECTO-CERT
Informe Riesgos y amenazas en cloud computing. INTECTO-CERT
José M. Padilla
 
Manual multimedia y web 2.0
Manual multimedia y web 2.0Manual multimedia y web 2.0
Manual multimedia y web 2.0
José M. Padilla
 
Guia optimizacion motores_busqueda
Guia optimizacion motores_busquedaGuia optimizacion motores_busqueda
Guia optimizacion motores_busqueda
José M. Padilla
 
Modulo 2. Sonido Y Musica Por Ordenador. 08 Partituras. Note Pad 2004
Modulo 2. Sonido Y Musica Por Ordenador. 08 Partituras. Note Pad 2004Modulo 2. Sonido Y Musica Por Ordenador. 08 Partituras. Note Pad 2004
Modulo 2. Sonido Y Musica Por Ordenador. 08 Partituras. Note Pad 2004
José M. Padilla
 
Modulo 2. Sonido Y Musica Por Ordenador. 10 Karaoke 2. Melody Assistant
Modulo 2. Sonido Y Musica Por Ordenador. 10 Karaoke 2. Melody AssistantModulo 2. Sonido Y Musica Por Ordenador. 10 Karaoke 2. Melody Assistant
Modulo 2. Sonido Y Musica Por Ordenador. 10 Karaoke 2. Melody Assistant
José M. Padilla
 
Modulo 2. Sonido Y Musica Por Ordenador. 09 Karaoke 1. Van Basco Karaoke Player
Modulo 2. Sonido Y Musica Por Ordenador. 09 Karaoke 1. Van Basco Karaoke PlayerModulo 2. Sonido Y Musica Por Ordenador. 09 Karaoke 1. Van Basco Karaoke Player
Modulo 2. Sonido Y Musica Por Ordenador. 09 Karaoke 1. Van Basco Karaoke Player
José M. Padilla
 
Modulo 2. Sonido Y Musica Por Ordenador. 07 Conversor. D Bpower Amp
Modulo 2. Sonido Y Musica Por Ordenador. 07 Conversor. D Bpower AmpModulo 2. Sonido Y Musica Por Ordenador. 07 Conversor. D Bpower Amp
Modulo 2. Sonido Y Musica Por Ordenador. 07 Conversor. D Bpower Amp
José M. Padilla
 
Modulo 2. Sonido Y Musica Por Ordenador. 06 Secuenciador. N Track Studio
Modulo 2. Sonido Y Musica Por Ordenador. 06 Secuenciador. N Track StudioModulo 2. Sonido Y Musica Por Ordenador. 06 Secuenciador. N Track Studio
Modulo 2. Sonido Y Musica Por Ordenador. 06 Secuenciador. N Track Studio
José M. Padilla
 
Modulo 2. Sonido Y Musica Por Ordenador. 05 Editor De Audio. Audacity
Modulo 2. Sonido Y Musica Por Ordenador. 05 Editor De Audio. AudacityModulo 2. Sonido Y Musica Por Ordenador. 05 Editor De Audio. Audacity
Modulo 2. Sonido Y Musica Por Ordenador. 05 Editor De Audio. Audacity
José M. Padilla
 
Modulo 2. Sonido Y Musica Por Ordenador. 04 Reproductor. Real One Player
Modulo 2. Sonido Y Musica Por Ordenador. 04 Reproductor. Real One PlayerModulo 2. Sonido Y Musica Por Ordenador. 04 Reproductor. Real One Player
Modulo 2. Sonido Y Musica Por Ordenador. 04 Reproductor. Real One Player
José M. Padilla
 
Modulo 2. Sonido Y Musica Por Ordenador. 03 Extraccion De Audio. C Dex
Modulo 2. Sonido Y Musica Por Ordenador. 03 Extraccion De Audio. C DexModulo 2. Sonido Y Musica Por Ordenador. 03 Extraccion De Audio. C Dex
Modulo 2. Sonido Y Musica Por Ordenador. 03 Extraccion De Audio. C Dex
José M. Padilla
 
Modulo 2. Sonido Y Musica Por Ordenador. 02 Sonido En El Sistema Operativo
Modulo 2. Sonido Y Musica Por Ordenador. 02 Sonido En El Sistema OperativoModulo 2. Sonido Y Musica Por Ordenador. 02 Sonido En El Sistema Operativo
Modulo 2. Sonido Y Musica Por Ordenador. 02 Sonido En El Sistema Operativo
José M. Padilla
 
Modulo 1. Sonido Y Musica Por Ordenador. 07 Almacenamiento
Modulo 1. Sonido Y Musica Por Ordenador. 07 AlmacenamientoModulo 1. Sonido Y Musica Por Ordenador. 07 Almacenamiento
Modulo 1. Sonido Y Musica Por Ordenador. 07 Almacenamiento
José M. Padilla
 
Modulo 1. Sonido Y Musica Por Ordenador. 06 El Audio
Modulo 1. Sonido Y Musica Por Ordenador. 06 El AudioModulo 1. Sonido Y Musica Por Ordenador. 06 El Audio
Modulo 1. Sonido Y Musica Por Ordenador. 06 El Audio
José M. Padilla
 
Modulo 1. Sonido Y Musica Por Ordenador. 05 El Midi
Modulo 1. Sonido Y Musica Por Ordenador. 05 El MidiModulo 1. Sonido Y Musica Por Ordenador. 05 El Midi
Modulo 1. Sonido Y Musica Por Ordenador. 05 El Midi
José M. Padilla
 
Modulo 1. Sonido Y Musica Por Ordenador. 04 El Estudio De Sonido. Edicion
Modulo 1. Sonido Y Musica Por Ordenador. 04 El Estudio De Sonido. EdicionModulo 1. Sonido Y Musica Por Ordenador. 04 El Estudio De Sonido. Edicion
Modulo 1. Sonido Y Musica Por Ordenador. 04 El Estudio De Sonido. Edicion
José M. Padilla
 
Modulo 1. Sonido Y Musica Por Ordenador. 03 El Sonido Y Su Representacion
Modulo 1. Sonido Y Musica Por Ordenador. 03 El Sonido Y Su RepresentacionModulo 1. Sonido Y Musica Por Ordenador. 03 El Sonido Y Su Representacion
Modulo 1. Sonido Y Musica Por Ordenador. 03 El Sonido Y Su Representacion
José M. Padilla
 
Modulo 1. Sonido y musica por ordenador. 02 El ordenador en el aula.
Modulo 1. Sonido y musica por ordenador. 02 El ordenador en el aula.Modulo 1. Sonido y musica por ordenador. 02 El ordenador en el aula.
Modulo 1. Sonido y musica por ordenador. 02 El ordenador en el aula.
José M. Padilla
 
00 Sonido y musica por ordenador. Guia del alumno.
00 Sonido y musica por ordenador. Guia del alumno.00 Sonido y musica por ordenador. Guia del alumno.
00 Sonido y musica por ordenador. Guia del alumno.
José M. Padilla
 
00 Sonido y musica por ordenador. Caso 20
00 Sonido y musica por ordenador. Caso 2000 Sonido y musica por ordenador. Caso 20
00 Sonido y musica por ordenador. Caso 20
José M. Padilla
 

Plus de José M. Padilla (20)

Informe Riesgos y amenazas en cloud computing. INTECTO-CERT
Informe Riesgos y amenazas en cloud computing. INTECTO-CERTInforme Riesgos y amenazas en cloud computing. INTECTO-CERT
Informe Riesgos y amenazas en cloud computing. INTECTO-CERT
 
Manual multimedia y web 2.0
Manual multimedia y web 2.0Manual multimedia y web 2.0
Manual multimedia y web 2.0
 
Guia optimizacion motores_busqueda
Guia optimizacion motores_busquedaGuia optimizacion motores_busqueda
Guia optimizacion motores_busqueda
 
Modulo 2. Sonido Y Musica Por Ordenador. 08 Partituras. Note Pad 2004
Modulo 2. Sonido Y Musica Por Ordenador. 08 Partituras. Note Pad 2004Modulo 2. Sonido Y Musica Por Ordenador. 08 Partituras. Note Pad 2004
Modulo 2. Sonido Y Musica Por Ordenador. 08 Partituras. Note Pad 2004
 
Modulo 2. Sonido Y Musica Por Ordenador. 10 Karaoke 2. Melody Assistant
Modulo 2. Sonido Y Musica Por Ordenador. 10 Karaoke 2. Melody AssistantModulo 2. Sonido Y Musica Por Ordenador. 10 Karaoke 2. Melody Assistant
Modulo 2. Sonido Y Musica Por Ordenador. 10 Karaoke 2. Melody Assistant
 
Modulo 2. Sonido Y Musica Por Ordenador. 09 Karaoke 1. Van Basco Karaoke Player
Modulo 2. Sonido Y Musica Por Ordenador. 09 Karaoke 1. Van Basco Karaoke PlayerModulo 2. Sonido Y Musica Por Ordenador. 09 Karaoke 1. Van Basco Karaoke Player
Modulo 2. Sonido Y Musica Por Ordenador. 09 Karaoke 1. Van Basco Karaoke Player
 
Modulo 2. Sonido Y Musica Por Ordenador. 07 Conversor. D Bpower Amp
Modulo 2. Sonido Y Musica Por Ordenador. 07 Conversor. D Bpower AmpModulo 2. Sonido Y Musica Por Ordenador. 07 Conversor. D Bpower Amp
Modulo 2. Sonido Y Musica Por Ordenador. 07 Conversor. D Bpower Amp
 
Modulo 2. Sonido Y Musica Por Ordenador. 06 Secuenciador. N Track Studio
Modulo 2. Sonido Y Musica Por Ordenador. 06 Secuenciador. N Track StudioModulo 2. Sonido Y Musica Por Ordenador. 06 Secuenciador. N Track Studio
Modulo 2. Sonido Y Musica Por Ordenador. 06 Secuenciador. N Track Studio
 
Modulo 2. Sonido Y Musica Por Ordenador. 05 Editor De Audio. Audacity
Modulo 2. Sonido Y Musica Por Ordenador. 05 Editor De Audio. AudacityModulo 2. Sonido Y Musica Por Ordenador. 05 Editor De Audio. Audacity
Modulo 2. Sonido Y Musica Por Ordenador. 05 Editor De Audio. Audacity
 
Modulo 2. Sonido Y Musica Por Ordenador. 04 Reproductor. Real One Player
Modulo 2. Sonido Y Musica Por Ordenador. 04 Reproductor. Real One PlayerModulo 2. Sonido Y Musica Por Ordenador. 04 Reproductor. Real One Player
Modulo 2. Sonido Y Musica Por Ordenador. 04 Reproductor. Real One Player
 
Modulo 2. Sonido Y Musica Por Ordenador. 03 Extraccion De Audio. C Dex
Modulo 2. Sonido Y Musica Por Ordenador. 03 Extraccion De Audio. C DexModulo 2. Sonido Y Musica Por Ordenador. 03 Extraccion De Audio. C Dex
Modulo 2. Sonido Y Musica Por Ordenador. 03 Extraccion De Audio. C Dex
 
Modulo 2. Sonido Y Musica Por Ordenador. 02 Sonido En El Sistema Operativo
Modulo 2. Sonido Y Musica Por Ordenador. 02 Sonido En El Sistema OperativoModulo 2. Sonido Y Musica Por Ordenador. 02 Sonido En El Sistema Operativo
Modulo 2. Sonido Y Musica Por Ordenador. 02 Sonido En El Sistema Operativo
 
Modulo 1. Sonido Y Musica Por Ordenador. 07 Almacenamiento
Modulo 1. Sonido Y Musica Por Ordenador. 07 AlmacenamientoModulo 1. Sonido Y Musica Por Ordenador. 07 Almacenamiento
Modulo 1. Sonido Y Musica Por Ordenador. 07 Almacenamiento
 
Modulo 1. Sonido Y Musica Por Ordenador. 06 El Audio
Modulo 1. Sonido Y Musica Por Ordenador. 06 El AudioModulo 1. Sonido Y Musica Por Ordenador. 06 El Audio
Modulo 1. Sonido Y Musica Por Ordenador. 06 El Audio
 
Modulo 1. Sonido Y Musica Por Ordenador. 05 El Midi
Modulo 1. Sonido Y Musica Por Ordenador. 05 El MidiModulo 1. Sonido Y Musica Por Ordenador. 05 El Midi
Modulo 1. Sonido Y Musica Por Ordenador. 05 El Midi
 
Modulo 1. Sonido Y Musica Por Ordenador. 04 El Estudio De Sonido. Edicion
Modulo 1. Sonido Y Musica Por Ordenador. 04 El Estudio De Sonido. EdicionModulo 1. Sonido Y Musica Por Ordenador. 04 El Estudio De Sonido. Edicion
Modulo 1. Sonido Y Musica Por Ordenador. 04 El Estudio De Sonido. Edicion
 
Modulo 1. Sonido Y Musica Por Ordenador. 03 El Sonido Y Su Representacion
Modulo 1. Sonido Y Musica Por Ordenador. 03 El Sonido Y Su RepresentacionModulo 1. Sonido Y Musica Por Ordenador. 03 El Sonido Y Su Representacion
Modulo 1. Sonido Y Musica Por Ordenador. 03 El Sonido Y Su Representacion
 
Modulo 1. Sonido y musica por ordenador. 02 El ordenador en el aula.
Modulo 1. Sonido y musica por ordenador. 02 El ordenador en el aula.Modulo 1. Sonido y musica por ordenador. 02 El ordenador en el aula.
Modulo 1. Sonido y musica por ordenador. 02 El ordenador en el aula.
 
00 Sonido y musica por ordenador. Guia del alumno.
00 Sonido y musica por ordenador. Guia del alumno.00 Sonido y musica por ordenador. Guia del alumno.
00 Sonido y musica por ordenador. Guia del alumno.
 
00 Sonido y musica por ordenador. Caso 20
00 Sonido y musica por ordenador. Caso 2000 Sonido y musica por ordenador. Caso 20
00 Sonido y musica por ordenador. Caso 20
 

Dernier

redes informaticas en una oficina administrativa
redes informaticas en una oficina administrativaredes informaticas en una oficina administrativa
redes informaticas en una oficina administrativa
nicho110
 

Dernier (10)

How to use Redis with MuleSoft. A quick start presentation.
How to use Redis with MuleSoft. A quick start presentation.How to use Redis with MuleSoft. A quick start presentation.
How to use Redis with MuleSoft. A quick start presentation.
 
Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...
Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...
Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...
 
Buenos_Aires_Meetup_Redis_20240430_.pptx
Buenos_Aires_Meetup_Redis_20240430_.pptxBuenos_Aires_Meetup_Redis_20240430_.pptx
Buenos_Aires_Meetup_Redis_20240430_.pptx
 
Avances tecnológicos del siglo XXI y ejemplos de estos
Avances tecnológicos del siglo XXI y ejemplos de estosAvances tecnológicos del siglo XXI y ejemplos de estos
Avances tecnológicos del siglo XXI y ejemplos de estos
 
redes informaticas en una oficina administrativa
redes informaticas en una oficina administrativaredes informaticas en una oficina administrativa
redes informaticas en una oficina administrativa
 
investigación de los Avances tecnológicos del siglo XXI
investigación de los Avances tecnológicos del siglo XXIinvestigación de los Avances tecnológicos del siglo XXI
investigación de los Avances tecnológicos del siglo XXI
 
EVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptx
EVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptxEVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptx
EVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptx
 
Avances tecnológicos del siglo XXI 10-07 eyvana
Avances tecnológicos del siglo XXI 10-07 eyvanaAvances tecnológicos del siglo XXI 10-07 eyvana
Avances tecnológicos del siglo XXI 10-07 eyvana
 
Guia Basica para bachillerato de Circuitos Basicos
Guia Basica para bachillerato de Circuitos BasicosGuia Basica para bachillerato de Circuitos Basicos
Guia Basica para bachillerato de Circuitos Basicos
 
Innovaciones tecnologicas en el siglo 21
Innovaciones tecnologicas en el siglo 21Innovaciones tecnologicas en el siglo 21
Innovaciones tecnologicas en el siglo 21
 

19 Php. Utilizando Formularios

  • 1. Utilizando formularios PHP dinámico ¿Que valor tiene register_globals en tu php.ini? Cuando hablábamos de la configuración de PHP, hacíamos alusión a la directiva Lo que hemos visto hasta el register_globals y decíamos que tenía dos opciones de configuración: ON y OFF. Decíamos momento, solo nos ha servido para también que según el valor que tuviera esa configuración cambiaría el modo de afrontar escribir una serie de scripts PHP y diversos asuntos. ver los resultados de su ejecución, pero aún no hemos visto de qué Habíamos optado por ponerla como: register_globals=ON, pero no está de más el forma se puede lograr que comprobarlo. interactúen el cliente y el servidor. Busquemos el fichero php.ini que estará en el directorio Windows –salvo que el Veamos cómo hacerlo. directorio en que tienes instalado Windows se llame de otra manera– abrámoslo y comprobemos que es cierto que register_globals=ON. Si no fuera así, modificaríamos esa directiva y guardaríamos los cambios. Envío a través del navegador ¡Cuidado! La forma más simple de que un Antes de hacer una modificación en php.ini ó en httpd.conf desactiva el servidor Apache. cliente pueda enviar valores a un Cuando hayas acabado con los cambios vuelve a ponerlo en marcha (de lo contrario te servidor es incluir esos valores en aparecerá el mensaje: no se puede encontrar el servidor) y ya arrancará atendiendo a la la propia petición, insertándolos directamente en la barra de nueva configuración. ¡No te olvides nunca de hacerlo así! Te evitarás un montón de direcciones del navegador. sobresaltos. Forma de envío Tabla de multiplicar Deberá insertarse –en la barra de direcciones del navegador– lo siguiente: <? /* Escribamos una instrucción, que imprima en pantalla pagina.php?n1=v1&n2=v2 el valor de una variable ($a), una "x" que hará funciones de aspa en la presentación, otra variable ($b), el signo igual donde y $a*$b que es el producto de ambas variables pagina.php será la dirección de la El simbolo de multiplicar es (*) */ página que contiene el script que print ($a." x ".$b." = ".$a*$b); ha de procesar los valores # Añadamos una bobadilla, para animar... ;-) transferidos. print ("<br> ¡¡Ya eres mayorcit@.. Deberías saberte la tabla"); ?> ? es un carácter obligatorio que indica que detrás de él van a ser insertados nombres de variables y ejemplo13.php sus valores. n1, n2, etcétera representan los nombres de las variables. Ejecuta este ejemplo y observa lo que aparece. ¿Sólo x =0? ¿y la otra línea? = es el separador de los nombres El resultado es lógico. No hemos asignado valores a las variables $a y $b y por eso no de las variables y sus valores escribió su valor. Sin embargo, a la hora de multiplicar -recuerda que una variable vacía respectivos. es interpretada como cero a la hora de hacer operaciones– la interpretó como cero y –con muy buen criterio– nos respondió que cero por cero es cero. v1, v2,... simbolizan el valor asignado a cada una de las Escribamos ahora en la barra de direcciones del navegador la siguiente dirección: variables. http://localhost/cursoPHP/ejemplo13.php?a=21&b=456, (también puedes pulsar en este & es el símbolo que separa los enlace) y podremos comprobar que 21 x 456 = 9576 . distintos bloques variable = valor. Hagamos un nuevo experimento. Vayamos a php.ini y cambiemos la configuración. Los nombres de las variables Pongamos register_globals= OFF. ¡No te olvides de apagar el servidor antes de hacer nunca llevan el signo $. estos cambios! Los valores de las variables –sean Una vez hecho el cambio, pulsemos de nuevo en el enlace, y veremos que esta vez no números o cadenas– nunca se ha recibido los valores de a y b y nos ha dado cero como resultado. escriben entre comillas. Lo intentaremos con este nuevo script manteniendo register_globals=OFF. Se pueden incluir tantos nombre = valor como se desee. La única restricción es la longitud máxima <? permitida por el método GET (el utilizado en este caso) que se sitúa /* Modifiquemos la instrucción anterior en torno a los 2.000 caracteres. y utilicemos las variables predefinidas $HTTP_GET_VARS['a'], $HTTP_GET_VARS['b'] Recepción de datos en vez de $a y $b que utilizabamos en el ejemplo anterior */ Cuando es recibida por el servidor # Pongamos un comentario de advertencia. Recuerda que <br> la petición de un documento con # sirve para insertar un salto de línea en la salida extensión .php en la que tras el print ("Este resultado es el que utiliza $HTTP_GET_VAR<br>"); signo ? se incluyen una o varias parejas nombre = valor, los print ($HTTP_GET_VARS['a']." x ".$HTTP_GET_VARS['b']." = ". nombres de las variables y sus $HTTP_GET_VARS['a']*$HTTP_GET_VARS valores respectivos se incluyen, de ['b']); forma automática, en variables predefinidas del tipo: /* Ahora trataremos de comprobar que también podemos $HTTP_GET_VARS['n1'] utilizar la superglobal $_GET como $_GET['a'] y $_GET['b'] con iguales resultados que las anteriores */ $HTTP_GET_VARS['n2'] en las que n1, n2, ... coinciden # Un comentario para identificar el origen del resultado exactamente con nombres asignados a cada una de las print("<br>El resultado siguiente ha sido generado usando $_GET <br>"); variables en esa transferencia. Cada una de esas variables print ($_GET['a']." x ".$_GET['b']." = ".$_GET['a']*$_GET['b']);
  • 2. contendrá como valor aquel que hubiera recibido a través de la ?> petición. Si la versión de PHP es superior a ejemplo14.php la 4.1.0, esos mismos valores se incluirán en variables superglobales del tipo $_GET de modo que –en el supuesto de que Escribamos ahora en la barra de direcciones del navegador la siguiente dirección: la versión lo soporte– los valores http://localhost/cursoPHP/ejemplo14.php?a=21&b=456, (o pulsemos directamente en de la petición también (esta este enlace) y podremos comprobar que 21 x 456 aún es igual 9576. opción no excluye la anterior) estarían disponibles en: ¡Cuidado! $_GET['n1'] Aquí, más que nunca, conviene reiterar, una vez más, los errores de sintaxis más frecuentes: $_GET['n2'] Según el modo en que esté s Los nombres de variables son distintos si se cambian mayúsculas y minúsculas. Pon configurado el php.ini podría mucho cuidado en escribirlos correctamente. caber una tercera posibilidad de s Los nombres de las variables predefinidas, tales como $HTTP_GET_VARS, $_GET, registro de esos valores. etcétera van en mayúsculas. s No olvides poner punto y coma al final de cada línea de instrucciones. Si la directiva register_globals –en s Presta atención a la apertura/cierre de comillas y mucha más atención aún si se trata el fichero php.ini– está configurada con la opción ON, los de comillas anidadas. En este caso procura usar (") para las exteriores y (') para las valores transferidos desde el interiores. navegador –además de ser recogidos en las variables anteriores– son asignados a otras variables del tipo: $n1, $n2, ... ¡Cuidado! cuyos nombres son el resultado de anteponer el símbolo $ a los En modo local puedes establecer las configuraciones de php.ini a tu antojo y, además, estás nombres de las variables utilizando una versión –4.3.11– de PHP que permite superglobales. Esta versión –junto con contenidas en la petición. la posibilidad de modificar php.ini– te permite utilizar cualquiera de las opciones de La elección a la hora de escribir los transferencia de variables. scripts de uno u otro tipo de Pero, si pretendes publicar tus páginas utilizando un hosting ajeno debes cerciorarte de cual variable debe hacerse teniendo en es su versión de PHP –no todos tienen instaladas versiones superiores a 4.1.0– y conocer la cuenta que: configuración de sus php.ini. – Esta última –sin duda la más Ten en cuenta que allí no vas a poder modificar las configuraciones y de no tener en cuenta cómoda– tiene el problema de que estos aspectos, puedes verte obligad@ a modificar tu código fuente para adecuarlo a la sólo es válida cuando configuración de tu hosting. register_globals=on y, además, es la más insegura de todas. Un formulario – La superglobal $_GET tiene una sintaxis más corta que su alternativa y, además, añade como <HTML> ventaja su condición de <HEAD> superglobal, que permite </HEAD> utilizarla en cualquier ámbito sin <BODY> necesidad de declararla expresamente como global. Es la opción del futuro. Su único <!-- Un formulario debe empezar siempre con una etiqueta de este tipo <form ...> inconveniente es que puede no en la que será obligatorio indicar con esta sintaxis action='nombre.extension' estar disponible en hostings que nombre.extension debe contener el nombre (o la ruta completa en el caso de que aún mantienen versiones antiguas estuviera en un directorio o hosting distinto del que alberga el documento que de PHP. contiene el formulario desde el que se realiza la petición) Es opcional incluir method que puede tener dos valores method='GET' ó method='POST', por defecto (cuando Envío a través de no se indica) el envio se realizará usando method='GET' También es opcional -a los formularios efectos de PHP- incluir name. Ese valor es útil cuando se incluyen scripts del lado del cliente del tipo JavaScript //--> <form name='mi_formulario' action='formu1.php' method='post'> <!-- Pueden incluirse textos dentro del formulario --> Escribe tu La interacción cliente–servidor que nombre: <!-- Uno de los tipos de campos posibles es el tipo texto su sintaxis acabamos de ver, resulta incómoda en su uso y no (hablamos de HTML) requiere la etiqueta <input type='text'> que indica el demasiado estética. contenido del texto esa etiqueta debe incluir obligatoriamente un name='nombre' el nombre a usar serán caracteres alfabéticos, sin tildes ni eñes y sin espacios. Salvo Hay una segunda opción –la de excepciones que comentaremos no puede usarse el mismo nombre para dos campos uso más frecuente– que es la distintos el value='' puede no contener nada entre las comillas tal como ocurre aquí o utilización de formularios. contener el texto que por defecto queremos que aparezca en ese campo al cargar el formulario. el size=xx es opcional. Su utilidad es la de ajustar el tamaño de la Los formularios no son ele- mentos ventana al número de caracteres que se indiquen //--> <input type='text' propios de PHP –actúan del lado del cliente– y su estudio es más name='nombre' value='' size=15><br> Escribe tu clave: <!-- <input propio del ámbito de HTML que de type='password'> solo se diferencia del anterior en que en el momento de PHP. rellenarlo se sustituyen los carecteres visualizados (no el contenido) por asteriscos //-- > <input type='password' name='clave' value=''><br> Elige tu color de coche En cualquier caso –por si te fuera favorito:<br> <!-- Los <input type='radio'> permite optar entre varios valores necesario– aquí a la derecha tienes posibles. Habrá que repetirlos tantas veces como opciones queramos habilitar. Todos un formulario, en el que se los input –correspondientes a la misma opción– deben tener el mismo nombre comenta la sintaxis de sus (name) value='loquesea' deberá tener un valor distinto en cada uno de ellos. Ese elementos más comunes. valor (loquesea) será transferido a través del formulario Si queremos que una opción aparezca marcada (por defecto) al cargar el formulario, deberemos incluir en su Interpretación de los etiqueta la palabra checked los contenidos de value no se visualizan en el navegador datos recibidos a través por lo que conviene incluir una descripción de los valores después de cerrar la etiqueta de formularios de cada input Al enviar el formulario solo se transmite el value correspondiente a la opción seleccionada //--> <input type='radio' name='color' value='Rojo'>Rojo</br> Igual que ocurría en el caso <input type='radio' checked name='color' value='Verde'>Verde</br> <input anterior, los datos enviados a type='radio' name='color' value='Azul'>Azul</br> Elige los extras:<br> <!-- Cada través de un formulario son uno de los <input type='checkbox'> requiere un nombre distinto (name) y un recogidos en diferentes tipos de valor (value) permite optar entre varios Esos valor (loquesea) serám transferido a variables predefinidas, pero ahora través del formulario cuando la casilla de verificación esté marcada Si queremos que se añade una nueva particularidad. una casilla aparezca marcada (por defecto) al cargar el formulario, deberemos incluir en su etiqueta la palabra checked los contenidos de value tampoco aquí se visualizan Existe la posibilidad de dos en el navegador por lo que conviene incluir una descripción de los valores después de métodos (method) de envío: cerrar la etiqueta de cada input Al enviar el formulario solo se transmite los value 'GET' y 'POST'. En el caso anterior
  • 3. decíamos que se utilizaba el correspondiente a la opcion marcadas //--> <input type='checkbox' método GET, pero en el caso de name="acondicionado" value="Aire"> Aire acondicionado<br> <input los formularios son posibles ambos type='checkbox' checked name="tapiceria" value="Tapicieria"> Tapiceria en métodos. Conviene tenerlo en cuenta. piel<br> <input type='checkbox' name="llantas" value="aluminio"> Llantas de aluminio<br> ¿Cual es el precio máximo<br> que estarías dispuesto a pagar? <!-- La Método GET etiqueta <input type='select'> requiere un nombre y requiere también una etiqueta de cierre </select> Entre ambas -apertura y cierre- deben incluirse las No se diferencia en nada del diferentes opciones entre las de etiquetas <option>valor<option> Al enviar el descrito para el supuesto anterior. formulario se transmite lo contenido después de opción en la opción seleccionada si Utiliza las mismas variables dentro de una etiqueta option escribimos selected será esa la que aparezca por predefinidas, las utiliza con idéntica sintaxis y se comporta de defecto al cargarse el formulario//--> <select name="precio"> <Option>Menos de igual forma en lo relativo a las 6.000 euros</option> <Option>6.001 - 8.000 euros</option> <Option selected opciones de register_globals. >8.001 - 10.000 euros</option> <Option>10.001 - 12.000 euros</option> <Option>12.001 - 14.000 euros</option> <Option>Más de 14.000 euros</option> Los nombres de las variables son </select> en este caso, los incluidos como <!-- Las áreas de texto deben tener una etiqueta de apertura <textarea name en cada una de las name='checkbox'> seguida de una etiqueta de cierre </textarea> Dentro de la etiquetas del formulario. etiqueta de apertura puede incluirse rows=xx (indicará el número de filas) cols=yy Respecto a los valores de cada (indicará el ancho expresado en número de caracteres) y opcionalmente un value='lo variable, éstos serían los recogidos que sea...' que puede contener el texto que -por defecto- pretendemos que aparezca del formulario. En los casos de en ese espacio en el momento de cargar rl formulario //--> <br> Escribe aquí campos tipo: text, password y cualquier otro comentario:<br> <textarea rows=5 cols=50 name='texto'></ textarea serían los valores textarea><br> <!-- El <input type='hidden'> permite insertar en un formulario introducidos por el usuario en cada una valor oculto que no requiere ser cumplimentado por el usuario y que no aparece uno de esos campos. visible en el documento requiere un name y un value //--> <input type="hidden" name='oculto' value='Esto iría oculto'><br> <!-- El <input type='submit'> es el En el caso de los campos tipo radio encargado de ejecutar la action incluida en la etiqueta de apertura del formulario que –en el que varias opciones pueden tener el mismo nombre– recogería en este caso sería la llamada a la página que se indica en la action El texto que el valor indicado en la casilla incluyamos en value='enviar...' será el que se visualice en el propio botón de envio //-- marcada; mientras que si se trata > <input type="submit" value="enviar"> <!-- El <input type='reset'> permite de campos tipo checkbox se borrar todos los contenidos del formulario y reestablecer los valores por defecto de transferirían únicamente las cada campo //--> <input type="reset" value="borrar"> <!-- La etiqueta </form> es variables –y los valores– que la etiqueta de cierre del formulario //--> </FORM> </BODY> </HTML> corresponden a las casillas marcadas. Si se tratara de un campo tipo No incluiremos la opción Ver ejemplo hasta que hayamos elaborado los documentos hidden se transferiría el valor formuxx.php incluidos en la action de este formulario. contenido en su etiqueta y, por último, en el caso del select sería Scripts para recoger los datos del formulario anterior transferido como valor de la variable la parte del formulario Insertaremos ahora los diferentes tipos scripts utilizables, especificando las condiciones contenida entre las etiquetas de utilización de cada uno de ellos. <option></option> de la opción seleccionada. Los hemos llamado formu1.php, formu2.php, etcétera. Método POST Debajo del código fuente de cada uno de ellos, hemos incluido dos enlaces. En el En el caso de que el método de primero de ellos se utiliza el formulario que vemos aquí arriba modificando únicamente el envío sea POST hay una diferencia valor de action para adecuarlo al nombre de cada script. a tener en cuenta en cuanto a las variables que recogen la En el segundo de los enlaces utilizaremos un formulario en el que, además de las información. Ahora será: modificaciones anteriores, se utilice GET como método. $HTTP_POST_VARS['n1'] De esta forma, tendrás la oportunidad de comprobar el funcionamiento o no funcionamiento anunciado en cada uno de los supuestos. quien haga la función atribuida en el método anterior a: Sería buena idea que experimentaras con ellos tanto bajo register_globals=ON como cuando esté en modo OFF. $HTTP_GET_VARS['n1'] y ocurrirá algo similar con las Este primero funcionará tanto cuando el método sea POST como cuando sea GET. superglobales, que pasarían a ser Requiere que el php.ini contenga la opción register_globals=ON del tipo: <? $_POST['n1'] echo "El method que ha usado fué: ",$REQUEST_METHOD,"<br>"; en sustitución del $_GET['n1'] echo $nombre,"<br>"; usado en el caso del método GET echo $clave,"<br>"; echo $color,"<br>"; Si register_globals está en On el echo $acondicionado,"<br>"; comportamiento de las variables echo $tapiceria,"<br>"; directas es idéntico con ambos echo $llantas,"<br>"; métodos. echo $precio,"<br>"; echo $texto,"<br>"; Identificación del método echo $oculto,"<br>"; de envío ?> PHP recoge en una variable el «Con action = POST» «Con action = GET» método utilizado para enviar los datos desde un formulario. Se trata de la variable REQUEST_METHOD. Este otro requiere que el método especificado en el formulario de envío sea POST. El valor de register_globals no afectaría a su funcionalidad. Puede ser invocada como una variable directa (en caso de que <? register globals esté en on) o a través de una de las variables de echo "El method usado fué: ",$HTTP_SERVER_VARS[REQUEST_METHOD],"<br>"; servidor. echo $HTTP_POST_VARS['nombre'],"<br>"; echo $HTTP_POST_VARS['clave'],"<br>"; En el primer caso la variable se echo $HTTP_POST_VARS['color'],"<br>"; llamaría: echo $HTTP_POST_VARS['acondicionado'],"<br>"; echo $HTTP_POST_VARS['tapiceria'],"<br>"; $REQUEST_METHOD echo $HTTP_POST_VARS['llantas'],"<br>"; y en el segundo: echo $HTTP_POST_VARS['precio'],"<br>"; echo $HTTP_POST_VARS['texto'],"<br>"; $HTTP_SERVER_VARS echo $HTTP_POST_VARS['oculto'],"<br>";
  • 4. [REQUEST_METHOD] ?> Cuando PHP permita el uso de variables superglobales se puede «Con action = POST» «Con action = GET» utilizar: $_SERVER[REQUEST_METHOD] Para utilizar eficazmente este script es necesario que el método especificado en el Una advertencia importante. formulario de envío sea GET. El valor de register_globals no afectaría a su funcionalidad. Observa que en este caso no se incluyen comillas dentro del corchete como ocurría con todos <? los nombres de variable echo "El method usado fué: ",$HTTP_SERVER_VARS[REQUEST_METHOD],"<br>"; anteriores. echo $HTTP_GET_VARS['nombre'],"<br>"; echo $HTTP_GET_VARS['clave'],"<br>"; echo $HTTP_GET_VARS['color'],"<br>"; Diferencias ente los echo $HTTP_GET_VARS['acondicionado'],"<br>"; métodos GET y POST echo $HTTP_GET_VARS['tapiceria'],"<br>"; echo $HTTP_GET_VARS['llantas'],"<br>"; Las diferencias entre uno y otro echo $HTTP_GET_VARS['precio'],"<br>"; método son las siguientes: echo $HTTP_GET_VARS['texto'],"<br>"; Método GET echo $HTTP_GET_VARS['oculto'],"<br>"; ?> Las particularidades de este método son las siguientes: «Con action = POST» «Con action = GET» – Al ser enviado el formulario se carga en el navegador la dirección especificada como action, se le Este otro requiere que el método especificado en el formulario de envío sea POST y añade un ? y a continuación se que la versión de PHP soporte variables superglobales. incluyen los datos del formulario. El valor de register_globals no afectaría a su funcionalidad. Todos los datos de la petición van a ser visibles desde la barra de direcciones del navegador. <? echo "El method usado fué: ",$_SERVER[REQUEST_METHOD],"<br>"; – Únicamente son aceptados los echo $_POST['nombre'],"<br>"; caracteres ASCII. echo $_POST['clave'],"<br>"; – Tiene una limitación en el echo $_POST['color'],"<br>"; tamaño máximo de la cadena que echo $_POST['acondicionado'],"<br>"; contiene los datos a transferir. En echo $_POST['tapiceria'],"<br>"; IE esa limitación es de 2.083 echo $_POST['llantas'],"<br>"; caracteres. echo $_POST['precio'],"<br>"; echo $_POST['texto'],"<br>"; Método POST echo $_POST['oculto'],"<br>"; No tiene las limitaciones indicadas ?> para el caso de GET en lo relativo a visibilidad ni en cuanto a «Con action = POST» «Con action = GET» aceptación de caracteres no ASCII. Este método de transferencia de datos es el más habitual cuando se En este supuesto sería necesario que el método especificado en el formulario de envío utilizan formularios. sea GET y que la versión de PHP instalada en el servidor que lo aloja soporte variables superglobales. Tipos de contenidos de los El valor de register_globals no afectaría a su funcionalidad. formularios <? Respecto a los formularios, vamos echo "El method que ha usado fué: ",$_SERVER[REQUEST_METHOD],"<br>"; a contemplar un último aspecto: la echo $_GET['nombre'],"<br>"; forma de encriptar de los datos en echo $_GET['clave'],"<br>"; el momento de la transmisión echo $_GET['color'],"<br>"; (ENCTYPE). echo $_GET['acondicionado'],"<br>"; echo $_GET['tapiceria'],"<br>"; Puede especificarse dentro de la echo $_GET['llantas'],"<br>"; etiqueta<form> utilizando la echo $_GET['precio'],"<br>"; sintaxis: enctype='valor'. echo $_GET['texto'],"<br>"; En el caso de que no se echo $_GET['oculto'],"<br>"; especifique, tomará el valor ?> application / x-www-form- urlencoded, sea GET o POST el método que se utilice. «Con action = POST» «Con action = GET» El método POST admite multipart/form-data como una La variable $_REQUEST opción alternativa a la anterior. Suele utilizarse cuando se trata de enviar grandes cantidades de PHP también dispone –a partir de su versión 4.1.0– de la variable $_REQUEST (de datos, formularios en los que se tipo superglobal) que aúna las funcionalidades de $_GET y $_POST y que recoge en adjuntan ficheros, datos no ASCII variables del tipo $_REQUEST['nombre'] tanto los valores transferidos mediante el o contenidos binarios. método GET como mediante POST Las diferencias básicas entre $_REQUEST, a diferencia de $_GET y $_POST, no dispone de equivalentes en ambos modos de encriptación son versiones anteriores. Ello quiere decir, no existe una variable (no superglobal) del tipo las siguientes: $HTTP_REQUEST_VARS con $HTTP_GET_VARS o con $HTTP_POST_VARS. En el tipo application/x-www- En este ejemplo hemos incluido dos scripts que solo solo se diferencian en el method form-urlencoded los nombres de control y los valores se especificado en el formulario. transforman en secuencias de escape, es decir, convirtiendo cada Al ejecutarlos podremos comprobar que, independientemente del método usado, byte en una cadena %HH, donde $_REQUEST recoge los valores transferidos desde el formulario. HH es la notación hexadecimal del valor del byte. <? /* Al ejecutar por primera vez el script la variable pepe será nula Además, los espacios son convertidos en signos +, los ya que no se ha transferido aún el formulario. Al pulsar sucesivamente saltos de línea se representan en el botón Enviar iremos visualizando los valores que se vayan
  • 5. como %0D%0A, el nombre y el transfiriendo */ valor se separan con el signo = y print "He recibido la variable pepe con valor: ".$_REQUEST['pepe']; los diferentes bloques nombre/ /* al enviar el formulario se recargará este mismo documento valor, se separan con el carácter &. ya que hemos puesto action="" */ En cuanto a la encriptación tipo ?> multipart/form-data, sigue las <form name="prueba" method="post" action=""> reglas de las transferencias MIME, <input type="text" name="pepe" value=''> que comentaremos más adelante <input type="submit" value="enviar"> cuando tratemos el tema del correo electrónico. ¡Cuidado! «Con action = POST» «Con action = GET» Cuando se incluye una cadena vacía ("") como valor de action en un formulario se recargará el mismo Ejercicio nº 9 documento como respuesta Crea dos documentos llamados respectivamente formulario1.php y visor1.php. En el al envío del formulario. primero de ellos incluye un formulario que permita recoger datos personales y académicos de tus alumnos, utilizando todos los tipos de campos de formulario que conozcas. Los datos La seguridad en los envíos insertados en ese formulario deberán ser visualizados después de su envío –con cualquier de datos configuración de register_globals y con cualquier versión PHP– a través del documento visor1.php. Utiliza los recursos estéticos –fondos, colores, tipografía, etcétera– que estimes El tema de la seguridad es una oportunos para una correcta presentación preocupación constante entre los usuarios de Internet. Cuando utilizamos las técnicas que venimos comentando en esta Ejercicio nº 10 página –nos referimos siempre al caso de servidores remotos– Con criterios similares en cuanto a estética y funcionalidad a los del ejercicio anterior, te corremos dos tipos de riesgo de proponemos que crees dos nuevos documentos con nombres formulario2.php y visor2. seguridad que no estaría de más php. En este caso el formulario deberá poder recoger el nombre y apellidos de un alumno tener en cuenta. hipotético al que debemos formularle dos preguntas. La primera de ellas con cuatro posibles El riesgo de que la información sea respuestas entre las que deba elegir como válida una de ellas. La segunda, también con interceptada durante el proceso de cuatro respuestas, deberá permitir marcar las respuestas correctas que pueden ser: todas, transmisión desde el cliente hasta ninguna, o algunas de ellas. el servidor lo compartimos con El alumno debería poder insertar sus datos personales en el formulario y elegir las todos los demás usuarios de la respuestas a las preguntas formuladas. Al pulsar en el botón de envío, los datos del alumno Red, pero hay otro –el riesgo de y las respuestas elegidas deben visualizarse a través del documento visor2.php. daños en los contenidos de nuestro espacio de servidor– que es exclusivamente nuestro. La transparencia del método GET Anterior Indice Siguiente es tal, que incluso muestra –en el momento del envio– todos los datos en la barra de direcciones del navegador. Eso permite que cualquier usuario pueda conocer a simple vista la ruta completa hasta el script, así como los nombres y valores de las variables. Cuando se usa el método POST los formularios son un poco más discretos, pero igual de transparentes. El código de cualquier formulario estará accesible sólo con ir a la opción Ver código fuente y allí estarán de nuevo todos los datos: nombre del script, nombres de las variables, etcétera, con lo que, cualquier usuario y desde cualquier sitio, puede acceder a ese script. No haría falta ni usar nuestro formulario. Bastaría guardar una copia del mismo en el ordenador del visitante y después –haciendo ligerísimos retoques– se podría acceder a nuestro script sin necesidad de utilizar el formulario alojado en nuestro servidor. Si pensamos que uno de nuestros scripts puede estar diseñado con el fin de modificar algunos de los contenidos de nuestro espacio – borrar datos, por ejemplo– seguramente sería cuestión de empezar a preocuparnos, y mucho más si en nuestro servidor tenemos datos importantes. Existen formas de evitar, o al menos reducir, este tipo de riesgos. Restringir a usuarios autorizados el uso de algunos subdirectorios es una de ellas, almacenar datos importantes fuera del directorio root del servidor es otra y el uso de algunas de las variables predefinidas como elementos de protección puede ser
  • 6. una tercera. Hacemos este comentario a título meramente informativo. Por el momento nos basta con manejar los formularios, pero queremos que tengas presente la existencia de ese tipo de riesgos. Más adelante, ve- remos la manera de tratar de evitarlos. Ejercicio nº 8 Crea dos documentos llamados respectivamente color1.php y color2.php. En el primero de ellos incluye un formulario en el que - mediante un menú de opciones– se pueda elegir uno de entre cinco colores (especifica como value el código hexadecimal de cada uno de ellos). Al enviar los datos, deberá cargarse la página color2. php con el color de fondo correspondiente a la opción seleccionada en el formulario.