Mostrando entradas con la etiqueta cursoPHP5. Mostrar todas las entradas
Mostrando entradas con la etiqueta cursoPHP5. Mostrar todas las entradas

Curso PHP 5 VI || Aprendamos sobre Formularios

Actividades V

Crea un programa en PHP a forma de calculadora utilizando el mínimo de funciones posible.


<?php 

function calcula($num$oper$num2) { 
    switch (
$oper) { 
     
        case 
'+'
            
$res $num $num2
        break;; 
        case 
'-'
            
$res $num $num2
        break;; 
        case 
'*'
            
$res $num $num2
        break;; 
        case 
'/'
            
$res $num $num2
        break;; 
        case 
'%'
            
$res $num $num2
    } 
    return 
$res


echo 
calcula(2,'+',2); # Resultado: 4 
?> 



Crea un programa en PHP en el que tengas que exponer todo lo aprendido en este apartado
Este ejercicio era bastante libre, y podíais aplicar todo lo aprendido o solo lo de la última clase. Aquí las soluciones son infinitas.


<?php 

$message 
"Este es mi mensaje! saludos, nax"

$fake givetome($message"nax""thief"); 
echo 
$fake

function 
givetome($original$autor$ladron) { 
    
$original explode(' '$original); 
    if (
in_array($autor,$original)) 
        
$original[array_search($autor,$original)] = $ladron;     
    return 
implode(' ',$original); 

?> 


Este ejemplo toma un mensaje original y cambia el autor por el que le indicamos, un ejemplo como cualquier otro que me hayas enviado.

VIII. Introducción a los formularios


Ya hemos dado todos los puntos que me había propuesto para este tutorial/curso, por lo tanto voy a dar una clase práctica de integración con formularios y ya doy por cerrado este curso.

Por supuesto seguiré trayendo cosas tanto en Bl4ck-P0rt4l y CUH como en mi blog. Así que si seguís interesados en el mundo de PHP y sus áreas derivadas no os alejéis mucho.

Empecemos por el principio:

Un formulario web es, a día de hoy, un elemento imprescindible para una página web dinámica, gracias a ellos podemos loguear y registrar usuarios, enviar mensajes, publicar encuestas, comentarios, etc.
Por lo tanto conocer su funcionamiento y proporcionar facilidades a los usuarios es una tarea importante en el desarrollo web.
Hay mucha gente, quizá por comodidad o facilidad, que crea un .html para los formularios y un .php para el código, yo tengo por costumbre hacerlo todo en vista de código y por lo tanto siempre lo hago todo en un .php así que vamos a aprender a hacerlo de esa forma.

Un simple formulario:

Vamos a ver un ejemplo simple.


<?php 

if (isset($_POST['nombre'])) { 
    echo 
"Bienvenido "$_POST['nombre']; 
} else { 
    echo 
'<form action="'.$_SERVER['PHP_SELF'].'" method="post"> 
          Bienvenido desconocido por favor dinos tu nombre: 
          <input name="nombre" type="text" /> 
            <input type="submit" name="Submit" id="button" value="Enviar" /> 
          </form>'


?> 


Este es un ejemplo muy claro, una página que se envía un form a sí mismo.
El if() comprueba que se haya enviado la variable, en caso de ser así es porque se nos ha enviado un nombre para mostrar, sino, mostramos el formulario pidiéndole que nos dé su nombre.

En este ejemplo ya podemos destacar dos cosas, la variable $_SERVER y la variable $_POST, como ya comenté anteriormente la variable $_SERVER es una variable propia del sistema PHP lo mismo pasa con $_POST ambas tienen su función y existen más variables de servidor que explicaremos a continuación.

Variables de Servidor útiles:

La variable $_SERVER contiene un montón de elementos más, pero nos vamos a centrar en aquellos que nos puedan ser de mayor utilidad.

Elemento Ejemplo Descripción
PHP_SELF /pagina.php Nos devuelve la ruta de la página en que se ejecuta
QUERY_STRING id=3&post=4 Es la parte que vemos en la url (store.php?id=3)
PATH_INFO pagina.php?/browse Es parecido a lo anterior pero con directorios
SERVER_NAME http://www.bl4ck-p0rtal.org Nombre del servidor que ejecuta el intérprete
DOCUMENT_ROOT /usr/local/htdocs Ruta local de la carpeta html
REMOTE_ADDR 175.56.23.2 IP del usuario/cliente
REMOTE_HOST pool.cvx.dialup.. Nombre del host del usuario/cliente
HTTP_REFERER foro.el-hacker.com Si se hizo clic para llegar al link esta variable lo contiene
HTTP_USER_AGENT Mozilla/4.0… Información del navegador y sistema operativo.

Os invito a probar el resto estas son, quizá, las más utilizadas.

Procesando y accediendo a los parámetros de los documentos:

Los formularios funcionan con dos métodos POST y GET.
La principal diferencia entre ambos (y las que nos interesa ahora) es que POST se envía en segundo plano y GET se puede ver fácilmente en la barra de direcciones (esto no implica que los POST no se puedan ver, solo que es más ‘dificil’).

Entonces te preguntarás ¿y porqué existe GET si POST es claramente mejor? Bueno, mi profesor de PHP me enseñó en su momento que en PHP si hay 2 formas de hacer las cosas siempre prevalece la mejor y la otra se elimina de el intérprete, pero en el caso de que ambas formas sean útiles en determinados momentos se mantienen ambas. Es decir, un POST es útil con un formulario que, por ejemplo envía una contraseña para que no se vea en la URL, pero sin embargo no podemos enviar datos a otra página (o a la misma) sin usar un formulario y en ese momento es GET el que entra en acción.

Un claro ejemplo de variables GET son los foros SMF todo lo que va detrás de .php? se está enviando vía GET.

Entonces, como conclusión usaremos POST para los formularios y GET para las url. En php accedemos a los métodos con $_POST y $_GET. En los formularios el parámetro name es el que marca el nombre que tendrá en el $_POST o $_GET.

Los elementos de múltiples valores serán enviados como un array:

<?php 

if (isset($_POST['nombre'])) { 
    echo 
"Bienvenido "$_POST['nombre'] . 
    
'<br />Hoy quieres comer: ' $_POST['food'][0] .  

    ' y ' $_POST['food'][1]; 
} else { 
    echo 
'<form action="'.$_SERVER['PHP_SELF'].'" method="post"> 
          Bienvenido desconocido por favor dinos tu nombre: 
          <input name="nombre" type="text" /> <br /> 
            
         <select name="food[]" multiple> 
             <option value="Fideos"> Fideos </option> 
            <option value="carne"> Carne </option> 
            <option value="pescado"> Pescado </option> 
         </select> 
          
         <br /><input type="submit" name="Submit" id="button" 

         value="Enviar" /> 
         </form>'


?> 



Como veis en el form agregamos una lista en la cual al nombre ya le indicamos que será un array con los signos [] y le damos el parámetro múltiple.

En el ejemplo estamos dando por supuesto que se recibirán 2 parámetros, para asegurarnos de ello deberíamos crear una función en JS para asesorarnos que es así.

Comprobar direcciones de correo:

Como este último capitulo pretende ser un repaso muy por encima de los formularios no voy a hablar de validación de datos, pero si os voy a dejar la forma de validar, en parte, un correo electrónico.

Luego, cuando estéis más acostumbrados a PHP se puede verificar que estos correos existan de verdad haciendo consultas whois y cosas por el estilo. Pero con este ejemplo nos aseguraremos de que al menos la sintaxis del correo sea correcta

<?php 

if (! preg_match('/^[^@s]+@([-a-z0-9]+.)+[a-z]{2,}$/i'$_POST['email'])) { 
    
$errores[] = 'Introduce un email valido'
?> 


Valores por defecto:

Al principio hablábamos de dar comodidad al usuario. Una de las formas de hacerlo es recordando los datos que se ingresaron y en caso de haber algún error rellenar los datos que el usuario tiene bien y otra forma es crear valores por defecto a modo de ejemplo.

<?php 

if ($_POST['_check']) { 
    
$defaults $_POST
} else { 
    
$defaults = array( 'nombre' => 'nax'
                        
'edad'  => '20'
                        
'ciudad' => 'Villanax' ); 

?> 


Con este ejemplo tenemos una variable llamada _check que en caso de no existir significa que no se envió un formulario y por lo tanto nombramos nuestros valores por defecto, sino lo que estaríamos haciendo es guardar los valores enviados.

Para establecer valores por defecto es imperativo hacer los form en PHP. Un ejemplo de cómo se cargarán dichos valores es:

<?php 

if ($_POST['_check']) { 
    
$defaults $_POST
} else { 
    
$defaults = array( 'nombre' => 'nax'
                        
'edad'  => '20'
                        
'ciudad' => 'Villanax' ); 

echo 
'<form action="'.$_SERVER['PHP_SELF'].'" method="post">  
          Bienvenido desconocido por favor dinos tu nombre:  
          <input name="nombre" type="text" value="'
. 

          $defaults['nombre'].'" /> <br />  
             
          Edad: <input name="nedad" type="text" value="'
. 

          $defaults['edad'].'" /> <br /> 
           
          Ciudad: <input name="ciudad" type="text" value="'
.

          $defaults['ciudad'].'" /> <br /> 
          <br /><input type="submit" name="Submit" 

          id="button" value="Enviar" /> 
          </form>'

?> 


Con esta buena práctica ahorramos muchos dolores de cabeza a las personas con tendencia a equivocarse en los formularios de registro por ejemplo, y si... lo digo por experiencia propia.


Y bien, con este último capítulo doy por concluido el tutorial de PHP 5. Gracias a todos los que lo han ido siguiendo día a día, a los que enviaron los ejercicios y a los comentarios de crítica (tanto buenos como malos).
Si creen que falta algo o creen que sería bueno ampliar alguna parte del tutorial solo háganmelo saber.

Para:
~ Syntax Error ~
Bl4ck~P0rtal -
http://foro.el-hacker.com

Saludos Nax.


Version .doc:Formularios.doc
Version .pdf: Formularios.pdf

Curso PHP 5 || V. Declaracion y llamado de funciones

Actividades IV

1.   Con  datos inventados crea array para los diferentes casos:
a)   La nota y el ID de cada estudiante según su grupo


<?php
$estudiantes 
= array( 'group1' => array ('user1' => array ('nota' => 4,
                                             
'id' => 1),
                               
'user2' => array ('nota' => 6,
                                             
'id' => 2)
                               ),
                
'group2' => 'etc');
?>


b)   Cantidad de stock de cada producto en una tienda

<?php

$tienda 
= array( 'product1' => 'stock',
             
'product2' => 10);
?>


c) Nombres de las personas de tu familia

<?php

$familia 
= array ('name1''name2''name3');

?>


d) Nombre edad y parentesco con las personas de tu familia

<?php

$family 
= array ( 'hermano' => array('juan''esteban'),
              
'hermana' => 'julia',
              
'padre' => 'ernest',
              
'madre' => 'juana');
?>


Este último también se podía hacer tipo el de la tienda.


VII.    Creando Funciones propias

A día de hoy, está muy bien visto el reutilizar código.
Si tenemos una determinada acción que se repetirá más de una o dos veces y que los cambios en ambos procesos son menores quizá nos convenga crear una función para dicho proceso y así evitarnos líneas repetitivas y errores en la programación.
Los argumentos de una función son datos extra que le pasamos a esta para que realice la acción, si por ejemplo tenemos una función que muestra un mensaje envuelto en etiquetas h1, el argumento a enviarle es el texto a mostrar.

Tenemos 2 tipos de funciones:

-   De dirección única: A las cuales podemos, o no, pasarle argumentos pero no devuelven un valor
-   De dos direcciones: a las cuales le pasamos argumentos y nos retornan un valor.

Para este último podríamos tener una función de comprobación de usuarios y en caso de coincidir los datos devuelve true o false si alguno es incorrecto.

Las variables dentro de una función son distintas a las de fuera de la función, como si vivieran en mundos separados. Este apartado se explicará más adelante, pero es importante tenerlo presente.

Declarar y llamar funciones:


Como habrá notado, todo (o casi todo) en PHP son funciones, como echo printf o strcasecmp, los parámetros que les enviamos funcionan de la misma manera que lo harán nuestras funciones.
Para declarar una función usaremos la palabra function seguida del nombre que asignemos a la función y los paréntesis, estos no son obligatorios pero ayudan a la comprensión del código por lo que es recomendable ponerlos.

Inserta ste codigo en tu site:
<?php
function page_header() {
   echo 
'<html><head><title> MI pagina web</title></head>
        <body bgcolor="#ECE6B4" text="#ffffff">'
;
}
page_header();

?>


Este código es un ejemplo de la declaración de una función, su cometido es imprimir el código HTML del head de nuestras páginas web.
La forma de llamar a la función es la última línea.
Los nombres de las funciones siguen la misma regla que los de la variable, empiezan por una letra o un subrayado y pueden contener letras, números y subrayados.
Las funciones pueden ser llamadas antes o después de ser declaradas y funcionan de igual forma.
En el código siguiente se aprecia como una función es llamada antes de ser declarada sin problema alguno.

<?php

function page_header() {
   echo 
'<html><head><title> MI pagina web</title></head>
        <body bgcolor="#ECE6B4" text="#ffffff">'
;
}


page_header();
page_foot();

function 
page_foot() {
   echo 
'</body></html>';
}
?>


Enviar parámetros a las funciones

Ahora nos planteamos, ¿Qué pasa si queremos que el título de la web sea diferente para cada sección?
Para conseguir eso utilizaremos los argumentos.


<?php

function page_header($title="indice") {
   echo 
'<html><head><title>MiWeb || '.$title.'</title></head>
        <body bgcolor="#ECE6B4" text="#ffffff">'
;
}

page_header("Seccion 1");


?>


En el código podemos notar 2 grandes diferencias:
En la línea que declaramos la función agregamos un $title=”índice” entre paréntesis.
$title es el nombre que adquirirá la variable e índice el valor en caso de que al llamarla no se proporcione uno.
Si no agregamos el valor por defecto, y dejamos algo como page_header($title), al llamar la función obtendremos un error por falta de parámetros.

Y una cosa más, los valores por defecto no pueden ser variables.
Para pasar múltiples parámetros a una función solo hay que concatenarlos con comas.

<?php

function page_header($title="indice"$fondo$text='#ECE6B4') {
   echo 
'<html><head><title>MiWeb || '.$title.'</title></head>
        <body bgcolor="'
.$fondo.'" text="'.$text.'">';
}

page_header("Seccion 1""#ffffff");

?>


Es recomendable, y una buena práctica, que los parámetros obligatorios se sitúen al principio de la declaración (es decir, en el ejemplo, $fondo sería el primer parámetro).

Retornar valores de una función

No sería lógico decir que una función puede retornar valores y no enseñar cómo.
El retorno de datos se hace con la sentencia return y solo puede ejecutarse un return por sentencia (pero puede haber varios) ya que al ejecutarse el primer return el programa sale de la función

<?php

function suma5 ($value) {
   
$value $value 5;
   return 
$value;
}

echo 
suma5(6);
?>


A esta función se le envía un valor (6) y le suma 5 y devuelve el resultado.
El retorno se puede enviar directamente a una función o almacenarlo en una variable.

Entendiendo el ámbito de las variables.

La forma más fácil de entender este apartado es con ejemplos, así que me voy a matar poco en la explicación.
Las funciones tienen variables de ámbito privado o local, eso quiere decir que si en una función usamos la variable $count y dicha variable no está definida fuera, la variable no existirá.
Así mismo si en el programa principal usamos la variable $precio, y dicha variable no está definida en la función, la variable no existirá.
Veamos unos ejemplos:

<?php
function ambito() {
   echo 
$numero;

}
$numero 5;
echo 
ambito();

?>


En este ejemplo no hay salida ya que la variable $numero no fue declarada en la función.

<?php
function ambito() {
   
$numero 3;
   echo 
$numero.'<br />';

}

echo 
ambito();
echo 
$numero."!!!!";

?>


Aquí vemos como en el echo de la función sí que está declarada (pues la declaramos arriba), pero fuera ya no.
Por si aún se alberga alguna duda:

<?php
function ambito() {
   if (!
$numero)
      
$numero 3;
   echo 
$numero.'<br />';

}
$numero 1;
echo 
ambito();
echo 
$numero."!!!!";

?>


Este último ejemplo un poco más elaborado, da el valor 1 a $numero, llama a la función.
En la función, si el valor $numero no está definido lo define a 3 y lo muestra, sale de la función.
Muestra el valor de $numero.

Si probáis el código, ya no deberíais albergar duda sombre el ámbito de las variables.

Pero… ¿Qué pasa si quiero usar una variable de fuera de la función?

Esta pregunta tiene 2 respuestas:
- Si el objetivo es proporcionar alguna información, podemos pasarlo como parámetro
- Si el objetivo es modificar la variable original podemos usar las 2 formas siguientes:

<?php
function ambito() {
   global 
$numero;
   echo 
$numero.'<br />';
   
$numero 4;

}
function 
ambito2() {
   echo 
$GLOBALS['numero'];
}
$numero 3;
ambito();
ambito2();


?>


En estas 2 funciones comprobamos las 2 formas de acceder a una variable externa.
En ámbito, comprobamos como podemos alterar el número original mostrando así el número modificando en ambito2.

$GLOBALS[] es uno de los tantos arrays que existe dentro de PHP, este contiene todas las arrays globales del script.

Actividades V

Crea un programa en PHP a forma de calculadora utilizando el mínimo de funciones posible.

Crea un programa en PHP en el que tengas que exponer todo lo aprendido en este apartado



Versión .doc: Funciones.doc
Versión .pdf: Funciones.pdf

Curso PHP 5 || IV. Utilización de Arrays

Actividades III

1.   Sin utilizar PHP determina si son true o false:

100.00 – 100 False

“zero” True

“false” True

0 + “true” False

0.000 False

“0.0” True

strcmp(“false”, “False”) True
Quizá la única que haga falta explicar es strcmp.
Esta función detecta que False es mayor que false y devuelve un 1.
Más información en la página de php.net
http://php.net/manual/en/function.strcmp.php

2.   Sin ejecutarlo en el intérprete PHP averigua que imprime el programa:

<?php
$edad 
12;
$numerodepie 13;
if (
$edad $numerodepie)
{
   print 
"mensaje 1";
} elseif (
$numerodepie++) && ($edad 20) {
   print 
"mensaje 2";
}else {
   print 
"mensaje 3";
}

print 
"edad: $edad. Tama&#241;o de pie: $numerodepie";
?>


Imprime el mensaje 3: edad: 13. Tamaño de pie: 14

3.   Utiliza while() para imprimir una tabla de equivalencias de temperaturas de grados Farenhite y Celsius desde -50 grados F a 50 grados F en incrementos de 5 grados. Para convertir las F a C resta 32 a la temperatura, multiplícalo por 5 y divide entre 9


<?php
$far 
= -50;
print 
'<table>
      <tr><th>Farenheit</th><th>Celsius</th></tr>'
;
while (
$far <= 50) {
   
$celsius = ($far 32) * 9;
   print 
"<tr><td>$far</td><td>$celsius</td></tr>";
   
$far += 5;
}
print 
'</table>'
?>


4.   Modifica el ejercicio anterior para hacerlo con for()

<?php
print '<table>
      <tr><th>Farenheit</th><th>Celsius</th></tr>'
;
for (
$far = -50$far <= 50$far += 5) {
   
$celsius = ($far 32) * 9;
   print 
"<tr><td>$far</td><td>$celsius</td></tr>";
   
$far += 5;
}
print 
'</table>'
?>



VI.   Manejando Arrays

Cuando empezaba en esto de la programación, las arrays eran una palabra maldita que me traía dolores de cabeza al intentar comprenderlas. Con el tiempo leyendo un libro de PHP que explicaba bastante bien el tema de las arrays, les perdí todo el miedo que les tenia y entendí que no debemos ir con miedo porque los demás digan que es difícil, pues todo depende de cómo se explique.
Arrays se puede definir como un ‘contenedor’ de múltiples valores. Si bien hemos aprendido que una variable es un contenedor con nombre que contiene un valor, una array no es más que una variable que contiene múltiples valores.

Fundamentos básicos

Un array se compone de elementos. Cada elemento contiene una clave y un valor.


Ejemplo simple de un array


La clave (o index) es el valor que identifica el array y no puede repetirse en un mismo array, el valor es el dato importante del array y si puede repetirse.

Crear un array

Para crear un array usamos la función array(). Las arrays se declaran de la misma forma que una variable, a diferencia que las array llevan corchetes cuadrados al final de su nombre.


Hay varias formas de agregar un valor al array, vamos a ver un ejemplo de todas:

<?php
//                 clave        dato
$comida = array ('desayuno' => 'leche',
             
'comida' => 'hamburguesas',
             
'cena' => 'sopa');
//para acceder al array ponemos la clave entre corchetes:
echo $comida['desayuno']; #~ devolverá 'leche' como texto.

//array con claves numéricas
$juegos[0] = 'football';
$juegos[1] = 'basketball';
$juegos[2] = 'tennis';

//El método de acceso es el mismo pero usando claves numéricas
echo $juegos[2]; #~ devolverá 'tennis'

//Ejemplos de arrays validos:
$cosas['trs-22'] = 'una cosa';
$cosas[2600] = 'atari';
$cosas['Adam'] = 'patrocinador';

echo 
$cosas[2600]; #~ devolverá 'atari'
?>


En el caso de los arrays numéricos podemos agregar un valor al array aún sin saber cuál es el último index.

<?php
$juegos
[0] = 'football';
$juegos[1] = 'basketball';
$juegos[2] = 'tennis';
//imaginando que esta array se declaró en otro archivo y no logramos encontrarlo,
//podemos hacer lo siguiente:
$juegos[] = 'baseball';
?>


La declaración de un array con los corchetes rectos indica que el valor del index será el siguiente al último, en este caso 3.
Si queremos declarar un array con index numérico podemos hacerlo de la misma forma que el primer ejemplo pero sin declarar el index

<?php
$ciudades 
= array('madrid''barcelona''cádiz');
?>


En este caso los index son 0, 1, 2 y respectivamente.


Averiguar el tamaño de un array


Para conocer el tamaño de un array usaremos la función count().


<?php
$ciudades 
= array('madrid''barcelona''cádiz');
echo 
count($ciudades);
?>



Devuelve ‘3’.

Cuando se pasa un array vacio a una sentencia if() esta evalúa como 0.

Bucles con Arrays

Uno de los usos más comunes de un array es procesarlo elemento por elemento para, por ejemplo, agregarlo a una tabla.
Para ello utilizamos el último bucle que nos faltaba explicar en la sección III, el foreach:


<?php
$ciudades 
= array('madrid''barcelona''cádiz');
echo 
'<table>
     <tr><th>Ciudad</th></tr>'
;
foreach (
$ciudades as $ciudad) {
   echo 
'<tr><td>'.$ciudad.'</td></tr>';
}
?>



El foreach lo que hace es copiar el valor de $ciudades en el de $ciudad y lo procesa como una clave única, este proceso lo aplica por cada valor del array.
En lo personal e descubierto que con las consultas a una BD (con adodb) los bucles while o for “eliminan” el contenido de la consulta al procesarla eliminaba el contenido del array, con foreach al copiar la clave y no utilizar el original podemos procesarlo cuantas veces queramos.
Qué pasa si queremos tener un control tanto de la clave como del valor? Bueno para eso entonces usaremos el símbolo ‘=>’

<?php
$ciudades 
= array('madrid''barcelona''cádiz');
echo 
'<table>
     <tr><th>Clave</th><th>Valor</th></tr>'
;
foreach (
$ciudades as $clave => $valor) {
   echo 
'<tr><td>'.$clave.'</td><td>'.$valor.'</td></tr>';
}
?>


Cambiar valores del array con foreach

Ahora lo que queremos lograr es modificar el valor del array original. Para conseguirlo hemos de utilizar el nombre del array original y la variable $clave para acceder al dato correspondiente.


<?php
$precios 
= array('hamburguesa' => '12',
        
'batido' => '2',
        
'pan' => '0.5');

foreach (
$precios as $comida => $precio) {
   
// $precio = $precio * 2; no funciona
   
$precios[$comida] = $precio 2;
}
?>


Buscando en el array

Para buscar si una clave existe por medio de su clave podemos usar array_key_exists().



<?php

$precios 
= array('hamburguesa' => '12',
        
'batido' => '2',
            
'pan' => '0.5');

if (
array_key_exists('hamburguesa'$precios))
   echo 
$precios['hamburguesa']; 
#~ Nos da el precio de la hamburguesa: 12
?>


La sintaxis es: array_key_exists(‘nombre o valor clave’, ‘array’);

El resultado es True en caso de que exista o False en caso contrario.
Si lo que queremos es buscar por medio de su valor usamos in_array()

<?php
$precios 
= array('hamburguesa' => '12',
         
'batido' => '2',
        
'pan' => '0.5');

if (
in_array('12'$precios))
   echo 
$precios['hamburguesa']; #~ Nos da el precio de la hamburguesa: 12
?>


En este ejemplo buscamos a partir del valor y no de la clave, pero recordemos que el valor puede repetirse y por lo tanto podríamos tener varios resultados.
También podemos usar array_search() es igual que in_array pero devuelve la clave y no el valor.
En el ejemplo se puede notar lo que decía antes de múltiples resultados, en este caso solo mostrará la primera coincidencia y no ambas.

<?php
$precios 
= array('hamburguesa' => '12',
        
'batido' => '12',
        
'pan' => '0.5');

if (
array_search('12'$precios))
   echo 
array_search('12'$precios); #~ Salida: 'hamburguesa'
?>


Interpolando arrays en cadenas con comillas

De igual forma que se puede interpolar una variable, también se puede interpolar un array hay gente que usa comillas dobles para interpolar las arrays que contienen comillas simples. Pero esto no es posible cuando tenemos cadenas que cuentan con ambas comillas.
Otros quitan las comillas simples y usan $array[valor], lo cual es válido para todas las arrays excepto las que contienen espacios o signos de puntuación, por todo ello yo recomiendo este método que es igual de sencillo pero es universal (de todas formas en mis codes podéis ver que hago el primer caso cuando solo uso unas comillas)

<?php
$precios 
= array('hamburguesa' => '12',
        
'batido' => '2',
        
'pan' => '0.5');

#el valor de $precios['total'] es 14.5
$precios['total'] = $precios['hamburguesa'] + $precios['batido'] + $precios['pan'];

echo 
"EL precio total de lo comprado es: {$precios['total']}";
?>



Eliminar elementos al array

Ya conocemos como crear un nuevo elemento y como modificarlos pero aún no he explicado cómo eliminarlos.
Bueno el método usa la función unset(), que no es específicamente para arrays sino para cualquier variable.


<?php

$precios 
= array('hamburguesa' => '12',
        
'batido' => '2',
        
'pan' => '0.5');
//borrado el elemento hamburguesa del array
unset($precios['hamburguesa']);

?>


Ordenar arrays

Para ordenar los array utilizaremos la función sort(), esta función debería utilizarse solo con arrays de claves numéricas, ya que si las claves son alfabéticas las substituirá por numéricas al ordenarlas.

<?php

$precios 
= array('hamburguesa' => '12',
        
'batido' => '2',
        
'pan' => '0.5');

echo 
'antes:<br />';
foreach (
$precios as $clave => $valor) {
   echo 
$clave.' '.$valor.'<br />';   
}


sort($precios);
echo 
'después: <br />';
foreach (
$precios as $clave => $valor) {
   echo 
$clave.' '.$valor.'<br />';   
}
/*    Salida:
antes:
   hamburguesa 12
   batido 2
   pan 0.5
después:
   0 0.5
   1 2
   2 12
*/
?>



También podemos ordenar por su valor y no por su clave con la función asort(). Disponemos de otra función para ordenar llamada ksort que ordena por clave pero manteniendo el nombre de dicha clave y no la substituye por un valor numérico.
Estas tres funciones disponen de sus homologos que ordenan de forma descendente: rsort() arsort() y krsort()

Implode() y explode()

La función implode es el método más rápido y a la vez corto de mostrar todos los valores de un array su sintaxis es:
implode(‘delimitador de cada elemento’, ‘array’);


<?php

$precios 
= array('Cerdo asado''estofado de ternera''pavo soso');

echo 
implode(', ',$precios);
#~ La salida es: Cerdo asado, estofado de ternera, pavo soso
?>


Explode es exactamente lo contrario, es la forma más rápida de crear un array, su sintaxis es:
explode(‘delimitador de cada elemento’, ‘cadena a separar’);

<?php

$cadena 
'Ayer fui a un concierto';
$matriz explode(' '$cadena);

echo 
$matriz;
?>


En este caso nos indica que matriz es un array.

Arrays multidimensionales

Para finalizar y para que no se haga una lección muy pesada (que estamos en fiestas!!), procedo a explicar las arrays multidimensionales y con esto acabamos por hoy.
Las arrays multidimensionales no son otra cosa que un array dentro de otra array (estas serían bidimensionales, 2 dimensiones), cuantas más arrays dentro de otras más dimensiones contienen.


<?php
$comidas 
= array('desayuno' => array('leche''galletas');
   
'comida' => array('primer plato' => 'estofado''segundo plato' => 'ensalada''bebida' => 'cocacola');
          
'cena' => 'no cene, estoy a dieta xD';
    );
#Para acceder a un array multidimensional:
echo $comidas['desayuno'][0]; //Muestra: 'Leche'
echo $comidas['comida']['segundo plato']; //Muestra 'ensalada'


?>


Para acceder, agregar, borrar, modificar arrays multidimensionales es exactamente igual que con las de una dimensión.

Foreach con arrays multidimensionales.

Para acceder a todas las dimensiones hemos de anidar tantos bucles foreach como dimensiones tengamos.

<?php

$comidas 
= array('desayuno' => array('leche''galletas'),
             
'comida' => array('primer plato' => 'estofado''segundo plato' => 'ensalada''bebida' => 'cocacola'),
             
'cena' => 'no cene, estoy a dieta xD'
             
);

foreach (
$comidas as $clave => $comida) {
   foreach (
$comida as $key => $plato) {
      echo 
"$key -> $plato";
   }
}

?>


En este ejemplo no todas las claves contienen arrays, por lo que produce un warning, la forma de solucionarlo es con un if() y la función is_array().

Dicha función devuelve true si la variable es un array o false en caso contrario.
Sintaxis: is_array(‘variable’)

El code correcto sería:

<?php

$comidas 
= array('desayuno' => array('leche''galletas'),
             
'comida' => array('primer plato' => 'estofado''segundo plato' => 'ensalada''bebida' => 'cocacola'),
             
'cena' => 'no cene, estoy a dieta xD'
             
);

foreach (
$comidas as $clave => $comida) {
   if (
is_array($comida)) {
      foreach (
$comida as $key => $plato)
         echo 
"$key -> $plato";
   }else
      echo 
"$clave -> $comida";
      
}
?>


Y con esto hemos acabado el tostón de hoy! :D, si me he saltado alguna parte importante de las arrays hacédmelo saber vía MP ;)

Ejercicios IV

Hoy solo dejamos un ejercicio ^^
1.   Con  datos inventados crea array para los diferentes casos:
a)   La nota y el ID de cada estudiante según su grupo
b)   Cantidad de stock de cada producto en una tienda
c)   Nombres de las personas de tu familia
d)   Nombre edad y parentesco con las personas de tu familia

