martes, 31 de enero de 2012

31. Soluciones a las Prácticas


¿Qué tal? Habéis podido realizar las prácticas vosotros solos. Espero que sí. Y si no ha sido así que las dudas hayan sido mínimas. Empiezo por indicar la solución de la primera práctica.
1)     1) Aplicación para poner password a archivos html. Primero crearemos un archivo php (principal.php) con el pasword puesto en el encabezado, dependiendo del password que pongamos nos redirigirá una página u a otra. (password1.html y password2.html). Si no le indicamos el pasword correcto nos enviará a otra página (incorrect.html) en el que nos indica que la contraseña no es correcta.
En total había que crear 4 archivos. El código del primer archivo (principal.php) es el siguiente:
<?php
if (isset($_POST['pw'])) {
$pw = $_POST['pw'];
if ($pw == "magico") {
header ("Location: password1.html");
} elseif ($pw == "wed123" ){
header ("Location: password2.html");
} else {
header ("Location: incorrect.html");
}
}
?>
<html>
<head>
<title>Soluciones a las prácticas - El blog de Amizba</title>
</head>
<body>
<h1> Indicar el password correcto.</h1>
<form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post">
<input type="password" name="pw">
<input type="submit" value="Envialo">
</form>
</body>
</html>
En el post Autentificación de usuarios, pusimos un ejemplo parecido a este. De las tres prácticas que puse creo que esta es la más fácil. La dificultad hubiera sido a lo mejor crear una base de datos para almacenar las contraseñas… aunque más que dificultad  hubiera sido una aplicación más larga en cuanto a código.
Vemos el archivo password1.html:
<html>
<head>
<title>Soluciones a las pr&aacute;cticas - El blog de Amizba</title>
</head>
<body>
Esta es la pagina protegida con "magico"
</body>
</html>
Un archivo html sin ninguna complicación, muy sencillo, igual que el archivo password2.html:
<html>
<head>
<title>Soluciones a las pr&aacute;cticas - El blog de Amizba</title>
</head>
<body>
Esta es la pagina protegida con WED123
</body>
</html>
Y por último el archivo incorrect.html:
<html>
<head>
<title>Soluciones a las pr&aacute;cticas - El blog de Amizba</title>
</head>
<body>
Lo sentimos, ese no es el password correcto. Intentalo otra vez
</body>
</html>
Bien, pues esta es la solución a la primera práctica.
Vamos a pasar ahora a la segunda práctica:
2)    2) Realizar un script que muestre un formulario que se enviará por correo electrónico en un solo archivo.
<html>
<head>
<title>Soluciones a las pr&aacute;cticas - El blog de Amizba</title>
<meta http-equiv="content-type" content="text/html; charset=ISO-8859-1" >
</head>
<body>
<h1>Trabajar con emails</h1>
<p>¡Enviame tu opinión!</p>
<form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post">
Tu direcciòn de e-mail: <br>
<input type="text" name="email" ><br>
Tu comentario: <br>
<textarea name="message" cols="50" rows="5">
</textarea><br>
<input type="submit" value="Enviar">
</form>
<?php
$receiverMail = "tudireccion@tudominio.es"; // escribe aqui tu direcciòn
if (isset($_POST['email']) && $_POST['email'] != "") {
if (mail ($receiverMail, "¡Tienes correo nuevo!", $_POST['message'], "From:
$_POST[email]")) {
echo "<p>Gracias por enviarme tu opiniòn.</p>\n";
} else {
echo "<p>Lo siento, ha ocurrido un error.</p>\n";
}
}
?>
</body>
</html>
En este script os podias ayudar mucho del post Trabajo con mails.
Y por último la más complicada por lo menos para mi:
3)    3) Realizar un contador de visitas. Es necesario crear un archivo de texto en blanco llamado contador.txt en la misma ubicación donde se ejecuta el script.
<html>
<head>
<title>Soluciones a las pr&aacute;cticas - El blog de Amizba</title>
<meta http-equiv="content-type" content="text/html; charset=iso-8859-1">
</head>
<body>
<h1>Libro de visitas</h1>
<form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post"
Tu comentario:<br>
<textarea cols="55" rows="4" name="comment"></textarea><br>
Tu nombre:<br>
<input type="text" name="name"><br>
Tu e-mail:<br>
<input type="text" name="email"><br>
<input type="submit" value="publica:">
</form>
<h3>Mostrar todos los comentarios</h3>
<?php
//Guarda el nombre del archivo en la variable
$file ="contador.txt";
//¿variable comment definida? ¿Nombre e e-mail no estan vacios?
//if isset($_POST['comment']) && $_POST['name'] ! = "" && $_POST['email'] != "" {
if (isset($_POST['comment']) && isset($_POST['name']) != "" && $_POST['email'] != "") {
$comment = $_POST['comment'];
$name = $_POST['name'];
$email = $_POST['email'];
//El archivo se abre para escritura-lectura
$fp = fopen($file, "r+");
//Leer todos los datos y almacenar en $old
$old = fread ($fp, filesize($file));
//Se crea el vinculo de e-mail
$email = "<a href=\mailto:$email\">$email</a>";
//Se incluye la fecha y se le da formato
$dateOfEntry = date ("y-n-j");
//Ocultar caracteres html, eliminar slashes, mantener saltos de linea
$comment = htmlspecialchars($comment);
// $comment = stripslashes(n12br($comment));
$comment = stripslashes($comment);
//"Montar la entrada (entry) del libro de visitas
$entry="<p><b>$name</b> ($email) wrote on <i>$dateOfentry</i>;<br>$comment</p>\n";
//El cursor invisible salta al principio
rewind($fp);
//Escribir en la nueva entrada antes de las antiguas en el archivo:
fputs($fp, "$entry \n $old");
//cerrar rl archivo
fclose($fp);
}
//Mostrar el archivo completo
readfile($file);
?>
</body>
</html>
En el script os dejo una serie de anotaciones, si algo no lo tenéis claro me lo indicáis en un mail o comentario. Bueno pues hasta aquí las prácticas. En el próximo post dedicaré más cosas a PHP. De momento esto es todo, hasta pronto!

