Foros del Web » Programando para Internet » PHP »

Duda con esto ...

Estas en el tema de Duda con esto ... en el foro de PHP en Foros del Web. Hola tengo esta página para insertar cosas a mi BD, el codigo es este: Código PHP: <?PHP      include_once( "config.php" );                         conectadb ();  ...
  #1 (permalink)  
Antiguo 10/12/2003, 09:24
Avatar de Reynier  
Fecha de Ingreso: noviembre-2002
Ubicación: Por ahí en algún sitio
Mensajes: 1.844
Antigüedad: 15 años
Puntos: 1
Duda con esto ...

Hola tengo esta página para insertar cosas a mi BD, el codigo es este:
Código PHP:
<?PHP
    
include_once("config.php");
      
                
conectadb(); 
      
mysql_select_db("rpmsite");
     
    
//Comprobamos que el campo nombre no este vacio o contenga errores
      
if(empty($_POST['nick'])){
       
header("Location:index.php?modules=register&error=0");
      }elseif(!empty(
$_POST['nick']) && ($_POST['nick']<5)){
       
header("Location:index.php?modules=register&error=1");    
      }
      
          
//Comprobamos que la contraseña01 y contraseña02 no este vacio o contenga errores
      
if(empty($_POST['contrasena01']) or empty($_POST['contrasena02'])){
       
header("Location:index.php?modules=register&error=2");
      }elseif((
$_POST['contrasena01'] != $_POST['contrasena02']) or (strlen($_POST['contrasena01'])!=strlen($_POST['contrasena02']))){
       
header("Location:index.php?modules=register&error=3");    
      }elseif(
strlen($_POST['contrasena01'])<or strlen($_POST['contrasena02'])<5){
       
header("Location:index.php?modules=register&error=4");    
      }
      
      
//Comprobamos que el correo01 y el correo02 no este vacio o contenga errores
      
if(empty($_POST['mail01']) or empty($_POST['mail02'])){
       
header("Location:index.php?modules=register&error=5");
      }elseif((
$_POST['mail01'] != $_POST['mail02'])){
       
header("Location:index.php?modules=register&error=6");    
      }elseif(!
ereg("^([a-zA-Z0-9._]+)@([a-zA-Z0-9.-]+).([a-zA-Z]{2,4})$",$mail01) or (!ereg("^([a-zA-Z0-9._]+)@([a-zA-Z0-9.-]+).([a-zA-Z]{2,4})$",$mail02))){
       
header("Location:index.php?modules=register&error=7");    
      }
      
      
//Comprobamos que el nombre no este vacio o contenga errores
      
if(empty($_POST['nombre'])){
       
header("Location:index.php?modules=register&error=8");
      }elseif(
strlen($_POST['nombre'])<5){
       
header("Location:index.php?modules=register&error=9");    
      }
      
      if (
$_POST['contrasena01'] == $_POST['contrasena02']){
      
$crypt md5($_POST['contrasena01']);
     }
     if (
$_POST['mail01'] == $_POST['mail02']){
         
$correook $_POST['mail01'];
     }
     
    if ((!empty(
$nick)) && (!empty($contrasena01)) && (!empty($contrasena02)) && (!empty($mail01)) && (!empty($mail02)) && (!empty($nombre))){
        
$result mysql_query("SELECT id FROM users WHERE nombre='$nick'");
        if (
mysql_num_rows($result))
        {
             echo 
"Ya existe un usuario con ese login<br>";
        }else{
            
$sql "INSERT INTO users (nombre,login,passwd,email,pais,url,icq,aim,yahoo,dia,mes,ano,fecha,tipo) VALUES ('".$_POST['nick']."','".$crypt."','".$correook."','".$_POST['pais']."','".$_POST['nombre']."','".$_POST['homepage']."','".$_POST['icq']."','".$_POST['aim']."','".$_POST['yahoo']."','".$_POST['dia']."','".$_POST['mes']."','".$_POST['ano']."',NOW(),'3')";
        }
         
         if (
mysql_query($sql)){
             
header("Location: index.php?modules=register&action=sucesfully");
         }else{
             
header("Location: index.php?modules=register&error=10");
         }
    }else{
        
header("Location: index.php?modules=register&error=unsucesfully");
    }
