MIni-tutorial PHP

Ejemplo de bucle for

 <?php
    echo "Bucle de  PHP<br>";

    for($i=0;$i<5;$i++)
    {
      echo "Escribiendo ".$i."<br>";
   }
 ?>

Definir variables

 <?php
   $a = 25;
    $b = 2.5;
    $c = "texto";
   echo $a,"<br>",$b,"<br>",$c;
 ?>
 echo $a + $b,"<br>";
 $a == $b igual
 $a != $b distinto
 $a < $b
 $a > $b
 $a <= $b menor o igual que
 $a >= $b mayor o igual que

Lógicos:

   echo ($a == $b) && ($c > $b),"<br>";
   echo ($a == $b) || ($b == $c),"<br>";
   echo !($b <= $c),"<br>";

Condicionales

 if ($a < $b) {algo;} else {algo;}

Bucle while

 $i=0;
   while ($i<10)
   {
      echo "El valor de i es ", $i,"<br>";
      $i++;
   }

Formateo salida

 printf("El numero dos con diferentes formatos: %d %f %.2f",2,2,2);

Función:

   function media($a, $b)
   {
      $x=($a+$b)/2;
      return $x; <   }

   echo media(4,16),"<br>"; <   echo media_aritmetica(342,43),"<br>";

H3 Librerias en PHP

Una página con funciones. Ejemplo

 <?php  function Cabecera() { ?>  <HR>Esta es la cabecera <hr> <? } ?>

En otra página cargamos la librería así:

 <?php include("libreria.phtml") ?> y llamamos a la cabecera así:
  <?php Cabecera(); ?>

Enlaces externos dentro de frame

 <A HREF="pagina.phtml?dire=http://www.algo.es">pincha aquí</A>

Paquetes útiles para usar con PHP

Formularios

 <FORM ACTION="recibe.phtml" METHOD="GET">
 Pon nombre    <INPUT TYPE="text" NAME="nombre">    <BR>
 Pon apellidos <INPUT TYPE="text" NAME="apellidos"> <BR>
 <INPUT TYPE="submit" VALUE="Enviar">
 </FORM>

En versiones anteriores a 4.2.0 PHP creaba una variable por cada elemento, anora hay que usar el array de parámetros $_POST[] o $_GET[] dependiendo del método usado para enviar los parámetros.

La forma de usarlo en recibe.phtml:

 <?php echo $_GET['nombre']," ",$_GET['apellidos'] ?><br>
 <?php echo $_POST['nombre']," ",$_POST['apellidos'] ?>

El resultado final es el mismo, pero con GET podemos ver los parámetros pasados ya que están codificados en la URL.

Envio de emails

 <?php  mail(destinatario, tema, texto del mensaje); ?>
 <?php  mail(destinatario, tema, texto del mensaje, información adicional de cabecera); ?>
 <FORM ACTION="email.phtml" METHOD="GET">
 <INPUT TYPE="text" NAME="direccion"><BR><BR>
 Formato: <BR>
 <INPUT TYPE="radio" NAME="tipo" VALUE="plano" CHECKED> Texto plano<BR>
 <INPUT TYPE="radio" NAME="tipo" VALUE="html"> HTML<BR><BR>
 <INPUT TYPE="submit" VALUE="Enviar">
 </FORM>

En email.phtml ponemos:

 <?
    $direccion=$_GET['direccion'];
    $tipo=$_GET['tipo'];

    if ($direccion!=""){
    if ($tipo=="plano"){
       // Envio en formato texto plano

       mail($direccion,"Mi Asunto","Ejemplo de texto plano\n\nFin\n");
    } else {
       // Envio en formato HTML
       mail($direccion,"Mi asunto","<html> ...","Content-type: text/html\n", "FROM: > Pruebas <aaa@aaa.es>\n");
    }
 echo "Enviado email a ",$direccion," en formato <b>",$tipo,"</b>.";
 }
 ?>

Seguridad

Acceso restringido usando las variables globales (como módulo Apache, no como CGI)

 $PHP_AUTH_USER (nombre usuario)
 $PHP_AUTH_PW   (contraseña)
 $PHP_AUTH_TYPE
 <?php // pedir santo y seña
    if (!isset($PHP_AUTH_USER)) {
       header('WWW-Authenticate: Basic realm="Acceso restringido"');
       header('HTTP/1.0 401 Unauthorized');
       echo 'Authorization Required.';
       exit;
    }
    else {
       echo "Ha introducido el nombre de usuario: $PHP_AUTH_USER<br>";
       echo "Ha introducido la contraseña: $PHP_AUTH_PW<br>";
    }
 ?>

