¿Libro de visitas?

este es el de la pagina
<?php
$abrir= fopen('comentarios.txt','r');
while (!feof($abrir)) {
$ver1=fgets($abrir);
$ver=nl2br($ver1);
echo $ver;
}
fclose($abrir);
?>
<form action="comentario.php" method="post" enctype="multipart/form-data">


nombre:

<input type="text" name="nick" size="16" maxlength="16" /></p>


Comentario:

<textarea name="comentario" cols="40" rows="6"></textarea></p>


<input type="checkbox" name="firm">firma:

<input type="file" name="firma" />

</p>
<input type="submit" value="enviar"/>
</form>

este es el comentario.php

<?php
copy($_FILES['firma']['tmp_name'],'imagenes/'.$_FILES['firma']['name']);
$nom=$_FILES['firma']['name'];
if ($_REQUEST['comentario']== "") {
echo 'Tienes que poner tu comentario.Vuelve para corregir los fallos.';
}
else {
if ( $_REQUEST['nick']== ""){
echo 'Tienes que poner tu nick.Vuelve para corregir los fallos.';
}
else {
if ( $_FILES['firma']['size']>20480){
echo 'la imagen debe ser menor de 20kb';
}
else{
$ora=date('h:i:s');
$fp=fopen('comentarios.txt','a');
fwrite($fp,'

'.$_POST['comentario']);
fwrite($fp,'</p>');
fwrite($fp,'<p align="right">Escrito por '.$_POST['nick'].' a las '.$ora);
fwrite($fp,'</p>');
if(isset($_POST['firm'])) {
fwrite($fp,"<img src=\"imagenes/$nom\">");
}
fwrite($fp,'<hr>');
fclose($fp);
echo 'Datos cargados correctamente,Vuelve a la pagina que estabas viendo
}
}
}
?>
culpa mia,
se me olvido poner ;
echo 'Datos cargados correctamente,Vuelve a la pagina que estabas viendo ;
pues me sigue saliendo esto:

Parse error: syntax error, unexpected $end in /home/www/lobosdesangre.mygamesonline.org/comentario.php on line 44
pues esperate, que estoy terminandolo con captcha para que no escriba ningun robot nada y lo copias
por fin he terminao toas las mejoras dichas anteriormente,aora incluye firma(en carpeta separada),email(opcion publico y privado),tambien un sistema para identificar si el email es valido(pero no se puede identificar su existencia),captcha y divs, la unica pega esque aora son 6 archivos, 2 de ellos en txt. alla van.
Formulario:
<html>
<head>
<title>Titulo</title>
<link href="estilos.css" rel="stylesheet" type="text/css" >
</head>
<body>
<?php
$abrir= fopen('comentarios.txt','r');
[while (!feof($abrir)) {
$ver1=fgets($abrir);
$ver=nl2br($ver1);
echo $ver;
}
fclose($abrir);
?>
<form action="comentario.php" method="post" enctype="multipart/form-data" >


nombre:

<input type="text" name="nick" size="16" maxlength="16" /></p>


Email:

<input type="text" name="mail"></p>


Comentario:

<textarea name="comentario" cols="40" rows="6"></textarea></p>


Firma:

<input type="file" name="firma" />

</p>


Email Publico <input type="checkbox" name="cmail">

Usar firma <input type="checkbox" name="firm"></p>


Ingrese el siguiente codigo:[contenido no disponible]

<input type="text" name="numero"></p>
<input type="submit" value="enviar"/>
</form>
</body>
</html>
comeentario.php
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>Documento sin t&iacute;tulo</title>
</head>

<body>
<?php
copy($_FILES['firma']['tmp_name'],'imagenes/'.$_FILES['firma']['name']);
$nom=$_FILES['firma']['name'];
session_start();
if ($_SESSION['numero']!=$_POST['numero']) {
echo 'La verificacion no coincide.Vuelve a repetirlos.'; //sustituye form.php por el archivo donde esten los comentarios
}
else {
if ($_REQUEST['comentario']== "") {
echo 'Tienes que poner tu comentario.Vuelve para corregir los fallos.'; //sustituye form.php por el archivo donde esten los comentarios
}
else {
if ( $_REQUEST['nick']== ""){
echo 'Tienes que poner tu nick.Vuelve para corregir los fallos.'; //sustituye form.php por el archivo donde esten los comentarios
}
else {
if ( $_FILES['firma']['size']>20480){
echo 'la imagen debe ser menor de 20kb.Vuelve para corregir los fallos.'; //sustituye form.php por el archivo donde esten los comentarios
}
else{
if ($_POST['mail']=="") {
echo 'Tienes que poner tu email.Vuelve para corregir los fallos.'; //sustituye form.php por el archivo donde esten los comentarios
}
else {
if (!strpos($_REQUEST['mail'], "@")) {
echo 'La direccion email debe ser valida';
}
else {
$dia=date('d/m/Y');
$fpm=fopen('mails.txt','a');
fwrite($fpm,'nombre '.$_POST['nick'].'----');
fwrite($fpm,'email '.$_POST['mail'].'
');
fwrite($fpm,"\n");
fclose($fpm);
$fp=fopen('comentarios.txt','a');
fwrite($fp,'<div id="comentario"><p class="p">'.$_POST['comentario']);
fwrite($fp,'</p>');
fwrite($fp,"<hr>");
fwrite($fp,'<p class="p" align="right">Escrito por '.$_POST['nick'].' a las '.$dia);
fwrite($fp,'</p>');
if(isset($_POST['firm'])) {
fwrite($fp,"<img src=\"imagenes/$nom\" class=\"img\">
");
}
if (isset($_POST['cmail'])) {
fwrite($fp,"<p class=\"p\">Email: ".$_POST['mail']."</p>");
}
fwrite($fp,'</div>');
fwrite($fp,"\n");
fclose($fp);
header ('location: form.php'); //sustituye form.php por el archivo donde esten los comentarios
}
}
}
}
}
}
?>
</body>
</html>

estilos.css
/* CSS Document */
#comentario {
border:1px #000000 solid;
width:500px;
height:auto;

}
.p {
margin-left:5px;
margin-right:5px;
}
.img {
margin-bottom:5px;
margin-left:5px;
}

img.php(captcha)
<?php
$width=100;
$height=30;
$imagen=imagecreate($width,$height);
$bgcolor=imagecolorallocate($imagen,0,0,255);
imagefill($imagen,0,0,$bgcolor);
$letra=imagecolorallocate($imagen,255,0,0);
$rand=rand(000000,999999);
imagestring($imagen,5,25,5,$rand,$letra);
$rayas=imagecolorallocate($imagen,255,255,0);
for($c=0;$c<=5;$c++)
{
$x1=rand(0,$width);
$y1=rand(0,$height);
$x2=rand(0,$width);
$y2=rand(0,$height);
imageline($imagen,$x1,$y1,$x2,$y2,$rayas);
}
session_start();
$_SESSION['numero']=$rand;
header("content-type: image/png");
imagepng ($imagen);
imagedestroy($imagen);
?>
y finalmente comentarios.txt y mails.txt(donde se guardan las direcciones)
espero que os guste y esto halla servido para algo
ya lo creo si me gusta, y me valdra seguro para mucu, ya tengo donde ponerlo en dos paginas q estoy haciendo, con un amigo. Muchas Gracias Kaotik. eres verdaderamente bueno.

ahora te voy a hacer una pregun q yo no queria hacerte por si te estabamos molestando mucho, pero mi colega insistio, parece q en verdad te gusta y disfrutas con esto y q te lo tomas como un reto a superar.

Pues aqui va mi nuevo reto :lol:. como ya te he dicho, el q has hecho lo voy a utilizar en una de mis web tal como esta y en la otra web. me gustaria ponerlo tambien, pero no quisiera q cualquiera q entrara en la web escribiera ahí, ya q es una hermandad del Warcraft y me gustaria q solo pudieran escribir los miembros de la hermandad.

podria hacer yo una lista en un txt de los nombres q quiero q puedan escribir, y q la pagina compaarara el cuadro de texto donde se pone nombre con la lista q he creado, y si coincide, pues lo deje escribir, y si no q le salga un mensaje pa que me mande un mail pidiendo permiso, y yo lo agrego ala lista. o algo así.

no se si me he explicado bien, y quizas sea demasiado pedir, si no se puede o es mu complicado no te preocupes, q el q has hecho tambien me vale, ya que puedo borrar el mensaje q dejen q yo no quiera q este.
pues eso lo podria hacer con un sistema de registro de usuario y permitir accesos,el sistema de registro stoy a medio crearlo, lo del aceso es facil hacerlo
es la web donde he puest el primer codigo. en la vista previa del html-kit si sale el formulario
si, esque al poner los quotes, puse sin darme cuenta un '[' delante de while , quitalo y ya stara to bien
joer el server 000webhost no me deja subir de esta manera? o q pasa, hice una prueba y al subir me salio la pagina el server, y ahora no puedo abrir la pagina me dice q esta bajo revision.

por cierto donde pone introduzca el codigo? no sale nada sale el aspa roja.
tal vez por eso no me ddeja subir?.
otra cosa en comentario.php la primera linea que tenia era esta

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
la cambie por la q tienes tu eso afectara en algo?
tu pusiste esto
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
bueno para eso que pides hay dos opciones, la primera es un sistema que restringa el acceso a una pagina, tu administrarias la lista de miembros, no se puede hacer con .txt solo con MySQL pero es bastante sensillo, veamos:

Primero creamos la tabla MySQL despues vamos a crear las tablas que contendran los valores:

# Estructura SQL de la tabla Usuarios 
#
# Estructura de tabla para tabla `usuarios`
#

CREATE TABLE usuarios (
  ID smallint(6) unsigned NOT NULL auto_increment,
  usuario tinytext NOT NULL,
  pass tinytext NOT NULL,
  nivel_acceso smallint(4) unsigned NOT NULL default '0',
  PRIMARY KEY  (ID),
  UNIQUE KEY ID (ID)
) TYPE=MyISAM PACK_KEYS=1;

#
# Volcar la base de datos para la tabla `usuarios`
#

INSERT INTO usuarios VALUES (1, 'Admin', '21232f297a57a5a743894a0e4a801fc3', 0);

Bueno esto creara la tabla usuarios y un usuario por defecto o administrador en este caso

Admin es el nombre de usuario
Admin es la contraseña (no se lee pues esta encripatada)

Luego de eso necesitamos un archivo que nos conecte a la base de datos este se llamara

aut_config.inc.php

<?
// Configuración

// Nombre de la session (puedes dejar este mismo)
$usuarios_sesion="autentificator";

// Datos conexión a la Base de datos (MySql)
$sql_host="tu host";  // Host, nombre del servidor o IP del servidor Mysql.
$sql_usuario="Usuario";        // Usuario de Mysql
$sql_pass="Usuario";           // contraseña de Mysql

$sql_db="Usuario";     // Base de datos que se usará.
$sql_tabla="usuarios"; // Nombre de la tabla que contendrá los datos de los usuarios (esta es la que ya creamos)
?>


Ahora debemos hacer un archivo que verifique al usuario y los datos que ingresa para saber que existe en la Base de Datos

aut_verifica.inc.php

<?
//  Autentificator
// Cargar datos conexion y otras variables.
require ("aut_config.inc.php");


// chequear página que lo llama para devolver errores a dicha página.

$url = explode("?",$_SERVER['HTTP_REFERER']);
$pag_referida=$url[0];
$redir=$pag_referida;
// chequear si se llama directo al script.
if ($_SERVER['HTTP_REFERER'] == ""){
die ("Error cod.:1 - Acceso incorrecto!");
exit;
}


// Chequeamos si se está autentificandose un usuario por medio del formulario
if (isset($_POST['user']) && isset($_POST['pass'])) {

// Conexión base de datos.
// si no se puede conectar a la BD salimos del scrip con error 0 y
// redireccionamos a la pagina de error.
$db_conexion= mysql_connect("$sql_host", "$sql_usuario", "$sql_pass") or die(header ("Location:  $redir?error_login=0"));
mysql_select_db("$sql_db");

// realizamos la consulta a la BD para chequear datos del Usuario.
$usuario_consulta = mysql_query("SELECT ID,usuario,pass,nivel_acceso FROM $sql_tabla WHERE usuario='".$_POST['user']."'") or die(header ("Location:  $redir?error_login=1"));

 // miramos el total de resultado de la consulta (si es distinto de 0 es que existe el usuario)
 if (mysql_num_rows($usuario_consulta) != 0) {

    // eliminamos barras invertidas y dobles en sencillas
    $login = stripslashes($_POST['user']);
    // encriptamos el password en formato md5 irreversible.
    $password = md5($_POST['pass']);

    // almacenamos datos del Usuario en un array para empezar a chequear.
 	$usuario_datos = mysql_fetch_array($usuario_consulta);
  
    // liberamos la memoria usada por la consulta, ya que tenemos estos datos en el Array.
    mysql_free_result($usuario_consulta);
    // cerramos la Base de dtos.
    mysql_close($db_conexion);
    
    // chequeamos el nombre del usuario otra vez contrastandolo con la BD
    // esta vez sin barras invertidas, etc ...
    // si no es correcto, salimos del script con error 4 y redireccionamos a la
    // página de error.
    if ($login != $usuario_datos['usuario']) {
       	Header ("Location: $redir?error_login=4");
		exit;}

    // si el password no es correcto ..
    // salimos del script con error 3 y redireccinamos hacia la página de error
    if ($password != $usuario_datos['pass']) {
        Header ("Location: $redir?error_login=3");
	    exit;}

    // Paranoia: destruimos las variables login y password usadas
    unset($login);
    unset ($password);

    // En este punto, el usuario ya esta validado.
    // Grabamos los datos del usuario en una sesion.
    
     // le damos un mobre a la sesion.
    session_name($usuarios_sesion);
     // incia sessiones
    session_start();

    // Paranoia: decimos al navegador que no "cachee" esta página.
    session_cache_limiter('nocache,private');
    
    // Asignamos variables de sesión con datos del Usuario para el uso en el
    // resto de páginas autentificadas.

    // definimos usuarios_id como IDentificador del usuario en nuestra BD de usuarios
    $_SESSION['usuario_id']=$usuario_datos['ID'];
    
    // definimos usuario_nivel con el Nivel de acceso del usuario de nuestra BD de usuarios
    $_SESSION['usuario_nivel']=$usuario_datos['nivel_acceso'];
    
    //definimos usuario_nivel con el Nivel de acceso del usuario de nuestra BD de usuarios
    $_SESSION['usuario_login']=$usuario_datos['usuario'];

    //definimos usuario_password con el password del usuario de la sesión actual (formato md5 encriptado)
    $_SESSION['usuario_password']=$usuario_datos['pass'];


    // Hacemos una llamada a si mismo (scritp) para que queden disponibles
    // las variables de session en el array asociado $HTTP_...
    $pag=$_SERVER['PHP_SELF'];
    Header ("Location: $pag?");
    exit;
    
   } else {
      // si no esta el nombre de usuario en la BD o el password ..
      // se devuelve a pagina q lo llamo con error
      Header ("Location: $redir?error_login=2");
      exit;}
} else {

// -------- Chequear sesión existe -------

// usamos la sesion de nombre definido.
session_name($usuarios_sesion);
// Iniciamos el uso de sesiones
session_start();

// Chequeamos si estan creadas las variables de sesión de identificación del usuario,
// El caso mas comun es el de una vez "matado" la sesion se intenta volver hacia atras
// con el navegador.

if (!isset($_SESSION['usuario_login']) && !isset($_SESSION['usuario_password'])){
// Borramos la sesion creada por el inicio de session anterior
session_destroy();
die ("Error cod.: 2 - Acceso incorrecto!");
exit;
}
}
?>

:shock: :shock: :shock:

Ya con estos dos archivos ahora hay que crear un formulario que nos permita logearnos en las paginas que usaran la funcion require() pueden cambiar el nombre de los campos este es un ejemplo

formulario.php

<form action="pagina_que_requiera_autentificacion.php" method="post">
Usuario: <input type="text" name="user">
Passwor: <input type="password" name="pass">
</form>

Tambien debemos incluir aqui mismo el codigo que nos dara los mensajes de error

<?PHP
// Mostrar error de Autentificación.
include ("aut_mensaje_error.inc.php");
if (isset($_GET['error_login'])){
$error=$_GET['error_login']; 
echo "Error: $error_login_ms[$error]";
} 
?>

con esto ya has elaborado la estructura para los usuarios, pero falta algo, la del administrador, osea tu

para que puedas agregar a mas usuarios vamos a crear un archivo que se llame este sera solo el formulario para entrar a la zona de administracion

gestion_usuarios.php

<table width="250" border="1" cellspacing="0" cellpadding="0" align="center">
  <tr>
    <td>
      <table width=100% border=0 align="center" cellpadding="0" cellspacing="0" bordercolor="#009999">
        <form action="aut_gestion_usuarios.php" method="post">
          <tr bgcolor="#0099FF"> 
            <td height="45" colspan="2" bgcolor="#FFFFFF"> 
              <div align="center"><font face="Arial" color="#FFFFFF" size=2>[b]<font color="#000000">Identificaci&oacute;n
                Usuarios</font>

              [/b]</font></div>
            </td>
          </tr>
          <tr> 
            <td colspan="2"> 
              <div align="center"> 
                <table width="100%" border="0" cellspacing="0" cellpadding="5">
                  <tr valign="middle"> 
                    <td colspan="2" height="30"> 
                      <div align="center">

                         <?
                          // Mostrar error de Autentificación.
                          include ("aut_mensaje_error.inc.php");
                          if (isset($_GET['error_login'])){
                             $error=$_GET['error_login'];
                             echo "<font face='Verdana, Arial, Helvetica, sans-serif' size='1' color='#FF0000'>Error: $error_login_ms[$error]";
                          }
                         ?>
                         
                    </div>
                    </td>
                  </tr>
                  <tr> 
                    <td width="39%"> 
                      <div align="right"><font face="Verdana, Arial, Helvetica, sans-serif" size="2">Usuario 
                        : </font></div>
                    </td>
                    <td width="61%"> 
                      <div align="left"> 
                        <input type="text" name="user" size="15" class="imputbox">
                      </div>
                    </td>
                  </tr>
                  <tr> 
                    <td width="39%"> 
                      <div align="right"><font face="Verdana, Arial, Helvetica, sans-serif" size="2">Password 
                        : </font></div>
                    </td>
                    <td width="61%"> 
                      <div align="left"> 
                        <input type="password" name="pass" size="15" class="imputbox">
                      </div>
                    </td>
                  </tr>
                </table>
              </div>
            </td>
          </tr>
          <tr valign="middle"> 
            <td colspan="2" height="50"> 
              <div align="center"><font face="Arial" color=black size=2> 
                <input name=submit type=submit value="  Entrar  " class="botones">
                </font></div>
            </td>
          </tr>
        </form>
      </table>
    </td>
  </tr>
</table>

:wink: :wink:

Ahora si, esta es la pagina que se conectara con la Base de datos, es un poco larga asi que no la explicare mucho, pueden cambiarle los colores si quieren que asi la tenia para un experimento los comentarios explican para que es cada cosa

aut_gestion_usuarios.php

<?
//  Autentificator
require("aut_verifica.inc.php"); // incluir motor de autentificación.
$nivel_acceso=0; // definir nivel de acceso para esta página.
if ($nivel_acceso < $_SESSION['usuario_nivel']){
header ("Location: $redir?error_login=5");
exit;
}

require ("aut_config.inc.php"); // incluir configuracion.
$pag=$_SERVER['PHP_SELF'];  // el nombre y ruta de esta misma página.

function cabeceraHTML(){
echo <<< HTML
<html>
<head>
<title>Gestión Usuarios - www.tusitio.tal</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<style type="text/css">
<!--
 .botones {  font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 9pt; color: #FFFFFF; background-color: #0099FF; border-color: #000000 ; border-top-width: 1pix; border-right-width: 1pix; border-bottom-width: 1pix; border-left-width: 1pix}
 .imputbox {  font-size: 10pt; color: #000099; background-color: #FFFFFF; font-family: Verdana, Arial, Helvetica, sans-serif; border: 1pix #000000 solid; border-color: #000000 solid; font-weight: normal}
 A:VISITED  { font-weight: normal; color: #0000CC; TEXT-DECORATION:none; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 10pt}
 A:LINK     { font-weight: normal; color: #0000CC; TEXT-DECORATION:none; font-family: Verdana, Arial, Helvetica, sans-serif; border-color: #33FF33 #66FF66; clip:  rect(   ); font-size: 10pt}
 A:ACTIVE   { font-weight: normal; color: #FF3333; TEXT-DECORATION:none; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 10pt}
 A:HOVER    { font-weight: normal; color: #0000CC; font-family: Verdana, Arial, Helvetica, sans-serif; font-weight: normal; text-decoration: underline; font-size: 10pt}
-->
</style>

</head>

<body bgcolor="#FFFFFF">

HTML;
}


if (isset($_GET['error'])){

$error_accion_ms[0]= "No se puede borrar el Usuario, debe existir por lo menos uno.
Si desea borrarlo, primero cree uno nuevo.";
$error_accion_ms[1]= "Faltan Datos.";
$error_accion_ms[2]= "Passwords no coinciden.";
$error_accion_ms[3]= "El Nivel de Acceso ha de ser numérico.";
$error_accion_ms[4]= "El Usuario ya está registrado.";

$error_cod = $_GET['error'];
echo "<div align='center'>$error_accion_ms[$error_cod]</div>
";

}

$db_conexion= mysql_connect("$sql_host", "$sql_usuario", "$sql_pass") or die("No se pudo conectar a la Base de datos") or die(mysql_error());
mysql_select_db("$sql_db") or die(mysql_error());

if (!isset($_GET['accion'])){

$usuario_consulta = mysql_query("SELECT ID,usuario,nivel_acceso FROM $sql_tabla") or die("No se pudo realizar la consulta a la Base de datos");

cabeceraHTML();

echo <<< HTML
<table width="500" border="1" cellspacing="0" cellpadding="4" bordercolor="#CCCCCC" align="center">
  <tr>
    <td colspan="4" bgcolor="#0099FF">
      <div align="center"><font face="Verdana, Arial, Helvetica, sans-serif" size="2">[b]<font color="#FFFFFF">.:
        Gesti&oacute;n Usuarios :.</font>[/b]</font>

        [url="aut_logout.php"]LogOut (salir)[/url]
        </div>
    </td>
  </tr>
  <tr bgcolor="#00CCCC">
    <td width="14%">
      <div align="center">[b]<font face="Verdana, Arial, Helvetica, sans-serif" size="2" color="#FFFFFF">ID
        </font>[/b]</div>
    </td>
    <td width="30%">
      <div align="center">[b]<font face="Verdana, Arial, Helvetica, sans-serif" size="2" color="#FFFFFF">Usuario
        </font>[/b]</div>
    </td>
    <td width="24%">
      <div align="center">[b]<font face="Verdana, Arial, Helvetica, sans-serif" size="2" color="#FFFFFF">Nivel
        </font>[/b]</div>
    </td>
    <td width="32%" bgcolor="#CCFFCC">
    <div align="center"><font color="#FFFFFF">[url="$pag?accion=nuevo"]Registrar usuario[/url]</font></div></td>
  </tr>

HTML;

while($resultados = mysql_fetch_array($usuario_consulta)) {

echo <<< HTML
<tr>
    <td width="14%" bgcolor="#FFFFEA"><div align="center"><font face="Verdana, Arial, Helvetica, sans-serif" size="2" color="#000000">$resultados[ID]</font></div></td>
    <td width="30%" bgcolor="#FFFFEA"><div align="center"><font face="Verdana, Arial, Helvetica, sans-serif" size="2" color="#000000">$resultados[usuario]</font></div></td>
    <td width="24%" bgcolor="#FFFFEA"><div align="center"><font face="Verdana, Arial, Helvetica, sans-serif" size="2" color="#000000">$resultados[nivel_acceso]</font></div></td>
    <td width="32%" bgcolor="#CCFFCC"> 
      <div align="center">[url="$pag?accion=borrar&id=$resultados[ID]"]<font face="Verdana, Arial, Helvetica, sans-serif" size="2">Borrar</font>[/url]<font face="Verdana, Arial, Helvetica, sans-serif" size="2">
        | [url="$pag?accion=nivel&id=$resultados[ID]"]Nivel acceso[/url]</font></div>
    </td>
  </tr>
HTML;
}
echo "</table>";
mysql_free_result($usuario_consulta);
mysql_close();
}

if (isset($_GET['id'])){

if ($_GET['accion']=="borrar"){
$usuarios_consulta = mysql_query("SELECT ID FROM $sql_tabla") or die(mysql_error());
$total_registros = mysql_num_rows ($usuarios_consulta);
mysql_free_result($usuarios_consulta);

if ($total_registros == 1){
header ("Location: $pag?error=0");
exit;
}

$id_borrar= $_GET['id'];
mysql_query("DELETE FROM $sql_tabla WHERE id=$id_borrar") or die(mysql_error());
mysql_close();

header ("Location: $pag");
exit;

}

if ($_GET['accion']=="nivel"){

cabeceraHTML();

$id_mod_nivel= $_GET['id'];
$usuario_consulta = mysql_query("SELECT ID,usuario,nivel_acceso FROM $sql_tabla WHERE id=$id_mod_nivel") or die("No se pudo realizar la consulta a la Base de datos");

while($resultados = mysql_fetch_array($usuario_consulta)) {

echo <<< HTML
<form method="post" action="$pag?accion=editarnivel">
<input type="hidden" name="id" value="$resultados[ID]">
<table width="399" border="1" cellspacing="0" cellpadding="4" align="center">
    <tr>
      <td colspan="2" height="30" bgcolor="#0099FF">
        <div align="center">[b]<font face="Verdana, Arial, Helvetica, sans-serif" size="2" color="#FFFFFF">.:
          Modificar Nivel Acceso Usuario :.</font>[/b]</div>
      </td>
    </tr>
    <tr bgcolor="#FFFFCC">
      <td width="185">
        <div align="right"><font face="Verdana, Arial, Helvetica, sans-serif" size="2">Usuario
          : </font></div>
      </td>
      <td width="192">[b]<font face="Verdana, Arial, Helvetica, sans-serif" size="2" color="#0000CC">$resultados[usuario]</font>
        </font>[/b]</td>
    </tr>
    <tr bgcolor="#FFFFCC">
      <td width="185"><div align="right"><font face="Verdana, Arial, Helvetica, sans-serif" size="2">Nivel
        Acceso actual : </font></div></td>
      <td width="192">[b]<font face="Verdana, Arial, Helvetica, sans-serif" size="2" color="#0000CC">$resultados[nivel_acceso]</font>
        </font>[/b]</td>
    </tr>
    <tr bgcolor="#FFFFCC">
      <td width="185">
        <div align="right"><font face="Verdana, Arial, Helvetica, sans-serif" size="2">Nuevo
          Nivel de Acceso : </font></div>
      </td>
      <td width="192">[b]<font face="Verdana, Arial, Helvetica, sans-serif" size="2">
        <input type="text" name="nuevonivelacceso" class="imputbox" size="4" maxlength="4">
        </font>[/b]</td>
    </tr>
    <tr bgcolor="#FFFFCC">
      <td colspan="2" height="40">
        <div align="center">
          <input type="submit" name="Submit" value="  Actualizar  " class="botones" >
        </div>
      </td>
    </tr>
  </table>
</form>
HTML;
}
mysql_free_result($usuario_consulta);
mysql_close();
}

}

if ($_GET['accion']=="editarnivel"){

$id=$_POST['id'];
$nivelnuevo=$_POST['nuevonivelacceso'];

if ($nivelnuevo==""){
header ("Location: $pag?accion=nivel&id=$id&error=1");
exit;
}

mysql_query("UPDATE $sql_tabla SET nivel_acceso='$nivelnuevo' WHERE ID=$id") or die(mysql_error());
mysql_close ();
header ("Location: $pag");
exit;
}



if ($_GET['accion']=="nuevo"){

cabeceraHTML();

echo <<< HTML
<form method="post" action="$PHP_SELF?accion=hacernuevo">

  <table width="350" border="1" cellspacing="0" cellpadding="4" align="center">
    <tr>
      <td colspan="2" height="30" bgcolor="#0099FF">
        <div align="center">[b]<font face="Verdana, Arial, Helvetica, sans-serif" size="2" color="#FFFFFF">.:
          Registro de Usuarios :.</font>[/b]</div>
      </td>
    </tr>
    <tr bgcolor="#FFFFCC">
      <td width="158">
        <div align="right"><font face="Verdana, Arial, Helvetica, sans-serif" size="2">Usuario
          : </font></div>
      </td>
      <td width="170">[b]<font face="Verdana, Arial, Helvetica, sans-serif" size="2">
        <input type="text" name="usuarionombre" class="imputbox" maxlength="15">
        </font>[/b]</td>
    </tr>
    <tr bgcolor="#FFFFCC">
      <td width="158">
        <div align="right"><font face="Verdana, Arial, Helvetica, sans-serif" size="2">Password
          : </font></div>
      </td>
      <td width="170">[b]<font face="Verdana, Arial, Helvetica, sans-serif" size="2">
        <input type="password" name="password1" class="imputbox" maxlength="15">
        </font>[/b]</td>
    </tr>
    <tr bgcolor="#FFFFCC">
      <td width="158">
        <div align="right"><font face="Verdana, Arial, Helvetica, sans-serif" size="2">Password
          (repitalo) : </font></div>
      </td>
      <td width="170">[b]<font face="Verdana, Arial, Helvetica, sans-serif" size="2">
        <input type="password" name="password2" class="imputbox" maxlength="15">
        </font>[/b]</td>
    </tr>
    <tr bgcolor="#FFFFCC">
      <td width="158">
        <div align="right"><font face="Verdana, Arial, Helvetica, sans-serif" size="2">Nivel
          de Acceso : </font></div>
      </td>
      <td width="170">[b]<font face="Verdana, Arial, Helvetica, sans-serif" size="2">
        <input type="text" name="nivelacceso" class="imputbox" size="4" maxlength="4">
        </font>[/b]</td>
    </tr>
    <tr bgcolor="#FFFFCC">
      <td colspan="2" height="40">
        <div align="center">
          <input type="submit" name="Submit" value="  Registrar  " class="botones" >
        </div>
      </td>
    </tr>
  </table>
</form>
HTML;
}

if ($_GET['accion']=="hacernuevo"){

$usuario=$_POST['usuarionombre'];
$pass1=$_POST['password1'];
$pass2=$_POST['password2'];
$nivel=$_POST['nivelacceso'];


if ($pass1=="" or $pass2=="" or $usuario=="" or $nivel=="") {
header ("Location: $pag?accion=nuevo&error=1");
exit;
}

if ($pass1 != $pass2){
header ("Location: $pag?accion=nuevo&error=2");
exit;
}

if (!eregi("[0-9]",$nivel)){
header ("Location: $pag?accion=nuevo&error=3");
exit;
}

$usuarios_consulta = mysql_query("SELECT ID FROM $sql_tabla WHERE usuario='$usuario'") or die(mysql_error());
$total_encontrados = mysql_num_rows ($usuarios_consulta);
mysql_free_result($usuarios_consulta);

if ($total_encontrados != 0) {
header ("Location: $pag?accion=nuevo&error=4");
exit;
}

$usuario=stripslashes($usuario);
$pass1 = md5($pass1);
mysql_query("INSERT INTO $sql_tabla values('','$usuario','$pass1','$nivel')") or die(mysql_error());
mysql_close();

header ("Location: $pag");
exit;


}

?>
</BODY>
</HTML>

Bueno, ya con esto tenemos el sistema casi terminado, solo nos faltan algunos detalles como los mensajes de error y por supuesto, como demonios se usan este monton de archivos

este mostrara los mensajes de error y es importante asi que porque lo ponga de ultimo no dejeis de crearlo, pueden esditar los mensajes :wink:

aut_mensaje_error.inc.php

<?
// Mensajes de error.

$error_login_ms[0]="No se pudo conectar con Base de datos Usuarios";
$error_login_ms[1]="No se pudo realizar consulta a la Base de datos Usuarios";
$error_login_ms[2]="Password ó Usuario no existe";
$error_login_ms[3]="Password no valida";
$error_login_ms[4]="Usuario no existe";
$error_login_ms[5]="No está autorizado para realizar esta acción o entrar en esta página";
$error_login_ms[6]="Acceso no autorizado! Registrese";
?>

este permitira a los usuarios el logout

aut_logout.php

<?
// Cargamos variables
require ("aut_config.inc.php");
// le damos un mobre a la sesion (por si quisieramos identificarla)
session_name($usuarios_sesion);
// iniciamos sesiones
session_start();
// destruimos la session de usuarios.
session_destroy();
?>
<html>
<head>
<title>Salir</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
</head>
Adios, usted ha salido correctamente
</body>
</html>

:shock: :shock: :shock:

y finalmente, para restringir una pagina, la ponen con todos estos archivos en el mismo lugar y le agregan estas lineas hasta arriba, esto hara require y tambien definira el nivel del usuario

<?
require("aut_verifica.inc.php");
$nivel_acceso=10; // Nivel de acceso para esta página.
// se chequea si el usuario tiene un nivel inferior
// al del nivel de acceso definido para esta página.
// Si no es correcto, se mada a la página que lo llamo con
// la variable de $error_login definida con el nº de error segun el array de
// aut_mensaje_error.inc.php
if ($nivel_acceso <= $_SESSION['usuario_nivel']){
header ("Location: $redir?error_login=5");
exit;
}
?>

es decir:

>> Cada página que requiera autentificación tiene que incluir el archivo aut_verifica.inc.php al principio del mismo:

require ("aut_verifica.inc.php");


A continuación defina las reglas de validación para el nivel de acceso de la página que requiera autentificación.

$nivel_acceso=10;
if ($nivel_acceso < $_SESSION['usuario_nivel']){
header ("Location: $redir?error_login=5");
exit;
}

0 es root o administrador.... :roll: :roll:

bueno espero que os sirva de algo, ya en otra explicare como hacer un sistema que permita al usuario registrarse dentro de la pagina (como en la mia)

http://www.mzstudios.net46.net/members/members/index.php

saludos :wink:
Mis felicitaciones a kaotick y Mzstudios, son dos héroes del código :lol: Una pregunta que se me ocurre acerca del captcha es si los modelos que en vez de números y letras usan preguntas simples (del tipo de ¿Cuánto suman dos más dos?, ¿De qué color es el oro? etc.) pueden hacerse de "fabricación casera" o por el contrario son herramientas que uno debe descargarse. Pregunto esto porque leí hace poco que ya hay programas automáticos capaces de saltarse las captchas de números y letras, no sé hasta qué punto es verdad o paranoia.

Un saludo. :wink:
Esta muy bien, pero lo de administrador,tambien se puede hacer dese phpmyadmin,estaria bien cuando vallan ha aver mas de dos admin y la contraseña esta encrptada?
pues eso es de fabricacion casera, eso es muy facil,y lo de que se puedan saltar es posible, pero solo 1 de un millon de intentos acertarian,ademas, intentan identificar los numeros,pero con las lineas intermedias y que los numeros pueden ser de distintas fuentes, dificultan mucho la entrada,se puede estar tranquilo, ademas solo entran en paginas con muchos visitantes
si kaotic, es encriptada y claro que se puede hacer desde phpmyadmin, relmente el gestor de usuarios es solo un formulario que conecta con MySQL y Insomne, si existen esos programas, un clao ejemplo es el bux.to autoclicker que se salta el CAPTCHA de bux.to

P.D: Si les interesa ese programa, lo tengo en mi web de hacking:

http://revolutionteam.ning.com

saludos :lol: :lol:
pero lo pueden saltar en imagenes que no tienen nada de por medio,como el registro de este foro,si la capa superior tapa el codigo o los numeors estan incompletos es dificil
uis ya me perdi, todos esos archivos son un html cada uno?. esto es demasiado para mi todavia no puedo ni subir los comentarios con sus fotos.

esta es la pagina

http://www.lobosdesangre.net63.net/lobos-de-sangre.html

intentad subir pinchando en miembros de la hermandad. ahi esta el formulario, vereis el error q sale. bueno lo primero q el formulario no lo puedes completar por q no sale la imagen del codigo q hay q introducir.
ok, ya me baje ls archivos de tu web y hwche un vistazo al tuto, parece q siguiendo paso apaso despacito podre conseguirlo pero antes de seguir me gustaria conseguir q funcione lo q llevo a hasta ahora, por lo pronto solo consigo q se vea el formulario.

haced la prueba donde pone miembros d la hermandad de esta pagina.

http://www.lobosdesangre.net63.net/lobos-de-sangre.html
Pues revise la seccion que me dijiste que revisara pero me manda a un libro de visitas :S de cualquier modo, la parte mas importante de todo el formulario es el archivo de configuracion ahi tienes que meter los datos de tu Base MySQL

y la otra parte muy importante es que crees la tabla, como , pues bien, una vez creada tu base de datos desde MySQL te vas a PHP my Admin, entras en la base de datos que creaste y le das, ejecutar una consulta, ahi escribes lo que va en el archivo SQL y le das "Go"

creo que esa es la parte que te estas saltando ;)
MzStudios escribió:son .php, si a alguien lo enredo mucho el tuto de la seccion de registrados, subi todos los archivos ya a mi web en la seccion php

http://www.mzstudios.net46.net/scipts/PHP/index.html

por si quieren descargarlos para probar, saludos ;)
Hola:
Me agrada mucho que usted se haya interesado en compartir lo que sabe acerca de como hacer un libro de visitas, y con esto no es mi deseo ofenderlo, pero mas de alguna vez he dicho acá en los foros que sería conveniente explicar las cosas como si los demás no supiesen nada, lo digo porque es la base del curso paso a paso, a veces tendemos a explicar como hacer esto o como hacer lo otro suponiendo que los demas saben lo que nosotros sabemos, con este mensaje no me dirijo a usted en particular si no que me dirijo a todos los que ya han avanzado y tienen mas conocimiento de las cosas (de como poner esto o esto otro), si usted (o vosotros) os fijáis, os daréis cuenta de que de una u otra manera somos todos principiantes, y que las respuestas que recibimos de los que saben mas que nosotros nos agradaría que siguieran lo que es la base del curso paso a paso, que las explicaciones sean sencillas, cosa de que las entienda hasta el mas tonto (o sea yo) porque le diré que por mas que leo lo que alguno de vosotros ponéis, no me entero ni de la mitad, por ejemplo:yo no se nada y quiero poner un libro de visitas en mi página. Algo sencillo
¿De qué manera me explicaría alguien con la mayor sencillez posible y lo mas importante , paso a paso, el como hacer un libro de visitas?
¿Cómo tengo que enlazar esos archivos? ¿o no tengo que enlazarlos a nada? ¿necesito tener yo un programa php por obligación? ¿o no?. ¿En que parte pongo tal código, entre el <head> y el <head> o entre el <body> y </body>. Seguro que para el que sabe, esto le parecerá de risa, pero quiero recordar que ese alguien alguna vez no sabía. Creo que lo mas loable por parte de los que saben es explicar sencillamente las cosas y no dar por hecho que los demás saben, y reitero, es un curso paso a paso, donde las cosas se explican,como cuando uno le explica algo a un amigo no a otro técnico.
Usted a puesto una serie de códigos y eso está muy bien, pero lo está para los que entienden, yo he visto acá que algunos usuarios del foro tienen una páginas muy bonitas, con muchas cosas, pero también he visto que cuando se les estropea algo, por muy pequeño que sea, prácticamente tienen que desmontar toda la página, y eso es solo por el desconocimiento de las bases.
Volviendo a lo de antes, este es un foro que tiene un dueño, y considero una falta de respeto que muchos dirijan sus respuestas a sus propias páginas, y no lo digo por usted solamente, lo digo por muchos que hacen eso, y para mi personalmente eso es un robo, porque si el ánimo es de ayudar a otros, la información se debe compartir en el foro, para que todos se beneficien de ella, y lógicamente siguiendo el espíritu del foro que es explicar con palabras sencillas desde el principio el como hacer tal cosa.
Le reitero que no es , ni ha sido mi intención ofenderle a usted, sencillamente soy un usuario mas que ha visto en una parte de este foro, un montón de explicaciones, de datos, de códigos, pero que no ha visto una explicación acá en este foro del como hacerlo, (o quizás se deba a que yo soy un poco mas lerdo (atrasado) que otros.
A todo esto está muy bien su tutorial, pero ¿qué tal si explica que es lo que hay que hacer con el, y dónde ponerlo , y como ponerlo?.
Saludos
Agradecido de los que aprenden enseñando
uhm, mira lo que pasa es que integrar un sistema de usuarios es algo mas avanzado porque es PHP+MySQL yo en el tutorial, explique lo basico, sin que tengas que saber nada de programacion, precisamente por lo de la ubicacion de los codigos y eso, fue que subi los archivos en mi web para que lo puedan descargar y seguir el tutorial que postee aqui es decir, solo de configurar y a darle upload al servidor.

Ahora, si lo redirigo a mi pagina es porque ahi aloje los archivos no por otra cosa :lol:

justo acabo de crear un tutorial mas sensillo aqui dentro del foro:

http://www.comocreartuweb.com/phpBB2/sutra61698.html#61698

pero en la seccion correcta porque esto es un sistema de usuarios, y el tema es libro de visitas, ambas cosas estan a años luz de distancia

:wink:

Disculpa si te molesto que publicara el tuto de esa manera... :roll:
lo que pasa es que te redirecione con un header,para que cargara los archivos y volviera a la pagina conde esta el libro de visitas,el problema puede ser que tengas que dar archivos de escritura al txt en el panel de administracion o si usas filezilla desde hay,tienes que poner atributos al 777