Felices fiestas :D




Versión .doc: IV. Juguemos con las Arrays
Versión .pdf: IV. Juguemos con las Arrays

Curso PHP 5 || III. Bucles y condicionales en PHP

Solución Actividades II

1.   Localiza los errores en el programa:

<?php
   
print 'How are you?';
   print 
'I'm fine
??>


Los errores son:

•   El ultimo print debe ir encerrado entre comillas dobles o escapar la comilla simple con \
•   Al final del código sobra un interrogante en el cierre

2.   Escribe un programa PHP que calcule el coste total de esta comida: Dos hamburguesas a 4.95 € C/U, un batido a 1.95€ y una coca-cola a 85 céntimos. El IVA es de 7.5%.


<?php
$hamburguesa 
4.95;
$batido 1.95;
$cocacola 0.85;
$comida 2$hamburguesa $batido $cocacola;
$iva $comida 0.075;
$total $comida $iva;
print 
"El total es $total€";
?>


3.   Modifica el programa anterior para imprimir la solución con formato (printf). Para cada artículo, imprime el precio, cantidad y coste total. Imprime el total de la comida y de la bebida antes del IVA, el total con el IVA.

<?php
$hamburguesa 
4.95;
$batido 1.95;
$cocacola 0.85;
$comida 2$hamburguesa $batido $cocacola;
$iva $comida 0.075;

