Foros del Web » Programando para Internet » PHP »

Consulta SQL fallida si incluyo variable PHP

Estas en el tema de Consulta SQL fallida si incluyo variable PHP en el foro de PHP en Foros del Web. Hola a todos, Estoy haciendo una activación de usuarios a través de un código ($clave) que se envía por mail. El caso es que recojo ...
  #1 (permalink)  
Antiguo 12/02/2012, 04:16
 
Fecha de Ingreso: diciembre-2011
Ubicación: Madrid
Mensajes: 7
Antigüedad: 12 años, 4 meses
Puntos: 1
Consulta SQL fallida si incluyo variable PHP

Hola a todos,

Estoy haciendo una activación de usuarios a través de un código ($clave) que se envía por mail. El caso es que recojo este valor por el método $_Get y coloco la variable en la consulta SQL para buscar al usuario y activarlo. El caso es que si imprimo la variable $clave con un Echo, compruebo que la clave la está tomando correctamente, pero sin embargo durante todo el proceso me toma la $clave como si estuviera vacía. ¿Qué estoy haciendo mal?

Código PHP:
//Damos valor a $clave a través del método $_Get
$clave $_GET["id"];

//Seleccionamos el usuario que corresponda con la $clave pasada
$conexion mysql_connect("localhost","root","");
mysql_select_db("BD"$conexion);
$consulta "SELECT * FROM usuarios_temp WHERE txt_activ = '$clave'";
$resultado mysql_query($consulta) or die (mysql_error());

/*Recorremos con un bucle fetch_array los campos del registro que hemos recuperado de la tabla usuarios_temp. Todos estas variables se me quedan vacías*/
while ($registro mysql_fetch_array($resultado)) {
$nombreusuario $registro['nombreusuario'];
$contraseña $registro['contraseña'];
$nombre $registro['nombre'];
$apellidos $registro['apellidos'];
}

//Liberamos los registros de la tabla
mysql_free_result($resultado);

//se cierra la conexión con la base de datos
mysql_close($conexion);

//se insertan los datos de la tabla usuarios_temp en la tabla Usuarios
function insert(){
    if (
$nombreusuario ""){
        echo 
"Fallo en la activación de la cuenta, el código es erróneo o ha caducado";
        return 
false;
    }
    else{
        global 
$clave;
        global 
$nombreusuario$contraseña$mail$nombre$apellidos;
        
$fecha date("Y-n-d");
        
$conexion2 mysql_connect("localhost","root","");
        
mysql_select_db("BD"$conexion2);
        
$inserta "INSERT INTO Usuarios (fechaalta,nombreusuario,contraseña,mail,nombre,apellidos) VALUES ('$fecha','$nombreusuario','$contraseña','$mail','$nombre','$apellidos')";
        
$resultadoinserta mysql_query($inserta) or die (mysql_error());
        
        
//se cierra la conexión con la base de datos
        
mysql_close($conexion2);
        
        
//se borra el registro de la tabla temporal
        
$conexion3 mysql_connect("localhost","root","");
        
mysql_select_db("BD"$conexion3);
        
$elimina "DELETE FROM usuarios_temp WHERE txt_activ = '$clave'";
        
$resultadoelimina mysql_query($elimina) or die (mysql_error());
        
mysql_close($conexion3);
        
        
//informamos de que todo ha ido bien
        
echo "Tu cuenta ha sido activada con éxito";
        return 
true;
    }

MUCHAS GRACIAS A TODOS!!!!
  #2 (permalink)  
Antiguo 12/02/2012, 05:13
Avatar de ZiTAL  
Fecha de Ingreso: marzo-2004
Ubicación: Bermio (Bizkaia)
Mensajes: 1.545
Antigüedad: 20 años, 1 mes
Puntos: 62
Respuesta: Consulta SQL fallida si incluyo variable PHP

es preferible escapar siempre las variables:

Código PHP:
Ver original
  1. $consulta = "SELECT * FROM usuarios_temp WHERE txt_activ = '".$clave."'";

de todas formas haz un echo de la sql:

Código PHP:
Ver original
  1. echo $consulta;

para saber que la SQL es la correcta
__________________
http://zital.no-ip.org
____________________

Euskerie ahuen eta bijotzan
  #3 (permalink)  
Antiguo 12/02/2012, 06:23
Avatar de Nemutagk
Colaborador
 
Fecha de Ingreso: marzo-2004
Ubicación: México
Mensajes: 2.633
Antigüedad: 20 años
Puntos: 406
Respuesta: Consulta SQL fallida si incluyo variable PHP

Supongo que te has dado cuenta que estas intentando "insertar" el usuario cuando todo el código lo tienes dentro de una función? por lo tanto las variables se encapsulan y no tienes acceso a las variables fuera de la función, ahora, tomando en cuenta lo anterior estas validando si $nombreusuario esta vacío o no cuando ni si quiera le pasas la variable o la globalizas antes, la estas globalizando después del ELSE, por lo cual SIEMPRE te marcara $nombreusuario como vacio...

Ahora, no se si realmente comprendes cual es el uso de una función, las funciones fueron creadas para encapsular el código dentro de ellas para que no interfieran con el código padre (el que llama a la función) PERO, la verdadera razón de ser es que las funciones se utilizan para reciclar código, por lo tanto si necesitas repetir una secuencia de código varias veces es mejor crear una función, si solo vas a utilizar una vez el código es mejor dejar el código como parte del código padre (fuera de la función), ahora, usando funciones lo PEOR que puedes hacer es globalizar las variables que esta va a utilizar pues le quitas su principal ventaja la encapsulación, si necesitas datos externos a la función estos se le pasan como parámetros no globalizando
__________________
Listo?, tendría que tener 60 puntos menos de IQ para considerarme listo!!!
-- Sheldon Cooper
http://twitter.com/nemutagk
PD: No contestaré temas vía mensaje personal =)

Etiquetas: mysql, registro, sql, tabla, variables, usuarios
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 10:14.