Hola!
Estoy armando un proyecto que consiste en un formulario o cuestionario con preguntas aleatorias. Las respuestas son multiple opción o múltiple choice (type=radio).
Intenté probando un proyecto similar publicado pero no me funciona bien y ese tema parece cerrado, por eso lo publico.
Ojalá puedan orientarme, se los agradezco de antemano...
El formulario arroja correctamente las preguntas aleatorias y sus opciones en formato RADIO, pero al hacer click en enviar, el php que recibe me arroja siempre lo siguiente:
la pregunta no existe
respuesta (correcta/incorrecta) para (Pregunta 1). la respuesta era: (Respuesta 1)
respuesta (correcta/incorrecta) para (Pregunta 2). la respuesta era: (Respuesta 2)
la pregunta no existe
Esto aun cuando la pregunta 1 y la pregunta 2 ni siquiera aparezcan en el formulario. Vean que el primer renglón y el cuarto renglón siempre indica 'la pregunta no existe'.
Mi BD tiene la tabla 'preguntas' y sus campos son:
id = Autoincrementable
nom_pre = la pregunta como tal
ver_pre = la respuesta verdadera
f1_pre = respuesta falsa
f2_pre = respuesta falsa
f3_pre = respuesta falsa
El código del formulario es: (no incluyo todo el HTML para ser concreto)
<form action="registro.php" method="post" name="registro_trivia">
<?
include ("base.php");
$enlace = mysql_connect ($host, $user, $password);
mysql_select_db ($db, $enlace);
$result = mysql_query ("SELECT * FROM preguntas ORDER by rand() LIMIT 5", $enlace);
echo "<br>";
for($i=0 ; $i<5 ; $i++)
{
$row = mysql_fetch_array($result);
echo "<br><br>";
printf("%d %s",$i+1,$row[("nom_pre")]);
echo "<br>";
$num = range(0,3);
shuffle($num);
while (list(,$pregunta) = each($num))
{
$posicion = "$pregunta";
// echo "$pregunta"; // Esta línea la puse como comentario porque me agregaba el 'case' antes de la pregunta y todas las que tienen 0 se decubría que eran las correctas
switch($posicion)
{
case 0: // Bloque 1
echo '<input type="radio" name="p'.$i.'" value="'.$row['ver_pre'].'"> '.$row['ver_pre'].' <br>';
$x=$row['ver_pre']; //¿Cuál es la función de esta línea?
break;
case 1: // Bloque 2
echo '<input type="radio" name="p'.$i.'" value="'.$row['f1_pre'].'"> '.$row['f1_pre'].' <br>';
break;
case 2: // Bloque 3
echo '<input type="radio" name="p'.$i.'" value="'.$row['f2_pre'].'"> '.$row['f2_pre'].' <br>';
break;
case 3: // Bloque 4: Lo agregué porque mi ejemplo lleva 1 verdadera y 3 falsas
echo '<input type="radio" name="p'.$i.'" value="'.$row['f3_pre'].'"> '.$row['f3_pre'].' <br>';
break;
}
}
}
?>
<input name="submit" type="submit" value="Enviar" />
</form>
<?
mysql_free_result($result);
mysql_close($enlace);
?>
Y el código del PHP que recibe es:
<?
include ("atodb.php");
$enlace = mysql_connect ($host, $user, $password);
mysql_select_db ($db, $enlace);
foreach ($_POST as $clave => $valor){
// clave el nombre de la pregunta pXXXX
// la respuesta elegida
// quitamos la p para tener el id de la pregunta
$id=substr($clave,1,strlen($clave));
$resultado=mysql_query("SELECT * FROM preguntas WHERE id='$id' LIMIT 1");
if(mysql_num_rows($resultado)==1){
$pregunta=mysql_fetch_assoc($resultado);
if($pregunta['ver_pre']==$valor){
echo "respuesta correcta para ".$pregunta['nom_pre'];
echo "<br>";
}else{
echo "respuesta incorrecta para ".$pregunta["nom_pre"].". La respuesta era: ".$pregunta["ver_pre"];
echo "<br>";
}
}else{echo "la pregunta no existe";
echo "<br>";
}
}
//foreach
?>
Bueno mil gracias de antemano otra vez!!
Saludos!
SBOL