printf("2 Hamburguesas a %.2f € c/u = %.2f €n"$hamburguesa$hamburguesa 2);
printf("1 Batido a %.2f €n"$batido);
printf("1 Coca cola a %.2f €n"$cocacola);
printf("Total con iva: %.2f €n"$comida $iva);
?>



4.   Escribe un programa que establezca dos variables ($nombre y $apellido). Imprime una cadena que contenga ambos separados con un espacio. Imprime también la longitud.

<?php
$nombre 
'nax';
$apellido 'bl4ck';
$completo "$nombre $apellido";
echo 
$completo;
echo 
strlen($completo);
?>


V.   Tomando decisiones y repitiéndonos

En esta tercera parte vamos a trabajar con los condicionales y los bucles, los cuales nos acompañarán a lo largo de nuestro aprendizaje.
Con los condicionales podremos controlar, por ejemplo, si un panel lo verá un visitante o no.
Con  los bucles podremos recorrer los valores de algunas arrays e ir mostrando su contenido.
La utilización de estas dos estructuras es muy común y es más común su uso en conjunto, pero vamos a verlas por separado.

Condicionales

Cuando hablamos de condicionales tenemos que pensar que estas siempre nos devolverán un valor verdadero o falso (true or false) y a partir de ese valor ejecutarán uno u otro bloque de código.
Estos valores se utilizan con la función if(), la explicación de esta función la haremos más adelante pues creo necesario el siguiente apartado.

