Foros del Web » Programando para Internet » PHP »

update

Estas en el tema de update en el foro de PHP en Foros del Web. Buenas, estoy intentando hacer un update a una tabla en mysql desde php. La cosa es que cuando el usuario se loga y no mete ...
  #1 (permalink)  
Antiguo 10/04/2012, 04:12
Avatar de interjsr  
Fecha de Ingreso: octubre-2011
Ubicación: Madrid
Mensajes: 81
Antigüedad: 12 años, 6 meses
Puntos: 2
update

Buenas, estoy intentando hacer un update a una tabla en mysql desde php. La cosa es que cuando el usuario se loga y no mete la contra correcta incremento los intentos en 1 y cuando es el tercero bloqueo.

id integer
tipo varchar(1)
usuario varchar(12)
contra varchar(12)
bloq varchar (1)
intentos varchar(1)

Y el código:

arriba es si todo está bien y apartir de aquí si no ha ido bien el login
else{
//si no hay usuario con el login/password o está bloqueado puede ser 2 cosas. Pero para ello tienne que existir el usuario:
$sql1 = "SELECT * FROM usuarios WHERE usuario='$f_Usuario'";
$rs1 = mysql_query($sql1, $conn);

//1. Si existe el usuario puede que estuviese mal la contraseña o que ya estuviese bloqueado.
if ($row1 = mysql_fetch_row($rs1))
{
//rescato el valor de intento para saber los intentos fallidos a los que se ha tenido acceso a este usuario.
//Y también el campo bloqueado
$int= $row1[5];
$bloq= $row1[4];
//Si el usuario no está bloqueado.
if ($bloq = '0')
{
//Si tiene menos de 3 intentos
if ($int < '2')
{
$sql = "UPDATE usuarios Set Intentos = Intentos + 1 WHERE Usuario='$f_Usuario'";
//$sql = "UPDATE usuarios Set Intentos = Intentos + 1 WHERE Usuario = '".$f_Usuario."'";
$rs2 = mysql_query($sql,$conn);
header("Location:".$f_Ruta1);
exit();
}
//ya tiene 2 intentos y con este tercero se bloquea el usuario
else
{
$sql = "UPDATE usuarios SET Bloq = '1', Set Intentos = '0' WHERE usuario='$f_Usuario'";
//$sql = "UPDATE usuarios Set Bloq = '1', Set Intentos = '0' WHERE Usuario = '".$f_Usuario."'";
$rs2 = mysql_query($sql,$conn);
header("Location:".$f_Ruta1);
exit();
mysql_free_result($rs2);
}
}
//el usuario está bloqueado directamente lo redirijimos a la misma pantalla, auqneu estuviese bien la contraseña.
else
{
header("Location:".$f_Ruta1);
exit();
}
}
//2.Si no existe usuario redirijimos al mismo sitio.
else
{
header("Location:".$f_Ruta1);
exit();
}
mysql_free_result($rs1);
}
mysql_close($conn);
exit();
  #2 (permalink)  
Antiguo 10/04/2012, 04:39
Avatar de zalito12  
Fecha de Ingreso: noviembre-2011
Ubicación: Coruña, España
Mensajes: 430
Antigüedad: 12 años, 5 meses
Puntos: 67
Respuesta: update

Para facilitar la ayuda y que obtengas una respusta más rápida, deberías decir hasta dónde has llegado o el error que te da y usar las etiquetas [] de PHP.
Y también deberías publicar el código completo, puede que el error este en otro sitio que no esperes además de que al resto nos ayuda saber de donde vienen las variables, por ejemplo: $f_Usuario
Eso sí, lo de comentar el código perfecto!
Ahora miraré el código :)
  #3 (permalink)  
Antiguo 10/04/2012, 04:50
Avatar de interjsr  
Fecha de Ingreso: octubre-2011
Ubicación: Madrid
Mensajes: 81
Antigüedad: 12 años, 6 meses
Puntos: 2
Respuesta: update

Ya lo entinendo, pero si publico el código entero ..., me puedo tirar copiando y pegando 1 día, jejeje. Lo de $f_Usuario sé que funciona porque si pongo un usuario y contraseña correcto funciona, que es el código que hay arriba y no he puesto, el probelma viene en el else: "y si no exsite en bbdd un usuario con ese usuario: $f_usuario o contarseña o sí pero está bloqueado". En realidad, creo que eso es lo de menos y que me estoy confundiendo en el update,en sumar 1, pero no sé.

No me da ningún error, simplemente si pongo una contraseña incorrecta no entra pero no me incrementa en 1 el campo Intentos. Y si lo pongo a fuego directamente en 2 tampogo me bloquea la cuenta, es decir, tampoco me cambia el estado del campo bloq a 1.

Puede que me esté haciendo un lio con las comillas o algo de eso porque antes los tenía como integer, (los campos de Intentos y Bloq) y los ponía sin comillas y he pensado ponerlos como varchar de 1, pero no sé.
  #4 (permalink)  
Antiguo 10/04/2012, 04:56
Avatar de zalito12  
Fecha de Ingreso: noviembre-2011
Ubicación: Coruña, España
Mensajes: 430
Antigüedad: 12 años, 5 meses
Puntos: 67
Respuesta: update

