Foros del Web » Programando para Internet » PHP »

foreach y query en PHP

Estas en el tema de foreach y query en PHP en el foro de PHP en Foros del Web. Muy buenas, Tengo un problemilla con mi código, y es que me da un error en la linea del ejecución del foreach. Antes de nada, ...
  #1 (permalink)  
Antiguo 19/05/2012, 10:17
 
Fecha de Ingreso: mayo-2012
Mensajes: 5
Antigüedad: 12 años, 6 meses
Puntos: 0
foreach y query en PHP

Muy buenas,

Tengo un problemilla con mi código, y es que me da un error en la linea del ejecución del foreach.

Antes de nada, para situaros un poco, os comento que este codigo pretende comprobar que el usuario y password introducidos en un formulario anteriormente son correctos para así llevarnos al panel de control.

El error es este:
Warning: Invalid argument supplied for foreach() in /Applications/XAMPP/xamppfiles/htdocs/conquers/actions/comprobar-login.php on line 17

Y el código es el siguiente:

Código PHP:
<?php

    
//Incluir

    
include('../includes/mysql.php');
    
//include('../includes/segur.php');

    //Recibe datos del formulario de login
    
$usuario $_POST['usuario'];
    
$pass $_POST['pass'];

    
//Comprueba si existe el usuario

    
$sql "SELECT * FROM Cuentas WHERE Usuario = '".$usuario."' AND Contrasena = '".$pass."'";
    
$query mysql_query($sql);

    foreach (
mysql_fetch_array($query) as $fila) {
        if (
$fila[0] != ""){
            
session_star();
            
session_register("autentificado");
            
session_register("nusuario");
            
$autentificado "SI";
            
$nusuario $fila[0];
            
header ("Location: ../panel-control.php");
        } else {
            
header("Location: ../login.php");
        }

    }
?>
Muchas gracias y saludos.
  #2 (permalink)  
Antiguo 19/05/2012, 10:30
Colaborador
 
Fecha de Ingreso: mayo-2008
Ubicación: $MX['VZ']['Xalapa']
Mensajes: 3.005
Antigüedad: 16 años, 6 meses
Puntos: 528
Respuesta: foreach y query en PHP

No estoy seguro si el problema es que tratas de meter el array de la consulta directo en el foreach o si es por que el array está vacío (no es array).

Imprime lo que te devuelva la consulta para verificar que hay datos.
  #3 (permalink)  
Antiguo 19/05/2012, 10:38
 
Fecha de Ingreso: mayo-2012
Mensajes: 5
Antigüedad: 12 años, 6 meses
Puntos: 0
Respuesta: foreach y query en PHP

Cita:
Iniciado por ocp001a Ver Mensaje
No estoy seguro si el problema es que tratas de meter el array de la consulta directo en el foreach o si es por que el array está vacío (no es array).

Imprime lo que te devuelva la consulta para verificar que hay datos.
He probado a sustituir el contenido a ejecutar del if y del else por mostrar un text pero nada, el mismo error.
  #4 (permalink)  
Antiguo 19/05/2012, 10:41
Avatar de gjx2  
Fecha de Ingreso: agosto-2008
Ubicación: R.D
Mensajes: 1.153
Antigüedad: 16 años, 3 meses
Puntos: 139
Respuesta: foreach y query en PHP

El error es por que foreach espera que el valor devuelto por mysql_fetch_array sea un array
y si en tu consulta no existe ningún usuario con ese password la funcion mysql_fetch_array en vez de retornate un array devolvera falso y por eso se produce el error.

Pero también mas allá del error hay algo mas que es asunto de logica.

Si andas buscando solo el usuario que coincida con el nombre y el password que le estas pasando, por que tienes que meter el resultado en un bucle ?

Puedes hacer uso de mysql_num_rows para comprobar si la consulta arrojo resultados

eje.

Código PHP:
Ver original
  1. $sql = "SELECT * FROM Cuentas WHERE Usuario = '".$usuario."' AND Contrasena = '".$pass."'";
  2.     $query = mysql_query($sql);
  3.  
  4. # Verifico si arrojo datos la consulta.
  5. if (mysql_num_rows($query)){
  6.  
  7. # El usuario y password son validos  
  8. $fila = mysql_fetch_array($query);     
  9.  
  10. } else {
  11.  
  12. # El usuario y password no son validos.
  13.  
  14. }

Saludos.
  #5 (permalink)  
Antiguo 19/05/2012, 10:42
Colaborador
 
Fecha de Ingreso: mayo-2008
Ubicación: $MX['VZ']['Xalapa']
Mensajes: 3.005
Antigüedad: 16 años, 6 meses
Puntos: 528
Respuesta: foreach y query en PHP

¿Pero no verificaste el contenido de la consulta?

Antes del foreach trata de hacer lo siguiente:
$resultado=mysql_fetch_array($query);
var_dump($resultado);

Si $resultado contiene algo, quizá el problema sea que en la versión de php que usas no puedes pasar el resultado directamente al foreach.
  #6 (permalink)  
Antiguo 19/05/2012, 10:57
 