Entender cómo se evalúa verdadero y falso

Todas las expresiones en un programa tienen un valor: true o false. Algunas veces ese valor se utiliza en algún calculo pero otras es simplemente ignorado. Entender cómo las expresiones avalúan estas expresiones es parte importante para entender el lenguaje.

Casi todos los valores son true. Todos los enteros y números en coma flotante son true (menos 0 y 0.0). Todas las cadenas son true excepto las que no contengan nada y una cadena que solo contenga el carácter 0. Estos cuatro valores y la constante false evalúan como false todas las demás evalúan como true.
Las expresiones matemáticas como 7 * 6 evalúan como true dado que su resultado es 42, pero expresiones como 1 + 2 - 3 evalúan como false, ya que su resultado es 0.

Tomar las decisiones

Entendida esta parte de true y false vamos a estudiar la función if().
Un ejemplo claro de su uso sería saber si el usuario es un usuario normal o un administrador. Para ello utilizaríamos una variable para saberlo:


<?php
if ($es_admin)
{
  print 
"eres admin!";
}
?>



La variable $es_admin podría contener cualquier tipo de valor excepto los 4 antes mencionados si el usuario es un administrador.
En este caso todo lo que se mostrará si es administrador es un simple mensaje, pero si quisiéramos tener más sentencias solo tendríamos que ponerlas dentro de los corchetes, también cabe recalcar que si  el if solo contiene una única sentencia no hace falta situar corchetes