miércoles, 11 de enero de 2012

30. Prácticas - Repaso

Hola a todos, qué tal? En el post de hoy voy a poner una serie de prácticas para que refresquemos nuestra memoria y demos un pequeño repaso a casi todo lo visto hasta ahora. He de decir que en algunas prácticas hay cosas que he pasado por alto, pero en cuanto a la realización de la práctica, paso por paso, iremos explicando y viéndolo sobre la marcha. Así que estas son las prácticas que propongo:

1)    Aplicación para poner password a archivos html. Primero crearemos un archivo php (principal.php) con el password puesto en el encabezado, dependiendo del password que pongamos nos redirigirá una página u a otra. (password1.html y password2.html). Si no le indicamos el password correcto nos enviará a otra página (incorrect.html) en el que nos indica que la contraseña no es correcta.

2)    Realizar un script que muestre un formulario que se enviará por correo electrónico en un solo archivo.

3)    Realizar un contador de visitas. Es necesario crear un archivo de texto en blanco llamado contador.txt en la misma ubicación donde se ejecuta el script.

Interesante, ¿no? En el próximo post indicaré las soluciones. Aconsejo que lo intentéis primero. Que parece que no sepáis casi nada, pero os aseguro que si habéis llegado hasta aquí sabéis más de lo que podéis imaginar. Hasta la próxima.

29. Las Cookies