Bueno, yo hecho en falta algo muy importante, en ingun sitio compruebas que la contraseña sea correcta, deberías poner algo de este estilo:
Código PHP:
else{ 
//si no hay usuario con el login/password o está bloqueado puede ser 2 cosas. Pero para ello tienne que existir el usuario:
$sql1 "SELECT * FROM usuarios WHERE usuario='$f_Usuario'";
$rs1 mysql_query($sql1$conn); 

//1. Si existe el usuario puede que estuviese mal la contraseña o que ya estuviese bloqueado.
if ($row1 mysql_fetch_row($rs1))
{
//rescato el valor de intento para saber los intentos fallidos a los que se ha tenido acceso a este usuario.
//*********************** Compruebo contraseña introducida es correcta ******************
if($row1['pass'] != $pass_introducido){
  
//Y también el campo bloqueado
  
$int$row1[5];
  
$bloq$row1[4];
  
//Si el usuario no está bloqueado.
  
if ($bloq '0'){
  
//Si tiene menos de 3 intentos
    
if ($int '2'){
      
$sql "UPDATE usuarios Set Intentos = Intentos + 1 WHERE Usuario='$f_Usuario'";
      
//$sql = "UPDATE usuarios Set Intentos = Intentos + 1 WHERE Usuario = '".$f_Usuario."'";
      
$rs2 mysql_query($sql,$conn);
      
header("Location:".$f_Ruta1); 
      exit();
    }
    
//ya tiene 2 intentos y con este tercero se bloquea el usuario
    
else{
      
$sql "UPDATE usuarios SET Bloq = '1', Set Intentos = '0' WHERE usuario='$f_Usuario'";
      
//$sql = "UPDATE usuarios Set Bloq = '1', Set Intentos = '0' WHERE Usuario = '".$f_Usuario."'";
      
$rs2 mysql_query($sql,$conn);
      
header("Location:".$f_Ruta1); 
      exit();
      
mysql_free_result($rs2); 
    }
  }
  
//el usuario está bloqueado directamente lo redirijimos a la misma pantalla, auqneu estuviese bien la contraseña.
  
else{
    
header("Location:".$f_Ruta1); 
    exit();
  }
}
//****************************** Si la contraseña es correcta  *****************
else{
//Aquí deberás iniciar una sesión
  
header("Location:".$f_RutaX); 
}
}
//2.Si no existe usuario redirijimos al mismo sitio.
else
{
  
header("Location:".$f_Ruta1); 
  exit();
}
mysql_free_result($rs1);

mysql_close($conn);
exit(); 
Recuerda que antes de redirigir a la $f_RutaX Ahora tendrás que iniciar una session y en las páginas dónde quieras restringir el acceso comprobar que el usuario de la sesión existe.
  #5 (permalink)  
Antiguo 10/04/2012, 05:17
Avatar de interjsr  
Fecha de Ingreso: octubre-2011
Ubicación: Madrid
Mensajes: 81
Antigüedad: 12 años, 6 meses
Puntos: 2
Respuesta: update

No, gracias, pero eso ya lo tengo antes de el código que puse. Mi problema es que el código que puse no funciona, los update que hay en él no están bien. Sintácticamente sí porque no dan error pero no hacen nada. Por ellos, por los update, tendrán que pasar porque alguna condición tiene que cumplirse y no puedo poner un echo "pasa por aquí" porque es un php al que llamo de un html con lo cual no el echo no se muestra en pantalla.

Por eso pedí ayuda, para ver si algún experto veía l arazón, porque yo no llevo nada con php y ya, por mucho que miro y busco en google, no veo el error.
  #6 (permalink)  
Antiguo 10/04/2012, 05:30
Avatar de zalito12  
Fecha de Ingreso: noviembre-2011
Ubicación: Coruña, España
Mensajes: 430
Antigüedad: 12 años, 5 meses
Puntos: 67
Respuesta: update

Bueno, por si acaso pon unos echo por ahi para comprobar que $int y $bloq tienen el valor correcto y prueba con este update:

Código PHP:
 $sql "UPDATE usuarios Set Intentos = (Intentos + 1) WHERE Usuario='".$f_Usuario."'"
  #7 (permalink)  
Antiguo 10/04/2012, 05:54
Avatar de DooBie  
Fecha de Ingreso: septiembre-2004
Mensajes: 1.101
Antigüedad: 19 años, 7 meses
Puntos: 71
Respuesta: update

En los if estás asignando, no comparando!
Esto:
Código PHP:
  if ($bloq '0'){ 
Te va a devolver true SIEMPRE, revisa todos los if, por si estas cometiendo el mismo fallo en todos.
  #8 (permalink)  
Antiguo 10/04/2012, 06:14
Avatar de interjsr  
Fecha de Ingreso: octubre-2011
Ubicación: Madrid
Mensajes: 81
Antigüedad: 12 años, 6 meses
Puntos: 2
Respuesta: update

Ok, era eso, lo de == en los if. Y en un update, jejeje, qe tenia dos set, uno para cada campo. Bueno, ya está hecho. Muchas gracias, a veces uno se obceca en algo y ya no ve más, menos mal que tenemos a gente dispuesta a yudar. Gracias otra vez

Etiquetas: mysql, sql, tabla, update, 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 17:51.