<?php
if ($es_admin)
  print 
"eres admin!";
?>


En pseudocódigo se podría leer como: “si es admin muestra ‘eres admin’”, pero, ¿qué pasaría si no lo es? En este ejemplo nos quedaría la pantalla en blanco, para evitar eso y tener un control más exacto de nuestra aplicación vamos a utilizar la construcción else.


<?php
$es_admin 
0;
if (
$es_admin)
   print 
"eres admin!";
else
   print 
"eres un usuario o visitante!";
?>


El tema de los corchetes es exactamente igual al if(), en este caso, como $es_admin es false, evalua como false y muestra “eres un usuario o visitante”, ahora, si quisiéramos controlar los tres casos posibles (que sea un usuario, administrador o visitante) podemos agregar el construcción else if().


<?php
if ($que_es == 'admin')
   print 
"eres admin!";
else if (
$que_es == 'user')
   print 
"eres un usuario registrado";
else
   print 
"eres un visitante!";
?>

En este caso comprobamos que la variable contenga la cadena ‘admin’ para decir que es administrador o ‘user’ para nombrarlo como usuario y si ninguna de esas dos se cumple deducimos que es un visitante.

Podemos agregar tantos else if() como creamos necesario, eso sí, siempre agregando la condición oportuna.
Operadores de comparación
No son específicamente de la función if(), pero es, junto a los bucles, donde más se usan.
En el ejemplo anterior vemos el primero, y más común, de estos operadores.

