Nuevas NORMAS para el foro

Curso Hacker
Bienvenido(a), Visitante. Favor de ingresar o registrarse.
¿Perdiste tu email de activación? - Julio 26, 2008, 11:45:37
Boton Buscar
Inicio Ayuda Ingresar Registrarse
Visita: Articulos - Juegos Gratis - Da Foros

Comunidad Underground Hispana  |  Programacion  |  Programacion para webmasters  |  Php (Moderadores: RuB, SaTeLuCo)  |  Tema: Clase GuestBook 0 Usuarios y 1 Visitante están viendo este tema. « anterior próximo »
Páginas: [1] Ir Abajo Imprimir
Autor Tema: Clase GuestBook  (Leído 91 veces)
rOnNyLdInHo™
Gran Colaborador
*****
Desconectado Desconectado

Mensajes: 1263


Ver Perfil WWW Email
« en: Abril 26, 2008, 12:19:06 »

Hola, llevo varios días mirando el tema de las clases en PHP, la programación orientada a objetos y leyendo algunas clases más o menos simples (autentificación de usuarios y cosas así) y hoy me he decidido a probar esto de las clases realizando un libro de visitas simple.

La verdad es que esto de las clases está bastante bien. No se demasiado de la POO pero mas o menos se tiene que construir por separado el motor de la web y el diseño en que se representarán los datos, no se deben mezclar estas cosas. Una vez construido el motor es realmente simple terminar la web.

Bueno, voy a copiar la clase, que sería el motor del sistema.

class.gbook.php
Código:
<?php


/*

CREATE TABLE `gbook` (
  `id` int(7) NOT NULL auto_increment,
  `autor` varchar(32) NOT NULL,
  `texto` longtext NOT NULL,
  `fecha` varchar(20) NOT NULL,
  PRIMARY KEY  (`id`)
)

*/

class GBook {

var $sys = array( 
'host' => 'localhost',
'user' => 'root',
'pass' => 'root',
'db' => 'casino',
'table' => 'gbook',
'pagina' => 'gbook.php'
);
/* estos datos deben cambiarse según la configuracion de cada uno */
var $password "88a0b1be3a4a0e81bc21eb8f5a423ba4"// codificada en MD5, se puede usar por ejemplo http://www.md5encrypter.com/ para codificar algo rapidamente

var $enlace;

function GBook() {
if(empty($this->enlace))
{
$this->enlace mysql_connect($this->sys["host"],$this->sys["user"],$this->sys["pass"]) or die("No se ha podido conectar a la base de datos");
mysql_select_db($this->sys["db"],$this->enlace);
return $this->enlace;
}
}

function CheckAdmin($pass) {
if(md5($pass)==$this->password)
{
setcookie("gbook_admin",md5($pass),time()+3600*24*7); // 1 semana de cookie
header("Location: ".$this->sys['pagina']);
}
}

function Mostrar() {
$query "SELECT * FROM ".$this->sys['table']." ORDER BY id DESC";
$res mysql_query($query) or die("No se pudo sacar informacion de la BD");
while($row mysql_fetch_array($res))
{
?>

<center><div id="tabla">
<?php echo $row["autor"];?>
el <?php echo date("d/m/Y",$row["fecha"]);?> a las
<?php echo date("H:i",$row["fecha"]);?>
<?php
if($_COOKIE["gbook_admin"]==$this->password)
?>

<a href="borrar.php?id=<?php echo $row['id'];?>">Borrar</a>
<?php 
}
 ?>

<hr />
<?php echo $row["texto"];?>
</div></center>
<?php
}
}

function Borrar($id)
{
if($_COOKIE["gbook_admin"]==$this->password)
{
$query "DELETE FROM ".$this->sys["table"]." WHERE id = ".$id;
mysql_query($query,$this->enlace) or die(mysql_error());
header("Location: ".$this->sys["pagina"]);
}
else
echo "No tienes permisos";
}

