Foros del Web » Programando para Internet » PHP »

Error con implode cada par de reloads

Estas en el tema de Error con implode cada par de reloads en el foro de PHP en Foros del Web. Pués tengo una especie de programilla que utiliza la función implode antes de pasar el array vía sesión (lo hice así para evitarme lios), pero ...
  #1 (permalink)  
Antiguo 30/08/2004, 04:07
Avatar de yoseman  
Fecha de Ingreso: diciembre-2003
Ubicación: Alicante (Spain)
Mensajes: 471
Antigüedad: 20 años, 4 meses
Puntos: 5
Error con implode cada par de reloads

Pués tengo una especie de programilla que utiliza la función implode antes de pasar el array vía sesión (lo hice así para evitarme lios), pero cual es mi sorpresa cuando veo que cada dos veces que recargo la página (es un formulario) da error y no entiendo el porqué.

Si alguién se ha topado alguna vez con ese problema, yo desde luego no entiendo. Dejo el código, aunque es un simple implode(bueno varios) entre un lio del demonio:

Código PHP:
<?
session_start
(); 
include(
'./cabeza.php');
?>
<html>
<head>
    <title>Juego de preguntas</title>
</head>
<script language="JavaScript"> 
var inicio;
var fin;
var nume;
function calcular(){
fin = new Date();
var nume = Math.round((fin-inicio)/1000); 
document.forms[0].tiempo.value=nume;
}
</script>
<body onload="inicio=new Date();">
<link rel="stylesheet" href="./zoneCopper.css" type="text/css">
<form action="c.php" onsubmit="calcular()" method="post">
<input type="hidden" name="tiempo" />
<?
include('config.php');
$tabla="preguntas";
$result mysql_query("SELECT * FROM $tabla ORDER BY Rand() LIMIT 20"); 
$cont1=-1;
unset(
$correcta);
unset(
$id);
$td=mysql_num_fields($result);
while (
$registro mysql_fetch_row($result))
    {
       
$cont=-1;$cont1++;
       
$conta=4;
       
$cadena=rand(4,7);
       while (
$conta<7)
            {
            
$ara=rand(4,7);
            if (!
ereg($ara,$cadena))
                {
                
$cadena.=".$ara";
                
$conta++;
                }
            }
       
$ran=explode(".",$cadena);
       foreach(
$registro  as $clave)
           {
              
$cont++;
            
$num=($cont>=4) ? $ran[$cont-4] : $cont;
            
$matriz[$cont1][$num]=htmlspecialchars($clave);
            switch(
$cont)
               {
                case 
"4":
                
$correcta[$cont1]=$ran[$cont-4]-3;break;
                case 
"5":
                
$inc1[$cont1]=($ran[$cont-4]-3);break;
                case 
"6":
                
$inc2[$cont1]=($ran[$cont-4]-3);break;
                case 
"7":
                
$inc3[$cont1]=($ran[$cont-4]-3);break;
                case 
"0":
                
$id[$cont1]=$matriz[$cont1][$num];break;
                }
            }
    }
$correcta=implode(".",$correcta);
$inc1=implode(".",$inc1);
$inc2=implode(".",$inc2);
$inc3=implode(".",$inc3);
$id=implode(".",$id);
$_SESSION["respuestas"]= $correcta
$_SESSION["idp"]= $id
$_SESSION["inc1"]= $inc1;
$_SESSION["inc2"]= $inc2
$_SESSION["inc3"]= $inc3
?>
<table class="forumline" align="center"width="95%"><?
for ($i=0;$i<20;$i++)
    {
?>
        <tr><td class="row1"><?
        
print "\n<center><br>Enviada por:<b>".$matriz[$i][1]."</b>\n<br>Tema:<b>".$matriz[$i][2]."\n</b>\n<br>Pregunta:<br><b><span style=\"color:#FFFFFF\">".$matriz[$i][3]."</span></b><br><br>\n</center></td></tr>\n<tr><td class=\"row2\"  align=\"left\" style=\"padding:20px;\">\n<br>";
        for (
$j=4;$j<8;$j++)
            {
            if (
$matriz[$i][$j]!="")
                {
                print
"\n";?>
                <input align="left" name="<?=$i?>" type="radio" value="<?=$j?>">&nbsp;&nbsp;&nbsp;&nbsp;<?=$matriz[$i][$j]?>
                <br><?
                
}
            }
?>
            <br></td></tr><?
    
}
?>
<tr>
<td align="center"><br /><br />
<input style="{
background: #000000; color:#9999AA; font:11px Verdana,Arial,Helvetica,sans-serif}" type="submit" value="Responder!"/><br /><br />
</td></tr>
</form>
</table>
</BODY>
El error sale aquí http://elotrositio.tuarrobanet.com/a.php

Salu2 ;)
__________________
[+]
[+]

Última edición por yoseman; 30/08/2004 a las 04:20
  #2 (permalink)  
Antiguo 30/08/2004, 04:13
Avatar de yoseman  
Fecha de Ingreso: diciembre-2003
Ubicación: Alicante (Spain)
Mensajes: 471
Antigüedad: 20 años, 4 meses
Puntos: 5
Pués después de leer los hilos que hay sobre implode en php.net resulta que dicen que conviene incializar las variables como arrays, no lo entiendo, porque los creo antes del implode índice a índice, pero el caso es que he añadido esto antes de crearlos:

Código PHP:
$correcta=array();
$inc1=array();
$inc2=array();
$inc3=array();
$id=array(); 
Y me funciona... (que verguenza en 5 minutos me hubiese ahorrado molestar)

Ojalá todo se solucionase así de deprisa...

Gracias de todas formas(sigo sin entender por qué hay que inicializar sí luego creo el array índice a índice pero al menos funciona)

Salu2 ;)
__________________
[+]
[+]
  #3 (permalink)  
Antiguo 30/08/2004, 04:31
Ex Colaborador
 
Fecha de Ingreso: junio-2002
Mensajes: 9.091
Antigüedad: 21 años, 10 meses
Puntos: 16
Hola,

¿Cual era el error? ¿El de "variable no es un array"? ¿Has comprobado que siempre se creaban los 5 arrays? Puede que en alguna circunstancia no se genere alguno de los arrays tal como creias. Por ejemplo, si $cont no vale nunca 7 cuando entra en el switch, entonces no se crea el array $inc3.

El codigo esta bastante liado como para realizarle un seguimiento "a mano alzada" sin saber para que haces cada cosa.

Con esa inicializacion te ahorras el error en caso de que tu codigo no genere los arrays. Implode() necesita que el parametro sea un array.

Saludos.
__________________
Josemi

Aprendiz de mucho, maestro de poco.
  #4 (permalink)  
Antiguo 30/08/2004, 04:43
Avatar de yoseman  
Fecha de Ingreso: diciembre-2003
Ubicación: Alicante (Spain)
Mensajes: 471
Antigüedad: 20 años, 4 meses
Puntos: 5
Es que lo más curioso de todo es que al principio, no me daba ése error, cómo estaba elaborando la cosa, hacía un print de las variables resultantes del implode y en ningún caso dejaba de crearse ninguna. Pero fue al quitar el print cuando dió esos error. Todo será cuestión de ordenar un poquillo la cosa jajajaja .

Gracias por tu respuesta.

Salu2 ;)
__________________
[+]
[+]
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 07:16.