Operador           símbolo      significado
Igualdad                ==             Si 1 es igual a 1 es true
Identico                 ===          Si 1 es igual a 1 y ambos son numéricos es true
Diferente               !=              Si 1 es diferente de 2 es true
No idéntico           !==           Si 1 es diferente de 2 o no son del mismo tipo es true
Mayor                  >               Si 2 es mayor que 1 es true
Menor                  <               Si 1 es menor que 2 es true
Menor o igual       <=             Si 1 es menor  o igual que 2 es true
Mayor o igual       >=            Si 2 es mayor o igual que 1 es true

Solo comentar que en idéntico y no idéntico, cuando hablo de tipos me refiero al tipo de datos, como ejemplo probad este programa:


<?php
$int 
1;
$string "1";

if (
$int === $string)
   echo 
"son iguales";
?>


Diferencia entre asignación y comparación
Creo necesario resaltar la diferencia entre asignación (=) y comparación (==).
En pseudocódigo la asignación se lee así:

<?php
$var 
1// Asigna a la variable “;var”; el valor 1
$var == // Comprueba que la variable “var” sea igual a 1
?>


Comparar cadenas

De igual forma que podemos comparar que 1 es menor que 2 también podemos hacerlo con cadenas.

<?php
if ('aa' 'ba')
   echo 
