Foros del Web » Programando para Internet » PHP »

Generar un examen tipo test con php

Estas en el tema de Generar un examen tipo test con php en el foro de PHP en Foros del Web. Hola a todos!! Tengo que realizar una aplicación web en la que la gente se pueda descargar examenes tipo test para realizarlos.Los examenes constarían de ...
  #1 (permalink)  
Antiguo 12/10/2005, 11:55
 
Fecha de Ingreso: abril-2005
Mensajes: 287
Antigüedad: 19 años
Puntos: 0
Generar un examen tipo test con php

Hola a todos!!

Tengo que realizar una aplicación web en la que la gente se pueda descargar examenes tipo test para realizarlos.Los examenes constarían de una serie de preguntas y cada pregunta tendria 3 0 4 respuestas.El problema es que no se como implementar el código que me posibilte cargar las preguntas desde una base de datos.Espero que alguien me pueda ayudar.Gracias

Saludos
  #2 (permalink)  
Antiguo 12/10/2005, 12:44
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
Podrías ver en sitios como www.hotscripts.com sistemas ya hechos (normalmente contestando ahí mismo sobre la web el test más que generar uno "imprimible").

Si lo quieres hacer tu .. empieza por la base: diseña tu Base de datos ..

Podría ser un modelo tipo:

tabla preguntas
id_pregunta (autonumérico y único)
la_pregunta

tabla respuestas u opciones
id_respuestas (autonumerico y ínico)
id_pregunta <--- clave foránea . .realción con la pregunta
opcion (la opción .. frase)
verdadera (si/no)

