Académique Documents
Professionnel Documents
Culture Documents
Un documento PHP es un archivo de texto que contiene etiquetas html y segmentos de cdigo PHP. Los segmentos de cdigo PHP estn delimitados por las etiquetas <?php (etiqueta inicial) y ?> (etiqueta final). Cuando un navegador solicita una pgina PHP a un servidor, el servidor lee el documento y ejecuta las instrucciones que se encuentran en los segmentos de cdigo PHP. Si esas instrucciones generan texto, el servidor sustituye el segmento PHP por el texto. Finalmente, el servidor entrega al navegador el resultado final. Ejemplo: Script php <?php print "<p>Hola</p>"; ?>
En un mismo documento PHP pueden alternarse fragmentos PHP y fragmentos HTML. Los dos ejemplos siguientes generan el mismo cdigo HTML. Script php
<p> <?php print "Hola"; ?> </p> <?php print "<p>"; ?> Hola <?php print "</p>"; ?>
<p>Hola</p>
Hola
Si en una misma pgina hay varios fragmentos PHP, se tratan como un nico programa. Script php Html Resultante Visualizacin en el BROWSER <?php <p>Hola</p> Hola
$saludo = "Hola"; print "<p>$saludo</p>"; ?> <?php $saludo = "Hola"; ?> <p> <?php print "$saludo"; ?> </p>
<p>Hola</p>
Hola
Comentarios
Dentro de un fragmento PHP, se pueden comentar lneas de cdigo utilizando: // para comentar el resto de la lnea (como en C++) # para comentar el resto de la lnea (como en la shell de Unix o en Perl) /* o Esta es una lnea de comentario o Esta es otra lnea de comentario o para delimitar varias lneas (como en C)
o o
*/
CADENAS
Comillas simples y dobles Las cadenas de texto se pueden limitar por comillas dobles o simples. Si una cadena est delimitada por comillas dobles, en su interior puede haber cualquier nmero de comillas simples, y viceversa. Si en una cadena tiene que haber comillas simples y dobles, se pueden escribir como \' o \" Script php <?php print "<p>Esto es una comilla simple:'</p>"; ?>
<?php print '<p>Esto es una comilla doble: "</p>'; ?> <?php print "<p>Esto es una comilla simple: ' y esto una comilla doble: \"</p>"; ?> <?php print '<p>Esto es una comilla simple: \' y esto una comilla doble: "</p>'; ?>
Html Resultante
<p>Esto es una comilla simple: '</p> <p>Esto es una comilla doble: "</p>
<p>Esto es una comilla simple: ' y esto una comilla doble: "</p> <p>Esto es una comilla simple: ' y esto una comilla doble: "</p>
El cdigo HTML tambin puede tener comillas simples o dobles: Script php
<?php print "<p><strong style='color:red;'> Hola </strong></p>"; ?> <?php print '<p><strong style="color: red;">Hola</strong></p>'; ?>
Html Resultante
Aunque en los ejemplos anteriores las comillas simples o dobles son equivalentes, en otras situaciones no lo son. Por ejemplo, PHP no sustituye las variables que se encuentran dentro de cadenas delimitadas con comillas simples, mientras que s que lo hace (pero no siempre) si se utilizan comillas dobles, como se ve en el siguiente ejemplo: Script php Html Resultante
<?php $cadena = "Hola"; print "<p>La variable contiene el valor: $cadena</p>"; ?> <?php $cadena = "Hola"; print '<p>La variable contiene el valor: $cadena</p>'; ?>
PHP tampoco sustituye algunos caracteres especiales (por ejemplo, el salto de lnea \n) dentro de las comillas simples, como se ve en el siguiente ejemplo: Script php
<?php print "<pre>Esto est en\ndos lneas.</pre>"; ?> <?php print '<pre>Esto est en\ndos lneas.</pre>'; ?>
Html Resultante
<ul><li>Uno</li><li>Dos</li></ul>
<ul><li>Uno</li><li>Dos</li></ul>
print "</ul>"; ?> <?php print "<ul>\n <li>Uno</li>\n <li>Dos</li>\n</ul>"; ?> <?php print "<ul> <li>Uno</li> <li>Dos</li> </ul>"; ?>
Concatenar cadenas
El operador . (punto) permite concatenar dos o ms cadenas.
<?php $cadena1 = "Pasa"; $cadena2 = "tiempos"; $cadena3 = $cadena1.$cadena2; print "<p>$cadena3</p>"; ?> <?php $cadena1 = "Corre"; $cadena2 = "ve"; $cadena3 = "idile"; $cadena4 = $cadena1.$cadena2.$cadena3; print "<p>$cadena4</p>"; ?>
<p>Pasatiempos</p>
<p>Correveidile</p>
El operador . (punto) se puede utilizar en la instruccin print. En el ejemplo siguiente se concatenan una cadena, una variable y una cadena.
<?php $nombre = "Don Pepito"; print "<p>Hola, ".$nombre."! Cmo est usted?</p>"; ?>
Nota: En el ejemplo anterior, se puede obtener el mismo resultado sin utilizar el operador . (punto):
<?php $nombre = "Don Pepito"; print "<p>Hola, $nombre! Cmo est usted?</p>"; ?>
Variables en cadenas
La forma de insertar variables dentro de cadenas depende del tipo de variable utilizado. En el caso de nmeros, cadenas o matrices de una dimensin, las variables se puede insertar directamente:
<?php $numero = 5000; $texto = "cinco mil"; $seEscribe = Array("junto", "separado"); print "<p>El nmero $numero se escribe $seEscribe[1]: $texto</p>"; ?>
Este resultado se obtiene porque PHP no sustituye la variable $saludos[0][0] por su valor, sino que sustituye nicamente la primera parte ($saludos[0]). Como $saludos[0] es una matriz de una dimensin, no puede escribir ningn valor y devuelve simplemente "Array". A continuacin, PHP aade el [0] que quedaba y se obtiene la cadena "Array[0]". Una solucin es sacar la matriz de la cadena:
<?php $nombre = "Don Pepito"; $saludos = Array( Array("Hola", "Hello"), Array("Adios", "Goodbye")); print "<p>".$saludos[0][0].", $nombre! Cmo est usted?</p>"; ?>
Si se quiere mostrar el resultado de operaciones matemticas (sin utilizar variables auxiliares), es necesario efectuar las operaciones fuera de las cadenas. En algunos casos no es necesario escribir las
operaciones entre parntesis pero, si se escriben entre siempre parntesis no hace falta preocuparse por cundo hacen falta y cundo no.
<?php $x = 3; $y = 4; print "<p>Suma: $x + $y = ".($x+$y)."</p>\n"; print "<p>Multiplicacin: $x x $y = ".($x*$y)."</p>"; ?>
Si se quiere escribir el nombre de una variable, es decir, para que PHP no sustituya la variable por su valor, hay que escribir una contrabarra (\) antes de la variable.
<?php $x = 3; print "<p>La variable \$x vale $x</p>\n"; ?>
En html/css a veces es necesario juntar nmeros y carcteres, como en el ejemplo siguiente en el que se establece el tamao del prrafo en 30px:
<?php print "<p style=\"font-size: 30px\" >Texto grande</p>\n"; ?>
Si el tamao est almacenado en una variable, no se puede juntar la variable con los caracteres ya que se interpretara como una variable que no est definida y toma el valor vaco:
<?php $x = 30; print "<p style=\"font-size: $xpx\" >Texto grande</p>\n"; ?>
Controles en formularios
Explicacin previa
Para que un control enve informacin es necesario:
que el control est incluido en un formulario (<form>). que el formulario tenga establecido el atributo action, con la direccin absoluta o relativa del fichero php que procesar la informacin que el control tenga establecido el atributo name Nota: el atributo name puede contener cualquier carcter (nmeros, acentos, guiones, etc), pero si contiene espacios, PHP sustituye los espacios por guiones bajos (_) al procesar los datos enviados. que el formulario contenga un botn de tipo submit o bien que se ejecute el mtodo submit del formulario.
Nombre:
Enviar
Pepito Conejo
El programa que recibe los datos los guarda automticamente en la matriz $_REQUEST. Mediante la orden print_r($_REQUEST) se puede mostrar el contenido de la matriz $_REQUEST. El siguiente ejemplo muestra lo que escribira el programa PHP (ejemplo.php) si recibiera la informacin del formulario anterior (ejemplo.html).
<?php print_r($_REQUEST); ?>
En los ejemplos que se encuentran en esta pgina, cada ejemplo muestra el cdigo fuente de la pgina html, el aspecto que tiene el control y el contenido de la matriz $_REQUEST cuando se recibe la informacin.
Cdigo fuente
<input type="text" name="cajatexto1" /> <input type="text" name="cajatexto2" value="Cualquier cosa" />
Control
Cualquier cosa
<input type="password" name="cajapassword1" /> <input type="password" name="cajapassword2" value="pezespada" /> <textarea rows="4" cols="20" name="areadetexto1"></textarea>
Cualquier cosa
Casilla de verificacin
Este control se enva solamente si se marca la casilla. El valor enviado es "on" si la casilla no tiene definido el atributo value o el valor del aributo value si ste est definido.
Cdigo fuente
<input type="checkbox" name="casilla1" /> <input type="checkbox" name="casilla2" /> <input type="checkbox" name="casilla3" value="Tres" />
$_REQUEST Array ( )
Botn radio
Este control se enva solamente si se marca alguno de los botones radio que forman el control. El valor enviado es "on" si el botn marcado no tiene definido el atributo value o el valor del atributo value si ste est definido.
Cdigo fuente
<input type="radio" name="radio1" /> <input type="radio" name="radio1" /> <input type="radio" name="radio2" /> <input type="radio" name="radio2" /> <input type="radio" name="radio3" /> <input type="radio" name="radio3" /> <input type="radio" name="radio4" value="Uno" /> <input type="radio" name="radio4" value="Dos" /> <input type="radio" name="radio5" value="Uno" /> <input type="radio" name="radio5"
$_REQUEST Array ( )
(marcado uno) Array ( [radio2] => on ) (marcado otro) Array ( [radio3] => on ) Array ( [radio4] => Uno (marcado uno) ) Array ( [radio5] => Dos (marcado otro) )
value="Dos" />
Men
Este control enva siempre la opcin elegida. El valor enviado es el contenido de la etiqueta option elegida si la opcin elegida no tiene definido el atributo value o el valor del aributo value si ste est definido. Si el men admite seleccin mltiple, entonces el nombre del men debe acabar con corchetes ([]) y se enva como una matriz, de tantos elementos como opciones se hayan elegido.
Cdigo fuente
<select name="menu1"> <option selected = "selected"> </option> <option></option> </select> <select name="menu2"> <option selected = "selected"> Opcin 1 </option> <option>Opcin 2</option> </select> <select name="menu3"> <option selected="selected" value="Uno"> Opcin 1</option> <option value="Dos">Opcin 2 </option> </select> <select name="menu4[]" size="3" multiple="multiple"> <option selected="selected">Opcin 1</option> <option>Opcin 2</option> <option>Opcin 3</option> </select>
Control
Opcin 1
Opcin 1
(Marcados 1 y 3)
Array ( [menu4] => Array ( [0] => Opcin 1 [2] => Opcin 3 ) )
Control oculto
Este control se enva siempre y el valor enviado es el valor del atributo value.
Cdigo fuente
<input type="hidden" name="oculto1" /> <input type="hidden" name="oculto2" value="Cualquier cosa" />
Control
Cualquier cosa
Cdigo fuente
<input type="submit" value="Submit" /> <input type="submit" value="Submit" name="boton2" />
Control
Submit
Submit
Archivo
El selector de archivo permite enviar un archivo desde el ordenador del cliente al servidor. En un formulario "normal", este control se enva siempre y el valor enviado es el nombre del archivo elegido.
Cdigo fuente
<input type="file" name="archivo1" />
Control
que este control enve toda la informacin, el formulario debe tener el atributo enctype con el valor multipart/form-data y ser enviado con el mtodo POST. La informacin se almacena entonces en la matriz $_FILES (pero no en la variable $_REQUEST).
Cdigo fuente
Control
$_FILES Array ( [archivo2] => Array ( [name] => loquesea.txt [type] => text/plain [tmp_name] => C:\ejemplos\loquesea.txt [error] => 0 [size] => 27890 ) )
Antes de utilizar este control, hay que configurar en el archivo php.ini el tamao mximo de los archivos que se pueden enviar (mediante la directiva post_max_size) y es conveniente leer el captulo correspondiente a la subida de archivos del manual de PHP para conocer la manera de evitar los posibles riesgos de seguridad.
Imagen
El control de tipo imagen inserta una imagen que funciona como un botn (aunque ni Firefox ni Internet Explorer le da relieve como a los botones). Al hacer clic en un punto de la imagen es como si se hubiera pulsado a un botn submit y se envan las coordenadas del punto en el que se ha hecho clic (junto con los valores de los otros controles del formulario).
Cdigo fuente
<input type="image" name="GNU" alt="GNU" src="gnu.jpg" />
Control
Si se define el atributo value, el formulario enva tambin el nombre del control con el valor del atributo.
Recogida de datos
Matriz $_REQUEST
Cuando se enva un formulario, PHP almacena la informacin recibida en una matriz llamada $_REQUEST. El nmero de valores recibidos y los valores recibidos dependen tanto del formulario como de la accin del usuario. Cualquier control se enva solamente si est establecido su atributo name. El atributo name del control puede contener cualquier carcter (nmeros, acentos, guiones, etc), pero si contiene espacios, los espacios se sustituyen por guiones bajos (_). Cada control crea un elemento de la matriz $_REQUEST, que se identifica como $_REQUEST[valor_del_atributo_name] y que contiene el valor entregado por el formulario (en su caso). El siguiente ejemplo muestra un ejemplo de formulario:
<form action="ejemplo.php"> <p>Nombre: <input type="text" name="nombre" /></p> <p><input type="submit" value="Enviar" /></p> </form>
Nombre:
Enviar
Mientras se est programando, para comprobar que el fichero php est recibiendo la informacin enviada por el control, lo ms fcil es utilizar la funcin print_r($matriz) para mostrar el contenido de la matriz $_REQUEST. Una vez se ha comprobado que la informacin llega correctamente, la lnea se debe comentar o eliminar. El siguiente ejemplo muestra lo que escribira el programa PHP si recibiera la informacin del formulario anterior.
Pepito Conejo
Nombre:
Enviar
<?php print "<pre>"; print_r($_REQUEST); print "</pre>\n"; print "<p>Su nombre es $_REQUEST[nombre]</p>"; ?>
Conviene colocar etiquetas <pre> alrededor del print_r($_REQUEST) para facilitar la lectura de los valores.
Si se hace referencia dentro de una cadena al control de nombre "nombre", se debe escribir $_REQUEST[nombre] (sin comillas). Si se escribe $_REQUEST['nombre'] (con comillas) se produce un error.
<?php print "<p>Su nombre es $_REQUEST['nombre']</p>"; ?> <?php print "<p>Su nombre es $_REQUEST[nombre]</p>"; ?>
Parse error: parse error, unexpected T_ENCAPSED_AND_WHITESPACE, expecting T_STRING or T_VARIABLE or T_NUM_STRING in ejemplo.php on line 2
Si se hace referencia fuera de una cadena al control de nombre "nombre", se debe escribir $_REQUEST['nombre'] (con comillas). Si se escribe $_REQUEST[nombre] (sin comillas) se produce un aviso. Notice: Use of undefined constant nombre assumed 'nombre' in ejemplo.php on line 2 Su nombre es Pepito Conejo
<?php print "<p>Su nombre es ".$_REQUEST[nombre]."</p>";?> <?php print "<p>Su nombre es ".$_REQUEST['nombre']."</p>"; ?>
Comprobacin de existencia
La mayora de controles aparecen en la matriz $_REQUEST aunque el usuario no escriba nada en el formulario. El valor almacenado es una cadena vaca, pero est definida. Si el programa supone que se ha introducido algn valor, el resultado puede confundir al usuario ...
Nombre:
Enviar
<?php Array ( print "<pre>"; [nombre] => print_r($_REQUEST); print ) "</pre>\n"; Su nombre es print "<p>Su nombre es $_REQUEST[nombre]</p>"; ?>
... por lo que conviene incluir una estructura if ... else que considere la posiblidad de que no se haya escrito nada en el formulario:
Nombre:
Enviar
<?php Array ( print "<pre>"; [nombre] => print_r($_REQUEST); print ) "</pre>\n"; No has escrito ningn if ($_REQUEST['nombre']=="") { print "<p>No has escrito ningn nombre</p>"; } else { print "<p>Su nombre es $_REQUEST[nombre]</p>"; } ?>
nombre
Sin embargo, las casillas de verificacin y los botones radio solamente estn definidos en la matriz $_REQUEST si se han marcado en el formulario. Por ejemplo, si en el siguiente formulario:
<form action="ejemplo.php"> <p>Deseo recibir informacin: <input type="checkbox" name="acepto" /></p> <p><input type="submit" value="Enviar" /></p> </form>
Array ( )
Y al pretender utilizar el valor, se produce un aviso por utilizar un ndice no definido: Deseo recibir informacin:
<?php Notice: Undefined index: print acepto in ejemplo.php on line "<p>$_REQUEST[acepto]</p>\n"; 2 ?>
Enviar
Este problema se resuelve comprobando que el ndice est definido antes de hacer referencia a l, utilizando la funcin isset($variable), que admite como argumento una variable y devuelve 1 (Verdadero) si existe y 0 (Falso) si no existe. Deseo recibir informacin:
Enviar
<?php No desea recibir informacin if (isset($_REQUEST['acepto'])) { print "<p>Desea recibir informacin</p>"; } else { print "<p>No desea recibir informacin</p>"; } ?> <?php Desea recibir informacin if (isset($_REQUEST['acepto'])) { print "<p>Desea recibir informacin</p>"; } else { print "<p>No desea recibir informacin</p>"; } ?>
En realidad es conveniente efectuar siempre la verificacin de existencia, para prevenir los casos en que un usuario intente acceder a la pgina php sin pasar por el formulario.
<?php Array ( [nombre] => Pepito print "<pre>"; print_r($_REQUEST); print Conejo "</pre>\n"; ) print "<p>Su nombre es $_REQUEST[nombre]</p>"; ?>
Para evitarlo, se puede utilizar la funcin strip_tags($cadena), que elimina todas las etiquetas html, como en el siguiente ejemplo. Nombre:
<strong>Pe
Enviar
es".strip_tags($_REQUEST['nombre'])."</p>"; ?>
Otra funcin que conviene aplicar a cualquier entrada de formulario es la funcin trim($cadena), que elimina los espacios en blanco iniciales y finales y devuelve la cadena sin esos espacios. Por ejemplo, si en el ejemplo siguiente, el usuario introduce varios espacios en blanco en vez de su nombre, la comprobacin no servira para nada ya que la cadena con espacios en blanco no es una cadena vaca Nombre:
Enviar
<?php print "<pre>"; print_r($_REQUEST); print "</pre>\n"; if ($_REQUEST['nombre'] == "") { print "<p>No ha escrito ningn nombre</p>"; } else { print "<p>Su nombre es $_REQUEST[nombre]</p>"; } ?>
Su nombre es
Sin embargo, si se aplica la funcin trim(), la cadena introducida queda reducida a la cadena vaca y la comprobacin la detecta:
<?php Array ( print "<pre>"; print_r($_REQUEST); [nombre] => print "</pre>\n"; ) if (trim($_REQUEST['nombre']) == "") { No ha escrito ningn print "<p>No ha escrito ningn nombre nombre</p>"; } else { print "<p>Su nombre es ".trim($_REQUEST['nombre'])."</p>"; } ?>
Nombre:
Enviar
Nombre:
Enviar
Me llamo "P
<?php if ($_REQUEST['nombre'] == "") { print "<p>No ha escrito ningn nombre</p>"; } else { print "<p>Ha escrito: " . $_REQUEST['nombre']."</p>"; } ?>
Para
caracteres de escape, se puede utilizar la funcin get_magic_quotes_gpc() para detectar si la extensin est activada y la funcin stripslashes() para eliminarlas.
Me llamo "P
eliminar
los
Nombre:
Enviar
<?php if ($_REQUEST['nombre'] == "") { print "<p>No ha escrito ningn nombre</p>"; } else { print "<p>Ha escrito: "; if (get_magic_quotes_gpc()) { print stripslashes($_REQUEST['nombre']); } else { print $_REQUEST['nombre']; } print "</p>"; } ?>
Utilizacin de variables
Si aplicamos las medidas mnimas de seguridad comentadas en el punto anterior, cualquier referencia a $_REQUEST[control] debera sustituirse por trim(strip_tags($_REQUEST[control])). Si adems queremos comprobar si el control est definido, el cdigo se complica. Una solucin es guardar los valores de la matriz $_REQUEST en variables y realizar todas las comprobaciones al definir esas variables. En el resto del cdigo basta con utilizar la variable en vez del elemento de la matriz $_REQUEST.
Nombre:
Enviar
<?php print "<pre>"; print_r($_REQUEST); print "</pre>\n"; if (isset($_REQUEST['nombre'])) { $nombre = trim(strip_tags($_REQUEST['nombre'])); } else { $nombre = ""; } if ($nombre == "") { print "<p>No ha escrito ningn nombre</p>"; } else { print "<p>Su nombre es $nombre</p>"; } ?> <?php print "<pre>"; print_r($_REQUEST); print "</pre>\n"; if (isset($_REQUEST['nombre'])) { $nombre = trim(strip_tags($_REQUEST['nombre'])); } else { $nombre = ""; } if ($nombre == "") { print "<p>No ha escrito ningn nombre</p>"; } else { print "<p>Su nombre es $nombre</p>"; } ?>
Nombre:
Enviar
<strong>Pe
La asignacin de la variable se puede realizar en una sola lnea, utilizando la notacin abreviada: (condicin) ? verdadero : falso;: Nombre:
Enviar
<strong>Pe
<?php print "<pre>"; print_r($_REQUEST); print "</pre>\n"; $nombre = (isset($_REQUEST['nombre'])) ? trim(strip_tags($_REQUEST['nombre'])) : ""; if ($nombre == "") { print "<p>No ha escrito ningn nombre</p>"; } else { print "<p>Su nombre es $nombre</p>"; } ?>
Salida de datos
Si los datos recogidos se escriben luego en una pgina web, hay que tener cuidado en algunos casos especiales.
El carcter & (ampersand)
Si el usuario escribe en una entrada el carcter & (ampersand, entidad de carcter &), si esa cadena se escribe en una pgina, la pgina se ver correctamente en el navegador, pero la pgina no ser vlida (el xhtml ser invalido).
Nombre:
Enviar
Pepito & Co
<?php Su nombre es Pepito & $nombre = Company (isset($_REQUEST['nombre'])) ? trim(strip_tags($_REQUEST['nombre'])) : ""; if ($nombre == "") { print "<p>No ha escrito ningn nombre</p>"; } else { print "<p>Su nombre es $nombre</p>"; } ?>
El motivo por el que la pgina es invlida es que el carcter & indica el comienzo de una entidad de carcter. Como en nuestro caso no hay una entidad de carcter, la pgina no es vlida. La solucin es sustituir el carcter & por su entidad de carcter correspondiente (&). Eso se puede hacer con la funcin str_replace()
Nombre:
Enviar
Pepito & Co
<?php Su nombre es Pepito & $nombre = Company (isset($_REQUEST['nombre'])) ? trim(strip_tags($_REQUEST['nombre'])) : ""; $nombre = str_replace('&', '&', $nombre); if ($nombre == "") { print "<p>No ha escrito ningn nombre</p>"; } else { print "<p>Su nombre es $nombre</p>"; } ?>
Si el usuario escribe en una entrada el carcter " (comillas, entidad de carcter "), si esa cadena se escribe dentro de otras comillas (por ejemplo, en el atributo value de una etiqueta input), la pgina no se ver correctamente y adems no ser vlida.
Nombre:
Enviar
Me llamo "P
<?php Corrija: $nombre = (isset($_REQUEST['nombre'])) ? trim(strip_tags($_REQUEST['nombre'])) : ""; if ($nombre == "") { print "<p>No ha escrito ningn nombre</p>"; } else { print "<p>Corrija: <input type=\"text\" value=\"$nombre\" /></p>"; } ?>
Me llamo
Como en el caso anterior, la solucin es sustituir el carcter " por su entidad de carcter correspondiente ("). Eso se puede hacer con la funcin str_replace()
Nombre:
Enviar
Me llamo "P
Me llamo "P
$nombre = str_replace('"', '"', $nombre); if ($nombre == "") { print "<p>No ha escrito ningn nombre</p>"; } else { print "<p>Corrija: <input type=\"text\" value=\"$nombre\" /></p>"; } ?>
Para tener en cuenta todos los aspectos comentados en los puntos anteriores, es conveniente definir funciones para la recogida de datos:
La funcion recoge() del ejemplo siguiente tiene como argumento el nombre del control que se quiere recibir y devuelve el valor recibido o una cadena vaca si el control no se ha recibido. Al comienzo del programa el dato recibido se almacena en una variable. En el resto del programa se trabaja con la variable.
<?php function recoge($var) { $tmp = (isset($_REQUEST[$var])) ? trim(strip_tags($_REQUEST[$var])) : ''; if (get_magic_quotes_gpc()) { $tmp = stripslashes($tmp); } $tmp = str_replace('&', '&', $tmp); $tmp = str_replace('"', '"', $tmp); return $tmp; } $nombre = recoge('nombre'); if ($nombre == "") { print "<p>No ha escrito ningn nombre</p>"; } else { print "<p>Su nombre es $nombre</p>"; } ?>
La funcin recoge() del apartado anterior se puede modificar para definir un valor predeterminado (es decir, que si el dato no existe, la funcin devuelve el valor predeterminado enviado como segundo argumento). En el ejemplo siguiente, si no se recibe el nombre, se le asigna el nombre "pobrecito hablador".
<?php function recoge($var, $var2='') { $tmp = (isset($_REQUEST[$var])&&($_REQUEST[$var]!='')) ? trim(strip_tags($_REQUEST[$var])) : trim(strip_tags($var2)); if (get_magic_quotes_gpc()) { $tmp = stripslashes($tmp); } $tmp = str_replace('&', '&', $tmp); $tmp = str_replace('"', '"', $tmp); return $tmp; } $nombre = recoge('nombre', 'pobrecito hablador'); print "<p>Su nombre es $nombre</p>"; ?>
Si un formulario enva los datos en forma de matriz, como en el ejemplo siguiente, la funcin recoge() del punto anterior no servira.
<form action="ejemplo.php"> <p>Nombre: <input type="text" name="nombre[1]" /></p> <p>Apellido: <input type="text" name="nombre[2]" /></p> <p><input type="submit" value="Enviar" /></p> </form>
Nombre: Apellido:
Enviar
Pepito
Conejo
Hay que hacer otra funcin que recoja y trate los datos en forma de matriz.
La funcion recogeMatriz() del ejemplo siguiente tiene como argumento el nombre del control que se quiere recibir (que debe ser una matriz de una dimensin, no sirve para matrices de dos o ms dimensiones) y devuelve una matriz con los valores recibidos o una matriz vaca si el control no se ha recibido. Al comienzo del programa los datos recibidos se almacenan en una matriz. En el resto del programa se trabaja con la matriz.
<?php function recogeMatriz($var) { $tmpMatriz = array(); if (isset($_REQUEST[$var]) && is_array($_REQUEST[$var])) { foreach ($_REQUEST[$var] as $indice => $valor) { $tmp = trim(strip_tags($indice)); if (get_magic_quotes_gpc()) { $tmp = stripslashes($tmp);
} $tmp = str_replace('&', '&', $tmp); $tmp = str_replace('"', '"', $tmp); $indiceLimpio = $tmp; $tmp = trim(strip_tags($valor)); if (get_magic_quotes_gpc()) { $tmp = stripslashes($tmp); } $tmp = str_replace('&', '&', $tmp); $tmp = str_replace('"', '"', $tmp); $valorLimpio = $tmp; $tmpMatriz[$indiceLimpio] = $valorLimpio; } } return $tmpMatriz; } $nombre = recogeMatriz('nombre'); if ($nombre[1]=="") { print "<p style=\"color:red\">No ha escrito su nombre.</p>\n"; } else { print "<p>Su nombre es <strong>$nombre[1]</strong>.</p>\n"; } if ($nombre[2]=="") { print "<p style=\"color:red\">No ha escrito su apellido.</p>\n"; } else { print "<p>Su apellido es <strong>$nombre[2]</strong>.</p>\n"; } ?>