"aa es menor que ba";
?>



El código, efectivamente, muestra el mensaje.

Operador de negación

El operador de negación (!), como su nombre indica, se utiliza para negar una condición.

<?php
$var 
0;
if (!
$var)
   echo 
"var es false";
?>


Normalmente esta condición hubiese evaluado como false y no se hubiese mostrado el echo.
Pero en este caso al negar la condición evalúa como ture, creo que la forma más fácil de entender esta parte es en pseudocódigo:

“Si $var no es true muestra el mensaje”.

Operadores lógicos

Como últimos operadores, vamos a ver dos operadores lógicos muy utilizados en condiciones.

Operador   Nombre      Ejemplo
&&                AND      1 == 1 && 2 == 2 es true
                                        1 == 1 && 2 == 1 es false

||                OR      1 == 1 || 2 == 1 es true
                                        1 == 2 || 2 == 3 es false

Bucles

Como ya comentamos los bucles nos son útiles cuando tenemos que hacer acciones repetitivas, como ejemplo pondremos un menú select.

While

Para bucles usaremos, entre otros, while().
While() funciona con una condición de igual forma que el if(), mientras esta condición sea true while seguirá ejecutando el código en su interior.


<?php
$i 
1;
print 
'<select name="personas" >';

while (
$i <= 10)
{
   print 
"<option>$i</option>n";
   
$i++;
}
print 
'</select>';
?>