Ejemplo de passwords.txt

 Joe|1235
 Pedro|qwer
 Noe|Gty45e
 kermit|rwe4v

En este ejemplo se pide la autorización si no se ha establecido y se comprueba con passwords.txt, si es correcto vemos el resto

 <?php // comentario
     if (!isset($PHP_AUTH_USER)) {
       header('WWW-Authenticate: Basic realm="Acceso restringido"');
       header('HTTP/1.0 401 Unauthorized');
       echo 'Authorization Required.';
       exit;
    }

    $fich = file("passwords.txt");
    $i=0; $validado=false;
    while ($fich[$i] && !$validado) {
       $campo = explode("|",$fich[$i]);
       if (($PHP_AUTH_USER==$campo[0]) && ($PHP_AUTH_PW==chop($campo[1]))) $validado=true;
       $i++;
    }

    if (!$validado) {
       header('WWW-Authenticate: Basic realm="Acceso restringido"');
       header('HTTP/1.0 401 Unauthorized');
       echo 'Authorization Required.';
       exit;
    }
 ?>

Sesiones

Peguntamos si existe, la retomamos o creamos una nueva con un identificador único, que asociamos a todas las URLs y acciones de formulario. O creamos un cookie que incluya el identificador de sesión

 <?php // comenza la sesión
  session_start();
   echo 'La sesión actual es: '.session_id();
 ?>
 <?php // ejemplo se session_register
 session_register('contador');
 echo '<a href="'.$PHP_SELF.'?'.$SID.'">Contador vale: '.++$_SESSION['contador']. '</a>';
 ?>

Registramos $contador y al recargar o hacer click sobre el enlace, el valor se incrementa

La variable reservada $PHP_SELF, hace referencia al propio script y $SID contiene el nombre de la sesión y el identificador de la misma.

Podemos ver o modificar el nombre de la sesión con la función session_name().

 <?php //
 session_name('misesion');
 session_register('contador');
 echo '<a href="'.$PHP_SELF.'?'.SID.'">Contador vale: '.++$_SESSION['contador'].'</a><br>';
 echo 'Ahora el nombre es '.session_name().' y la sesión '.$misesion.'<br>';
 ?>


Note: un error común es dejar líneas en blanco antes de la inicialización de PHP o enviar alguna salida a la pantalla. Si tienes los cookies activados, dará un error

Carrito de compra

 <?php //
 session_start();
 session_register('Cosas');
 $producto=$_POST['producto'];
 $cantidad=$_POST['cantidad'];
 $Cosas=$_SESSION['Cosas'];

 if ($producto){
    if (!isset($Cosas)){
       $Cosas[$producto]=$cantidad;
    }else{
       foreach($Cosas as $k => $v){
          if ($producto==$k){
          $Cosas[$k]+=$cantidad;
          $encontrado=1;
          }
       }
       if (!$encontrado) $Cosas[$producto]=$cantidad;
    }
 }
 $_SESSION['Cosas']=$Cosas;
 ?>

 <FORM action="<?=$PHP_SELF."?".$SID?>" method="post">
 Producto <input type="text" name="producto" size="20"><br>
 Cuantas unidades <input type="text" name="cantidad" size="20"><br>
 <input type="submit" value="Añadir a la cesta"><br>
 </form>
 <?
 if (isset($Cosas)){
    echo'El contenido de la cesta de la compra es:<br>';
    foreach($Cosas as $k => $v){
       echo 'Artículo: '.$k.' ud: '.$v.'<br>';
    }
 }
 ?>

Cookies

 int setcookie (string Nombre [, string Valor [, int Expire [, string Path [, string Dominio [, int Secure]]]]])

Setcookie() define una cookie que es enviada junto con el resto de la información de la cabecera(header). Las cookies deben ser enviadas antes de cualquier tag de html,

Todos los argumentos excepto el nombre son opcionales.

 setcookie("usuario", "pepe", time()+360,"/","www.miweb.es");

En este ejemplo establecemos una cookie de nombre usuario que contiene el valor Luis, que dura 10 minutos

<FORM ACTION="procesar_cookie.phtml" METHOD="GET"> <INPUT TYPE="text" NAME="nombre"><BR> <INPUT TYPE="submit" VALUE="Enviar"> </FORM>

 <?php  setcookie("ejemusuario", $_GET['nombre'], time()+3600,"/","");     ?>
 <? print $_GET['nombre']; ?></b> que será válida durante 1 hora.

Recuperar el valor de la cookie establecida anteriormente.

<? print $_COOKIE['ejemusuario']; ?>