Foros del Web » Programando para Internet » PHP »

Undefined offset

Estas en el tema de Undefined offset en el foro de PHP en Foros del Web. Tengo esto: Cita: $sql = "SELECT DISTINCT campo FROM tabla WHERE campo1 = '$var1' && campo2 = '$var2' ORDER BY id ASC"; $query = mysqli_query($conexion, ...
  #1 (permalink)  
Antiguo 11/06/2011, 18:00
Avatar de Gambinoh  
Fecha de Ingreso: diciembre-2010
Mensajes: 348
Antigüedad: 14 años
Puntos: 11
Undefined offset

Tengo esto:

Cita:
$sql = "SELECT DISTINCT campo FROM tabla WHERE campo1 = '$var1' && campo2 = '$var2' ORDER BY id ASC";

$query = mysqli_query($conexion, $sql);

[...]

for ($i = 0; $fila = mysqli_fetch_array($query); $i++) {
echo $fila[$i] ;
}
Y sólo se me imprime el primer resultado, en los demás me aparece el error "Undefined offset", he buscado, y parece que usando el bucle while hay que guardar el array en una variable diferente, pero no me queda claro. ¿Alguien me puede explicar porqué sucede esto?
  #2 (permalink)  
Antiguo 11/06/2011, 18:26
Avatar de masterpuppet
Software Craftsman
 
Fecha de Ingreso: enero-2008
Ubicación: Montevideo, Uruguay
Mensajes: 3.550
Antigüedad: 16 años, 10 meses
Puntos: 845
Respuesta: Undefined offset

Que tal Gambinoh,

Deberías mirar lo que estas haciendo, $fila es un array con una sola key, "campo" y $i es un contador que va de 0 al total de registros que te traiga la query, por eso funciona la primera vez, porque es un solo campo, si trajeras en tu select 3 campos haría el loop 3 veces sin problemas y luego ser iria de los limites.

Podría ser asi:

Código PHP:
Ver original
  1. for (; $fila = mysqli_fetch_array($query);) {
  2.     echo $fila[0] . PHP_EOL;
  3. }

o

Código PHP:
Ver original
  1. for (; $fila = mysqli_fetch_array($query);) {
  2.     echo $fila['campo'] . PHP_EOL;
  3. }

Saludos.
__________________
http://es.phptherightway.com/
thats us riders :)
  #3 (permalink)  
Antiguo 11/06/2011, 19:05
Avatar de Gambinoh  
Fecha de Ingreso: diciembre-2010
Mensajes: 348
Antigüedad: 14 años
Puntos: 11
Respuesta: Undefined offset

Cita:
Iniciado por masterpuppet Ver Mensaje
Que tal Gambinoh,

Deberías mirar lo que estas haciendo, $fila es un array con una sola key, "campo" y $i es un contador que va de 0 al total de registros que te traiga la query, por eso funciona la primera vez, porque es un solo campo, si trajeras en tu select 3 campos haría el loop 3 veces sin problemas y luego ser iria de los limites.
Tal vez el problema esté en el query... el campo tiene muchos valores, sin embargo en total son 10 diferentes valores que se repiten.

Por ejemplo: campo > pelota, coche, pelota, coche, pelota, moto, moto, pelota...

Yo pensé que con "SELECT DISTINCT campo FROM tabla WHERE campo1 = '$var1' && campo2 = '$var2' ORDER BY id ASC" podría listar cada uno de esos diferentes valores por orden de id ascendente en la tabla.

Asumía que el array recogido por $fila podía ser recorrido puesto que tenía más de un valor, y con los índices numéricos no había problema.

Gracias por la aclaración de todas maneras.

P.S. ¿Cómo puedo hacerlo entonces?
  #4 (permalink)  
Antiguo 11/06/2011, 19:41
Avatar de masterpuppet
Software Craftsman
 
Fecha de Ingreso: enero-2008
Ubicación: Montevideo, Uruguay
Mensajes: 3.550
Antigüedad: 16 años, 10 meses
Puntos: 845
Respuesta: Undefined offset

Tienes un campo que tiene valores separados por coma ?, estas violando la 1FN ademas de todos los problemas e inconvenientes que tiene hacer algo así, pero dejando esto de lado podrias hacer un explode sobre el campo e iterar sobre este resultado.

Saludos.
__________________
http://es.phptherightway.com/
thats us riders :)
  #5 (permalink)  
Antiguo 12/06/2011, 02:59
Avatar de Gambinoh  
Fecha de Ingreso: diciembre-2010
Mensajes: 348
Antigüedad: 14 años
Puntos: 11
Respuesta: Undefined offset

Cita:
Iniciado por masterpuppet Ver Mensaje
Tienes un campo que tiene valores separados por coma ?, estas violando la 1FN ademas de todos los problemas e inconvenientes que tiene hacer algo así, pero dejando esto de lado podrias hacer un explode sobre el campo e iterar sobre este resultado.

Saludos.
Ops, no, disculpa me he expresado mal.

Tengo un campo (o sea, una columna de la tabla), que tiene un valor para cada fila.

Cita:
ID -- CAMPO1 CAMPO2 CAMPO3
1 --- coche
2 --- moto
3 --- coche
4 --- moto
5 --- pelota
6 --- pelota...
Como los posibles valores de "CAMPO1" se repiten, yo quería que el array devuelto por la función mysqli_fetch_array, solamente almacenara 1 valor de cada tipo de los que tiene "CAMPO1". O sea, que no se repita en el array el valor coche 2 veces.
  #6 (permalink)  
Antiguo 12/06/2011, 05:41
Avatar de masterpuppet
Software Craftsman
 
Fecha de Ingreso: enero-2008
Ubicación: Montevideo, Uruguay
Mensajes: 3.550
Antigüedad: 16 años, 10 meses
Puntos: 845
Respuesta: Undefined offset

Es que en ese caso con lo que puse antes debería funcionar, te dio algún error ?
__________________
http://es.phptherightway.com/
thats us riders :)
  #7 (permalink)  
Antiguo 12/06/2011, 06:44
Avatar de Gambinoh  
Fecha de Ingreso: diciembre-2010
Mensajes: 348
Antigüedad: 14 años
Puntos: 11
Respuesta: Undefined offset

Cita:
Iniciado por masterpuppet Ver Mensaje
Es que en ese caso con lo que puse antes debería funcionar, te dio algún error ?
No, está perfecto, ya funciona.

Dado que no necesito usar ni la expresión primera ni la segunda del bucle for, he optado por usar while, y me ha quedado así:

Código PHP:
Ver original
  1. $sql = "SELECT DISTINCT campo FROM tabla WHERE campo1 = '$var1' && campo2 = '$var2' ORDER BY id ASC";
  2.  
  3. $query = mysqli_query($conexion, $sql);
  4.  
  5. while ($fila = mysqli_fetch_array($query)) {
  6.       echo $fila['campo'];
  7. }

El error estaba en que yo quería usar la variable de control del bucle for para recorrer el array conforme se iba autoincrementando, cuando de hecho no es necesario y basta con la condición "$fila = mysqli_fetch_array($query)".

Supongo que al escribir $fila['1'] tal vez hacía mal y había que escribir $fila['campo']['1'] aún sin ser un array multidimensional... (de esto último no estoy seguro).

Etiquetas: offset, undefined
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:04.