Este código nos crea una lista desplegable del 1 al 10, la variable $i funciona de contador. El contador es una variable que se utiliza para contar (…) cuantas veces se ha repetido un proceso.
En este caso la condición del while es que el contador sea menor o igual a 10, es decir, que repetirá el bloque que contiene mientras $i esté dentro del rango de valores 1-10.
El bloque del while lo que hace es agregar una nueva opción con un valor numérico como texto y luego incrementa el contador.
Este dato es importante ya que si no se incrementara nunca saldríamos del bucle.

Do … While

Este bucle funciona exactamente igual que el anterior, solo que se ejecutaría una primera vez y luego solamente si se cumple la condición.
Un ejemplo muy claro es:


<?php
Do {
   echo 
"hola!";
}while (
== 2);
?>


En este ejemplo le estaríamos mandando que lo ejecutara cuando 1 sea igual a 2, en un while normal no mostraría nada pero un Do… While ejecuta una vez el echo y luego comprueba si la condición se cumple para repetirlo

El bucle for()

A mí me gusta presentar a este bucle como el “todo en uno”,  como vimos en el while(), antes de declararlo teníamos que dar un valor a $i, luego al declararlo le ponemos una condición y dentro del while() el incremento, for() hace exactamente lo mismo pero todo en la misma línea.
Poniendo como ejemplo el mismo ejercicio anterior:


<?php
print '<select name="personas" >';

for (
$i 1$i <= 10$i++)
{
   print 
"<option>$i</option>n";
}
print 
'</select>';
?>


Como veis el funcionamiento es el mismo, solo que más comprimido. Dentro del for primero declaramos luego la condición y para finalizar el incremento.
El mismo proceso se puede utilizar con múltiples variables.


<?php
print '<select name="a&#38;#241;o" >';

for (
$i 1$year 1980$i <= 30$i++, $year++)
{
   print 
"<option>$year</option>n";
}
print 
'</select>';
?>


De esta forma creamos una lista desde 1980 hasta 2009.
Esto es todo por estas fiestas, dejo el foreach() para el siguiente capítulo que trataremos las Arrays.
Felices fiestas a todos!!!

Actividades III

1.   Sin utilizar PHP determina si son true o false:

100.00 – 100
“zero”
“false”
0 + “true”
0.000
“0.0”
strcmp(“false”, “False”)

2.   Sin ejecutarlo en el intérprete PHP averigua que imprime el programa:

<?php
$edad 
12;
$numerodepie 13;
if (
$edad $numerodepie)
{
   print 
"mensaje 1";
} elseif (
$numerodepie++) && ($edad 20) {
   print 
"mensaje 2";
}else {
   print 
"mensaje 3";
}

print 
"edad: $edad. Tama&#38;#241;o de pie: $numerodepie";
?>


3.   Utiliza while() para imprimir una tabla de equivalencias de temperaturas de grados Farenhite y Celsius desde -50 grados F a 50 grados F en incrementos de 5 grados. Para convertir las F a C resta 32 a la temperatura, multiplícalo por 5 y divide entre 9

4.   Modifica el ejercicio anterior para hacerlo con for()



A petición de algunos users subo las versiones en PDF y a partir de ahora utilizaré el formato de colores de el foro ya que es mas claro. (cuando tenga tiempo formato adecuadamente los capítulos anteriores, si alguien lo hace por mi le debo una xD)

Versión .doc:III. Condicionales y bucles
Versión .pdf:III. Condicionales y bucles