Hola de nuevo. ¿Qué tal? Hoy voy a tratar el tema de las cookies. Pero, ¿qué es una cookie? Una cookie es un archivo que contiene una breve información que puede ser leída y utilizada por una aplicación php. La información que la cookie guarda se almacena dentro del disco duro del usuario. Otra definición, sería unos contenidos almacenados por un sitio web al disco duro del usuario. El objetivo principal de las cookies es la de poder identificar al usuario una vez éste visita el sitio por segunda vez. Por ejemplo, cuando insertamos nuestro usuario y contraseña del correo Hotmail tenemos la posibilidad de que nos recuerde nuestro nombre usuario y contraseña para la próxima vez que volvamos a acceder al correo no tengamos que volver a escribir nuestro usuario y contraseña, para que eso sea así se crea una cookie que no es más que un pequeño archivo .txt la mayor parte encriptado y es guardado en nuestro disco duro.
Para crear cookies con PHP, modificar o generar una nueva cookie lo podemos hacer con la función SetCookie:
setcookie("nombre_de_la_cookie",valor,expiracion);
A continuación una lista de parámetros de la función setcookie():
Nombre
Nombre que queremos darle a la cookie a guardar. Puede ser cualquiera que deseemos, normalmente un string
Valor
Cadena de caracteres que es el valor que va a tener la cookie.
Caducidad
La fecha en la que caducará la cookie.
Ruta
El camino o ruta donde la cookie se podrá utilizar dentro del dominio. Por defecto, la cookie se podrá utilizar en el directorio donde se ha creado y sus subdirectorios. Si indicamos "/" la cookie tendrá validez dentro de todo el dominio.
Dominio
Es el subdominio donde se podrá acceder a la cookie. Las cookies sólo se pueden generar y utilizar para el dominio de la página donde está colocado el script, pero podemos hacerlo visible para todos los subdominios del dominio de la web por medio de ".midominio.com".
Seguro
Es un boleano que, si es verdadero, indica que la cookie sólo puede ser transmitida por shttp (http seguro).
Sólo http
Esto es otro boleano que sirve para indicar que la cookie sólo puede ser accedida por medio de las cabeceras del http, lo que la haría inalcanzable para lenguajes de script en el cliente como Javascript.
La funcion setcookie() de PHP genera y envía la cookie al navegador y devuelve un boleano, si es verdadero indica que se pudo incluir en el navegador del usuario y si es falso indica que no ha podido colocarla en el sistema. Pero este valor no indica que luego el visitante la haya aceptado o no, puesto que el navegador puede haberlo configurado para no aceptar cookies y esto no lo puede detectar setcookie() directamente
Un ejemplo de una cookie sería:
setcookie("cookie", "unvalor");
setcookie("otra_cookie", "otro_valor", time() + 3600);
setcookie("mas_cookies", "resultado", time() + 3600, "/", ".dominio.com");
Vamos a verlo sobre una aplicación consiste en dos archivos page1.php y page2.php, el código de page1.php es el siguiente:
<?php
setcookie("nombre", "amizba");
echo "<A HREF = 'page2.php'>Click aquí para ver la cookie</A>";
?>

Si lo probamos en el navegador:

Este es el contenido del archivo page1.php si hacemos clic en el vínculo nos redirecciona a la página page2.php:
Y el código de page2.php es el siguiente:
<?php
echo "Mi nombre es ".$nombre;
?>

Fácil!!! Noo? Pues aquí doy por finalizado el tema de las cookies, en el próximo post mucho más, de momento esto es todo. Saludosss

28. Práctica - Solución

Hola, ¿qué hay? Que tal con la práctica, era sencilla, ¿no? Voy a dar la solución a la práctica pero es de una aplicación realizada por un compañero y amigo Javier Martín un gran seguidor de este blog y por lo que se lo agradezco un montón, me envió el código y esta es su solución a la práctica que os propuse. Aquí la tabla con los datos insertados:

Y vamos con la apariencia del archivo registro.php en el navegador:

 
Cuyo código es el siguiente:
<?
session_start();

