Foros del Web » Programando para Internet » PHP »

El bloque IF no se ejecuta correctamente

Estas en el tema de El bloque IF no se ejecuta correctamente en el foro de PHP en Foros del Web. Buenas a todos! Tengo un problema que me trae de cabeza y no entiendo por que se produce ya que aparentemente todo está bien, a ...
  #1 (permalink)  
Antiguo 06/11/2008, 07:31
 
Fecha de Ingreso: noviembre-2008
Mensajes: 14
Antigüedad: 15 años, 5 meses
Puntos: 0
El bloque IF no se ejecuta correctamente

Buenas a todos!

Tengo un problema que me trae de cabeza y no entiendo por que se produce ya que aparentemente todo está bien, a ver si alguien me puede decir que es lo que ocurre. Bueno pasó a la explicación del problema.

Lo que trato de hacer es un sistema de registro (como los foros) que necesite activación por mail, esto es, te registras, el sistema te envia un mail con una dirección para que se active tu cuenta.

El problema lo tengo con "validar_cuenta.php". El campo ACTIVO de la BBDD indica si una cuenta está activa o no (1=Activo, 0=No Activo). El caso es que aparentemente este código (que muestro mas abajo) debería realizar lo siguiente:

Obtener las variables $n y $p que se le pasan por la URL (validar_cuenta?n=XXXX&p=XXXXX) luego a partir de de n y p (nick y password) hayar la ID que corresponda a n y p y por ultimo obtener el valor del campo ACTIVO asociado a la ID obtenida.

Vamos ahora a la practica: Si cojo una cuenta que no está activa (ACTIVO = 0) cuando llega al bloque IF lo que hace es: ejecutar las sentencias SQL:

Código PHP:
 $sql "UPDATE usuarios SET activo = 1 WHERE id ='$id'";
      
$result mysql_query($sql); 
y no ejecuta los ECHO, pero si que muestra el ECHO del ELSE, es decir, entra en el IF, ejecuta las sentencias sql, y se pasa al ELSE y ejecuta el ECHO.

he cambiado el IF-ELSE por un SWITCH y nada de nada, el IF-ELSE yo creo que está bien, tiene que ser alguna propiedad de PHP o MySql que se me escapa y no conozco.

Yo lo que quiero es que cuando se le pase un usuario con ACTIVO=0 entre en el IF y ejecute TODO y no se meta en el ELSE, aparentemente eso es lo que debería hacer el código que he escrito, pero no lo hace. ¿Alguien sabe por que?

Código PHP:
<?php
//conexion a la base de datos

//obtiene las variables
$n $_GET['n'];
$p $_GET['p'];

//obtiene el valor del campo ID
$sql_id "SELECT id FROM usuarios WHERE nick='$n' UNION SELECT id FROM usuarios WHERE password='$p'";
$result_id mysql_query($sql_id);
$valor_id mysql_fetch_array($result_id);
echo 
$valor_id["id"];

//Obtiene el valor del campo ACTIVO
$id $valor_id["id"];
$activo "SELECT activo FROM usuarios WHERE id='$id'";
$result_activo mysql_query($activo);
$valor_activo mysql_fetch_array($result_activo);
echo 
$valor_activo["activo"];

