Foros del Web » Programando para Internet » PHP »

PHP OO Sistema de Usuarios

Estas en el tema de Sistema de Usuarios en el foro de PHP en Foros del Web. Hola amigos, tengo un problema con el sistema de usuarios que ando adaptando, me salen algunos errores que no he podido arreglar y espero me ...
  #1 (permalink)  
Antiguo 10/02/2012, 20:49
 
Fecha de Ingreso: febrero-2012
Mensajes: 34
Antigüedad: 12 años, 2 meses
Puntos: 0
Sistema de Usuarios

Hola amigos, tengo un problema con el sistema de usuarios que ando adaptando, me salen algunos errores que no he podido arreglar y espero me ayuden.

a la página le estoy agregando un sistema modular sencillo:
Código PHP:
<? 
if(empty($_GET['page_id'])) { 
 include(
"pages_modules/news.php"); 
 } else { 
 if(
file_exists("pages_modules/".$_GET['page_id'].".php")) { 
 include(
"pages_modules/".basename($_GET['page_id']).".php"); 
 } else { 
 
 echo 
'<table border=0 cellpadding=0 cellspacing=0> 
 <tr> 
 <td width=85%><b>Error 404</b><br><br>No se encuentra el archivo, intentelo de nuevo o Pruebe mas tarde </b></td> 
 </tr> 
 </table>'

 } 

?>
osea que cuando se dirigen a mi registro esta es la URL: index.php?page_id=registro
Cuando me registro me sale este error:
Cita:
Warning: mysql_num_rows() expects parameter 1 to be resource, boolean given in C:\xampp\htdocs\cmss\pages_modules\registro.php on line 28
ha ocurrido un error y no se registraron los datos.
Esta es la DB:
Cita:
CREATE TABLE `usuarios` (
`usuario_id` int(4) NOT NULL AUTO_INCREMENT,
`usuario_nombre` varchar(15) NOT NULL DEFAULT '',
`usuario_clave` varchar(32) NOT NULL DEFAULT '',
`usuario_email` varchar(50) NOT NULL DEFAULT '',
`usuario_freg` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
PRIMARY KEY (`usuario_id`)
)
Este es mi archivo config.php
Código PHP:
<?php
    $host_db 
"localhost"// Host de la BD
    
$usuario_db "root"// Usuario de la BD
    
$clave_db "123456"// Contraseña de la BD
    
$nombre_db "cmss"// Nombre de la BD
    
    //conectamos y seleccionamos db
    
mysql_connect($host_db$usuario_db$clave_db);
    
mysql_select_db($nombre_db);
?>
Este es mi archivo registro.php
Código PHP:
<?php
    
include('config.php'); // incluimos el archivo de conexión a la Base de Datos
    
if(isset($_POST['enviar'])) { // comprobamos que se han enviado los datos desde el formulario
        // creamos una función que nos parmita validar el email
        
function valida_email($correo) {
        if (
preg_match('/^[A-Za-z0-9-_.+%]+@[A-Za-z0-9-.]+\.[A-Za-z]{2,4}$/'$correo)) return true;
        else return 
false;
        } 
        
// Procedemos a comprobar que los campos del formulario no estén vacíos
        
$sin_espacios count_chars($_POST['usuario_nombre'], 1);
        if(!empty(
$sin_espacios[32])) { // comprobamos que el campo usuario_nombre no tenga espacios en blanco
            
echo "El campo <em>usuario_nombre</em> no debe contener espacios en blanco. <a href='javascript:history.back();'>Reintentar</a>";
        }elseif(empty(
$_POST['usuario_nombre'])) { // comprobamos que el campo usuario_nombre no esté vacío
            
echo "No haz ingresado tu usuario. <a href='javascript:history.back();'>Reintentar</a>";
        }elseif(empty(
$_POST['usuario_clave'])) { // comprobamos que el campo usuario_clave no esté vacío
            
echo "No haz ingresado contraseña. <a href='javascript:history.back();'>Reintentar</a>";
        }elseif(
$_POST['usuario_clave'] != $_POST['usuario_clave_conf']) { // comprobamos que las contraseñas ingresadas coincidan
            
echo "Las contraseñas ingresadas no coinciden. <a href='javascript:history.back();'>Reintentar</a>";
        }elseif(!
valida_email($_POST['usuario_email'])) { // validamos que el email ingresado sea correcto
            
echo "El email ingresado no es válido. <a href='javascript:history.back();'>Reintentar</a>";
        }else {
            
// "limpiamos" los campos del formulario de posibles códigos maliciosos
            
$usuario_nombre mysql_real_escape_string($_POST['usuario_nombre']);
            
$usuario_clave mysql_real_escape_string($_POST['usuario_clave']);
            
$usuario_email mysql_real_escape_string($_POST['usuario_email']);
            
// comprobamos que el usuario ingresado no haya sido registrado antes
            
$sql mysql_query("SELECT usuario_nombre FROM usuarios WHERE usuario_nombre='".$usuario_nombre."'");
            if(
mysql_num_rows($sql) > 0) {
                echo 
"El nombre usuario elegido ya ha sido registrado anteriormente. <a href='javascript:history.back();'>Reintentar</a>";
            }else {
                
$usuario_clave md5($usuario_clave); // encriptamos la contraseña ingresada con md5
                // ingresamos los datos a la BD
                
$reg mysql_query("INSERT INTO usuarios (usuario_nombre, usuario_clave, usuario_email, usuario_freg) VALUES ('".$usuario_nombre."', '".$usuario_clave."', '".$usuario_email."', NOW())");
                if(
$reg) {
                    echo 
"Datos ingresados correctamente.";
                }else {
                    echo 
"ha ocurrido un error y no se registraron los datos.";
                }
            }
        }
    }else {
?>
    <form action="index.php?page_id=registro" method="post">
        <label>Usuario:</label><br />
        <input type="text" name="usuario_nombre" maxlength="15" /><br />
        <label>Contraseña:</label><br />
        <input type="password" name="usuario_clave" maxlength="15" /><br />
        <label>Confirmar Contraseña:</label><br />
        <input type="password" name="usuario_clave_conf" maxlength="15" /><br />
        <label>Email:</label><br />
        <input type="text" name="usuario_email" maxlength="50" /><br />
        <input type="submit" name="enviar" value="Registrar" />
        <input type="reset" value="Borrar" />
    </form>
<?php
    
}
?>
En una ocacion lo corregi pero no he podido volver a arreglarlo y en aquella vez si me funciono el registro pero el login me falla, este es otro problema que quisiera que me ayudaran de favor.

Cuando la cuenta ya esta creada y quiero logearme no me conecta, en mi index.php tengo una include que llama al login.php y mi login.php esta así:
Código PHP:
<?php
    session_start
();
    include(
'config.php');
    if(empty(
$_SESSION['usuario_nombre'])) { // comprobamos que las variables de sesión estén vacías        
?>
        <form action="comprobar.php" method="post">
            <label>Usuario:</label><br />
            <input type="text" name="usuario_nombre" /><br />
            <label>Contraseña:</label><br />
            <input type="password" name="usuario_clave" /><br />
            <input type="submit" name="enviar" value="Ingresar" />
        </form>                    
<?php
    
}else {
?>
        <p>Hola <strong><?=$_SESSION['usuario_nombre']?></strong> | <a href="logout.php">Salir</a></p>
<?php
    
}
?>
Este lo redirique a comprobar.php -> index.php?page_id=comprobar
Este es comprobar.php
Código PHP:
<?php
    session_start
();
    include(
'config.php');
    if(isset(
$_POST['enviar'])) { // comprobamos que se hayan enviado los datos del formulario
        // comprobamos que los campos usuarios_nombre y usuario_clave no estén vacíos
        
if(empty($_POST['usuario_nombre']) || empty($_POST['usuario_clave'])) {
            echo 
"El usuario o la contraseña no han sido ingresados. <a href='javascript:history.back();'>Reintentar</a>";
        }else {
            
// "limpiamos" los campos del formulario de posibles códigos maliciosos
            
$usuario_nombre mysql_real_escape_string($_POST['usuario_nombre']);
            
$usuario_clave mysql_real_escape_string($_POST['usuario_clave']);
            
$usuario_clave md5($usuario_clave);
            
// comprobamos que los datos ingresados en el formulario coincidan con los de la BD
            
$sql mysql_query("SELECT usuario_id, usuario_nombre, usuario_clave FROM usuarios WHERE usuario_nombre='".$usuario_nombre."' AND usuario_clave='".$usuario_clave."'");
            if(
$row mysql_fetch_array($sql)) {
                
$_SESSION['usuario_id'] = $row['usuario_id']; // creamos la sesion "usuario_id" y le asignamos como valor el campo usuario_id
                
$_SESSION['usuario_nombre'] = $row["usuario_nombre"]; // creamos la sesion "usuario_nombre" y le asignamos como valor el campo usuario_nombre
                
header("Location: login.php");
            }else {
?>
                Error, <a href="login.php">Reintentar</a>
<?php
            
}
        }
    }else {
        
header("Location: login.php");
    }
?>
Nunca me logra conectar, no se si tenga que usar setcookies u otro metodo, espero me puedan ayudar con esto...
  #2 (permalink)  
Antiguo 10/02/2012, 20:58
Avatar de andresdzphp
Colaborador
 
Fecha de Ingreso: julio-2011
Ubicación: $this->Colombia;
Mensajes: 2.749
Antigüedad: 12 años, 8 meses
Puntos: 793
Respuesta: Sistema de Usuarios

Hola, primero que todo cambia esta línea en registro.php:

Código PHP:
Ver original
  1. $sql = mysql_query("SELECT usuario_nombre FROM usuarios WHERE usuario_nombre='".$usuario_nombre."'");

por

Código PHP:
Ver original
  1. $sql = mysql_query("SELECT usuario_nombre FROM usuarios WHERE usuario_nombre = '$usuario_nombre'") or die (mysql_error());

a ver que error te está dando MySQL. Luego trata de imprimir el valor de la variable $usuario_nombre a ver si esta llegando correctamente.

Saludos.
__________________
Si sabemos como leer e interpretar el manual será mucho más fácil aprender PHP. En lugar de confiar en ejemplos o copiar y pegar - PHP
  #3 (permalink)  
Antiguo 10/02/2012, 21:18
 
Fecha de Ingreso: febrero-2012
Mensajes: 34
Antigüedad: 12 años, 2 meses
Puntos: 0
Respuesta: Sistema de Usuarios

me sale esto:
Cita:
Unknown column 'usuario_nombre' in 'field list'
  #4 (permalink)  
Antiguo 10/02/2012, 21:55
Avatar de andresdzphp
Colaborador
 
Fecha de Ingreso: julio-2011
Ubicación: $this->Colombia;
Mensajes: 2.749
Antigüedad: 12 años, 8 meses
Puntos: 793
Respuesta: Sistema de Usuarios

Revisa la tabla y si puedes vuelvela a crear. Me tomé el trabajo de probar todo tu código completo y me funciona perfectamente... Inserta en la base de datos con md5, me logea, hace logout etc...
__________________
Si sabemos como leer e interpretar el manual será mucho más fácil aprender PHP. En lugar de confiar en ejemplos o copiar y pegar - PHP
  #5 (permalink)  
Antiguo 10/02/2012, 22:10
 
Fecha de Ingreso: febrero-2012
Mensajes: 34
Antigüedad: 12 años, 2 meses
Puntos: 0
Respuesta: Sistema de Usuarios

si me error se me olvido que cambie la DB por otra pero ya eso ya quedo, pero cuando me quiero logear me sale este error:
Cita:
Warning: Cannot modify header information - headers already sent by (output started at C:\xampp\htdocs\cmss\config.php:10) in C:\xampp\htdocs\cmss\pages_modules\comprobar.php on line 18
en la linea 18 dirige a login.php y este viene siendo mi login.php
Código PHP:
<?php
    session_start
();
    include(
'config.php');
    if(empty(
$_SESSION['usuario_nombre'])) { // comprobamos que las variables de sesión estén vacías        
?>
        <form action="index.php?page_id=comprobar" method="post">
            <label>Usuario:</label><br />
            <input type="text" name="usuario_nombre" /><br />
            <label>Contraseña:</label><br />
            <input type="password" name="usuario_clave" /><br />
            <input type="submit" name="enviar" value="Ingresar" />
        </form>                    
<?php
    
}else {
?>
        <p>Hola <strong><?=$_SESSION['usuario_nombre']?></strong> | <a href="logout.php">Salir</a></p>
<?php
    
}
?>
  #6 (permalink)  
Antiguo 10/02/2012, 22:18
Avatar de andresdzphp
Colaborador
 
Fecha de Ingreso: julio-2011
Ubicación: $this->Colombia;
Mensajes: 2.749
Antigüedad: 12 años, 8 meses
Puntos: 793
Respuesta: Sistema de Usuarios

Elimina todos los espacios que pueda tener el config.php
__________________
Si sabemos como leer e interpretar el manual será mucho más fácil aprender PHP. En lugar de confiar en ejemplos o copiar y pegar - PHP

Etiquetas: formulario, mysql, registro, sistema, sql, usuarios, variables
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




La zona horaria es GMT -6. Ahora son las 06:41.