Código fuente Ya.

Puede ejecutar la o las páginas para probar el concepto inmediatamente.

 

Concepto:Implementación de un libro de visitas

El concepto trata sobre:php,mysql
Autor:

Retornar

Nombre del archivo:menu.html

Comentarios
El objetivo de este concepto es el desarrollo de un libro de visitas en PHP.
Primero tenemos la creación de la tabla: librovisitas.
El alta de un registro en la tabla con las respectivas validaciones en el cliente y en el servidor.
Listado del libro de visitas con paginación.
Nombre del archivo:creartabla.php

Comentarios
Almacenamos el código como clave primaria, el nombre del visitante, su mail, sus comentarios, la valoración
del sitio y la fecha y hora de la visita:
mysql_query("create table librovisitas (
                            codigo int auto_increment primary key,
                            nombre varchar(50),
                            mail varchar(70),
                            comentarios text,
			    valoracion tinyint,
			    fechahora datetime
                         )",$conexion) or
  die("Problemas :".mysql_error());
Nombre del archivo:visitas.html

captcha


Comentarios
Importamos el archivo con las validaciones en JavaScript:
<script type="text/javascript" src="funciones.js"></script>
Incorporamos la hoja de estilo definida para el libro de visitas:
<link rel="StyleSheet" href="estilos.css" type="text/css">
El captcha lo genera el archivo captcha.php que debemos indicarlo en el elemento img:
<input type="text" name="captcha" id="captcha" size="6" maxlength="6">
<img style="padding-left:5px" src="captcha.php" alt="captcha"></p>
Nombre del archivo:funciones.js

Comentarios
Capturamos el evento submit e indicamos que se ejecute la función enviarDatos, previo a que
ocurra el envío:
  var ref=document.getElementById('formulario1');
  addEvent(ref,'submit',enviarDatos,false);

La función enviarDatos primero extrae el valor ingresado en el control donde se ingresa el mail y
llama a la función que lo valida:
  var mail=document.getElementById('mail');
  var errores='';
  if (!validarMail(mail.value))
    errores+='Mail incorrecto.\n';
Cada error se concatena en el string 'errores'.	
Lo mismo hacemos con el control donde se ingresa el nombre, los comentarios y el captcha. Verificamos
si alguno de los mismos está vacío:	
  var nombre=document.getElementById('nombre');
  if (nombre.value=='')
    errores+='No ingresó el nombre.\n';	
  var comentarios=document.getElementById('comentarios');
  if (comentarios.value=='')
    errores+='No ingresó comentarios.\n';
  var captcha=document.getElementById('captcha');
  if (captcha.value=='')
    errores+='No ingresó el código de verificación.';			
Si no hay errores salimos retornando true con lo que se efectúa el envío de datos al servidor	
  if (errores=='')
    return true;
en caso de haber algún error se procede a mostrarlos en una ventana de alert:	
  else
  {
    alert(errores);	  	  
    if (e.preventDefault)
      e.preventDefault();
    return false;
  }	
Nombre del archivo:estilos.css

Nombre del archivo:visitas.php

