Foros del Web » Programando para Internet » PHP »

Problemas con script (Autentificator)

Estas en el tema de Problemas con script (Autentificator) en el foro de PHP en Foros del Web. cluster hola al final use tu codigo y sigo con problemas: mi php tiene todo activado podes verlo aqui yo meto mediante el siguiente form ...
  #1 (permalink)  
Antiguo 29/01/2003, 19:57
Avatar de lochorui  
Fecha de Ingreso: febrero-2002
Ubicación: Madrid
Mensajes: 899
Antigüedad: 22 años, 2 meses
Puntos: 2
Problemas con script (Autentificator)

cluster hola al final use tu codigo y sigo con problemas:

mi php tiene todo activado podes verlo aqui
yo meto mediante el siguiente form los datos en la base que compruebo y estan bien , meto manual el nivel d acceso y se lo pongo a 10 .

Cita:
Código PHP:
<?php
      
$valido 
true;
if ((
$nombre_grupo == "") || ($nombre_grupo == "?????"))
{
    echo 
"Por favor indica el nombre del grupo.<br>";
    
$valido false;
}


if ((
$usuario == ""))
{
    echo 
"Especifique un nombre de usuario por favor.<br>";
    
$valido false;
}
Else
{
    
$dbh mysql_connect("localhost""musikaid_lord""pringaos");
    
mysql_select_db ("musikaid_altas"$dbh);
    
$sql "SELECT * FROM grupos WHERE usuario='".$usuario."'";
    
$result mysql_query($sql);
    if (
$row mysql_fetch_array($result))
        {
            echo 
"El nombre de usuario que ha seleccionado ya existe , seleccione otro por favor..<br>";
            
$valido false;
        }
    
}

if ((
$pass == "") || ($pass2 == "") || ($pass <> $pass2))
{
echo 
"Ha introducido incorrectamente las contraseñas .<br>";
$valido false;
}




if (!(
ereg("^.+@.+\\..+$"$email)) || ($email <> $email2)){
echo 
"El e-mail ingresado no es valido, por favor reviselo.<br>";
$valido false;
}
Else
{
    
$dbh mysql_connect("localhost""musikaid_user""pass");
    
mysql_select_db ("musikaid_altas"$dbh);
    
$sql "SELECT * FROM grupos WHERE email='".$email."'";
    
$result mysql_query($sql);
    if (
$row mysql_fetch_array($result))
        {
            echo 
"El e-mail que ha intruducido ya está en nuestra base de datos .<br>";
    
$valido false;
        }


}


if (
$valido == true){
$dbh mysql_connect("localhost""musikaid_user""pass");
     
mysql_select_db ("musikaid_altas"$dbh);
     
$sql "INSERT INTO grupos (nombre_grupo, usuario, pass, email,nivel_acceso)";
     
$sql .= "VALUES ('$nombre_grupo', '$usuario', '$pass', '$email', 'nivel_acceso')";
     
$result mysql_query($sql);
echo 
mysql_error();
     echo 
"<h4><font face='Georgia, Times New Roman, Times, serif'>$nombre ¡Gracias! Los siguientes datos han sido recibidos.En unos instantes recibira un e-mail con los datos paar continuar con el alta de su grupo.\n<br><br>";
     echo 
"Nombre del grupo:$nombre_grupo<br>";
     echo 
"Nombre de usuario:$user<br>";
     echo 
"Contraseña:$pass<br>";
echo 
"E-mail:$email<br>";



mail($sdestinatario,$ssubject,$shtml,$sheader);




     }
Else
{
echo 
"<br><br><center><input type='button' style='cursor:hand' value='Volver' name='volver' onclick='javascript=history.back()'></center>";
}

     
?>

para inentar autentificar hago el siguiente form:

Cita:
Código PHP:
 <BODY>
<form action="pruebaaut.php" method="post">
Usuario: <input type="text" name="usuario">
Passwor: <input type="password" name="pass">
<INPUT TYPE="submit">
<?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]";

?>
</form>
</BODY>
y la pagan restringida es la siguiente:

Código PHP:
<BODY>
<form action="pruebaaut.php" method="post">
Usuario: <input type="text" name="usuario">
Passwor: <input type="password" name="pass">
<INPUT TYPE="submit">
<?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]";

?>
</form>
</BODY>

luego el aut_verifica es el siguiente lo unico q hice es cambiar user por usuario y a es el nombre q tengo en mi bd:

Autverifica:
Código PHP:
[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['usuario']) && 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_conexionmysql_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['usuario']."'") 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['usuario']);
    
// 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;
}
}
?> 
asi q todo se supone esta bien y me dice Error: Password no valida


asi q no se cual es el problema...


Un saludo y gracias

Última edición por Cluster; 29/01/2003 a las 20:10
  #2 (permalink)  
Antiguo 29/01/2003, 20:05
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
Tienes q incluir el:

requiere ("aut_verifica.inc.php");

y la regla de validación se deseas usarla .. (ese IF .. de la documentación).

En la página que deseas q tenga autentificación .. En tu caso en ese primer código q has puesto ..

El usuario que tienes en tu BD y el Password cual es? Estas creando el Usuario Manualmente sobre tu BD o usando el aut_gestion_usuarios.php ? ...

Si lo haces manualmente el Password tienes q guardarlo en formato MD5 (lo aviso en la ducumentación para variar ..).


Un saludo,

pd: .. como veras cambié el título de tu mensaje .. Creo q este título es mas coherente. Si tienes mensajes personales .. hazlo usando el boton "MP" .. q envia un "Mensaje Privado" ...