function Escribir($texto,$autor) {
$texto $this->LimpiarCadena($texto);
$autor $this->LimpiarCadena($autor);
$fecha time();

$query "INSERT INTO " .$this->sys['table']. " (texto, autor, fecha) VALUES ('$texto', '$autor', '$fecha')";
mysql_query ($query$this->enlace) or die(mysql_error());
header("Location: ".$this->sys["pagina"]);
}

function Logout() {
setcookie ("gbook_admin"""time()-60000);
header("Location: ".$this->sys['pagina']);
}

function LimpiarCadena($cadena)
{
$cadena stripslashes($cadena);
$cadena strip_tags($cadena);
$cadena nl2br($cadena);
$cadena stripslashes($cadena);
$cadena mysql_real_escape_string($cadena);
return $cadena;
}
?>

Voy a explicar muy brevemente lo que hace cada método (función).

GBook()
Es el constructor de la clase, lo que hace es crear la conexión con la base de datos. Tiene el mismo nombre que la clase, de esta manera el método se convierte en el constructor y conecta automáticamente con la BD


CheckAdmin()
Esto codifica con md5 la contraseña que se le pasa y comprueba que es igual que el hash que se ha especificado en la configuracion de la clase. Si concuerdan crea una cookie con el hash de la contraseña.

Mostrar()
Imprime todas las firmas que se han dejado, y si el login es correcto muestra un enlace para borrar una firma en concreto.

Borrar($id)
Borra de la BD la firma con la ID que se le pasa a la función. Antes de eso comprueba que tengas permisos Tongue

Escribir($texto,$autor)
Escribe en la base de datos una nueva firma. A esta función se le pasan dos parámetros, que son el texto y el autor. La fecha la genera automáticamente.

Logout()
Elimina la cookie

LimpiarCadena()
Esto me lo encontré por ahí, no se si es la forma más segura de limpiar una cadena, pero me parece que funciona bien. No estoy puesto en este tema y tendré que investigar un poco para mejorar esta funcion.


index.php (O el nombre que se le quiera dar. Si se le da otro debe cambiarse en class.gbook.php la variable $sys["pagina"])
Código:
<?php
include("class.gbook.php");
$libro = new GBook;
if(!empty(
$_POST["pass"]))
$libro->CheckAdmin($_POST["pass"]);
if(isset(
$_GET["salir"]))
$libro->Logout();
?>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="es" lang="es">
<head>
    <meta http-equiv="Content-type" content="text/html; charset=utf-8" />
    <meta http-equiv="Content-Language" content="es-es" />
<link rel="stylesheet" href="gbook_css.css" />
    <title>Clase GuestBook muy simple</title>
</head>

<center><form action="procesar.php" method="post">
Autor
<input class="form" type="text" name="autor"><br />

<textarea class="form" name="texto"></textarea><br />
<input class="form" type="submit" value="Firmar">
</form><br /></center>
<?php

$libro
->mostrar();
?>

<?php
if($_COOKIE["gbook_admin"]==$libro->password)
echo "<center><a href=".$libro->sys['pagina']."?salir>Logout</a></center>";
else
{
?>
<center><form action=<?php echo $libro->sys['pagina'];?> method="post">
Administrar:
<input class="form" type="password" name="pass">
<input class="form" type="submit" value="OK">
</form></center>
<?php
}
?>

<body>
</body>
</html>

Esto sería lo que el usuario vería. Para usar una clase en primer lugar debemos incluirla y crear un objeto, da igual el nombre. En este caso he usado la palabra libro. El objeto se crea de esta manera: $libro = new GBook;
GBook es el nombre de la clase.

Para acceder a los métodos del objeto se hace de la siguiente manera.
$objeto->metodo();
Un ejemplo con nuestro caso:
$libro->mostrar();
De esta manera se mostrarían todas las firmas existentes.

Lo primero que se hace es comprobar si $_POST["pass"] tiene algo, y si lo tiene usa el método CheckAdmin($pass) con ese algo para comprobar si la contraseña es correcta y crear la cookie que lo confirme.