if ($usuarioid && $password)
{
  // Si el usuario ha intentado hacer log in

  $db_conn = mysql_connect("localhost", "root", "");
  mysql_select_db("registro", $db_conn);
  $query = "select * from registro "
           ."where usuario='$usuario' "
           ." and password='$password')";
  $result = mysql_query($query, $db_conn);
  if (mysql_num_rows($result) >0 )
  {
    // si están en la base de datos registra la id de usuario
    $valido_usuario = $usuarioid;
    session_register("valido_usuario");
  }
}
 
  {
    // si están en la base de datos registra la id de usuario
    $valido_usuario = $usuarioid;
    session_register("valido_usuario");
  }
}
?>
<html>
<body>
<h1>Página Inicio</h1>
<?

  if (session_is_registered("valido_usuario"))
  {
    echo "Ahora estás logeado como: $valido_usuario <br>";
    echo "<a href=\"logout.php\">Cierra sesión</a><br>";
  }
  else
  {
    if (isset($usuarioid))
    {
      // si han intentado hacer login y ha fallado
      echo "No has podido hacer login";
    }
    else
    {
      // si no han intentado hacer login  y no han hecho logged out
      echo "No has hecho login.<br>";
    }

    // provee el formulario para hacer  log in
    echo "<form method=post action=\"registro.php\">";
    echo "<table>";
    echo "<tr><td>Usuario:</td>";
    echo "<td><input type=text name=usuarioid></td></tr>";
    echo "<tr><td>Contraseña:</td>";
    echo "<td><input type=password name=password></td></tr>";
    echo "<tr><td colspan=2 align=center>";
    echo "<input type=submit value=\"Log In\"></td></tr>";
    echo "</table></form>";
  }
?>
<br>
<a href="miembros.php">Sección de Usuarios Registrados</a>
</body>
</html>
En la parte inicial del código lo que hace es conectarse a la base de datos para llevar a cabo el intercambio de los datos. Y la otra parte del código se lleva a cabo la acción de intentar logearse. Pero en general para entender cómo funciona este tipo de scripts hay que centrarse en que se mueve en torno a la variable de sesión que aquí denominamos valido_usuario. La idea básica es que si alguien se identifica correctamente lo registramos con una variable de usuario y una variable de sesión a la que llamamos valido_usuario y que contenga su id. Por tanto, será como su carné de identidad durante todo el tiempo que esté en la sesión que nos permite tener identificado al usuario pero sin embargo no tener que estar haciendo publico su información, lo único que se ve en el navegador es su usuarioid mientras que la otra información dependerá del navegador.
Lo primero que hacemos en este script es llamar a session_start() con lo que se cargará las variables de sesión, en este caso usuarioid si ha sido registrado, pero observa que en los otros scripts de la aplicación también empezamos con session_start(). De este modo, en caso de que exista la sesión iniciada y con una variable valido_usuario registrada haremos que esté presente en los demás scripts de la aplicación. Resumiendo cuando esa persona quiera logearse y cubra el formulario y pulse sobre el botón el script es reinvocado de nuevo al mismo script registro.php y tendremos un usuarioid y un password para intentar autentificar y almacenar comparándolos con los datos de la base de datos. 
Si insertamos en el formulario los datos mal nos sale el siguiente mensaje:

 
Si hacemos clic en el vínculo Sección de Usuarios Registrados sin estar registrados nos aparece lo siguiente:

 
Volvemos a la página principal y ahora insertamos los datos correctamente:

 
Si nos vamos a la sección de usuarios registrados:

Y si cerramos sesión:

Esto es lo que hace esta sencilla aplicación. El código del archivo miembros.php es el siguiente:
<?
  session_start();

  echo "<h1>Sólo Usuarios Registrados</h1>";

  // comprobar variables de sesión

  if (session_is_registered("valido_usuario"))
  {
    echo "<p>Estás logeado como $valido_usuario.</p>";
    echo "<p>Contenido sólo para usuarios registrados</p>";
  }
  else
  {
    echo "<p>No estás logeado.</p>";
    echo "<p>Sólo los usuarios registrados pueden ver esta página.</p>";
  }

  echo "<a href=\"registro.php\">Volver a la página principal</a>";