Comentarios
La función alta lo primero que hace es llamar a validarDatos(), en caso de retornar verdadero
procede a efectuar el insert en la tabla:
  if (validarDatos())
  {
    //Borramos con la función strip_tags cualquier elemento HTML ingresado por el visitante
    $nombre=strip_tags($_REQUEST['nombre']);
    $mail=strip_tags($_REQUEST['mail']);
	$valoracion=$_REQUEST['valoracion'];
    $comentarios=strip_tags($_REQUEST['comentarios']);
Conectamos con el servidor y seleccionamos la base de datos:	
	$conexion=mysql_connect("localhost","pepe","123456") or
	  die("Problemas en la conexion");
	mysql_select_db("codigofuenteya",$conexion) or
		die("Problemas en la selección de la base de datos");
Efectuamos el insert en la tabla:	
	mysql_query("insert into librovisitas(nombre,mail,comentarios,valoracion,fechahora) values
		   ('$nombre','$mail','$comentarios',$valoracion,now())",$conexion) or
	  die("error:".mysql_error());

La función validarDatos verifica que el código de verificación coincida con el generado. También
verificamos que todos los controles estén con datos. Esta validación si bién es lo mismo que hacemos
en el cliente con JavaScript, no podemos estar seguro que el navegador tenga activo el lenguaje
JavaScript.
function validarDatos()
{
  $errores='';
  if ($_SESSION['captcha']!=$_REQUEST['captcha'])
     $errores.='<li>Ingreso del código de verificación incorrecto.</li>';
  if ($_REQUEST['nombre']=='')
     $errores.='<li>El nombre no puede estar vacío.</li>';
  if ($_REQUEST['mail']=='')
     $errores.='<li>El mail no puede estar vacío.</li>';
  if ($_REQUEST['comentarios']=='')
     $errores.='<li>Los comentarios están vacíos.</li>';
  if (strlen($errores)=='')
    return true;
  else
  {
    echo "<ol>$errores</ol>";
    echo '<a href="javascript:window.history.back()">Retornar</a>';	   
    return false;
  }	
Nombre del archivo:captcha.php

Comentarios
Importamos el archivo que contiene la clase ClaveAleatoria
  require('rutinas.php');
Creamos una imagen con un determinado ancho y alto:
  $ancho=100;
  $alto=22;
  $imagen=imageCreate($ancho,$alto);
Creamos un recurso con el color azul y pintamos el fondo de la imagen:
  $azul=ImageColorAllocate($imagen,195,217,255);
  ImageFill($imagen,0,0,$azul);
Creamos un objeto de la clase ClaveAleatoria, fijamos la cantidad de caracteres de la misma y
almacenamos el resultado en una variable local:
  $clave=new ClaveAleatoria();
  $clave->fijarLongitud(6);
  $valoraleatorio=$clave->generar();
Inicializamos la sesión para almacenar en el servidor el código generado y posteriormente poderlo 
contrastar con el que cargue el visitante en el formulario:
  session_start();
  $_SESSION['captcha']=$valoraleatorio;
Creamos otros dos colores:
  $rojo=ImageColorAllocate($imagen,255,0,0);
  $negro=ImageColorAllocate($imagen,0,0,0);
Graficamos algunas líneas negras sobre la imagen:
  for($c=0;$c<=3;$c++)
  {
    $x1=rand(0,$ancho);
    $y1=rand(0,$alto);
    $x2=rand(0,$ancho);
    $y2=rand(0,$alto);
    ImageLine($imagen,$x1,$y1,$x2,$y2,$negro);
  }
Dibujamos el código generado:
  ImageString($imagen,5,25,5,$valoraleatorio,$rojo);
Generamos la cabecera a enviar al navegador indicando que enviaremos una imagen con formato png:  
  Header ("Content-type: image/png");
Volcamos la imagen previamente generada:  
  ImagePNG ($imagen);
Liberamos recursos del servidor:  
  ImageDestroy($imagen);
  
Nombre del archivo:rutinas.php

Comentarios
La clase ClaveAleatoria define tres atributos:
  private $longitud=10;
  private $numeros=true;
  private $mayusculas=true;
$longitud : almacena la cantidad de caracteres que tendrá la clave.
$numeros : indica si se incluyen números dentro de la clave.
$mayusculas : indica si se incluyen letras mayúsculas en la clave.

Los métodos:
  public function sinNumeros()
  {
    $this->numeros=false;
  }
  
  public function sinMayusculas()
  {
    $this->mayusculas=false;
  }
fijan con falso los atributos $numeros y $mayusculas.

Para fijar la longitud de la clave tenemos el método:
  public function fijarLongitud($l)
  {
    $this->longitud=$l;
  }

Por último tenemos el método generar:
  function generar()
  {
    //definimos un vector 
    $carac=array();
    //si el atributo $numeros tiene almacenado true procedemos a ejecutar el for
    if ($this->numeros)
      //Guardamos en el vector los valores enteros comprendidos entre 48 y 57. Estos valores 
      //coinciden con los valores ascii de los números del 0 al 9
      for($f=48;$f<=57;$f++)
        $carac[]=$f;
    if ($this->mayusculas)
      //Añadimos al vector los valores comprendidos entre 65 y 90. Estos valores coinciden con
      //los caracteres alfabéticos ('A' hasta 'Z')	
      for($f=65;$f<=90;$f++)
        $carac[]=$f;
    //caracteres alfabéticos ('a' hasta la 'z')	
    for($f=97;$f<=122;$f++)
      $carac[]=$f;
    $canti=sizeof($carac);
    $clave='';
    //Almacenamos caracter a caracter la clave generada. la función chr convierte a caracter el valor
    //numérico.
    for($f=1;$f<=$this->longitud;$f++)
      $clave.=chr($carac[rand(0,$canti-1)]);
    return $clave;
  }
Nombre del archivo:listado.php

Retornar



Código Fuente Ya - 2015