Ahí se relacionan las preguntas con las opciones en relación 1->N .. se indica en cada opción si es la correcta (por si quieres hacer algún examen en línea o simplemente por otro médio (manual o no) cargar las respuestas que diero y generar la evaluación al instante del test.

Entiendes eso? .. sino es así .. www.mysql-hispano.com tienes muchos tutoriales sobre "normalización" y diseño de Base de datos (orientado a Mysql).

Cuando eso lo tengas claro .. puedes ir "simulando" tu aplicación sobre tu gestor de BD preferido (phpMyadmin? .. el que uses) .. el siguiente paso sería crear las consultas SQL para generar esas preguntas y sus respuestas. Por último si de esos datos deseas generar por ejemplo un PDF (no es mala idea si necesitas generar ese documento para "imprimir") puedes usar la classe: FPDF (www.fpdf.org)

Un saludo,
  #3 (permalink)  
Antiguo 12/10/2005, 14:43
Avatar de yoseman  
Fecha de Ingreso: diciembre-2003
Ubicación: Alicante (Spain)
Mensajes: 471
Antigüedad: 20 años, 4 meses
Puntos: 5
Hola,

Yo hice una aplicación parecida a lo que tu dices y tengo los scripts y el modelo de db que utilice...

Lo pongo por sí te sirve de ayuda.

Supuesto de base de datos:
Código:
CREATE TABLE preguntas (
  id mediumint(8) unsigned NOT NULL default '0',
  pregunta text,
  correcta text,
  incorrecta1 text,
  incorrecta2 text,
  incorrecta3 text,
  PRIMARY KEY  (id)
) TYPE=MyISAM;
Generar formulario html con name de radio buttons aleatorios y con mezclado de orden de preguntas.
Código:
<? 
session_start();
// conexion db
?>
<style>
* {font-size:10px}
</style>
<br>
<form action="resultados.php" method="post"><?
// sacamos X preguntas al hazar
$hacer_trampa=1;  // 1 hacer trampa 0 no hacer trampa
$numero_de_preguntas=10;  //numero de preguntas que se sacarán al hazar
$sql="SELECT * FROM preguntas ORDER BY RAND() LIMIT $numero_de_preguntas";
if ($sql=mysql_query($sql))
{
	$a=0;
	while($assoc=mysql_fetch_assoc($sql))
	{
		$pregunta[]=$assoc['pregunta'];
		$respuesta[$a][0]=$assoc['correcta'];
		$respuesta[$a][1]=$assoc['incorrecta1'];
		$respuesta[$a][2]=$assoc['incorrecta2'];
		$respuesta[$a][3]=$assoc['incorrecta3'];
		$_SESSION['id_pregunta'][$a]=$assoc['id'];
		$a++;
	}	
	mysql_free_result($sql);
	foreach($pregunta as $indice=>$valor)
	{
		// Mezclamos y sacamos nuevo id de correcta 
		$arrayAleatorio = range(0, 3);
		shuffle($arrayAleatorio);
		$nuevoIdCorrecta=array_search("0",$arrayAleatorio);
		$_SESSION['array'][$indice]=$arrayAleatorio;
		print "<b>$valor</b><br>\n";
		foreach($arrayAleatorio as $indice1=>$valor1)
			print "<input type=\"radio\" name=\"Pregunta".$indice."\" value=\"".$valor1."\"  />". $respuesta[$indice][$arrayAleatorio[$valor1]] . ( ( $valor1 == $nuevoIdCorrecta && $hacer_trampa) ? " correcta" : "" ) . "<br />\n";
	}
}?>
<INPUT TYPE="submit" name="respuestas" value="Respuestas">
Script que recibe el formulario y muestra aciertos:
Código:
<? 
session_start();
// conexion db
?>
<style>
* {font-size:12px}
.acierto{border:2px solid #336699;background:#eeeeff;text-align:center}
.fallo{border:2px solid #996633;background:#ffeeee;text-align:center}
.acierto1{background:#eeeeff;text-align:center}
.fallo1{background:#ffeeee;text-align:center}
.pregunta{background:#eeffee;text-align:center}
</style>
<table border="1" align="center" width="100%">
<tr>
<th>Pregunta</th>
<th>Correcta</th>
<th>Incorrecta1</th>
<th>Incorrecta2</th>
<th>Incorrecta3</th>
</tr><?
if (is_array($_SESSION['id_pregunta']))
foreach ($_SESSION['id_pregunta'] as $key=>$value)
{
		$sql="SELECT * FROM preguntas WHERE id=".$value;
		if ($sql=mysql_query($sql))
		{?><tr><?
			$assoc=mysql_fetch_assoc($sql);
			$envio=$_SESSION['array'][$key];
			$correcta=array_search("0",$envio);
			$value1=$_POST['Pregunta'.$key];
			print "<td class=\"pregunta\"><b><tt>".$assoc['pregunta']."</b></tt></td>\n";
			print "<td".( ( array_search("0",$envio) == $value1 && $value1!="") ? " class=\"acierto\"" : " class=\"acierto1\"" )."><tt>".$assoc['correcta']. "</tt></td>\n";
			print "<td".( ( array_search("1",$envio) == $value1 && $value1!="" ) ? " class=\"fallo\"" : " class=\"fallo1\"" )."><tt>".$assoc['incorrecta1']. "</tt></td>\n";
			print "<td".( ( array_search("2",$envio) == $value1 && $value1!="" ) ? " class=\"fallo\"" : " class=\"fallo1\"" )."><tt>".$assoc['incorrecta2']. "</tt></td>\n";
			print "<td".( ( array_search("3",$envio) == $value1 && $value1!="" ) ? " class=\"fallo\"" : " class=\"fallo1\"" )."><tt>".$assoc['incorrecta3']. "</tt></td>\n";
?></tr><?

	
	}

}

session_destroy();
?>	</table>
<br><br>
<table border="1" align="center" width="50%">
<tr>
<td class="acierto">&nbsp;&nbsp;</td><td>Respuesta enviada y acertada</td>
</tr>
<tr>
<td class="fallo">&nbsp;&nbsp;</td><td>Respuesta enviada y fallada</td>
</tr>
<td class="acierto1">&nbsp;&nbsp;</td><td>Respuesta correcta</td>
</tr>
<tr>
<td class="fallo1">&nbsp;&nbsp;</td><td>Respuesta incorrecta</td>
</tr>
</table>

Ejemplo(con preguntas infantiles )

Lo mismo hay alguna forma mejor de hacerlo, pero recuerdo que le dí varias vueltas al asunto, y por la cuestión de generar siempre identificadores de los botones diferentes y por el hecho de marcar las correctas e incorrectas, al final me salio ése lio de código :$

http://usuarios.lycos.es/labete666/phpBB2/mezcla.php

Salu2 ;)

PD: Ten en cuenta que el código se lía cuando se trata de asignar a los name de los radio buttons un identificador de forma aleatoria, para que el alumno aún leyendo el código fuente, no esté en predisposición de establecer una relación entre el name del button y la respuesta correcta. Si se trata simplemente de volcar las preguntas, la aplicación obviamente se haría mucho más sencilla.
__________________
[+]
[+]

Última edición por yoseman; 12/10/2005 a las 14:57
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.
Tema Cerrado




La zona horaria es GMT -6. Ahora son las 19:37.