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; ?>
- + Suma
- - Resta
- * Multiplicación
- / División
- % Módulo (resto división)
- ++ Suma 1 (sin nada detrás)
- -- Resta 1
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:
- && (and) --> verdadero cuando ambas condiciones son verdaderas.
- || (or) --> verdadero cuando una de las dos es verdadera.
- ! (no) --> Niega el valor de la expresión.
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);
- strlen(cadena). Nos devuelve el número de carácteres de una cadena.
- split(separador,cadena). Divide una cadena en varias usando un carácter
- sprintf(cadena de formato, var1, var2...). printf como una cadena.
- substr(cadena, inicio, longitud). Devuelve una subcadena de otra,
- chop(cadena). Elimina los saltos de línea y los espacios finales
- strpos(cadena1, cadena2). Indica pos de cadena2 dentro de cadena1
- str_replace(cadena1, cadena2, texto). Reemplaza cadena1 por cadena2 en el texto.
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
- awf. Crea un portal con php + mysql
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.
- Nombre de la cookie. Único obligatorio (sólo el nombre borra una existente)
- Podemos reemplazar cualquier argumento con una cadena vacía ("").
- Value. Valor que almacenará la cookie en el cliente.
- Expire. hora en que se elimina en el formato de time() +N segundos
- Path. Subdirectorio en donde tiene valor la cookie.
- Dominio. Dominio en donde tiene valor la cookie.
- Secure. solo se transmitirá a través de HTTPS.
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']; ?>