Fecha de Ingreso: mayo-2012
Mensajes: 5
Antigüedad: 12 años, 6 meses
Puntos: 0
Respuesta: foreach y query en PHP

Cita:
Iniciado por gjx2 Ver Mensaje
El error es por que foreach espera que el valor devuelto por [URL="http://www.php.net/manual/es/function.mysql-fetch-array.php"]mysql_fetch_array [/URL] sea un array
y si en tu consulta no existe ningún usuario con ese password la funcion [URL="http://www.php.net/manual/es/function.mysql-fetch-array.php"]mysql_fetch_array [/URL] en vez de retornate un array devolvera falso y por eso se produce el error.

Pero también mas allá del error hay algo mas que es asunto de logica.

Si andas buscando solo el usuario que coincida con el nombre y el password que le estas pasando, por que tienes que meter el resultado en un bucle ?

Puedes hacer uso de [URL="http://www.php.net/manual/es/function.mysql-fetch-row.php"]mysql_num_rows [/URL]para comprobar si la consulta arrojo resultados

eje.

Código PHP:
Ver original
  1. $sql = "SELECT * FROM Cuentas WHERE Usuario = '".$usuario."' AND Contrasena = '".$pass."'";
  2.     $query = mysql_query($sql);
  3.  
  4. # Verifico si arrojo datos la consulta.
  5. if (mysql_num_rows($query)){
  6.  
  7. # El usuario y password son validos  
  8. $fila = mysql_fetch_array($query);     
  9.  
  10. } else {
  11.  
  12. # El usuario y password no son validos.
  13.  
  14. }

Saludos.
Tienes toda la razón, el problema era de que no había ningún array, de ahí el error. De todas maneras, no se por qué me sale de qué no hay ninguno cuando en realidad si debe haberlo...

Muchas gracias por vuestras respuestas.

Última edición por JuninhoP; 19/05/2012 a las 11:03
  #7 (permalink)  
Antiguo 19/05/2012, 11:09
 
Fecha de Ingreso: mayo-2012
Mensajes: 5
Antigüedad: 12 años, 6 meses
Puntos: 0
Respuesta: foreach y query en PHP

Para no recargar el comentario anterior os comento el error que tengo.

He simplificado de momento el código de comprobación de usuario para que me diga con un comentario si existe en la tabla de Cuentas de la base de datos el usuario y contraseña enviados.

He aquí el código del formulario:

Código HTML:
Ver original
  1. <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="es" lang="es">
  2.  
  3.     <head>
  4.         <title>Login</title>
  5.     </head>
  6.  
  7.     <body>
  8.         <h1> Formulario de Acceso</h1>
  9.         <form name ="login" enctype="multipart/form-data" method="POST" action="actions/comprobar-login.php">
  10.             <label for="usuario"> Usuario: </label> <br />
  11.             <input type="text" name="usuaro" id="usuario"> <br />
  12.             <label for="pass">Password: </label> <br />
  13.             <input type="text" name="pass" id="pass"> <br />
  14.             <input type="submit" value= "Entrar">
  15.  
  16.         </form>
  17.     </body>
  18.  
  19. </html>

Y aquí el codigo de comprobación de usuario:

Código PHP:
Ver original
  1. <?php
  2.  
  3.     //Incluir
  4.  
  5.     include('../includes/mysql.php');
  6.     //include('../includes/segur.php');
  7.  
  8.     //Recibe datos del formulario de login
  9.     $usuario = $_POST['usuario'];
  10.     $pass = $_POST['pass'];
  11.  
  12.     //Comprueba si existe el usuario
  13.  
  14.     $sql = "SELECT * FROM Cuentas WHERE Usuario = '".$usuario."' AND Contrasena = '".$pass."'";
  15.     $query = mysql_query($sql);
  16.  
  17.     if (mysql_num_rows($query)){
  18.         $fila = mysql_fetch_array($query);
  19.         echo 'Hay datos';
  20.         } else {
  21.             echo 'No hay datos';
  22.         }
  23. ?>

El caso es que en la base de datos si que tengo ese usuario y esa contraseña, pero siempre me sale de que no hay datos, por qué puede ser? Gracias de nuevo.
  #8 (permalink)  
Antiguo 19/05/2012, 11:17
Avatar de gjx2  
Fecha de Ingreso: agosto-2008
Ubicación: R.D
Mensajes: 1.153
Antigüedad: 16 años, 3 meses
Puntos: 139
Respuesta: foreach y query en PHP

Verifica por que el campo de usuario se llama usuaro y lo estas recibiendo como $_POST['usuario']

Saludos.
  #9 (permalink)  
Antiguo 19/05/2012, 11:24
 
Fecha de Ingreso: mayo-2012
Mensajes: 5
Antigüedad: 12 años, 6 meses
Puntos: 0
Respuesta: foreach y query en PHP

Cita:
Iniciado por gjx2 Ver Mensaje
Verifica por que el campo de usuario se llama usuaro y lo estas recibiendo como $_POST['usuario']

Saludos.
Mira que he revisado el código mil veces para que no fuera un fallo de ese tipo...
Muchas gracias!

Etiquetas: foreach, formulario, mysql, query, sql, 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 13:07.