Última edición por Cluster; 29/01/2003 a las 20:14
  #3 (permalink)  
Antiguo 30/01/2003, 12:06
Avatar de lochorui  
Fecha de Ingreso: febrero-2002
Ubicación: Madrid
Mensajes: 899
Antigüedad: 22 años, 2 meses
Puntos: 2
Ok cluster ya lo hice y me funciona por fin aunq no he encontrado en la docmenatcion del script en ningun lado lo de que habia que meter los datos con md5, peor bueno ya lo soluciones.


ahora el siguiente problema es q si yo en vezx de querer pedir autentificacion a toda una pagina lo que quiero es pedir solo a un trozo como lo tendria q poner eln el codigo justo anteriror a dicho trozo me sale el error:

Warning: Cannot add header information - headers already sent by (output started at /home/musikaid/public_html/noticia.php:21) in /home/musikaid/public_html/noticia.php on line 80
debido a que hay codigo anteriormente a la autentificación.


Gracias y un saludo


PD: Un 10 al autentificator
  #4 (permalink)  
Antiguo 30/01/2003, 15:37
Ex Colaborador
 
Fecha de Ingreso: junio-2002
Mensajes: 9.091
Antigüedad: 21 años, 10 meses
Puntos: 16
Hola,

Si no me equivoco, el require() lo tienes que hacer al comienzo de la pagina, antes de sacar nada al navegador. Eso es asi porque usa header() y sesiones propagadas por cookies. Asi que seria hacer el require al camienzo y hacer el if justo antes del contenido a proteger. Pero creo que aun asi el usuario para tener acceso a esa pagina debe tener usuario y clave, aunque no tiene porque tener el nivel adecuado para ver el contenido. Para solucionar esto habria que implementar un sistema de "invitados".

Saludos.
__________________
Josemi

Aprendiz de mucho, maestro de poco.
  #5 (permalink)  
Antiguo 30/01/2003, 16:23
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
Lo de que si creas tus usuarios "a mano" tienes q usar la funcon MD5() a la hora de guardar el password en tu BD lo menciono en la documentación:

Cita:
- Instalación manual:
Instale la estructura de datos de la tabla Usuarios aut_usuarios.sql en su servidor Mysql (le recomiendo que edite dicho archivo ya que contiene algunos comentarios de intereres acerca de la instalación). Este archivo contiene un usuario creado de nombre y password mas abajo indicados.
Si lo desea cree su primer usuario Ud. mismo, tan solo tiene que asegurarse de crear el password del usuario usando la función MD5 de encriptación sobre su Mysql.
Lo que quiero q entiendas que esa aplicación NO es un manual de PHP ni de Mysql .. y la documentación q hay es solo de USO y .. El código principal está bastante comentado con fines educativos .. pero tampoco es un "tutorial" paso a paso ..

No se puee reescribir el manual de PHP e incluirlo en cada script q encuentres por ahí ...

Lo de las cabeceras .. Idem .. TIENEs q poner el "requiere" lo primero de tu código de tu pagina completa .. Mira los ejemplos demo q hay (sobre todo el mas grande .. el de aut_gestion_usuarios.php) ..

Un saludo,
  #6 (permalink)  
Antiguo 30/01/2003, 19:01
Avatar de lochorui  
Fecha de Ingreso: febrero-2002
Ubicación: Madrid
Mensajes: 899
Antigüedad: 22 años, 2 meses
Puntos: 2
Ok , si todo eso lo entiendo cluster , mi pregunta era si con ese script podia poner para usuarios solo un trozo de la pagina y el resto dejarlo visble para todos y parace ser que no

Ahora mi pregunta es la siguiente , hay alguna forma de poder conseguir esto con sessiones ? o tengo q hacerlo con cookies?


un saludo
  #7 (permalink)  
Antiguo 31/01/2003, 10:38
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
Mi script lo (vuellvo a insistir) menciono en la documentación que SOLO es valido para sitemas tipo "paginas solo usuarios" o "zonas de administracion" ..

Una de las primeras cosas que hace es ver si el usuario está registrado en la BD .. por lo tanto no sirve -tal cual es- para lo que pretendes ..

Como hacerlo para como mencionas? .. Usando sesiones o cookies (mejor Sessiones . mas seguras) ..

Si has aprendido algo con el código del script .. ya sabras mas o menos como manejar variables de sesión ..

Es tan simple como

if(isset($_SESSION['variable de session tal']){
//Muestras el código solo para Usuarios registrado..
} else {
// El código "publico" para todos los usuarios ...
}

Tu script de validación del usuario .. solo tiene q obtener los datos del formulario q uses (usuario/password) validarlos contrastandolos con la BD y crear easas varibles de sesion si el usuario/passwor es valido ..

Todo esto lo hace "Autentificator" pero tengo otros condicionales para forzar que el usuario sea Registrado obligatoriamente ..

Con que fin lo hice? .. Hacer un script de instalación "simple" y manejo cómodo para lo que describí y lo q está definido su funcionalidad ..

Un saludo,
  #8 (permalink)  
Antiguo 31/01/2003, 11:49
Avatar de lochorui  
Fecha de Ingreso: febrero-2002
Ubicación: Madrid
Mensajes: 899
Antigüedad: 22 años, 2 meses
Puntos: 2
Ok ya netiedno lo que me dices , tratare de hacerlo en el par de paginas que lo necesitaria.


Gracias x todo

un saludo
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta

SíEste tema le ha gustado a 1 personas




La zona horaria es GMT -6. Ahora son las 20:03.