Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General »

Error de Vez en cuando en Mysql o Php?

Estas en el tema de Error de Vez en cuando en Mysql o Php? en el foro de Bases de Datos General en Foros del Web. hola, el caso es que tengo una base de datos donde se guardan los datos de mis usuarios, esto es desde un principio, no se ...
  #1 (permalink)  
Antiguo 31/08/2010, 14:17
 
Fecha de Ingreso: noviembre-2008
Ubicación: Cochabamba Bolivia
Mensajes: 519
Antigüedad: 15 años, 5 meses
Puntos: 26
Error de Vez en cuando en Mysql o Php?

hola, el caso es que tengo una base de datos donde se guardan los datos de mis usuarios, esto es desde un principio, no se cual sera el motivo, no soy muy experto en php pero el punto es que al momento de registrarse el valor de email ha veces se guarda en la base de datos y ha veces no.

No se cual sera el motivo, pero a algunos cuando se registran, se les guarda todos los datos sin problema alguno, a otros el email no se les guarda, esto me di cuenta hace tiempo cuando estaba hechando un vistazo a mi mysql, note que el campo de email algunos estaban llenos y otros estaban vacios, no se de que dependera para que a unos se les guarde bien el email y a otros no, me fije en el codigo que procesa los datos para guardarlo en la base de datos, pero yo personalmente no veo ningun tipo de error. por favor quisiera que me lo hechen un vistazo y me digan que puede ser el error.

aqui les dejo el codigo que procesa los datos del formulario de registro:

Código PHP:
<?php

/* -----------------------------------------------------------------------------------------
   form01 formulario de contacto 2008-02-26  

   autor: J?Heitmann
   http://www.dpwgranada.net

   ---------------------------------------------------------------------------------------*/

$directorio "../";

