Foros del Web » Programando para Internet » PHP »

error en este codigo

Estas en el tema de error en este codigo en el foro de PHP en Foros del Web. hola muchachos como andan?? espero que re bien......quisiera mostrarles un codigo al cual no le encuentro errores pero no funciona como yo quiero. 1) el ...
  #1 (permalink)  
Antiguo 22/04/2004, 19:44
Avatar de fmmeson  
Fecha de Ingreso: enero-2002
Ubicación: Tucuman
Mensajes: 401
Antigüedad: 22 años, 3 meses
Puntos: 2
error en este codigo

hola muchachos como andan?? espero que re bien......quisiera mostrarles un codigo al cual no le encuentro errores pero no funciona como yo quiero.

1) el primer problema es no me valida si el usuario o el mail ya existen en mi base de datos

2) segundo problema no pasa la variable de session con el valor ID del registro para poder grabarlo en la otra tabla

Cualquier ayuda por pequeña que sea sera bienvenida. Desde ya muchas gracias

Código PHP:
<?php
include("conexion.php");
include(
"fecha.php");
session_start();
switch (
$_GET['accion']) {
    case 
"paso1":

        
$email $_POST['email'];
        
$username $_POST['username'];

        
/* Chequeamos que el nombre de usuario y la contraseña no existan previamente en la base de datos */
        
$sql_email_check mysql_query("SELECT username FROM usuarios WHERE username='$username'");
        
$sql_usuario_check mysql_query("SELECT email FROM datospersonales WHERE email='$email'");
        
$email_check mysql_num_rows($sql_email_check);
        
$usuario_check mysql_num_rows($sql_usuario_check);
        if ((
$email_check 0) || ($usuario_check 0)) {
            if (
$email_check 0) {
                unset(
$email);
                
header("location: regpaso1.php?error=1");
                exit;
            } 
            if (
$usuario_check 0) {
                unset(
$usuario);
                
header("location: regpaso1.php?error=0");
                exit;
            } 
        }
            
$consulta mysql_query("INSERT INTO usuarios (username) VALUES('$username')") or die (mysql_error()); 
            
// Obtienes el ID autoincremental generado por tu INSERT:
            
$userid mysql_insert_id($consulta);
            
// Y lo llevas a una variable de sesión de nombre "USERID"
            
$_SESSION['USERID'] = $userid;
            
$_SESSION['EMAIL'] = $email;
            
// Y redireccionas a tu formulario2
            
header("location: regpaso2.php");
            exit;
            break;

    case 
"paso2":
        
// Tomas el valor de tu variable de sesión "USERID" para usarla en tus relaciones de tus tablas.
        
$userid $_SESSION['USERID'];
        
$email $_SESSION['EMAIL'];
        
$nombre $_POST['nombre'];
        
$apellido $_POST['apellido'];
        
$telefono $_POST['telefono'];
        
$direccion $_POST['direccion'];
        
$res $_POST['res']; ////fecha de nacimiento 
        
        
$nombre stripslashes($nombre);
        
$apellido stripslashes($apellido);
        
$email stripslashes($email);
        
$telefono stripslashes($telefono);
        
$direccion stripslashes($direccion);

        
mysql_query("INSERT INTO datospersonales (userid, nombre, apellido, email, telefono, direccion, fecha_registracion, fecha_nacimiento) VALUES('$userid', '$nombre', '$apellido', '$email', '$telefono', '$direccion', '$fecha2', '$res')") or die (mysql_error());
        
// //liberar memoria y $_SESSION['EMAIL']
        // Y redireccionas a tu formulario3
        
header("location: regpaso3.php");
        exit;

        break;
    case 
"paso3":
        
// lo mismo que el paso2 para tomar la variable de sesión USERID
        
$userid $_SESSION['USERID'];

        
mysql_query("INSERT INTO datosadicionales (userid, nombre, apellido, email, telefono, direccion, fecha_registracion, fecha_nacimiento) VALUES('$userid', '$nombre', '$apellido', '$email', '$telefono', '$direccion', '$fecha2', '$res')") or die (mysql_error());
        
// procesos para el paso 3
        // En este punto ya no te hará falta esa variable de sesión .. así que puedes borrar dicha variable de sesión o incluso la sesión entera si no la necesitas con unset($_SESSION['USERID') para borrar la variable de sesión o bien session_destroy() para toda la sesión.
        // Y redireccionas a tu otro sitio donde digas que el proceso se ha finalizado con exito ..
        
header("location: nose.php");
        exit;

        break;
    default:
        echo 
"secuencia incorrecta de proceso ...";


?>
__________________
Lo que se hace por AMOR esta mas allá del BIEN y del MAL - Friedrich Nietzsche
http://www.hispanogeek.com.ar
Desarrollador IT -
  #2 (permalink)  
Antiguo 22/04/2004, 23:35
 
Fecha de Ingreso: septiembre-2003
Mensajes: 248
Antigüedad: 20 años, 7 meses
Puntos: 2
Hola, puede ser tonto pero: q version de php usas? por que
las variables del tipo $_metodo son del 4.2.x (al menos q yo sepa) me ha pasado hace poco q instale red hat 7.3 c/php 4.1.x y ese tipo de variables no me reconoce, haz una peqña pagina para saber si esta pasando las variables.
suerte y saludos
__________________
Jose A
  #3 (permalink)  
Antiguo 23/04/2004, 07:33
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
Supongo que tendras algún campo que relacione a ambas tablas: username con email ?
Si es así .. (y si no lo es deberías relacionarlo) podrías hacer una consulta SQL de una vez en una sóla consulta SQL:

Código PHP:
$consulta mysql_query("SELECT usuarios.username,etc .... FROM usuarios,datospersonales WHERE usuarios.username='$username' AND datospersonales.email='$email' AND usuarios.id_usuario=datospersonales.id_usuario");

$total mysql_num_rows($consulta);

if (
$total == 1){
// Usuario valido.

Eso sería una consulta muy básica a dos tablas relacionadas por ese "id_usuario" .. Pero mejor usar sentencias SQL tipo interseccion como el LEFT JOIN y afines para optimizar la consulta.

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.

Última edición por Cluster; 23/04/2004 a las 07:35
  #4 (permalink)  
Antiguo 23/04/2004, 11:20
Avatar de fmmeson  
Fecha de Ingreso: enero-2002
Ubicación: Tucuman
Mensajes: 401
Antigüedad: 22 años, 3 meses
Puntos: 2
Gracias j_aspillaga por el consejo pero creo que ese no es el problema tengo Apache/1.3.29 y PHP/4.3.4
Cluster gracias por contestar, no lo hice como me recomendas porque segun el error que me devuelva lo mando al formulario con una variable que indica que error es:

Código PHP:
    if (($email_check 0) || ($usuario_check 0)) {
            if (
$email_check 0) {
                unset(
$email);
                
header("location: regpaso1.php?error=1"); ////ERROR DE QUE EL EMAIL YA EXISTE
                
exit;
            } 
            if (
$usuario_check 0) {
                unset(
$usuario);
                
header("location: regpaso1.php?error=0"); ////ERROR DE QUE EL USUARIO YA EXISTE
                
exit;
            } 
        } 
si tengo un campo que los relaciona a las tablas usuarios y datospersonales que es "userid"

Código PHP:
$consulta mysql_query("SELECT usuarios.username,etc .... FROM usuarios,datospersonales WHERE usuarios.username='$username' AND datospersonales.email='$email' AND usuarios.id_usuario=datospersonales.id_usuario");

$total mysql_num_rows($consulta);

if (
$total == 1){
// Usuario valido. /////esto seria usuario NO valido porque ya existe en mi BD

cualquier nueva ayuda sera bienvenida. Desde ya muchas gracias!
__________________
Lo que se hace por AMOR esta mas allá del BIEN y del MAL - Friedrich Nietzsche
http://www.hispanogeek.com.ar
Desarrollador IT -
  #5 (permalink)  
Antiguo 23/04/2004, 15:23
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
Ok, .. si tienes que separar las consultas para identificar si el error está en el usuario o contraseña .. Pero igualmente debes usar consultas SQL con tu campo que los relacionados como parte de tu consulta SQL.

SELECT usuarios.*,datospersonales.* FROM usuarios,datospersonales WHERE usuarios.username='$username' AND usaurios.userid=datospersonales.userid

Y lo mismo para el e-mail ..

De alguna forma tienes que obtener una consulta como resultado "si existe o no existe" (1 resultao o 0 resultados) de tu consulta por el "username" o por la del "e-mail" y que a su vez sean del mismo par username/email .. sino, podrías tener un dos usernames iguales o más y x e-mail iguales (ahí habría que ver si realmente tus username y e-mail son -uncicos- y no puede darse el caso que exista alguno repetido).


Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #6 (permalink)  
Antiguo 23/04/2004, 16:18
Avatar de fmmeson  
Fecha de Ingreso: enero-2002
Ubicación: Tucuman
Mensajes: 401
Antigüedad: 22 años, 3 meses
Puntos: 2
hola gracias amigos.........ya pude solucionar mi problema era porque estaba haciendo una consulta a un campo que no existia en la tabla me confundi de tabla. PERDON
ahora no puedo determinar el segundo error:

el cual no puedo obtener el ID de mi insert.........trato de comprobar pasandolas por URL para ver el valor y solo pasa el email
Código PHP:
         $consulta mysql_query("INSERT INTO usuarios (username) VALUES('$username')") or die (mysql_error()); 
            
// Obtienes el ID autoincremental generado por tu INSERT:
            
$id mysql_insert_id($consulta);
            
// Y lo llevas a una variable de sesión de nombre "USERID"
            
$_SESSION['USERID'] = $id;
            
$_SESSION['EMAIL'] = $email;
            
// Y redireccionas a tu formulario2
            
header("location: regpaso2.php?$id&$email"); ///aqui compruebo si la variable id tiene valor y el resultado es NEGATIVO
            
exit; 
alguien sabe cual es el error?? o que puede ser? desde ya muchas gracias
__________________
Lo que se hace por AMOR esta mas allá del BIEN y del MAL - Friedrich Nietzsche
http://www.hispanogeek.com.ar
Desarrollador IT -
  #7 (permalink)  
Antiguo 23/04/2004, 16:24
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
Si los propagas en el URL sería:
header("location: regpaso2.php?id=$id&email=$email");

Pero ya lo haces en la sesión (variables) que creas .. así que habría que ver como pretendes leer esos valores.

A todo esto .. suponemos que usas session_start() antes de las llamadas a $_SESSION ?¿

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #8 (permalink)  
Antiguo 23/04/2004, 16:55
Avatar de fmmeson  
Fecha de Ingreso: enero-2002
Ubicación: Tucuman
Mensajes: 401
Antigüedad: 22 años, 3 meses
Puntos: 2
gracias ya solucione mi segundo error:
Cita:
Si los propagas en el URL sería:
header("location: regpaso2.php?id=$id&email=$email");
solo queria probar si la variable guarba los valores que yo queria..
Código PHP:
$consulta mysql_query("INSERT INTO usuarios (username) VALUES('$username')") or die (mysql_error()); 
            
// Obtienes el ID autoincremental generado por tu INSERT:
            
$id mysql_insert_id($consulta);
            
// Y lo llevas a una variable de sesión de nombre "USERID"
            
$_SESSION['USERID'] = $id;
            
$_SESSION['EMAIL'] = $email;
            
// Y redireccionas a tu formulario2
            
header("location: regpaso2.php"); ///aqui compruebo si la variable id tiene valor y el resultado es NEGATIVO
            
exit; 
como veran yo a mi mysql_query lo guardaba en un variable llamada $consulta y luego con mysql_insert_id($consulta) trataba de obtener el id que habia generado mi campo autoincremental......pero nunca me funciono.........asi que me di una vuelta por http://www.php.net para buscar info y lei que si no le ponias un identificador a mysql_insert_id() este por defecto tomaba la ultima consulta INSERT y asi lo cambie y funciono PERFECTAMENTE pero me quedo la duda del PORQUE....si alguien sabe algo solo por curiosidad.....y bueno les dejo como quedo finalmente
Código PHP:
mysql_query("INSERT INTO usuarios (username) VALUES('$username')") or die (mysql_error()); 
            
// Obtienes el ID autoincremental generado por tu INSERT:
            
$id mysql_insert_id();
            
// Y lo llevas a una variable de sesión de nombre "USERID"
            
$_SESSION['USERID'] = $id;
            
$_SESSION['EMAIL'] = $email;
            
// Y redireccionas a tu formulario2
            
header("location: regpaso2.php?");
            exit; 
__________________
Lo que se hace por AMOR esta mas allá del BIEN y del MAL - Friedrich Nietzsche
http://www.hispanogeek.com.ar
Desarrollador IT -
  #9 (permalink)  
Antiguo 24/04/2004, 14:49
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
Si te fijas en la sintax de uso de la función

mysql_insert_id()
http://www.php.net/manual/en/functio...-insert-id.php


Cita:
Description
int mysql_insert_id ( [resource link_identifier])
Lo que vá en [] es opcional .. y se asume el que esté en curso.

Se supone que el "link identifier" es el usastes (si lo hiciestes) en mysql_connect() (si hiciestes: $link=mysql_connect()) .. Por ahí podría estár la explicación.

De todas formas el própio ejemplo de PHP.net sobre dicha función hace un $nose=mysql_query("INSERT ...") y luego usa el mysql_insert_id() ... ?¿

Por otro lado .. podrías ver la opción SQL para obtener el último ID generado por un INSERT (es la misma función de mismo nombre . pero desde SQL. En www.mysql.com lo podrías ver (y en los comentarios de los usuarios de dicha función PHP se menciona))

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 04:54.