Inicio

jueves, 11 de agosto de 2011

Estructuras repetitivas

Vaya por delante una definición previa “son las que nos permiten repetir la ejecución de ciertas líneas de código de acuerdo a una condición dada y que es muy importante que esta condición sea finita”.
Esas estructuras en PHP son las siguientes:
  • for
  • while
  • do-while 
  • foreach
 FOR
Para utilizar el for es necesario primero declarar un valor desde donde  comenzar (generalmente el 0 o el 1) luego que condición debe cumplirse para ejecutar el código (misma que debe ser finita) y al final como se va a comportar la variable, si va a aumentar o a disminuir (esto depende de la condición y del valor de inicio).
Por ejemplo vamos a presentar por pantalla los 25 primeros dígitos.

<head>
  <title>Ejemplo de la estructura For</title>
</head>

<body>

<?php
for ($x=1;$x<=25;$x++)
{
        echo $x;
        echo"<br>";
}
?>

</body>

</html>

He señalado en azul la estructura de código de la instrucción for para poder analizarla. Si observa sus argumentos comienzan con la declaración de una variable contador, que en este caso comienza en uno. Seguidamente le marcamos el límite "hasta 25", y le decimos que lo aumente de uno en uno.

    Switch

    Switch es una instrucción que comprueba si una variable coincide con algún valor en concreto. De ser cierto ejecuta una serie de órdenes y, en caso contrario, ejecuta las órdenes que le hallamos marcado por defecto.
     Su sintaxis es como sigue:

    switch (expresión_1) {
        case valor_1:
            bloque_de_sentencias_1;
            break;
        case valor_2:
            bloque_de_sentencias_2;
            break;
        ...
        case valor_n:
            bloque_de_sentencias_n;
            break;
    }
    Veamos un ejemplo:
    Código del ejemplo switch.php
     
    <html xmlns="http://www.w3.org/1999/xhtml">
    
    <head>
      <title>Ejemplo de switch</title>
    </head>
    
    <body>
      <form action= "switch2.php" method="post">
     Ingrese usuario:<input type="text" name="usuario">
    <input type="submit" name="OK" value="Enviar">
     </form>
     <br><br>
    <?php
    if   ($OK=="Enviar") {
    
    
    switch($usuario){
    		case 'Juan':
              echo "Hola Juan";
              break;
            case 'Ana':
              echo "Hola Ana";
              break;
            default:
             echo"Lo siento no estás registrado" ;
    
    
       }
       }
    ?>
    
    </body>
    
    </html>
     
    El código en sí no es complicado de entender, le hemos añadido una condicional if
    al comienzo que nos permite que no aparezca la instrucción por defecto nada más 
    cargar la página. 
    
    

    miércoles, 10 de agosto de 2011

    PHP dinámico

    Hasta ahora hemos visto una serie de scripts pero sin entrar a fondo en el aspecto dinámico como tal de PHP.
    Cuando se trata de páginas estáticas la comunicación está muy restringida. El cliente hace una petición (escribe el nombre de una página en la barra de direcciones del navegador) y el servidor se limita a devolver los contenidos de esa página. Un primer paso para mejorar es esa comunicación será que el cliente especifique algo más en su petición y que el servidor interprete esa información complementaria.
    Para poder profundizar en lo expuesto, previamente abordaremos algunos conceptos.
    La función isset
    isset() es una función de PHP que nos permite comprobar si una variable está definida, devolviendo true si lo estuviese. Esta función es muy común cuando deseamos comprobar que los campos de un formulario hayan sido rellenados, o incluso para mostrar un formulario completo y una vez que sea presionado el botón enviar, nos muestre otra cosa y el formulario sea enviado.
    Su sintaxis es la siguiente: isset($variable)
     Veamos un ejemplo:
    Escriba el siguiente código y guárdelo como formulario.html
    <html xmlns="http://www.w3.org/1999/xhtml">


    <body>
    <form action="formulario.php" method="post" name="form" id="form">
    <input type="text" name="nombre" />
    <input type="submit" name="enviar" />
    </form>

    </body>
    </html>

    Escriba ahora este otro y guárdelo como formulario.php
    <?php
    if (isset($nombre) && $nombre!="") {
    echo "Hola $nombre, bienvenido a PHP";}
    else {
                echo "No has escrito nada"; }


    ?>

    isset verifica si la variable está o no definida, literalmente se puede leer tras la etiqueta php si la variable nombre está definida (existe) y su valor no está vacío saca el mensaje "Hola lo que sea, etc" si no "No has escrito nada"

    La función unsset
    unset() destruye las variables especificadas.Modifique para probarlo el código anterior de la siguiente forma:

    <?php


        unset($nombre);


    if (isset($nombre) && $nombre!="") {
    echo "Hola $nombre, bienvenido a PHP";}
    else {
                echo "No has escrito nada"; }


    ?>

    Como comprobará aunque escriba lo que sea en la caja de texto, el servidor siempre le responderá lo mismo "No has escrito nada", y ello porque unset ha eliminado la variable y por tanto su contenido.

    viernes, 5 de agosto de 2011

    Arrays asociativas y multidimensionales

    En PHP no necesariemente tenemos que trabajar con índices. Podemos usar un esquema que nos relaciona elementos no numéricos. Por ejemplo imaginemos que desamos tener una variable que nos recoga verduras y otra para las frutas. De esta manera podíamos escribir lo  siguiente:

    ALIMENTO:

    VERDURAS-->tomates,lechuga,pepinos
    FRUTA-->naranjas,plátanos, melocotones.

    Ajustado a nuestro código podríamos escribir lo siguiente:
    <html xmlns="http://www.w3.org/1999/xhtml">

    <head>
      <title>Ejemplo de array asociativo</title>
    </head>

    <body>

    <?php
    $capital=array("ES"=>"Madrid","UK"=>"Londres","FR"=>"París");

    echo $capital["ES"];//Muestra la capital de España
    ?>

    </body>

    </html>

    Un array multidimensional es simplemente un array en el que al menos uno de sus valores es, a su vez, un array:


    <?php

     
      $agenda = array("domicilio" => "calle tal cual",
                      "telefono"  => $telefonos,
                      "trabajo"   => "empresa tal cual");
      
      $telefonos = array("trabajo" => "7296489",
                         "casa"    => "5689524",
                         "movil"   => "9558987");

     
    ?>


    Y podemos acceder a dichos valores añadiendo un par de corchetes:


    <?php
     $agenda['telefono']['casa'] = "5689524";

    ARRAYS

    Las arrays o matrices son de mucha utilidad cuando precisamos almacenar varios valores en una sola variable. Pensemos por ejemplo que precisamos presentar por pantalla el día de la semana, o los nombres de una lista de productos, etc.
    A la hora de definir nuestra array lo podemos hacer de una forma desarrollada o abreviada. Por ejemplo, de forma desarrollada sería:
    <?php
    $a[0]="Pepe";
    $a[1]="Juan";
    $a[2]="Luis";
    //Mostrar sólo Luis
    echo $a[2];
    ?>

    La forma abreviada

    <?php
    $a=array("Pepe","Juan","Luis");

    //Mostrar sólo Luis
    echo $a[2];
    ?>

    Otra de las cuestiones que nos pueden insteresar es conocer cuántos elementos componen una array. Para ello existe la función count()- Veamos como funciona con un ejemplo:

    <?php
    $a=array("Pepe","Juan","Carla","Luis","Andrea");
    $numelementos=count($a);
    echo "Nuestro array tiene <b> $numelementos<b>  elementos";
    ?>

    jueves, 4 de agosto de 2011

    Trabajando con fechas

    Para mostrar la fecha completa en PHP tenemos dos opciones, que podremos manejar despues convenientemente para presentar otros formatos según las necesidades.
    La más práctica si es que vamos a escribir en español, es registrar las variables locales a nuestro idioma con la línea siguiente:

    setlocale(LC_ALL,"es_ES@euro","es_ES","esp");

    Así podemos escribir la fecha larga directamente:
    <?php
    setlocale(LC_ALL,"es_ES@euro","es_ES","esp");
    echo "Sevilla, ".strftime("%A %d de %B del %Y");
    ?>
    Una alternativa sería declarar sendas arrays para los dias de la semana y de los meses. Y variables para el resto de conceptos por ejemplo:
    <?php
    $dia=array("domingo","lunes","martes","miércoles","jueves","viernes","sábado");
    $mes=array("enero","febrero","marzo","abril","mayo","junio","julio","agosto","septiembre","octubre","noviembre","diciembre");
    $numdia=date(w);//muestra el día de la semana
    $nummes=date(n);
    $diames=date(j);//muestra el día del mes
    $anho=date(Y);
    echo "Hoy es $dia[$numdia],$diames de $mes[$nummes] del $anho  ";

    ?>

    A partir de aquí se puede formar multitud de combinaciones


    modificadoresejemploresultado
    d - día del mes, número, dos dígitos <?php $ahora_es = date(d);  ?> $ahora_es = 04
    j - día del mes, número, dos dígitos sin cero inicial <?php $ahora_es = date(j);  ?> $ahora_es = 4
    D - dia semana abreviado letras <?php $ahora_es = date(D);  ?> $ahora_es = Thu
    l - día de la semana, en texto, completo <?php $ahora_es = date(l);  ?> $ahora_es = Thursday
    w - día de la semana, en numero
    (comienza en 0 = domingo)
    <?php $ahora_es = date(w);  ?> $ahora_es = 4

    Jugando con fechas: el mes

    modificadoresejemploresultado
    m - mes, número, dos dígitos <?php $ahora_es = date(m);  ?> $ahora_es = 08
    n - mes, número, dos dígitos sin cero inicial <?php $ahora_es = date(n);  ?> $ahora_es = 8
    M - mes, tres letras <?php $ahora_es = date(M);  ?> $ahora_es = Aug
    F - mes, texto completo <?php $ahora_es = date(F);  ?> $ahora_es = August
    t - total dias en el mes <?php $ahora_es = date(t);  ?> $ahora_es = 31

    Jugando con fechas: el año

    modificadoresejemploresultado
    Y - año, cuatro cifras <?php $ahora_es = date(Y);  ?> $ahora_es = 2011
    y - año, dos cifras <?php $ahora_es = date(y);  ?> $ahora_es = 11
    L - bisiesto? <?php $ahora_es = date(L);  ?> $ahora_es = 0
    0 = no; 1 = si
    z - día del año <?php $ahora_es = date(z);  ?> $ahora_es = 215
    W - semana del año <?php $ahora_es = date(W);  ?> $ahora_es = 31

    Jugando con fechas: la hora

    modificadoresejemploresultado
    h - hora, de "01" a "12" <?php $ahora_es = date(h);  ?> $ahora_es = 02
    g - sin ceros, de "1" a "12" <?php $ahora_es = date(g);  ?> $ahora_es = 2
    H - hora, de "00" a "23" <?php $ahora_es = date(H);  ?> $ahora_es = 14
    G - sin ceros, de "0" a "23" <?php $ahora_es = date(G);  ?> $ahora_es = 14
    a - "am" o "pm"
    A - "AM" o "PM"
    <?php $ahora_es = date(a);  ?> $ahora_es = pm

    Jugando con fechas: minutos

    modificadoresejemploresultado
    i - de "00" a "59" <?php $ahora_es = date(i);  ?> $ahora_es = 24

    Jugando con fechas: segundos

    modificadoresejemploresultado
    s - de "00" a "59" <?php $ahora_es = date(s);  ?> $ahora_es = 16

    Jugando con fechas: fechas completas

    modificadoresejemploresultado
    U segundos desde EPOCH
    epoch = 1 enero 1970
    <?php $ahora_es = date(U);  ?> $ahora_es = 1312493056
    r - formato RFC 2822 <?php $ahora_es = date(r);  ?> $ahora_es = Thu, 04 Aug 2011 14
    c - formato ISO 8601 (solo en PHP 5) <?php $ahora_es = date(c);  ?> N/A

    Jugando con fechas: varios

    modificadoresejemploresultado
    S sufijo en texto, 2 caracteres; por ejemplo, "th", "nd" <?php $ahora_es = date(jS);  ?> $ahora_es = 4th
    I - horario de verano <?php $ahora_es = date(I);  ?> $ahora_es = 1
    0 = no 1 = si
    O - diferencia con hora Greenwich <?php $ahora_es = date(O);  ?> $ahora_es = -0700
    T - zona horaria del server <?php $ahora_es = date(T);  ?> $ahora_es = PDT
    Z diferencia en segundos zona horaria <?php $ahora_es = date(Z);  ?> $ahora_es = -25200
    B swatch internet time <?php $ahora_es = date(B);  ?> $ahora_es = 933

    Comprobando fechas

    checkdate(nMes nDia nAño) nos permite chequear si una fecha dada es posible: es decir, que no se trata del dia 32 del mes 13.
    checkdate tiene en consideración años bisiestos, y es valido para un rango de años desde 0 a 32767

    Y para mas flexibilidad, strftime()

    la función date(), tan flexible como es, presenta dos problemas: no admite localización a idiomas distintos del inglés. Y si quieres emplear caracteres adicionales debes salvarlos
    :
    <?php
    print date("j \de F \de Y");  // como la "d" equivale al  "dia" en número, 
                                  // si queremos que imprima una letra d y no el numero de mes,
                                  // debemos emplear la barra \. 
                                  // no serviria escribir "j de F de Y"
    ?>
    Sin que tampoco hayamos ganado mucho en estetica, ya que "4 dAmerica/Los_Angeles August dAmerica/Los_Angeles 2011" no queda muy bien. La solución pasa por indicar el mes en número y no en letra ... o usar strftime:
    Hoy es jueves, 4 de agosto de 2011.
    <?php
    setlocale
    (LC_TIME,"es_ES");
    echo 
    strftime("Hoy es %A, %e de %B de %Y." ,time());  ?>
    y estas son las opciones de formato. A la derecha añadimos las equivalentes de date():
    opciones de strftimeopciones de date
    %a dia semana (abreviado) a "am" o "pm"
    %A dia semana (completo) A "AM" o "PM"
    %b nombre mes (abreviado) b -
    %B nombre mes (completo) B Swatch Internet time
    %c representación preferida de dia y hora segun idioma del server c -
    %C año en numero (00 - 99) C -
    %d numero dia del mes (01 a 31) d numero dia del mes (01 a 31)
    %D fecha abreviada, segun idioma server (%m/%d/%y, %y/%m/%d or %d/%m/%y) D dia de la semana, tres letras
    %e dia del mes en numero (' 1' - '31') %e -
    %F - F mes, en texto, completo; por ejemplo, "January"
    %g - g hora, sin ceros, de "1" a "12"
    %G - G hora, sin ceros; de "0" a "23"
    %h igual que %b h h - hora, de "01" a "12"
    %H hora, de "00" a "23" H hora, de "00" a "23"
    %I hora como un número de 01 a 12 I -
    %i - i minutos; de "00" a "59"
    %j día del año como un número de 001 a 366 j día del mes sin cero inicial; de "1" a "31"
    %l - l día de la semana, en texto, completo; por ejemplo, "Friday"
    %L - L "1" o "0" segun el año sea bisiesto o no
    %m mes como un número de 01 a 12 m mes: de "01" a "12"
    %M minuto en numero M mes, en texto, 3 letras; por ejemplo, "Jan"
    %n nueva linea n mes sin cero inicial; de "1" a "12"
    %N - N -
    %p 'am' o 'pm', según la hora dada, o las cadenas correspondientes en el idioma actual p
    %r hora am pm r -
    %R hora en formato 24 horas R -
    %S segundos en número S sufijo ordinal en inglés, en texto, 2 caracteres; por ejemplo, "th", "nd"
    %s - s segundos en numero
    %t tabulador t número de días del mes dado; de "28" a "31"
    %T Hora actual T -
    %U segundos desde epoch U segundos desde epoch
    %w día de la semana en número (el domingo es el 0) w día de la semana, en número (el domingo es el 0)
    %W número de la semana en el año, empezando con el primer lunes como el primer día de la primera semana W -
    %x representación preferida de la fecha sin la hora x -
    %X representación preferida de la hora sin la fecha X -
    %y año en número de 00 a 99 y año en número de 00 a 99
    %Y año en número de cuatro cifras Y año en número de cuatro cifras
    %z - z día del año; de "0" a "365"
    %Z nombre o abreviatura de la zona horaria Z diferencia horaria en segundos (de "-43200" a "43200")

    miércoles, 3 de agosto de 2011

    Estructuras de control

    En programación, una estructura de control permite controlar el flujo de la ejecución de instrucciones. Con estas estructuras, el programador puede determinar el orden en que se ejecutarán las instrucciones que están dentro de estas estructuras.
    Podemos crear procedimientos que tomen decisiones basadas en ciertas condiciones y que además lo hagan de forma repetitiva (bucles).
    Supongamos que  tenemos un procedimeinto en el que el usuario debe realizar una operación de división. Al objeto de que no se produzca ningún error, tendremos que comprobar el argumento "divisor" para que este sea diferente de cero.

    Con la estructura If., else y elseif, podemos condicionar la ejecución de un bloque de instrucciones al cumplimiento de una condición.
    La sintáxis sería la siguiente:
    if (expresión) {
        bloque_de_sentencias
    }

    La expresión se evalúa siempre, si el resultado es VERDADERO se ejecuta el bloque de sentencias y si el resultado es FALSO no se ejecuta el bloque de sentencias.
    Ejemplo: Escriba el siguiente código, guárdelo con el nombre ejemplo_dos.php en la carpeta htdocs de XAMPP y ejecútelo en el navegador.
    <html>
    <head>
    <title>Ejemplo de estructuras de decisión 1</title>
    </head>
    <body>
    A continuación veremos una estructura de decisión la sentencia if...else

    <br>
    <?php
    $i = 6;
    if ($i < 10)
    {
    echo "menor de 10";
    }
    else
    {
    echo "mayor de 10";
    }
    ?>
    </body>
    </html>

    Evidentemente le saldrá el mensaje "menor de 10" ya que hemos asignado a la variable "i" el valor 6, dentro de la misma estructura de código de la página. Una práctica más interesante consistiría en comprobar por ejemplo el  valor pero recogido por teclado.