Bueno, voy a copiar la clase, que sería el motor del sistema.
class.gbook.php
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
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"])
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
borrar.php
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?
Fuente: PHP
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 [url=http://www.md5encrypter.com/]http://www.md5encrypter.com/[/url] 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;
}
} ?>
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
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"
"[url=http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd]http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd[/url]">
<html xmlns="[url=http://www.w3.org/1999/xhtml]http://www.w3.org/1999/xhtml[/url]" 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>
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";
?>
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.";
?>
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?
Fuente: PHP