Foros del Web » Programando para Internet » PHP »

Un raro problema

Estas en el tema de Un raro problema en el foro de PHP en Foros del Web. Hola: Estoy generando un arreglo en donde ingreso los id de un registro. Al momento de imprimir el id dentro de un while, me imprime ...
  #1 (permalink)  
Antiguo 10/11/2003, 23:09
 
Fecha de Ingreso: julio-2002
Ubicación: Rancagua - Chile
Mensajes: 494
Antigüedad: 15 años, 5 meses
Puntos: 0
Un raro problema

Hola:
Estoy generando un arreglo en donde ingreso los id de un registro. Al momento de imprimir el id dentro de un while, me imprime bien los id. Los agrego al arreglo y luego le hago un "implode" y ese valor lo paso en una variable de formulario, pero esa variable no contiene todos los id que deberia, solo me llega el ultimo id. Es decir, tengo tres evaluaciones, con id=1, id=2, id=3. Recorro el while y logro imprimir 1-2-3 , pero la variable del formulario solo contiene el 3.
Aca el codigo:


Código PHP:
$consulta=mysql_query("select id_eval,id_tipo,id_curso from evaluaciones where id_curso='".$curso."' order by id_eval");
while($row=mysql_fetch_array($consulta))
{
    if($row["id_tipo"]==1){
         $certamen=$certamen+1;
        $cc=1;
        $id_cert[$pos_cert]=$row["id_eval"];
        $post_cert=$post_cert+1;
        if($certamen>$maximo) 
            $maximo=$certamen;
        $eval_cert=implode(",",$id_cert);
        }
}


 <input name="certata" type="hidden" id="cert" value="<? echo $eval_cert;?>">
    
    <input name="enviar" type="submit" id="enviar" value="Enviar" onClick="Validar(this.form)">
    <input type="reset" name="Reset" value="Limpiar">
Espero que me logren entender y me puedan ayudar.

Salu2
__________________
AK.T.I.V.E.tm Live, Never DIE
  #2 (permalink)  
Antiguo 11/11/2003, 00:06
Avatar de jpinedo
Colaborador
 
Fecha de Ingreso: septiembre-2003
Ubicación: Lima, Perú
Mensajes: 3.120
Antigüedad: 14 años, 2 meses
Puntos: 41
La verdad es que no sé que estás haciendo (o mejor.. para qué sirve)... lo que te puedo decir son algunas cosas ahora que ví tu código:
-Creo que ese if ($row["id_tipo"]==1) no es necesario, pues puedes incluirlo en la consulta sql con un "AND" así:
"select id_eval,id_tipo,id_curso from evaluaciones where id_curso='".$curso."' and id_tipo=1 order by id_eval";

-Otra: si $post_cert est,a inicializado en 0, no hace falta que escribas
$id_cert[$post_cert]=$row["id_eval"];
$post_cert=$post_cert+1;

Bastará con que pongas:
$id_cert[]=$row["id_eval"];

Porque el índice del array definido así se autoincrementa.

-También creo que debes sacar el implode del bucle while para que se ejecute sólo al final.

Yo haría tu código así:
Código PHP:
$sql="select id_eval,id_tipo,id_curso from evaluaciones where id_curso='".$curso."' and id_tipo='1' order by id_eval");
$consulta=mysql_query($sql) or die ("Error en la consulta: ".mysql_error());//Así verificas si se produce error a la hora de la consulta.
$certamen=mysql_num_rows($consulta);//Te devuelve el total de registros encontrados.
while($row=mysql_fetch_array($consulta)){
    
$cc=1;//para qué sirve??.. si es para indicar que se encontró al menos un registro, puedes verificar que $certamen > 0
    
$id_cert[]=$row["id_eval"];
}
if(
$certamen>$maximo){ 
    
$maximo=$certamen;
}
$eval_cert=implode("-",$id_cert); 
Aunque se puede optimizar más, utilizando count(*) en lugar de num_rows... etc..

Saludos

Última edición por jpinedo; 11/11/2003 a las 00:09
  #3 (permalink)  
Antiguo 11/11/2003, 00:32
Avatar de jpinedo
Colaborador
 
Fecha de Ingreso: septiembre-2003
Ubicación: Lima, Perú
Mensajes: 3.120
Antigüedad: 14 años, 2 meses
Puntos: 41
Ahora.. así ya ni siquiera necesitas pedir el id_curso, ni el id_tipo como resultado... basta que lo pongas como condición en el where y si no vas a imprimir los resultados (como parce que no haces), tampoco necesitas el order by... o sea que (si no utilizas esos valores para nada más), tu consulta sql puede quedar así:
$sql="select id_eval from evaluaciones where id_curso='".$curso."' and id_tipo='1'");

Saludos
  #4 (permalink)  
Antiguo 11/11/2003, 06:49
 
Fecha de Ingreso: julio-2002
Ubicación: Rancagua - Chile
Mensajes: 494
Antigüedad: 15 años, 5 meses
Puntos: 0
Gracias...
El tema de porque hago el If($row["id_eval"]==1) es por que hay varios tipos, en cuyo caso maximo podria ser hasta el 10, y para el cual creo que voy a usar un case.
Mi problema es que he hecho el implode en diferentes lugares, pero no logro hacer que llegue bien el arreglo. No he tratado separandolo por otro caracter como el que pusiste tu, asi que voy a probarlo y mas tarde te cuento.

Gracias

Salu2
__________________
AK.T.I.V.E.tm Live, Never DIE
  #5 (permalink)  
Antiguo 11/11/2003, 08:17
 
Fecha de Ingreso: julio-2002
Ubicación: Rancagua - Chile
Mensajes: 494
Antigüedad: 15 años, 5 meses
Puntos: 0
Ahora funciono......
Estas seguro que los arreglos funcionan de esa forma, sin necesidad de incrementando su indice ??

Gracias y Salu2
__________________
AK.T.I.V.E.tm Live, Never DIE
  #6 (permalink)  
Antiguo 11/11/2003, 08:27
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Si te refieres a esto KillerBKS ...

Código PHP:
$id_cert[]=$row["id_eval"]; 
Si, es perfectamente válido: se incrementa automáticamente el indice del array a cada petición de esa variable (array) que hagas .. ejemplo .. en interacciones de un bucle (como es tu caso). El indice inicial empieza en 0 ...

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #7 (permalink)  
Antiguo 11/11/2003, 08:57
Ex Colaborador
 
Fecha de Ingreso: junio-2002
Mensajes: 9.091
Antigüedad: 15 años, 5 meses
Puntos: 16
Hola,

El $id_cert[]=$row["id_eval"]; es equivalente a array_push() (www.php.net/array_push).

Saludos.
__________________
Josemi

Aprendiz de mucho, maestro de poco.
  #8 (permalink)  
Antiguo 11/11/2003, 09:09
 
Fecha de Ingreso: julio-2002
Ubicación: Rancagua - Chile
Mensajes: 494
Antigüedad: 15 años, 5 meses
Puntos: 0
Gracias nuevamente

Salu2
__________________
AK.T.I.V.E.tm Live, Never DIE
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:46.