Foros del Web » Programando para Internet » PHP »

Problema con usuarios.

Estas en el tema de Problema con usuarios. en el foro de PHP en Foros del Web. hola, soy nuevo en el foro y en la programación con php pero no en el tema de programación. Bueno mi problema es éste: Tengo ...
  #1 (permalink)  
Antiguo 11/06/2008, 12:29
Avatar de prodan  
Fecha de Ingreso: junio-2008
Mensajes: 85
Antigüedad: 15 años, 10 meses
Puntos: 0
Problema con usuarios.

hola, soy nuevo en el foro y en la programación con php pero no en el tema de programación. Bueno mi problema es éste:
Tengo un formulario de registro de usuarios en regusers.php, el action de este formulario lleva hacia la página registrar.php donde verifico que no se envien campos vacios y guardo en la base de datos, luego esta página (si todo esta bien) redirecciona hacia la página de bienbenida o login.php y de nuevo al reguser.php si se encuantra algo mal. mi problema esta aca, en login.php, la variable $nick nunca llega seteada o definida a ésta página, entonces siempre me muestra el formulario de login, aca les paso el código de cada página:

registrar.php
Código PHP:
      <?php
      
include('db-cnx.php');
      function 
quitar($mensaje)
      {
      
$mensaje str_replace("<","&lt;",$mensaje);
      
$mensaje str_replace(">","&gt;",$mensaje);
      
$mensaje str_replace("\'","'",$mensaje);
      
$mensaje str_replace('\"',"&quot;",$mensaje);
      
$mensaje str_replace("\\\\","\\",$mensaje);
      return 
$mensaje;
      }
       
if(
trim($HTTP_POST_VARS["nick"]) != "" && trim($HTTP_POST_VARS["password"]) != "" && trim(            $HTTP_POST_VARS["email"]) != "" && trim($HTTP_POST_VARS["nombre"]) != ""&& trim($HTTP_POST_VARS["apellido"]) != ""&& trim($HTTP_POST_VARS["nacionalidad"]) != "" && trim($HTTP_POST_VARS["provincia"]) != "" && trim($HTTP_POST_VARS["ciudad"]) != "" && trim($HTTP_POST_VARS["telefono"]) != "" && trim($HTTP_POST_VARS["cp"]) != "" && trim($HTTP_POST_VARS["edad"]) != "") { //* verifico que no se envien campos vacios del formulario

$sql "SELECT nick FROM usuarios WHERE nick='".quitar($HTTP_POST_VARS["nick"])."'";
    
$result mysql_query($sql);
    if(
$row = @mysql_fetch_array($result)) { //* si existe el nick ingresado
        
echo "<font color='#FF0000'>Error, el nick ya ha sido escogido por otro usuario.</font>";
        
$sql "SELECT email FROM usuarios WHERE email='".quitar($HTTP_POST_VARS["email"])."'";
        
$result mysql_query($sql);
        if(
$row = @mysql_fetch_array($result)) { //* si existe el email ingresado
            
echo "<br />";
            echo 
"<font color='#FF0000'>Error, el email ingresado ya se a registrado.</font>";
        } 
    echo 
"<br />";
    echo 
"En pocos segundos será redireccionado a la página de registro.";
    echo 
"<meta http-equiv='refresh' content='3;url=reguser.php'>";
    } else { 
//* si no existe el nick
        
$sql "SELECT email FROM usuarios WHERE email='".quitar($HTTP_POST_VARS["email"])."'";
        
$result mysql_query($sql);
        if(
$row = @mysql_fetch_array($result)) { //* si existe el email
            
echo "<br />";
            echo 
"<font color='#FF0000'>Error, el email ingresado ya se a registrado.</font>";
            echo 
"<br />";
            echo 
"En pocos segundos será redireccionado a la página de registro.";
            echo 
"<meta http-equiv='refresh' content='3;url=reguser.php'>";
        } else { 
//*  se cumplen todas las condiciones para grabar en la bd.

            
$sql "INSERT INTO usuarios     (nick,email,password,nombre,apellido,nacionalidad,provincia,ciudad,telefono,cp,edad)
VALUES ('$nick', '$email', '$password', '$nombre', '$apellido', '$nacionalidad', '$provincia', '$ciudad', '$telefono', '$cp', '$edad')"
;
            
mysql_query($sql);
            echo 
"Registro exitoso!";
            echo 
"<br />";
            echo 
"En pocos segundos sera redireccionado hacia la páginca de login.";
            echo 
"<meta http-equiv='refresh' content='3;url=login.php>";
            echo 
"<br />";
        }
    }
} else { 
//* si se envia vacio.
      
echo "<font color='#FF0000'>Error, Ingrese datos en el formulario.</font>";
      echo 
"<br />";
      echo 
"En pocos segundos será redireccionado a la página de registro.";
      echo 
"<meta http-equiv='refresh' content='20;url=reguser.php'>";
}
@
mysql_free_result($result);
mysql_close();
?>
y aca el login.php
Código PHP:
    <?php 

    