if (
$valor_activo["activo"] == 0
 {  
      echo 
"este usuario aún no está activo";
      
$sql "UPDATE usuarios SET activo = 1 WHERE id ='$id'";
      
$result mysql_query($sql);
      echo 
"La cuenta se ha activado correctamente";
      
 }
else
 { 
      echo 
"dfdEste usuario ya está activo";
 }
mysql_close();
?>
  #2 (permalink)  
Antiguo 06/11/2008, 07:44
Avatar de Marvin
Colaborador
 
Fecha de Ingreso: febrero-2005
Ubicación: global $Chile->Santiago;
Mensajes: 1.991
Antigüedad: 19 años, 2 meses
Puntos: 81
Respuesta: El bloque IF no se ejecuta correctamente

Probaste haciendo la comparacion inversa o cambiando el 0 por '0' ??

comparacion inversa:
Código php:
Ver original
  1. if($valor_activo['activo'] <> '1'){
  2. // o de '0' que tendrias que cambiar lo q esta dentro del if por el else y viceversa

Suerte!
__________________
El que dice "Solo sé que nada sé", esta asumiendo que sabe algo.
Lea las FAQ's!
  #3 (permalink)  
Antiguo 06/11/2008, 07:56
 
Fecha de Ingreso: noviembre-2008
Mensajes: 14
Antigüedad: 15 años, 5 meses
Puntos: 0
Respuesta: El bloque IF no se ejecuta correctamente

lo acabo de probar y no, no va, no se que pasa, por que no sale aglo tan simple :S parece como si el if estuviese loco, enfin gracias y a ver si alguien sabe que puede pasar
  #4 (permalink)  
Antiguo 06/11/2008, 08:27
 
Fecha de Ingreso: noviembre-2002
Mensajes: 1.341
Antigüedad: 21 años, 5 meses
Puntos: 17
Respuesta: El bloque IF no se ejecuta correctamente

Qué muestra est línea:

echo $valor_activo["activo"];
  #5 (permalink)  
Antiguo 06/11/2008, 08:33
Avatar de karlic0s  
Fecha de Ingreso: abril-2007
Ubicación: Cartagena (Murcia)
Mensajes: 241
Antigüedad: 17 años
Puntos: 18
Respuesta: El bloque IF no se ejecuta correctamente

mmmm echo $valor_activo["activo"]; que muestra? no termino de entender porque pones lo de ==0 porque para que funcionara tendrias que haberle dado antes a lo de $valor_activo["activo"] el valor de 0 y no se donde lo haces o con que lo haces
  #6 (permalink)  
Antiguo 06/11/2008, 08:34
 
Fecha de Ingreso: noviembre-2008
Mensajes: 14
Antigüedad: 15 años, 5 meses
Puntos: 0
Respuesta: El bloque IF no se ejecuta correctamente

esa linea muestra el valor del campo ACTIVO (1=Activo, 0 =No Activo)

Edito: $valor_activo["activo"] es una variable obtenida de la base de datos, por eso no la inicializo
  #7 (permalink)  
Antiguo 06/11/2008, 08:35
 
Fecha de Ingreso: noviembre-2002
Mensajes: 1.341
Antigüedad: 21 años, 5 meses
Puntos: 17
Respuesta: El bloque IF no se ejecuta correctamente

Sí, sé lo que debería mostrar... pero en la ejecución del script ¿qué muestra EXACTAMENTE? muestra bien el número... lo muestra con algún espacio?
  #8 (permalink)  
Antiguo 06/11/2008, 08:46
 
Fecha de Ingreso: noviembre-2008
Mensajes: 14
Antigüedad: 15 años, 5 meses
Puntos: 0
Respuesta: El bloque IF no se ejecuta correctamente

la muestra perfectamente, sin espacio y sin nada

Saludos!
  #9 (permalink)  
Antiguo 06/11/2008, 08:55
 
Fecha de Ingreso: noviembre-2002
Mensajes: 1.341
Antigüedad: 21 años, 5 meses
Puntos: 17
Respuesta: El bloque IF no se ejecuta correctamente

Prueba estas variaciones:

Código php:
Ver original
  1. $valor_activo = mysql_fetch_array($result_activo);
  2. $_activo = $valor_activo['activo']
  3. echo $_activo;
  4.  
  5. if ($_activo == 0)
  6.  {

y

Código php:
Ver original
  1. $valor_activo = mysql_fetch_array($result_activo);
  2. echo $valor_activo["activo"];
  3.  
  4. if ($valor_activo["activo"] <> 1)
  5.  {
  #10 (permalink)  
Antiguo 06/11/2008, 08:59
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 11 meses
Puntos: 2135
Respuesta: El bloque IF no se ejecuta correctamente

Bueno el primer fallo es tus consultas SQL, todo lo que haces lo puedes hacer usando SELECT id, activo FROM usuarios WHERE...

Por otro lado puede que tu variable venga con un espacio o algo prueba usar trim() sobre tu campo.

Saludos.
  #11 (permalink)  
Antiguo 06/11/2008, 16:10
 
Fecha de Ingreso: noviembre-2008
Mensajes: 14
Antigüedad: 15 años, 5 meses
Puntos: 0
Respuesta: El bloque IF no se ejecuta correctamente

Cita:
Iniciado por Keysher Ver Mensaje
Prueba estas variaciones:

Código php:
Ver original
  1. $valor_activo = mysql_fetch_array($result_activo);
  2. $_activo = $valor_activo['activo']
  3. echo $_activo;
  4.  
  5. if ($_activo == 0)
  6.  {

y

Código php:
Ver original
  1. $valor_activo = mysql_fetch_array($result_activo);
  2. echo $valor_activo["activo"];
  3.  
  4. if ($valor_activo["activo"] <> 1)
  5.  {
Nada, lo acabo de probar y nada :(

Cita:
Iniciado por GatorV Ver Mensaje
Bueno el primer fallo es tus consultas SQL, todo lo que haces lo puedes hacer usando SELECT id, activo FROM usuarios WHERE...

Por otro lado puede que tu variable venga con un espacio o algo prueba usar trim() sobre tu campo.

Saludos.
lo he probado con trim() y sigue dando el mismo fallo

el UPDATE también lo puedo hacer con SELECT?

Saludos y Gracias, pero aún no he encontrado solución :(
  #12 (permalink)  
Antiguo 06/11/2008, 16:36
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 11 meses
Puntos: 2135
Respuesta: El bloque IF no se ejecuta correctamente

No, el UPDATE tiene que ir aparte, por otro lado es muy raro, prueba ver que te da var_dump($valor_activo);

Saludos.
  #13 (permalink)  
Antiguo 07/11/2008, 03:48
 
Fecha de Ingreso: noviembre-2008
Mensajes: 14
Antigüedad: 15 años, 5 meses
Puntos: 0
Respuesta: El bloque IF no se ejecuta correctamente

me dice esto: array(2) { [0]=> string(1) "1" ["activo"]=> string(1) "1" }

el caso es que la base de datos tiene los siguientes campos:
id
nick
PASSWORD
nombre
email
activo

no tendría que salirme un array(6) en vez de un array(2)? :s

Saludos!

Edito:

Modifiqué el código como dijo GatorV (lo de poner los SELECT juntos)

Código PHP:
<?php
//Aquí la conexión a la base de datos

$n $_GET['n'];
$p $_GET['p'];

$sql_id "SELECT id, activo FROM usuarios WHERE nick='$n' UNION SELECT id, activo FROM usuarios WHERE password='$p'";
$result_id mysql_query($sql_id);
$valor_id mysql_fetch_array($result_id);
echo 
$valor_id['id'];
echo 
$valor_id['activo'];

$id $valor_id['id'];
if (
$valor_id['activo'] == 0
 {  
      echo 
"este usuario aún no está activo";
      
$sql "UPDATE usuarios SET activo = 1 WHERE id ='$id'";
      
$result mysql_query($sql);
      echo 
"La cuenta se ha activado correctamente";
      
 }
else
 { 
      echo 
"dfdEste usuario ya está activo";
 }

mysql_close();
?>
(sigue sin ir xD)

con la modificación esta y poniendo el var_dump sale:

array(4) { [0]=> string(1) "2" ["id"]=> string(1) "2" [1]=> string(1) "0" ["activo"]=> string(1) "0" }

el caso es que ACTIVO no es un String, en la base de datos está puesto como un INT (activo int(1))
al igual que ID es un BIGINT (id bigint(7)) aunque igual php los pasa a string para poder mostrarlos xD

Mirad que cosa mas rara :s, con este fragmeto de codigo:

Código PHP:
var_dump($valor_id);
echo 
"<br>";
$id $valor_id['id'];
if (
$valor_id['activo'] == 0
 {  
      echo 
"este usuario aún no está activo";
      
$sql "UPDATE usuarios SET activo = 1 WHERE id ='$id'";
      
$result mysql_query($sql);
      echo 
"La cuenta se ha activado correctamente";
      
 }
else
 { 
      echo 
"dfdEste usuario ya está activo";
 }
var_dump($valor_id); 
se supone que deberia imprimir en el primer var_dump en activo un 0 y en el segundo un 1

pues me muestra esto:

array(4) { [0]=> string(1) "2" ["id"]=> string(1) "2" [1]=> string(1) "1" ["activo"]=> string(1) "1" }
array(4) { [0]=> string(1) "2" ["id"]=> string(1) "2" [1]=> string(1) "1" ["activo"]=> string(1) "1" }

vamos que sale en los 2 ACTIVO=1 y antes de ejecutar el script yo cambio a 0 manualmente el valor de ACTIVO desde la BBDD :s

Última edición por RdlP; 07/11/2008 a las 04:18
  #14 (permalink)  
Antiguo 07/11/2008, 04:04
 
Fecha de Ingreso: noviembre-2002
Mensajes: 1.341
Antigüedad: 21 años, 5 meses
Puntos: 17
Respuesta: El bloque IF no se ejecuta correctamente

No, porque en la select le dices que sólo te devuelva un campo (y en todo caso sería array 12 ya que por cada elemento crea dos variables dentro del array, una referenciada por nombre y la otra por número).

Y en ese caso está devolviendo "1", por lo que es lógico que no entre por el if.
  #15 (permalink)  
Antiguo 07/11/2008, 05:00
 
Fecha de Ingreso: noviembre-2008
Mensajes: 14
Antigüedad: 15 años, 5 meses
Puntos: 0
Respuesta: El bloque IF no se ejecuta correctamente

ya, pero en la base de datos el campo "activo" es el ultimo y aqui lo muestra como [2]

Keysher entonces cual crees tu que podría ser la solución para que haga lo que quiero hacer?
  #16 (permalink)  
Antiguo 07/11/2008, 05:28
 
Fecha de Ingreso: noviembre-2002
Mensajes: 1.341
Antigüedad: 21 años, 5 meses
Puntos: 17
Respuesta: El bloque IF no se ejecuta correctamente

En el último framento de código el valor de $valor_id['activo'] no cambia en ningún momento.

Si después de hacer la consulta, haces un var_dump y te dice que vale 1 es porque la consulta se lo ha devuelto... así que igual hay que mirar que la consulta esté bien (y los datos también).
  #17 (permalink)  
Antiguo 07/11/2008, 05:42
 
Fecha de Ingreso: noviembre-2008
Mensajes: 14
Antigüedad: 15 años, 5 meses
Puntos: 0
Respuesta: El bloque IF no se ejecuta correctamente

ya, pero el tema es que si quito del if esto:

Código PHP:
$sql "UPDATE usuarios SET activo = 1 WHERE id ='$id'";
      
$result mysql_query($sql); 
si que me lo muestra todo bien, me muestra los ECHO del IF y no se modifica el campo ACTIVO, lo que significa que en el codigo lo unico que lo modifica es eso de arriba que está dentro del IF y en ningun caso antes :S
  #18 (permalink)  
Antiguo 07/11/2008, 09:29
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 11 meses
Puntos: 2135
Respuesta: El bloque IF no se ejecuta correctamente

Mmmm entonces es como si se ejecutara dos veces tu archivo, ya que la primera que se ejecuta actualiza a 1, y luego al volver a entrar ya es 1, como es que haces el llamado del archivo?

Saludos.
  #19 (permalink)  
Antiguo 07/11/2008, 09:50
 
Fecha de Ingreso: noviembre-2008
Mensajes: 14
Antigüedad: 15 años, 5 meses
Puntos: 0
Respuesta: El bloque IF no se ejecuta correctamente

tengo un usario en la base de datos con el que hago pruebas, la llamada simplemente la hago con la url, es decir: http://juegoprueba.iespana.es/activar_cuenta.php?n=Rey&p=513985c6a0ef65e7ba4094b d11be41e7
  #20 (permalink)  
Antiguo 07/11/2008, 09:58
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 11 meses
Puntos: 2135
Respuesta: El bloque IF no se ejecuta correctamente

Mmmm pues esta muy raro que se este ejecutando dos veces tu script, ese que publicaste es tu script completo?
  #21 (permalink)  
Antiguo 07/11/2008, 11:34
 
Fecha de Ingreso: noviembre-2008
Mensajes: 14
Antigüedad: 15 años, 5 meses
Puntos: 0
Respuesta: El bloque IF no se ejecuta correctamente

si, completo, hombre falta al principio un "include "conexion.php"" para la base de datos. Pero es que no se, ya lo he probado un monton de veces con variaciones y no va.

Tampoco es que se ejecute 2 veces, por que si se ejecutase 2 veces los ECHO del primer IF los ejecutaria, pero no los ejecuta :S, lo que hace es lo siguiente:

entra en el if, ejecuta el UPDATE y muestra el ECHO que aparece en el ELSE
  #22 (permalink)  
Antiguo 07/11/2008, 12:32
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 11 meses
Puntos: 2135
Respuesta: El bloque IF no se ejecuta correctamente

Podrias volver a poner tu script ya con los cambios que dejaste?

Saludos.
  #23 (permalink)  
Antiguo 07/11/2008, 13:49
 
Fecha de Ingreso: noviembre-2008
Mensajes: 14
Antigüedad: 15 años, 5 meses
Puntos: 0
Respuesta: El bloque IF no se ejecuta correctamente

estaba un pelin mas arriba jeje

Código PHP:
<?php
//Aquí la conexión a la base de datos

$n $_GET['n'];
$p $_GET['p'];

$sql_id "SELECT id, activo FROM usuarios WHERE nick='$n' UNION SELECT id, activo FROM usuarios WHERE password='$p'";
$result_id mysql_query($sql_id);
$valor_id mysql_fetch_array($result_id);
echo 
$valor_id['id'];
echo 
$valor_id['activo'];

$id $valor_id['id'];
if (
$valor_id['activo'] == 0
 {  
      echo 
"este usuario aún no está activo";
      
$sql "UPDATE usuarios SET activo = 1 WHERE id ='$id'";
      
$result mysql_query($sql);
      echo 
"La cuenta se ha activado correctamente";
      
 }
else
 { 
      echo 
"dfdEste usuario ya está activo";
 }

mysql_close();
?>
este es el script con el que me he quedado despues de muchas variaciones probando y probando (pero aun asi este sigue sin ir xD)
  #24 (permalink)  
Antiguo 07/11/2008, 14:06
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 11 meses
Puntos: 2135
Respuesta: El bloque IF no se ejecuta correctamente

Hola RdlP,

Primero checa tu consulta no necesitas hacer el UNION, es redundante, despues trata de castear el valor, yo dejaria tu script asi:
Código php:
Ver original
  1. <?php
  2. //Aquí la conexión a la base de datos
  3.  
  4. $n = $_GET['n'];
  5. $p = $_GET['p'];
  6.  
  7. $sql_id = "SELECT id, activo FROM usuarios WHERE nick='$n' AND password='$p' LIMIT 1";
  8. $result_id = mysql_query($sql_id) or die(mysql_error());
  9. $valor_id = mysql_fetch_array($result_id);
  10. echo $valor_id['id'];
  11. echo $valor_id['activo'];
  12.  
  13. $id = $valor_id['id'];
  14. $activo = (int) $valor_id['activo'];
  15. if ($activo == 0)
  16.  {  
  17.       echo "este usuario aún no está activo";
  18.       $sql = "UPDATE usuarios SET activo = 1 WHERE id ='$id'";
  19.       $result = mysql_query($sql) or die(mysql_error());
  20.       echo "La cuenta se ha activado correctamente";
  21.      
  22.  }
  23. else
  24.  {
  25.       echo "dfdEste usuario ya está activo";
  26.  }
  27.  
  28. ?>

Saludos.
  #25 (permalink)  
Antiguo 07/11/2008, 17:50
 
Fecha de Ingreso: noviembre-2008
Mensajes: 14
Antigüedad: 15 años, 5 meses
Puntos: 0
Respuesta: El bloque IF no se ejecuta correctamente

acabo de probar ese script y me sale el mismo fallo que siempre, mañana seguiré investigando que ahora me voy a la cama que tengo mucho sueño
  #26 (permalink)  
Antiguo 10/11/2008, 09:40
 
Fecha de Ingreso: noviembre-2008
Mensajes: 14
Antigüedad: 15 años, 5 meses
Puntos: 0
Respuesta: El bloque IF no se ejecuta correctamente

Vale, todo solucionado, era el puto host XD (iespana seguramente no ejecuta bien php) me cambié para hacer mis pruebas y demas y todo perfecto :)

Muchas Gracias a todos!
  #27 (permalink)  
Antiguo 10/11/2008, 09:53
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 11 meses
Puntos: 2135
Respuesta: El bloque IF no se ejecuta correctamente

Te recomiendo que tengas un server en tu maquina local, con el puedes hacer muchas cosas y asi ya puedes ver si el problema es el codigo o el host.

Saludos.
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 11:32.