if(
$_POST['registro']) {

    
error_reporting(0);    

    include(
"../config.php");

        
    function 
html($texto) {
        
$texto trim($texto) ;
        
$texto htmlspecialchars($texto) ;
        return 
$texto ;
    }

    if(
$_POST[contrasena]==$_POST[contrasena2]) {

        
$query "SELECT * FROM usuarios WHERE nick={$_POST['nick']} or email={$_POST['email']}";
    
$link mysql_query($query);
        if(
mysql_affected_rows($link)==0) {

            if(!
$_POST[nick]) {
                
$error "Lo sentimos, ese nick ya esta registrado";
            }
            if(!
$_POST[contrasena]) {
                
$error "La clave/password deben ser iguales";
            }
            if(!
$_POST[email]) {
                
$error "ya hay un usuario con ese email";
            }
            if(
$_POST[secret]!=9) {
                
$error "Respuesta de pregunta no es correcta!";
            }

            
$fecha time();
            
$nick ereg_replace("[^A-Za-z0-9]"""$_POST[nick]);
            
$contrasena md5($_POST[contrasena]);
            
$MailPass $_POST[contrasena2];
            
$email = ($_POST[email]);
            
$nombre html($_POST[nombre]);
            
$pais html($_POST[pais]);
            
$ciudad html($_POST[ciudad]);
            
$sexo html($_POST[sexo]);
            
$boletin html($_POST[boletin]);
            
$ip $REMOTE_ADDR;
            
$n_dia html($_POST[n_dia]);
            
$n_mes html($_POST[n_mes]);
            
$n_ano html($_POST[n_ano]);

        } else {
            
$error _YA_REGISTRADOS_;
        }
    }
    else {
        
$error _ALERTA_CONTRASENA_;
    }

    if(
$error) {
        echo
"<script>alert('"._ERROR_P_." ".$error."'); window.location='javascript:history.back()';</script>";
    } else {
        include(
"bienvenido.php");
        
        
$infp mysql_query("SELECT * FROM configuracion");
        
$info mysql_fetch_array($infp);
        
$puntos $info[preg];                    

        
        
$r=mysql_query("INSERT INTO usuarios (nick,contrasena,pas_sena,email,fecha,nombre,pais,ciudad,sexo,boletin,ip,conectado,puntos,n_dia,n_mes,n_ano) VALUES         ('$nick','$contrasena','$MailPass','$email','$fecha','$nombre','$pais','$ciudad','$sexo','$boletin','$ip','$fecha','$puntos','$n_dia','$n_mes','$n_ano')");

    if (!
$r)
        echo
"<script>alert('"._ERROR_P_." "._ERROR_QUERY_."'); window.location='javascript:history.back()';</script>";
        

//reemplace [email protected] por la direcci? donde quieres que se mande los datos.
        
$recipiente "[email protected]";

//reemplace miasunto por el asunte que quieres en el email
        
$asunto "Nuevo Registro";

        
$error 0;

//los campos mandados por el formulario
        
$nick $_POST['nick'];
        
$email $_POST['email'];
        
$nombre $_POST['nombre'];
        
$sexo $_POST['sexo'];
        
$pais $_POST['pais'];
        
$n_ano $_POST['n_ano'];
        
$clave $_POST['contrasena'];

//verificaci?i los campos requeridos estan llenos
        
if($nick == "" || $email == "" || $nombre == "" || $sexo == "" || $pais == "" || $n_ano == "") {
            
$error=1;
        }
//verificaci?i el email es correcto
        
elseif(!eregi("^[a-z0-9]+([_\\.-][a-z0-9]+)*" ."@"."([a-z0-9]+([\.-][a-z0-9]+)*)+"."\\.[a-z]{2,}"."$",$email)) {
            
$error=2;
        }

//mensajes de error
        
if($error==1) {
            echo 
"El siguiente error ha ocurrido!<BR>";
            echo 
"No ha rellenado todos los campos obligatorios.<BR> Por favor vuelva <A HREF=\"javascript:history.back()\">atras</A>.<BR>";
        }

        elseif(
$error==2) {
            echo 
"El siguiente error ha ocurrido!<BR>";
            echo 
"El correo electronico es invalido!<BR> Por favor vuelva <A HREF=\"javascript:history.back()\">atras</A>.<BR>";
        }
        elseif(
$error==4) {
            echo 
"El siguiente error ha ocurrido!<BR>";
            echo 
"La respuesta no es correcta!<BR> Por favor vuelva <A HREF=\"javascript:history.back()\">atras</A>.<BR>";
        }

        else {
            
$message ="Estos son los datos para boletin del un nuevo usuario: <br>";
            
$message .="Nick: ".$nick."<br>";
            
$message .="Pais: ".$pais."<br>";
            
$message .="Email: ".$email."<br>";
            
$message .="Edad: ".$n_ano."<br>";
            
$message .="Sexo: ".$sexo."<br>";

            
$message stripslashes($message);

            
$headers "MIME-Version: 1.0\r\n";
            
$headers .= "Content-type:text/html; charset=iso-8859-1\r\n";
            
$headers .= "From: $email\r\n";
            
$headers .= "Repaly-to: $email\r\n";

            
mail($recipiente,$asunto,$message,$headers);

            
//aqui puedes modificar los mensajes
    
include("proceso-foro.php");
        }

    }


?>
Ademas esta ultima hora que estuve fijandome que me envian muy a menudo diciendome que los ultimos usuarios que se registraron ultimamente no pueden ingresar a su cuenta, ya que segun parece que el sistema les niega por que el password no coincide, y estuve fijandome, que algunos registros se meten en la base de datos aunque el nick ya este registrado, es decir, se repite el nick al registrarse, no se por que, por que si se fijan en el codigo ya esta implementado la comparacion para que se impide registros de nicks repetidos.
ayudenme por fa :(

Última edición por fido-strike; 01/09/2010 a las 06:01 Razón: Error descubierto en el codigo!
  #2 (permalink)  
Antiguo 01/09/2010, 09:25
Avatar de mayid
Colaborador
 
Fecha de Ingreso: marzo-2009
Ubicación: BsAs
Mensajes: 4.014
Antigüedad: 15 años, 1 mes
Puntos: 101
Respuesta: Error de Vez en cuando en Mysql o Php?

Este script está escrito por vos? Es es un copy+paste? A mi desde un principio no me cierra esto:

Cita:
if(mysql_affected_rows($link)==0) {

if(!$_POST[nick]) {
$error = "Lo sentimos, ese nick ya esta registrado";
}
if(!$_POST[contrasena]) {
$error = "La clave/password deben ser iguales";
}
if(!$_POST[email]) {
$error = "ya hay un usuario con ese email";
}
if($_POST[secret]!=9) {
$error = "Respuesta de pregunta no es correcta!";
}
La lógica que hay ahí es:
- buscar en base de datos un usuario existente. Si no lo hay, preparar mensaje de error basados en variables POST vacias?!
  #3 (permalink)  
Antiguo 01/09/2010, 10:34
 
Fecha de Ingreso: noviembre-2008
Ubicación: Cochabamba Bolivia
Mensajes: 519
Antigüedad: 15 años, 5 meses
Puntos: 26
Respuesta: Error de Vez en cuando en Mysql o Php?

El sistema lo habia tomado de un tutorial que ya no recuerdo de donde fue, pero el sistema ese solo tenia lo basico de un sistema de usuarios, ahi yo como pude lo incremente mas columnas en la base de datos, el sistema de mail a los nuevos registros, el registro paralelo al foro phpbb3 y mas cosillas.

Y respecto a lo que dices que prepara los mensajes de error si es que no hay, no le veo eso, la verdad me confundiste, y a que te refieres con las variables de POST vacias? si las variables estan ahi, se envian por el form de registro.

en el codigo lo que hace es primero, comparar si las dos contraseñas son iguales, so las contraseñas son iguales, se procede a ver si hay algun registro con ese nick o email en la base de datos, si no hay registros se procede solo a preparar los mensajes de error, solo se preparan los mensajes de error, pero no se ejecutan

Mas abajo recien es cuando se responde si es que hay usuarios registrados con esos datos ($error = _YA_REGISTRADOS_;) luego viene el error de contrasena que se activa si es que las contraseñas no son iguales ($error = _ALERTA_CONTRASENA_; ) despues de eso recien cuando se hace el llamado a los errores que se habian preparado con anterioridad en caso de que se cumplan sus respectivas condiciones. Al final se procede a guardar los datos y luego sigue todo lo resto...

Parece logico pero no entiendo por que ha veces no guarda el email de algunos registros nuevos, y luego yo tengo que pasarme el rollo de estar llenandolo manualmente desde myphpadmin :(
Y como ya dije tambien, recientemente me he fijado que tambien pareciera que no comprueba que haya registros iguales en la base de datos, ya que cuando registro un nuevo usuario con un nick igual, el registro se realiza por completo, aunque de un error diciendo que ese nick o email ya esta registrado, pero claro este error viene por parte de la base de datos del foro phpbb3, ya que mis usuarios de mi web automaticamente ya tienen cuentas en el foro.

Simplificando, el control de cuentas duplicadas solo se realizan en la base de datos del foro, y pasa por alto la de mi sistema de usuarios. y al final cuando esto pasa uno no puede identificarse ya que el sistema no sabe que usuario tomar para comparar las contraseñas, la del usuario que ya estaba antes o la del nuevo usuario con ese mismo nick.

PD: a lo mejor dices que se preparan los POST vacios por los resultados de los errores, creo que eso es un pequeño error mio, ya que esos errores se preparan para que se ejecuten en caso de que algun campo este vacio en el formulario de registro, pero eso no creo que tenga algo que ver con el problema.

Voy a cambiar los textos de los errores para seguir evitando confusiones.
  #4 (permalink)  
Antiguo 01/09/2010, 10:35
 
Fecha de Ingreso: noviembre-2008
Ubicación: Cochabamba Bolivia
Mensajes: 519
Antigüedad: 15 años, 5 meses
Puntos: 26
Respuesta: Error de Vez en cuando en Mysql o Php?

Cita:
Iniciado por fido-strike Ver Mensaje
hola, el caso es que tengo una base de datos donde se guardan los datos de mis usuarios, esto es desde un principio, no se cual sera el motivo, no soy muy experto en php pero el punto es que al momento de registrarse el valor de email ha veces se guarda en la base de datos y ha veces no.

No se cual sera el motivo, pero a algunos cuando se registran, se les guarda todos los datos sin problema alguno, a otros el email no se les guarda, esto me di cuenta hace tiempo cuando estaba hechando un vistazo a mi mysql, note que el campo de email algunos estaban llenos y otros estaban vacios, no se de que dependera para que a unos se les guarde bien el email y a otros no, me fije en el codigo que procesa los datos para guardarlo en la base de datos, pero yo personalmente no veo ningun tipo de error. por favor quisiera que me lo hechen un vistazo y me digan que puede ser el error.

aqui les dejo el codigo que procesa los datos del formulario de registro:

Código PHP:
<?php

/* -----------------------------------------------------------------------------------------
   form01 formulario de contacto 2008-02-26  

   autor: J?Heitmann
   http://www.dpwgranada.net

   ---------------------------------------------------------------------------------------*/

$directorio "../";

if(
$_POST['registro']) {

    
error_reporting(0);    

    include(
"../config.php");

        
    function 
html($texto) {
        
$texto trim($texto) ;
        
$texto htmlspecialchars($texto) ;
        return 
$texto ;
    }

    if(
$_POST[contrasena]==$_POST[contrasena2]) {

        
$query "SELECT * FROM usuarios WHERE nick={$_POST['nick']} or email={$_POST['email']}";
    
$link mysql_query($query);
        if(
mysql_affected_rows($link)==0) {

            if(!
$_POST[nick]) {
                
$error "Tienes que crear un nick";
            }
            if(!
$_POST[contrasena]) {
                
$error "Necesitas una contraseña para poder acceder a tu cuenta";
            }
            if(!
$_POST[email]) {
                
$error "Es necesario un email para enviarte tus datos";
            }
            if(
$_POST[secret]!=9) {
                
$error "La respuesta de la pregunta no es correcta!";
            }

            
$fecha time();
            
$nick ereg_replace("[^A-Za-z0-9]"""$_POST[nick]);
            
$contrasena md5($_POST[contrasena]);
            
$MailPass $_POST[contrasena2];
            
$email = ($_POST[email]);
            
$nombre html($_POST[nombre]);
            
$pais html($_POST[pais]);
            
$ciudad html($_POST[ciudad]);
            
$sexo html($_POST[sexo]);
            
$boletin html($_POST[boletin]);
            
$ip $REMOTE_ADDR;
            
$n_dia html($_POST[n_dia]);
            
$n_mes html($_POST[n_mes]);
            
$n_ano html($_POST[n_ano]);

        } else {
            
$error _YA_REGISTRADOS_;
        }
    }
    else {
        
$error _ALERTA_CONTRASENA_;
    }

    if(
$error) {
        echo
"<script>alert('"._ERROR_P_." ".$error."'); window.location='javascript:history.back()';</script>";
    } else {
        include(
"bienvenido.php");
        
        
$infp mysql_query("SELECT * FROM configuracion");
        
$info mysql_fetch_array($infp);
        
$puntos $info[preg];                    

        
        
$r=mysql_query("INSERT INTO usuarios (nick,contrasena,pas_sena,email,fecha,nombre,pais,ciudad,sexo,boletin,ip,conectado,puntos,n_dia,n_mes,n_ano) VALUES         ('$nick','$contrasena','$MailPass','$email','$fecha','$nombre','$pais','$ciudad','$sexo','$boletin','$ip','$fecha','$puntos','$n_dia','$n_mes','$n_ano')");

    if (!
$r)
        echo
"<script>alert('"._ERROR_P_." "._ERROR_QUERY_."'); window.location='javascript:history.back()';</script>";
        

//reemplace [email protected] por la direcci? donde quieres que se mande los datos.
        
$recipiente "[email protected]";

//reemplace miasunto por el asunte que quieres en el email
        
$asunto "Nuevo Registro";

        
$error 0;

//los campos mandados por el formulario
        
$nick $_POST['nick'];
        
$email $_POST['email'];
        
$nombre $_POST['nombre'];
        
$sexo $_POST['sexo'];
        
$pais $_POST['pais'];
        
$n_ano $_POST['n_ano'];
        
$clave $_POST['contrasena'];

//verificaci?i los campos requeridos estan llenos
        
if($nick == "" || $email == "" || $nombre == "" || $sexo == "" || $pais == "" || $n_ano == "") {
            
$error=1;
        }
//verificaci?i el email es correcto
        
elseif(!eregi("^[a-z0-9]+([_\\.-][a-z0-9]+)*" ."@"."([a-z0-9]+([\.-][a-z0-9]+)*)+"."\\.[a-z]{2,}"."$",$email)) {
            
$error=2;
        }

//mensajes de error
        
if($error==1) {
            echo 
"El siguiente error ha ocurrido!<BR>";
            echo 
"No ha rellenado todos los campos obligatorios.<BR> Por favor vuelva <A HREF=\"javascript:history.back()\">atras</A>.<BR>";
        }

        elseif(
$error==2) {
            echo 
"El siguiente error ha ocurrido!<BR>";
            echo 
"El correo electronico es invalido!<BR> Por favor vuelva <A HREF=\"javascript:history.back()\">atras</A>.<BR>";
        }
        elseif(
$error==4) {
            echo 
"El siguiente error ha ocurrido!<BR>";
            echo 
"La respuesta no es correcta!<BR> Por favor vuelva <A HREF=\"javascript:history.back()\">atras</A>.<BR>";
        }

        else {
            
$message ="Estos son los datos para boletin del un nuevo usuario: <br>";
            
$message .="Nick: ".$nick."<br>";
            
$message .="Pais: ".$pais."<br>";
            
$message .="Email: ".$email."<br>";
            
$message .="Edad: ".$n_ano."<br>";
            
$message .="Sexo: ".$sexo."<br>";

            
$message stripslashes($message);

            
$headers "MIME-Version: 1.0\r\n";
            
$headers .= "Content-type:text/html; charset=iso-8859-1\r\n";
            
$headers .= "From: $email\r\n";
            
$headers .= "Repaly-to: $email\r\n";

            
mail($recipiente,$asunto,$message,$headers);

            
//aqui puedes modificar los mensajes
    
include("proceso-foro.php");
        }

    }


?>
Ademas esta ultima hora que estuve fijandome que me envian muy a menudo diciendome que los ultimos usuarios que se registraron ultimamente no pueden ingresar a su cuenta, ya que segun parece que el sistema les niega por que el password no coincide, y estuve fijandome, que algunos registros se meten en la base de datos aunque el nick ya este registrado, es decir, se repite el nick al registrarse, no se por que, por que si se fijan en el codigo ya esta implementado la comparacion para que se impide registros de nicks repetidos.
ayudenme por fa :(
  #5 (permalink)  
Antiguo 04/11/2010, 03:58
 
Fecha de Ingreso: mayo-2010
Mensajes: 60
Antigüedad: 14 años
Puntos: 1
Respuesta: Error de Vez en cuando en Mysql o Php?

Yo estoy teniendo el mismo problema. Tengo un script que da de alta datos de usuarios y a veces todas las variables que llegan por $_POST llegan vacias y no entiendo por qué, sólo pasa a veces.

También se pueden subir fotos y he comprobado que cuando se suben ficheros muy grandes se vacian las variables POST, hasta ahí vale, es lógico y controlable. Lo malo es que a veces también me pasa sin subir ficheros y no consigo encontrar ningún patrón, parece aleatorio.

¿a alguien se le ocurre qué puede pasar?

Saludos.
  #6 (permalink)  
Antiguo 04/11/2010, 04:10
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Respuesta: Error de Vez en cuando en Mysql o Php?

Cualquiera que sea el problema, no tiene relación con la base de datos ($_POST es tema de PHP).
Si te pueden ayudar en un sitio es en el Foro de PHP. Es donde están los expertos en el tema.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #7 (permalink)  
Antiguo 04/11/2010, 04:13
 
Fecha de Ingreso: mayo-2010
Mensajes: 60
Antigüedad: 14 años
Puntos: 1
Respuesta: Error de Vez en cuando en Mysql o Php?

Ok, usando el buscador he encontrado este tema reciente con el mismo problema y he pensado que era mejor que crear otro, pero bueno lo haré en el foro de php.

Gracias.

Etiquetas: cuando, mysql, php
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 19:35.