Foros del Web » Programando para Internet » PHP »

Preguntas aleatorias

Estas en el tema de Preguntas aleatorias en el foro de PHP en Foros del Web. 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é ...
  #1 (permalink)  
Antiguo 04/09/2008, 18:14
 
Fecha de Ingreso: septiembre-2008
Mensajes: 4
Antigüedad: 15 años, 7 meses
Puntos: 0
Preguntas aleatorias

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&nbsp;".$pregunta['nom_pre'];
echo "<br>";
}else{
echo "respuesta incorrecta para&nbsp;".$pregunta["nom_pre"].".&nbsp;La respuesta era:&nbsp;".$pregunta["ver_pre"];
echo "<br>";
}
}else{echo "la pregunta no existe";
echo "<br>";
}
}
//foreach
?>

Bueno mil gracias de antemano otra vez!!

Saludos!

SBOL

Última edición por sbol; 04/09/2008 a las 18:24 Razón: Error en título
  #2 (permalink)  
Antiguo 04/09/2008, 23:31
Avatar de emiliodeg  
Fecha de Ingreso: septiembre-2005
Ubicación: Córdoba
Mensajes: 1.830
Antigüedad: 18 años, 7 meses
Puntos: 55
Respuesta: Preguntas aleatorias

bueno vamos por partes

$x=$row['ver_pre']; //¿Cuál es la función de esta línea?

ninguna $x no se vuelve a usar por ende no sirve para nada



el rpincipal problema esta aqui

$id=substr($clave,1,strlen($clave));

ahi lo que hace supuestamente es sacar el id de la pregunta lo cual es falso pq mas arriba cuando pone el nombre del input lo hace por un bucle for que acumula el $i entonces este $i va de 0 a 4 y no concuerda con el id de la pregunta por esto siempre te da mal la repusta

solucion
Código PHP:
case 0// Bloque 1
echo '<input type="radio" name="p'.$row['id'].'" 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'.$row['id'].'" value="'.$row['f1_pre'].'"> '.$row['f1_pre'].' <br>';
break;
case 
2// Bloque 3
echo '<input type="radio" name="p'.$row['id'].'" 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'.$row['id'].'" value="'.$row['f3_pre'].'"> '.$row['f3_pre'].' <br>';
break; 
saludos y espero que ahora todo marche mejor ;)
__________________
Degiovanni Emilio
developtus.com
  #3 (permalink)  
Antiguo 09/09/2008, 12:38
 
Fecha de Ingreso: septiembre-2008
Mensajes: 4
Antigüedad: 15 años, 7 meses
Puntos: 0
Respuesta: Preguntas aleatorias

Mil gracias viejo!

Me salvaste, disculpá la demora en agradecer!

Sbol
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 16:18.