Foros del Web » Programando para Internet » PHP »

problema con function y foreach

Estas en el tema de problema con function y foreach en el foro de PHP en Foros del Web. buenas, tengo una funcion que devuelve el resultado de una query sql la funcion tiene este codigo: Código PHP: function  listuser (){ $sql = "select * from users order by id asc" ...
  #1 (permalink)  
Antiguo 12/09/2008, 15:03
Avatar de destor77  
Fecha de Ingreso: noviembre-2004
Ubicación: Gálvez, Santa Fe, Argentina
Mensajes: 2.654
Antigüedad: 19 años, 5 meses
Puntos: 43
problema con function y foreach

buenas, tengo una funcion que devuelve el resultado de una query sql

la funcion tiene este codigo:
Código PHP:
function listuser(){
$sql="select * from users order by id asc";
$result=mysql_query($sql);
$row=mysql_fetch_array($result);

return 
$row;

el tema esta que cuando en otra parte de la pagina hago esto:
Código PHP:
$user=listuser();
echo 
"cantidad: ".count($user); 
me tira como resultado 14 cuando solamente tengo 2 registros, y si quiero recorrer el contenido de $user con foreach tampoco funca, en que le estoy errando?

salu2
  #2 (permalink)  
Antiguo 12/09/2008, 15:11
Avatar de .php  
Fecha de Ingreso: julio-2006
Mensajes: 481
Antigüedad: 17 años, 9 meses
Puntos: 5
Respuesta: problema con function y foreach

tienes varias maneras de hacer pruebas para detectar el error ej:

Código PHP:
echo count(listaruser()); 
o en tu misma function

Código PHP:
function listuser(){
  
$sql="select * from users order by id asc";
  
$result=mysql_query($sql);
  
$row=mysql_fetch_array($result);
  echo 
count($row);
  exit;
  return 
$row;

por q de primera se ve bien el codigo. a lo otro limpia tus variables derrepente ahi estan los gran problemas con el unset($variable);


suerte!!!
__________________
~~[FiDeLio]~~
  #3 (permalink)  
Antiguo 12/09/2008, 18:05
Avatar de Triby
Mod on free time
 
Fecha de Ingreso: agosto-2008
Ubicación: $MX->Gto['León'];
Mensajes: 10.106
Antigüedad: 15 años, 8 meses
Puntos: 2237
Respuesta: problema con function y foreach

Código PHP:
function listuser() {
    
$users = array();
    
$sql="select * from users order by id asc";
    
$result=mysql_query($sql);
    
// Te faltaba el bucle para leer todos los usuarios, porque sólo leías un registro
    
while($row=mysql_fetch_array($result))
        
$users[] = $row;
    return 
$users;
}

$users listuser();
echo 
count($users);

// Para saber lo que tienes en $users:
echo '<pre>';
var_dump($users);
echo 
'</pre>'
  #4 (permalink)  
Antiguo 12/09/2008, 18:44
Avatar de destor77  
Fecha de Ingreso: noviembre-2004
Ubicación: Gálvez, Santa Fe, Argentina
Mensajes: 2.654
Antigüedad: 19 años, 5 meses
Puntos: 43
Respuesta: problema con function y foreach

si triby al final hice algo parecido a lo que me indicas, pero no hay forma de pasar con alguna sentencia de mysql directamente un arreglo listo para recorrer?
  #5 (permalink)  
Antiguo 12/09/2008, 22:41
Avatar de Ronruby  
Fecha de Ingreso: julio-2008
Ubicación: 18°30'N, 69°59'W
Mensajes: 4.879
Antigüedad: 15 años, 9 meses
Puntos: 416
Respuesta: problema con function y foreach

El problema esta en que mysql_fetch_assoc te devuelve un array o matriz con todos los datos de la query. Incluyendo los campos.

Usa mysql_num_rows para saber el numero de REGISTROS (No campos) que te devuelve la consulta.
  #6 (permalink)  
Antiguo 13/09/2008, 16:59
Avatar de Triby
Mod on free time
 
Fecha de Ingreso: agosto-2008
Ubicación: $MX->Gto['León'];
Mensajes: 10.106
Antigüedad: 15 años, 8 meses
Puntos: 2237
Respuesta: problema con function y foreach

Cita:
Iniciado por destor77 Ver Mensaje
si triby al final hice algo parecido a lo que me indicas, pero no hay forma de pasar con alguna sentencia de mysql directamente un arreglo listo para recorrer?
Código PHP:
// Elimina la línea del while(...)
// Recoger todo el resultado del query:
$users=mysql_result($result); 
Nunca lo he usado para leer varios registros, pruébalo y haz primero un var_dump($users) para saber como están organizados los datos en la matriz.

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 19:34.