?>
Este código empieza naturalmente con session_start y comprueba que el usuario está correctamente registrado con la función session_is_registered con la variable valido_usuario en forma de string.
Y el código de logout.php:
<?
  session_start();

  $old_usuario = $valido_usuario;  // almacenado para comprobar si ellos estuvieron logged in
  $result = session_unregister("valido_usuario");
  session_destroy();
?>
<html>
<body>
<h1>Cerrar sesión</h1>
<?
  if (!empty($old_usuario))
  {
    if ($result)
    {
      // si estuvieron logged in y no están logged out
      echo "Logged out.<br>";
    }
    else
    {
     // Estaban logged in y no pueden  logged out
      echo "No se ha podido cerrar la sesión.<br>";
    }
  }
  else
  {
    // si ellos no estaban registrados pero llegan a esta página de algún modo
    echo "No estás logeado, y por tanto no puedes cerrar sesión.<br>";
  }
?>
<a href="registro.php">Volver a la página principal</a>
</body>
</html>
Este script sirve para que un usuario salga del sistema. Empezamos con session_start, hacemos una comparación con el viejo nombre de usuario con la variable valido_usuario que desaparecerá con la función session_unregister y posteriormente destruimos la sesión con session_destroy().
Hasta aquí el post de hoy, en el próximo hablaré sobre las cookies. De momento esto es todo. Abrazoooos

27. Sesiones de control

Holaaaaaaa a todos!! Feliz Año!! Cuanto tiempo… agradezco vuestra paciencia, no tengo excusa… pero estoy trabajando en un proyecto muy curioso sobre PHP, consiste en un motor de búsquedas sobre manuales gratuitos, espero tenerlo dentro de nada en la red y ya os diré el nombre de la página. Serán manuales de todo tipo, o eso es el objetivo que quiero, que sea muy simple que no se tenga que registrar nadie, que no haya limites de descarga de manuales, etc. para eso he tenido y tengo que trabajar las directivas de seguridad puesto que va a ser un sitio libre donde cualquiera pueda acceder no quiero que ningún cabr@n me fastidie.
Bueno vamos a seguir este post lo he dedicado a las sesiones de control. Es uno de los temas para mí más rollo, pero sin embargo uno de los más importantes, la mayor parte son apuntes que cogí de mi profesor Jesús Nuñez, estoy segura que con los ejemplos que voy a poner lo veréis más claro. Sin embargo, primero tengo que decir que es una sesión de control, para que sirve y de ahí las cookies… bueno que es rollo, pero luego la práctica es muy sencilla.
¿Qué es una sesión de control? Una sesión de control es el intervalo de tiempo que permanece un usuario en nuestro sitio visitando las páginas hasta que cierra sesión o cierra el navegador. Este rastreo que hace el usuario se guarda en un parámetro o una ID. ¿Para qué sirven las sesiones de control? Imaginaros que un usuario accede a una tienda virtual y visita las diferentes páginas insertando artículos al carrito de compra, el usuario está totalmente controlado mediante la ID. También cuando accedemos a nuestro correo online vemos que visualmente es diferente a otros usuarios. La ID es única para cada usuario. El usuario puede ver en el historial las páginas visitadas gracias a la ID.
PHP tiene la posibilidad de crear una variable de sesión de tres formas:
•    Mediante la función session_start(); Lo vemos mediante un ejemplo:
<?php
session_start();
if ($_SESSION['acceso']!="1")
{
header("Location:index.html");
exit;
}
echo "Bienvenido a la página privada";
echo "<a href=salir.php>Salir del sistema</a>";
?>
 Lo que hace esta función es comprobar si existe una ID, si no la hay la crea, si la hay lo que hace es cargar las variables de sesión registradas
•    Registrando una variable de sesión. Lo podemos configurar para que esto ocurra de forma automática para ello modificaremos el archivo php.ini

Por defecto aparece desactivado, para activarla suprimimos el 0 y le indicamos un 1.
Y alternativamente también podemos embeber la sesión mediante un enlace:
<a href=”link.php?<?=SID?>”> ?>”>
Aunque es más sencillo habilitando session.use_trans_sid del archivo php.ini.
•    Y la tercera forma es configurar la opción session.auto_start del archivo php.ini para empezar una automática:

Debemos configurarlo como verdadero, es decir, indicarle el valor de 1. Y después de iniciada una sesión lo que tenemos que hacer es registrar las variables de sesión:
$var=5;
session_register(“mivar”);
session_register (“mivar1”, “myvar2”);
Porque con el fin de que se pueda seguir la pista de una variable de un script a otro necesitamos registrarla con una llamada a la función session_register. Podemos registrar más de una variable de una vez. Por lo tanto empezamos la sesión, creamos las variables de sesión y usamos las variables de sesión:
$var
$HTTP_SESSION_VARS [“var”]
$resultado = session_is_registered(“var”);
Para desregistrar las variables y destruir la sesión se utiliza session_unregister(“var”). Con esta función solo podemos registrar una sola variable de sesión, con session_unset() desregistramos todas las variables de sesión de una vez. Y para limpiar la ID de sesión utilizamos session_destroy.
Vamos a verlo sobre un ejemplo. Este ejemplo está formado por tres páginas. La primera página la vamos a llamar page1.php, cuyo código es el siguiente:

En el ejemplo empezamos una sesión, registramos las variables con el nombre de var. Observamos que al empezar la sesión, después registramos la variable de sesión, a continuación le damos un valor, en este caso es un string. Si probamos la aplicación:

Vemos que aparece el contenido que lleva en el interior la función echo y un vínculo que nos lleva a la siguiente página. La página siguiente la llamamos page2.php:

Empezamos la aplicación iniciando la sesión para que la variable también este accesible. En este script el valor de la sesión se mantiene porque se pasa mediante la sesión id que empezamos con session_start(). Pero después de usar la variable utilizamos la función session_unregister para desregistrar la variable. De este modo la sesión aunque exista pero la variable var ya no estará registrada y por lo tanto ya no pertenece a la sesión por lo que no aparecerá. Si probamos el ejemplo page2.php:

Aparece el contenido de la variable var, pero la hemos desregistrado posteriormente. Por lo que al pasar a la página tres ya no aparece el contenido de la variable var:

Aunque hayamos empezado la sesión con session_start en el archivo page3.php ya no aparecerá porque la hemos desregistrado en el archivo page2.php. El código del archivo page3.php es el siguiente:

Que finaliza con session_destroy que lo que hace es destruir la sesión.
Bueno para finalizar os voy a proponer una práctica para entender mejor que son y como trabajan las sesiones de control. Consiste en hacer una pequeña aplicación para autentificarse en la web, para ello crearemos una base de datos con una tabla a la que llamaré registro, esta tabla le añadiré contenido, por ejemplo, dos campos que se llamen usuario y password y le añadiremos contenido al campo como muestro en el siguiente ejemplo (vosotros lo podéis crear como queráis):
create table registro    (
    usuario    varchar (10) not null,
    password    varchar (30) not null,
        Prymary key (usuario)
);
insert into registro values
    (‘lennon’, ‘12345’);
insert into registro values
    (‘paul’, ‘9*12F’) );
La práctica va consistir en tres archivos: register.php, miembros.php y logout.php. El primer archivo register.php va a ser un formulario sencillo en el que tendremos que insertar nuestro usuario y contraseña y al darle al botón enviar si los datos son correctos nos llevará a una página en la que nos indicará que nos hemos registrado correctamente y un vínculo en el que podamos deslogearnos, es decir, cerrar la sesión. Si por el contrario no le indicamos bien los datos nos redireccionará a una página en la que nos indica que nuestros datos de usuario y contraseña no son correctos. Fijaros que el archivo miembros.php debe contener el código tanto para si insertamos bien los datos o no. Y por último el archivo logout.php que nos cerrará o destruirá nuestra sesión. En el próximo post daré la solución, vosotros mismos podéis crear vuestra aplicación y si queréis me la podéis hacer llegar y la publico en el blog. Así que hasta el próximo post. Hasta luego!