if (isset($_POST["nick"])) {
        
$nick $_POST["nick"];
        echo 
"Hola ";print($nick);
    } else {
        echo 
"Logeate";
    }
    
?>
lo demas que tiene el login.php es codigo html. esto es lo que me interesa ami.
bueno si me pueden ayudar, díganme si necesitan el código del reguser.php o si ven algun error.

Gracias.
  #2 (permalink)  
Antiguo 11/06/2008, 13:18
Avatar de jaronu  
Fecha de Ingreso: febrero-2008
Mensajes: 2.183
Antigüedad: 16 años, 2 meses
Puntos: 52
Respuesta: Problema con usuarios.

con el codigo que enseñas no es suficiente, has de enseñar como validas al usuario cuando escribe su user y pass en el form

Yuna cosa importantisima

abre la sesion con session_start ()

Un saludo
  #3 (permalink)  
Antiguo 11/06/2008, 13:26
Avatar de Mort20  
Fecha de Ingreso: junio-2008
Ubicación: Roca Casterly
Mensajes: 141
Antigüedad: 15 años, 10 meses
Puntos: 2
Respuesta: Problema con usuarios.

Si no lo entendido mal, la cosa es que después del register.php, cuando va al login.php no te enseña el nick: si es esto creo que ya he encontrado el error.

El error es que - creo, no estoy seguro del todo - el $_POST['nick'] sólo permanece en el archivo al que envía el formulario (es decir, en regiser.php), una vez redireccionado lo pierdes, y eso explica tu problema del login.php. Para solucionarlo, redirige a login.php?nick=$_POST['nick'] y coge el nick con $_GET['n'] en esa página, o bien replantea un poco tu register.php para no introducir tanto HTML y usa una función en dónde le pases el nick.

Luego otra cosa que no viene tanto al caso, tu forma de quitar los posibles ataques XSS es algo rara - en mi opinión, claro - y fea, por lo de tanto str_replace, te pongo un ejemplo de lo que hago yo en un formulario para enviar comentarios, que es posible que se pueda mejorar y tenga algún bug también:

Código:
<?php
/* Eliminate possible XSS Attack and parse */

    $error = false;
       $author = strtoupper(addslashes(strip_tags(trim($_POST['author']))));
         if($author==NULL) $error = 'no se ha introducido ningun nombre';
         else if($author=='MORT') $error = 'el nombre introducido esta registrado';

       $web = @fopen(strip_tags($_POST['web']),"r") ? $_POST['web'] : false;

       include(dirname(__FILE__) . '/phpbbcode.php');
         $comment = BBCode($_POST['comments']); //parse comment
         if($comment==NULL)
         {
            $err = 'no se ha introducido ningun comentario';
            $error = $error ? $error .= ' y ' . $err . '.<br />' : $error = $err . '.<br />';
         }

/* End XSS eliminator */
?>
La función BBCode mas o menos hace lo mismo que con los otros campos, salvo que no uso strip_tags para no cargarme las etiquetas del BBCode, claro. En vez de eso uso str_replace con el '<' y el '>' sustituyendolo por sus entidades HTML.

El $error es mera decoración, y el strtoupper es por otro motivo que no viene al caso xD
  #4 (permalink)  
Antiguo 11/06/2008, 15:42
Avatar de prodan  
Fecha de Ingreso: junio-2008
Mensajes: 85
Antigüedad: 15 años, 10 meses
Puntos: 0
Respuesta: Problema con usuarios.

:) solucione el problema, gracias Mort20 era eso,
ahora veo lo del BBcode q me dijistes para validar los campos vacios del formulario.

Gracias!!.
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 16:02.