Diferencia entre revisiones de «Usuario:ManuelRomero/php/vectores»
De WikiEducator
< Usuario:ManuelRomero | php
(→Los modos de pasar los valores) |
|||
(16 revisiones intermedias por el mismo usuario no mostrado) | |||
Línea 13: | Línea 13: | ||
[[Imagen:DWES_TituloTema3.gif|center]] | [[Imagen:DWES_TituloTema3.gif|center]] | ||
|} | |} | ||
− | + | __NOTOC__ | |
===Arrays=== | ===Arrays=== | ||
Línea 43: | Línea 43: | ||
$capitales = array("españa"=>"madrid", "italia"=>"roma","Alemania"=>"Berlin"); | $capitales = array("españa"=>"madrid", "italia"=>"roma","Alemania"=>"Berlin"); | ||
$capital ["españa"=>"madrid", "italia"=>"roma","Alemania"=>"Berlin"]; | $capital ["españa"=>"madrid", "italia"=>"roma","Alemania"=>"Berlin"]; | ||
− | |||
*También se puede crear directamente co [] | *También se puede crear directamente co [] | ||
<source lang=php> | <source lang=php> | ||
Línea 49: | Línea 48: | ||
$capitales[["italia"]="roma" | $capitales[["italia"]="roma" | ||
$capitales["Alemania"]="Berlin"; | $capitales["Alemania"]="Berlin"; | ||
− | |||
</source> | </source> | ||
*Existen muchas funciones asociadas a los arrays | *Existen muchas funciones asociadas a los arrays | ||
Línea 56: | Línea 54: | ||
Define un array de 5 ciudades y recorrelo con un bucle for usando count() | Define un array de 5 ciudades y recorrelo con un bucle for usando count() | ||
}} | }} | ||
+ | <source lang=php> | ||
+ | <?php | ||
+ | //defino e inicializo el vector | ||
+ | $ciudades[0]="Valencia"; | ||
+ | $ciudades[]="Teruel"; | ||
+ | $ciudades[]="Burgos"; | ||
+ | $ciudades[]="Zaragoza"; | ||
+ | $ciudades[]="Huesca"; | ||
+ | |||
+ | //Obtengo el número de elementos | ||
+ | $num= count($ciudades); | ||
+ | echo "hay $num ciudades"; | ||
+ | for ($n=0; $n<$num; $n++){ | ||
+ | echo "ciudad $n es $ciudades[$n]<br>"; | ||
+ | } | ||
+ | ?> | ||
+ | </source> | ||
+ | |||
===Ver el contenido de un array=== | ===Ver el contenido de un array=== | ||
*Podemos usar la función ya conocida '''''var_dump()''''' | *Podemos usar la función ya conocida '''''var_dump()''''' | ||
Línea 119: | Línea 135: | ||
*Mostrar los resultados por pantalla. | *Mostrar los resultados por pantalla. | ||
}} | }} | ||
+ | <source lang=php> | ||
+ | <?php | ||
+ | $notas = array(); | ||
+ | $tamano = rand(1,50); | ||
+ | //Ahora rellenamos el valor de $tamano posiciones del vector | ||
+ | for ($n=0; $n<$tamano;$n++){ | ||
+ | $notas[$n] = rand(1,10); | ||
+ | } | ||
+ | //recorremos calculando minimo, maximo y media | ||
+ | unset($notas[5]); | ||
+ | //El primer valor del vector inicializa las variables | ||
+ | $min = $notas[0]; | ||
+ | $max = $notas[0]; | ||
+ | $suma = $notas[0]; | ||
+ | for ($n=1; $n<count($notas) ;$n++){ | ||
+ | if ($min>$notas[$n]) | ||
+ | $min=$notas[$n]; | ||
+ | if ($max<$notas[$n]) | ||
+ | $max=$notas[$n]; | ||
+ | $suma+=$notas[$n]; | ||
+ | } | ||
+ | echo "La nota máxima es $max<br>"; | ||
+ | echo "La nota mínima es $min<br>"; | ||
+ | echo "La nota media es es". ($suma/$n); | ||
+ | |||
+ | ?> | ||
+ | |||
+ | </source> | ||
{{Tarea| | {{Tarea| | ||
*Implementar una función que busca si un determinado valor aparece en una matriz. | *Implementar una función que busca si un determinado valor aparece en una matriz. | ||
Línea 141: | Línea 185: | ||
</source> | </source> | ||
}} | }} | ||
− | + | <source lang=html4strict> | |
− | + | <!DOCTYPE html> | |
− | + | <!-- | |
− | + | To change this license header, choose License Headers in Project Properties. | |
− | + | To change this template file, choose Tools | Templates | |
− | + | and open the template in the editor. | |
− | + | --> | |
+ | <html> | ||
+ | <head> | ||
+ | <meta charset="UTF-8"/> | ||
+ | <meta http-equiv="refresh" content="5" url="index.php"/> | ||
+ | <title></title> | ||
+ | </head> | ||
+ | <body> | ||
+ | <?php | ||
+ | $imagenes = array( | ||
+ | "http://www.tecn.upf.es/~ocelma/cpom/practicas/php/random_images/discography/a_piece_for_the_wicked_vol_1.jpg", | ||
+ | "http://www.tecn.upf.es/~ocelma/cpom/practicas/php/random_images/discography/double_t.jpg", | ||
+ | "http://www.tecn.upf.es/~ocelma/cpom/practicas/php/random_images/discography/flagrantly_yours.jpg", | ||
+ | "http://www.tecn.upf.es/~ocelma/cpom/practicas/php/random_images/discography/gothic.jpg", | ||
+ | "http://www.tecn.upf.es/~ocelma/cpom/practicas/php/random_images/discography/iliad_of_a_wolverhampton_wanderer.jpg", | ||
+ | "http://www.tecn.upf.es/~ocelma/cpom/practicas/php/random_images/discography/libertine.jpg", | ||
+ | "http://www.tecn.upf.es/~ocelma/cpom/practicas/php/random_images/discography/lullabies_for_tough_guys.jpg", | ||
+ | "http://www.tecn.upf.es/~ocelma/cpom/practicas/php/random_images/discography/nocturnal_nomad.jpg", | ||
+ | "http://www.tecn.upf.es/~ocelma/cpom/practicas/php/random_images/discography/the_idle_gait_of_the_self_possessed.gif", | ||
+ | "http://www.tecn.upf.es/~ocelma/cpom/practicas/php/random_images/discography/the_life_and_times_of_a_ballad_monger.jpg" | ||
+ | ); | ||
+ | $n1=rand(0,9); | ||
+ | $n2=rand(0,9); | ||
+ | $n3=rand(0,9); | ||
+ | echo "<img src=$imagenes[$n1]><img src=$imagenes[$n2]><img src=$imagenes[$n3]>"; | ||
+ | ?> | ||
+ | </body> | ||
+ | </html> | ||
+ | </source> | ||
===Variables globales Vs superglobales=== | ===Variables globales Vs superglobales=== | ||
Línea 181: | Línea 253: | ||
#$_SERVER['REMOTE_ADDR']:dirección IP desde la que el usuario está viendo la página. | #$_SERVER['REMOTE_ADDR']:dirección IP desde la que el usuario está viendo la página. | ||
#$_SERVER['REQUEST_METHOD']:método utilizado para acceder a la página ('GET', 'HEAD', 'POST' o 'PUT') | #$_SERVER['REQUEST_METHOD']:método utilizado para acceder a la página ('GET', 'HEAD', 'POST' o 'PUT') | ||
− | {{Actividad| Haz un script que | + | {{Actividad| Haz un script que nos de la información de las variables vistas anteriormente}} |
− | + | <source lang=php> | |
− | + | <?php | |
− | + | ||
+ | $datos = $_SERVER; | ||
+ | foreach ($datos as $indice => $valor){ | ||
+ | echo ("Valor de $indice es $valor<br>"); | ||
+ | } | ||
+ | ?> | ||
+ | </source> | ||
===Leer datos=== | ===Leer datos=== | ||
Línea 220: | Línea 297: | ||
http://www.aulaclic.es/html/t_8_1.htm | http://www.aulaclic.es/html/t_8_1.htm | ||
*Elemento input, en él especifiaremos los siguientes atributos | *Elemento input, en él especifiaremos los siguientes atributos | ||
− | type | + | ;type |
− | name | + | :indicaremos el tipo de elemento de entrada (text, password, email, checkbox...) |
− | value | + | :Aquí podemos ver una lista de posibles valores, tened en cuenta que con html5 se introdujeron 13 nuevos tipos. |
− | * | + | http://www.w3schools.com/tags/att_input_type.asp |
+ | ...) | ||
+ | :También es interesante el tipo hidden (especialmente usado para pasar valores del cliente al servidor de forma transparente para el usuario. | ||
+ | |||
+ | ;name | ||
+ | :indicaremos el nombre asociado a este input. | ||
+ | :Con este identificador podremos en el servidor recuperar la información. | ||
+ | ;value | ||
+ | :Es el valor que tiene el input. Si queremos que por defecto tenga un valor | ||
+ | *Dentro del form necesitaremos al menos un input y un submit | ||
*EJ. en el emisor tenemos | *EJ. en el emisor tenemos | ||
− | + | ||
<source lang=html4strict> | <source lang=html4strict> | ||
− | + | <!DOCTYPE html> | |
− | + | ||
− | + | <html> | |
− | </ | + | <head> |
+ | <title>Tabla de multiplaicar</title> | ||
+ | </head> | ||
+ | <body> | ||
+ | <form action="tabla.php" method="GET"> | ||
+ | Inserta un numero <br> | ||
+ | <input type="text" name="numero"/> | ||
+ | <br/> | ||
+ | <input TYPE="submit" VALUE="Enviar"/> | ||
+ | </form> | ||
+ | </body> | ||
+ | </html> | ||
</source> | </source> | ||
+ | *Y obtenemos la siguiente imagen | ||
+ | [[imagen:formulario.png]] | ||
#Al presionar el botón de enviar se envía la página al servidor | #Al presionar el botón de enviar se envía la página al servidor | ||
#La página que especificamos en el botón action la gestiona ''tabla.php'' en este caso | #La página que especificamos en el botón action la gestiona ''tabla.php'' en este caso | ||
Línea 241: | Línea 340: | ||
Valor numérico introducido: <?php echo $_GET['numero'] ?> | Valor numérico introducido: <?php echo $_GET['numero'] ?> | ||
</source> | </source> | ||
+ | ===Los modos de pasar los valores=== | ||
+ | *Usaremos dos métodos para pasar valores | ||
+ | #GET Pasamos los valores en la propia URI seguido del caracter '''''?''''' y separando parejas '''''variable=valor''''' por ''''';''''' | ||
+ | #POST Enviándolo en el cuerpo del forumulario usando el protocolo hppt | ||
+ | *Cómo leer los datos en el servidor | ||
+ | *Accediendo a la variable superglobal $_POST y $_GET. | ||
+ | *Son arrays asociativos. La clave es el nombre de la variable. en el caso anterior para leer el valor de numero | ||
+ | <source lang=php> | ||
+ | <?php | ||
+ | $numero = $_POST['numero']; | ||
+ | ..... | ||
+ | </source> | ||
+ | *Observe que usarmeos $_POST y $_GET en función de como hemos pasado los parámetros | ||
+ | *Si no estamos muy seguros también se puede usar $_REQUEST | ||
+ | |||
+ | {{Tarea| | ||
+ | *Hacemos un formulario que envíe datos de nombre, apellido e idiomas que habla entre inglés, alemán, rumano y español | ||
+ | *En el servidor simplemente visualizaremos los datos introducidos | ||
+ | *Observa la forma de especificar un checkbox y de enviarlo | ||
+ | <source lang=html4strict> | ||
+ | ..... | ||
+ | <input type="checkbox" name="idiomas[]" value="ingles" /> Idioma ingles americano<br /> | ||
+ | <input type="checkbox" name="idiomas[]" value="frances" /> Idioma frances<br> | ||
+ | .... | ||
+ | </source> | ||
+ | }} | ||
+ | |||
+ | *En el cliente | ||
+ | <source lang=html4strict> | ||
+ | <!DOCTYPE html> | ||
+ | <html> | ||
+ | <head> | ||
+ | <title>Datos personales</title> | ||
+ | <meta charset="UTF-8"> | ||
+ | <meta name="viewport" content="width=device-width, initial-scale=1.0"> | ||
+ | </head> | ||
+ | <body> | ||
+ | <form action="procesa.php" method="POST"> | ||
+ | Inserta un numero <br> | ||
+ | nombre | ||
+ | <input type="text" name="nombre"/> | ||
+ | Apellido | ||
+ | <input type="text" name="apellido"/> | ||
+ | <br> | ||
+ | <!-- | ||
+ | observar que los diferentes opciones van un un mismo array | ||
+ | --> | ||
+ | <input type="checkbox" name="idiomas[]" value="ingles" />Idioma ingles americano<br/> | ||
+ | <input type="checkbox" name="idiomas[]" value="frances" />Idioma frances<br/> | ||
+ | <input type="checkbox" name="idiomas[]" value="ingles" />Idioma aleman<br/> | ||
+ | <input type="checkbox" name="idiomas[]" value="frances" />Idioma rumano<br/> | ||
+ | |||
+ | <input TYPE="submit" VALUE="Enviar"/> | ||
+ | </form> | ||
+ | |||
+ | </body> | ||
+ | </html> | ||
+ | </source> | ||
+ | *En el servidor | ||
+ | <source lang=php> | ||
+ | <?php | ||
+ | |||
+ | /* | ||
+ | * To change this license header, choose License Headers in Project Properties. | ||
+ | * To change this template file, choose Tools | Templates | ||
+ | * and open the template in the editor. | ||
+ | */ | ||
+ | |||
+ | // Leemos los datos del formulario0 | ||
+ | echo "hola1" ; | ||
+ | $nombre = $_POST('nombre'); | ||
+ | echo "hola2"; | ||
+ | $apellido = $_POST['apellido']; | ||
+ | $idiomas = $_POST['idiomas']; | ||
+ | echo "hola3"; | ||
+ | echo "nombre : $nombre apellidos : $apellido<br/>"; | ||
+ | echo "idiomas que habla :<br/>"; | ||
+ | foreach ($idiomas as $idioma){ | ||
+ | echo "$idioma<br/>"; | ||
+ | } | ||
+ | ?> | ||
+ | </source> | ||
+ | {{Tarea| | ||
+ | *Modifica el programa de validación de fecha, pero que la introduzca el usuario | ||
+ | *Al final se visualizará la fecha de la siguiente manera | ||
+ | día XX del mes de XX(En letra] del año [xxxx] | ||
+ | }} | ||
+ | |||
+ | ===Verificar datos en el servidor=== | ||
+ | *Independientemente de las verificaciones que se hagan en el cliente, siempre hay que verificar datos en el servidor | ||
+ | *Esta cuestión cobra especial importancias si se trabaja con bases de datos, volveremos a la cuestión en el tema de bases de datos | ||
+ | *Por ejemplo se puede querer verificar que se hayan insertado datos '''''isset(....)''''' | ||
+ | {{Tarea|Vamos a leer los datos de la página anterior verificando que el usuario haya insertado la fecha, si no damos un mensaje}} | ||
+ | |||
+ | {{Tarea| | ||
+ | Realizar un programa php con las siguientes especificaciones | ||
+ | Se realizará en un único fichero php | ||
+ | El programa nos pedirá que nos validemos, con los siguientes requisitos | ||
+ | Si es la primera vez que nos conectamos, aparecer un formulario que nos pedirá usuario y pass | ||
+ | Si le damos aceptar se verificará lo siguiente | ||
+ | #que los campos de usuario y pass no estén vacíos | ||
+ | #el el usuario tenga al menos 6 caracteres | ||
+ | #que el pass contenga al menos un dígito | ||
+ | Si una vez validado todo está ok se visualizará los datos de usuario y pass que se introdujeron | ||
+ | Si se incumple algo de lo anterior, se mostrará un mensaje de error y el formulario aparecer sin datos | ||
+ | }} | ||
+ | *Para este ejercicio se puede mirar la función preg_match http://php.net/manual/es/function.preg-match.php. NO USAR ereg() está en desuso. | ||
+ | *Para el tema de expresiones regulares hay mucha documentación por ejemplo http://informaticapc.com/tutorial-php/expresiones-regulares-buscar.php | ||
+ | en este caso el patrón es muy sencillo $patron='/[0-9]/' | ||
+ | *Para ver el códgio http://pastebin.com/print.php?i=UanhmPLi | ||
+ | <source lang=php> | ||
+ | <!DOCTYPE html> | ||
+ | - | ||
+ | |||
+ | |||
+ | |||
+ | |||
+ | <html> | ||
+ | <head> | ||
+ | <title>Formulario </title> | ||
+ | <meta charset="UTF-8"> | ||
+ | <meta name="viewport" content="width=device-width, initial-scale=1.0"> | ||
+ | </head> | ||
+ | <body> | ||
+ | <!-- Aqui empieza el código php --> | ||
+ | <?php | ||
+ | //Si es la primera vez que se ejecuta el formulario | ||
+ | if (!(isset($_POST['enviar']))){ | ||
+ | //Primera vez | ||
+ | $usuario=""; | ||
+ | $pass=""; | ||
+ | |||
+ | } | ||
+ | |||
+ | else{ | ||
+ | if (errores()){ | ||
+ | //Segunda o siguientes veces con erro | ||
+ | $usuario=""; | ||
+ | $pass=""; | ||
+ | |||
+ | }else{ | ||
+ | |||
+ | //Todo ok | ||
+ | $usuario=$_POST['usuario']; | ||
+ | $pass=$_POST['pass']; | ||
+ | |||
+ | } | ||
+ | } | ||
+ | function errores(){ | ||
+ | $usuario = $_POST['usuario']; | ||
+ | $pass = $_POST['pass']; | ||
+ | if ((empty($usuario))||(empty($pass))){ | ||
+ | echo "Los campos de usuariio y pass no pueden estar vacíos"; | ||
+ | return true; | ||
+ | } | ||
+ | if (strlen($usuario)<=7){ | ||
+ | echo "La cadena de usuario debe tener más de 7 caracteres y no ".strlen($us | ||
+ | return true; | ||
+ | } | ||
+ | $expresion='/[0-9]/'; | ||
+ | if (preg_match($expresion,$pass)!=true){ | ||
+ | echo "La pass debe tener al menos un dígito y no lo tienen ".($pass); | ||
+ | return true; | ||
+ | |||
+ | } | ||
+ | return false; | ||
+ | } | ||
+ | ?> | ||
+ | if | ||
+ | <form action=<?php echo $_SERVER['PHP_SELF'] ?> method="POST"> | ||
+ | Inserta un numero <br> | ||
+ | usuario : <input type="text" name="usuario" value="<?php echo "$usuario"; ?>"/> | ||
+ | Pass: <input type="text" name="pass" value="<?php echo "$pass" ;?>"/> | ||
+ | <br> | ||
+ | <input type="submit" value="Enviar" name="enviar"/> | ||
+ | </form> | ||
+ | |||
+ | </body> | ||
+ | </html> | ||
+ | |||
+ | </source> | ||
+ | |||
+ | |||
+ | |||
|} | |} |
Última revisión de 10:15 22 oct 2014
Arrays
// array numérico $modulos1 = array(0 => "Programación", 1 => "Bases de datos", ..., 9 => "Desarrollo web en entorno servidor"); // array asociativo $modulos2 = array("PR" => "Programación", "BD" => "Bases de datos", ..., "DWES" => "Desarrollo web en entorno servidor");
Crear un array
$capitales = array(); $capital ["españa"=>"madrid", "italia"=>"roma","Alemania"=>"Berlin"];
$capitales = array("españa"=>"madrid", "italia"=>"roma","Alemania"=>"Berlin"); $capital ["españa"=>"madrid", "italia"=>"roma","Alemania"=>"Berlin"]; *También se puede crear directamente co [] <source lang=php> $capitales["españa"]="madrid"; $capitales[["italia"]="roma" $capitales["Alemania"]="Berlin";
<?php //defino e inicializo el vector $ciudades[0]="Valencia"; $ciudades[]="Teruel"; $ciudades[]="Burgos"; $ciudades[]="Zaragoza"; $ciudades[]="Huesca"; //Obtengo el número de elementos $num= count($ciudades); echo "hay $num ciudades"; for ($n=0; $n<$num; $n++){ echo "ciudad $n es $ciudades[$n]<br>"; } ?> Ver el contenido de un array
Funciones para manejar matrices
$modulos1 [9] $modulos2 ["DWES"]
// array bidimensional $ciclos = array( "DAW" => array ("PR" => "Programación", "BD" => "Bases de datos", ..., "DWES" => "Desarrollo web en entorno servidor"), "DAM" => array ("PR" => "Programación", "BD" => "Bases de datos", ..., "PMDM" => "Programación multimedia y de dispositivos móviles") );
$ciclos ["DAW"] ["DWES"]
// array numérico $modulos1 [0] = "Programación"; $modulos1 [1] = "Bases de datos"; ... $modulos1 [9] = "Desarrollo web en entorno servidor"; // array asociativo $modulos2 ["PR"] = "Programación"; $modulos2 ["BD"] = "Bases de datos"; ... $modulos2 ["DWES"] = "Desarrollo web en entorno servidor";
$modulos1 [ ] = "Programación"; $modulos1 [ ] = "Bases de datos"; ... $modulos1 [ ] = "Desarrollo web en entorno servidor"; |