Despues se comprueba si existe la variable $salir. Si existe llama al método Logout() que destruye la cookie del administrador.

Mostramos ya el HTML, formulario de firma y por fin mostramos las firmas con $libro->mostrar();

Despues de eso, si el login fue correcto mostramos un enlace para salir, y si no pues un formulario para entrar xD

procesar.php
Código:
<?php

if(!empty($_POST["texto"]) && !empty($_POST["autor"]))
{
include("class.gbook.php");
$libro = new GBook;
$libro->Escribir($_POST["texto"],$_POST["autor"]);
}
else
echo "Debes rellenar todos los campos";
?>

De nuevo incluimos la clase para poder usarla, creamos el objeto y usamos el metodo Escribir($texto,$autor). En este caso las variables $_POST["texto"] y $_POST["autor"] tienen la información, así que usamos el método Escribir($texto,$autor) con esas variables.

borrar.php
Código:
<?php
if(isset($_GET["id"]))
{
 
include("class.gbook.php");
$libro = new GBook;
$libro->Borrar($id);
}
else
echo "Debes especificar una firma para borrarla.";

?>

Si se ha especificado una ID llama al método Borrar($id) y la borra, claro XD


Y eso es todo amigos. Una clase muy simple y básica que para los que estén comenzando con las clases (como yo) o quieran empezar les servira creo y espero que bastante.

¿Se puede mejorar?

Todo se puede mejorar. ¿Alguna idea?
En línea




Para ver los enlaces debes ser usuario Crear Usuario o Hacer Sesion
rOnNyLdInHo.Com se abre al público Entra y escribe tu sugerencia Wink Wink
SaTeLuCo
Moderadores
Colaborador
*****
Desconectado Desconectado

Mensajes: 431



Ver Perfil WWW
« Respuesta #1 en: Abril 27, 2008, 04:46:18 »

Las clases son muy buenas y facilitan mucho el trabajo... felicidades
En línea



Para ver los enlaces debes ser usuario Crear Usuario o Hacer Sesion

Foko
Habitual
*****
Desconectado Desconectado

Mensajes: 247


Primero Racing, Despues Existo

fokokofo@hotmail.com
Ver Perfil WWW
« Respuesta #2 en: Abril 28, 2008, 06:48:31 »

Te envidio, nose que tengo que me parecen mas comodas las funciones y listo.

Algun dia aprendere POO Sad


mientras vivo de funciones xD
En línea


Para ver los enlaces debes ser usuario Crear Usuario o Hacer Sesion


"Mas alla de la Logica, Mas alla de la Razon,
Te entrego mi Vida y mi Corazon"  La Guardia imperial.
rOnNyLdInHo™
Gran Colaborador
*****
Desconectado Desconectado

Mensajes: 1263


Ver Perfil WWW Email
« Respuesta #3 en: Abril 28, 2008, 07:29:25 »

Las clases son muy buenas y facilitan mucho el trabajo... felicidades

Si eso si es cierto amigo Sate, pero muchas estan mal hechas y en vez de facilitarles el trabajo a uno, se lo empeoran

Te envidio, nose que tengo que me parecen mas comodas las funciones y listo.

Algun dia aprendere POO Sad


mientras vivo de funciones xD

Pues si, puedes modificarlo y agregarle cosas,si quieres, ahi me avisas.
« Última modificación: Abril 28, 2008, 07:30:16 por rOnNyLdInHo™ » En línea




Para ver los enlaces debes ser usuario Crear Usuario o Hacer Sesion
rOnNyLdInHo.Com se abre al público Entra y escribe tu sugerencia Wink Wink
Páginas: [1] Ir Arriba Imprimir 
Comunidad Underground Hispana  |  Programacion  |  Programacion para webmasters  |  Php (Moderadores: RuB, SaTeLuCo)  |  Tema: Clase GuestBook « anterior próximo »
Ir a:  


Ranking-Hits
Powered by SMF 1.1.5 | SMF © 2006-2007, Simple Machines LLC