?>
el problema es que cuando dejo todos los campos que debo validar vacios me redirecciona al error que le da la gana y no me los pone todos. ME explico mejor debo validar, el nick, el password, el correo y el nombre. Si los dejo los 4 vacios me debia decir: Debes entrar un nick, Debes entrar un password, Debes entrar una direccion valida, Debes entrar un nombre en el caso de que esten vacios, pero no me pone solo lo que le da la gana por ejemplo me redirecciona para index.php?modules=register&action=sucesfully ¿Por qué?

Ah! se me olvidaba esto otro. La funcion conectadb() esta implementada en el config.php de la sigueinte forma:
Código PHP:
 $host "host";
 
$user "user";
 
$passwd "pass";
 
$dbase "dbase";
function 
conectadb(){
 
$identifier mysql_connect($host,$user,$passwd) or die("Error");
 
mysql_select_db($dbase,$identifier);

el problema es que no se como sacar ese identificador ($identifier) de ahi para despues usarlo en cosas como myqsl_query($resultado,$identifier) y la otra cosa si se dieron cuenta al principio del script tuve que especificar manualmente mysql_select_db("rpmsite"); pues sino lo hago asi me dice que no hay Bases de Datos seleccionada. ¿Que pasa aquí?
__________________
Ing. Reynier Pérez Mira

Última edición por Reynier; 10/12/2003 a las 09:31
  #2 (permalink)  
Antiguo 10/12/2003, 09:32
Ex Colaborador
 
Fecha de Ingreso: junio-2002
Mensajes: 9.091
Antigüedad: 15 años, 5 meses
Puntos: 16
Hola,

Veamos, con el location solo puedes especificar una URL de redireccion. Si pones varios location, solo hara caso al ultimo que se envie. Y el ultimo que se envie puede ser cualquiera, porque depende de cuando el navegador se de cuenta de que le has mandado un location y corta la conexion a este script y solicite el siguiente.

Asi que si quieres mostrar varios mensajes, tendras que montar una URL donde pases todos los codigos que quieres mostrar. Podrias hacerlo en una variable, y donde tienes los header(), simplemente añadir los codigos a esa variable (y quitas los header de ahi). Y al final de las comprobaciones, miras si essa variable contiene errores, y si los tienes redireccionas a la URL con esos codigos.

Suerte.
__________________
Josemi

Aprendiz de mucho, maestro de poco.
  #3 (permalink)  
Antiguo 10/12/2003, 14:57
Avatar de Reynier  
Fecha de Ingreso: noviembre-2002
Ubicación: Por ahí en algún sitio
Mensajes: 1.844
Antigüedad: 15 años
Puntos: 1
NO entiendo

Te podrías exlpicar un poco mejor Josemi ?, porque no entendi muy bien lo ultimo que me dices
Salu2
__________________
Ing. Reynier Pérez Mira

Última edición por Reynier; 10/12/2003 a las 14:59
  #4 (permalink)  
Antiguo 10/12/2003, 15:34
Ex Colaborador
 
Fecha de Ingreso: junio-2002
Mensajes: 9.091
Antigüedad: 15 años, 5 meses
Puntos: 16
Bueno, intentemos un poco de codigo.

Al principio del script inicializas la variable:
Código PHP:
$errores=''
Luego haces en tus condiciones de error:
Código PHP:
if(empty($_POST['nick'])){       
$errores.='&error[]=0';
}elseif(!empty(
$_POST['nick']) && ($_POST['nick']<5)){
$errores.='&error[]=1';    

y asi con todas las condiciones de error.

Luego al final haces:
Código PHP:
         if (mysql_query($sql)){

             
header("Location: index.php?modules=register&action=sucesfully");
             exit;

         }else{

             
header("Location: index.php?modules=register$errores&error[]=10");
             exit;

         }

    }else{

        
header("Location: index.php?modules=register$errores&error[]=unsucesfully");
        exit;

    } 
Luego en el script que recoge los errores, recorres el array $_GET['error'] mostrando los mensajes correspondientes.

Suerte.

<editado>Añadidos los exit; (gracias Cluster por recordarmelos). Quizas no son necesarios, pero lo que si hacen es ayudar a autodocumentar el codigo: alli donde hay un exit, alli se finaliza el script.</editado>
__________________
Josemi

Aprendiz de mucho, maestro de poco.

Última edición por josemi; 10/12/2003 a las 16:52
  #5 (permalink)  
Antiguo 10/12/2003, 16:14
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Como comentario .. yo usaría exit; despues de cada header("location: ...."); .. (aunque estén bajo una estructura de condicionales y else ...)

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
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 07:46.