entre Desarrolladores

Recibe ayuda de expertos

Registrate y pregunta

Es gratis y fácil

Recibe respuestas

Respuestas, votos y comentarios

Vota y selecciona respuestas

Recibe puntos, vota y da la solución

Pregunta

0voto

alta en bbdd php

Estoy intentado dar de alta a un usuario en la bbdd vía PHP.
Recogo el email y la password de un formulario y aplico el siguiente código .
Siempre me va al ultimo else y me envía a la página de errorcaptcha.html. y no me muestra lo que he puesto en los var_dump.

   <?php
      session_start();
      if(strtoupper($_REQUEST["captcha"]) == $_SESSION["captcha"]){
         // REMPLAZO EL CAPTCHA USADO POR UN TEXTO LARGO PARA EVITAR QUE SE VUELVA A INTENTAR
         $_SESSION["captcha"] = md5(rand()*time());

         // INSERTA EL CÓDIGO EXITOSO AQUI
$dbhost = "localhost";
$dbuser = "corbachu";
$dbpass = "xxxx";
$conx = mysql_connect($dbhost, $dbuser, $dbpass);

 mysql_select_db("corbachu_percy", $conx)or die ('Error al seleccionar la Base de Datos: '.mysql_error());;

    $email = htmlentities($_POST["email"]); 
    $password = htmlentities($_POST["password"]);   
    var_dump($email,$password);

// Comprobamos si el nombre de usuario o la cuenta de correo ya existían

      $checkemail = mysql_query("SELECT email FROM usuarios WHERE email='$email'");
        $email_exist = mysql_num_rows($checkemail);
        if ($email_exist > 0) {
            echo 'El nombre de usuario o la cuenta de correo están ya en uso';
            formRegistro();
        }else{

        $query = 'INSERT INTO usuarios (email, password) VALUES (\''.$email.'\' ,\''.$password.'\')';

    }   
        ?>

        <SCRIPT LANGUAGE="javascript">
            location.href = "zona.php";
            </SCRIPT>' 

<?      
    mysql_close();
?>  
        // FIN DEL DE CODIGO EXITOSO 
<?        
      }else{
         // REMPLAZO EL CAPTCHA USADO POR UN TEXTO LARGO PARA EVITAR QUE SE VUELVA A INTENTAR
         $_SESSION["captcha"] = md5(rand()*time());
         // INSERTA EL CÓDIGO DE ERROR AQUÍ

         header ("Location: errorcaptcha.html");
      }
?>

2 Respuestas

0voto

carlossevi Puntos63580

Ahora que consigues que entre "donde debe" vamos a ver por qué no hace la inserción. Este es tu código:

$query = 'INSERT INTO usuarios (email, password) VALUES (\''.$email.'\' ,\''.$password.'\')';

Ahí sólo estás construyendo una cadena de texto y la almacenas en la variable $query, no puedes esperar que se ejecute sola =) Necesitas ejecutarla con:

mysql_query($query);

Me da la impresión de que estás haciendo mucho copy&paste sin gran idea de lo que haces ¿me equivoco?

Ahora vienen un par de consejos:

1) Ya te dijo Leonardo en uno de sus comentarios que las funciones que estás utilizando para conectar con MySQL no están recomendadas ya que van a desaparecer y se recomienda sustituirlas por mysqli o PDO.

2) Veo según el código que nos vas compartiendo que estás repitiendo y diseminando los parámetros de configuración y conexión a la BBDD por todos los scripts de tus página de tal manera que el mantenimiento te será muy difícil en un futuro. Deberías aprender más sobre PHP y la posibilidad de crear scripts de configuración o clases para el manejo de las conexiones con la BBDD (y en el futuro plantillas, patrones MVC...) Los ejemplos que aplicas están bien como ejemplos pero para una aplicación en producción te serán difícil de mantener.

0voto

gonzalss comentado

Voy a echar un vistazo a los nuevas funciones de SQL .
He ejecutado el código y funciona , inserta en la BBDD , pero solo inserta si pongo dos valores.
Me explico, si pongo el resto de parámetros , no inserta nada

$email = htmlentities($_POST["email"]); 
    $password = htmlentities($_POST["password"]);   
    $usuario = htmlentities($_POST["usuario"]);
    $nombre = htmlentities($_POST["nombre"]);
    $apellidos = htmlentities($_POST["apellidos"]);
    $telefono = htmlentities($_POST["telefono"]);

// Comprobamos si el nombre de usuario o la cuenta de correo ya existían

      $checkemail = mysql_query("SELECT email FROM usuarios WHERE email='$email'");
        $email_exist = mysql_num_rows($checkemail);
        if ($email_exist > 0) {
            echo 'El nombre de usuario o la cuenta de correo est&aacute;n ya en uso';
            formRegistro();
        }else{

            $query = 'INSERT INTO usuarios (email, password, usuario, nombre, apellidos, telefono) VALUES (\''.$email.'\' ,\''.$password.'\',\''.$usuario.'\' ,\''.$nombre.'\' ,\''.$apellidos.'\' ,\''.$telefono.'\' )';
  // Construyo la bbdd y ahora lo ejecuto  
             mysql_query($query);        
    }   

Muchas gracias por tus explicaciones y por tus consejos.

0voto

carlossevi comentado

Seguramente la consulta que estás intentando hacer mediante la inserción con todos los parámetros falla por un motivo relativo a la base de datos (índices, restricciones, nombres de las columnas...)

Prueba a ejecutar la consulta desde algún gestor de base de datos y mira a ver si devuelve algún error.

0voto

gonzalss comentado

Era cuestión de permisos en la bbdd. Arreglado.Inserta bien los datos.
Poco a poco voy arreglando las cosas y aprendiendo un montón con vosotros.
Muchas gracias

0voto

carlossevi Puntos63580

Si siempre se va al último else tu error en principio no tiene nada que ver con el título de la pregunta "alta en bbdd php" ya que corresponde al siguiente if:

if(strtoupper($_REQUEST["captcha"]) == $_SESSION["captcha"]){

A ver si algún admin te edita el título.

Respecto a tu problema, parece ser que esa comparación siempre está devolviendo un valor falso, y por eso va al último ese.

Verifica que $_SESSION["captcha"] almacena el valor en mayúsculas, en caso contrario deberás reemplazar la línea por:

if(strtoupper($_REQUEST["captcha"]) == strtoupper($_SESSION["captcha"])){

Este error ya lo tuviste anteriormente y lo solucionaste con esta pregunta (http://entredesarrolladores.com/5633/captcha-muestra-imagen-solo-la-primera-vez)

0voto

gonzalss comentado

Es verdad , es verdad .
Había echo un copy paste mal .
He reemplazado la línea del captcha y ahora entre en el If .
Me va la página que le rediririgo

 <SCRIPT LANGUAGE="javascript">
            location.href = "zona.php";
            </SCRIPT>' 

sin haber insertado los datos en la BBDD .
Como veréis he metido un var_dump para ver que errores da

Por favor, accede o regístrate para responder a esta pregunta.

Otras Preguntas y Respuestas


...

Bienvenido a entre Desarrolladores, donde puedes realizar preguntas y recibir respuestas de otros miembros de la comunidad.

Conecta