Foros del Web » Programando para Internet » PHP »

crear examen

Estas en el tema de crear examen en el foro de PHP en Foros del Web. Tengo un serio problema, cree un examen la cual los alumnos pueden hacer pruebas via web. Al meterse a la prueba genera las pregunta aleatoriamente ...
  #1 (permalink)  
Antiguo 18/03/2008, 07:00
Avatar de hulray  
Fecha de Ingreso: septiembre-2006
Mensajes: 630
Antigüedad: 17 años, 7 meses
Puntos: 3
crear examen

Tengo un serio problema, cree un examen la cual los alumnos pueden hacer pruebas via web. Al meterse a la prueba genera las pregunta aleatoriamente la cual son sacadas de la base de datos. El problema que tengo es que no se como guardar. Les explico.

Necesito que al meterse al examen genere las preguntas aleatoriamente (echo) con un maximo de 15 preguntas (echo), pero al ya estar metido en la prueba al presionar f5 que deje las preguntas que se generaron.

Y por ultimo guardar las preguntas, estoy nulo en este momento y requiero de su ayuda.

Les dejo el codigo que tengo por ahora y me funciona bien.

Código PHP:
<?

$result
=mysql_query ("select * from am_examen2 where ex_tipo = '$ar_equcer' order by RAND() limit 15");
echo
"<h3 align=\"center\">Examen de certificación de operadores</h3>";  
echo 
"<table border=0 width=90%><tr>"
echo 
"<tr>";echo "<tr>";echo "<tr>";echo "<tr>";echo "<tr>";echo "<tr>";echo "<tr>";echo "<tr>";echo "<tr>";


while(
$row=mysql_fetch_row($result)){
  echo 
"<tr>
    <td><hr></hr><td></td></td><tr><td><strong>$row[2]</strong></td><tr></tr><tr></tr><tr></tr><tr></tr><tr></tr><tr></tr></tr><tr><td>A)        $row[3]</td></tr><tr><td>B)        $row[4]</td></tr><tr><td>C)        $row[5]</td></tr><tr><td>D)   $row[6]          </td><td><select name=\"select\">
    <option value=\".\">.</option>
    <option value=\"A\">A</option>
    <option value=\"B\">B</option>
    <option value=\"C\">C</option>
    <option value=\"D\">D</option>
  </select></td><td></td></tr><tr></tr><tr></tr><tr></tr><tr></tr><tr></tr><tr></tr></tr><tr></tr><tr></tr><tr></tr><tr></tr><tr>
  </tr>
    </tr>"
;

}
echo
"</table>
"
;
 echo 
"<p align=\"center\">"
    
."<input type=\"submit\" name=\"Submit\" value=\"Enviar\">"
."</p>"

?>
la base de datos es:

CREATE TABLE `am_examen2` (
`ex_id` int(11) NOT NULL auto_increment,
`ex_tipo` varchar(255) NOT NULL,
`ex_pregunta` varchar(255) NOT NULL,
`ex_alter1` varchar(255) NOT NULL,
`ex_alter2` varchar(255) NOT NULL,
`ex_alter3` varchar(255) NOT NULL,
`ex_alter4` varchar(255) NOT NULL,
`ex_correcta` varchar(1) NOT NULL,
`ex_puntos` varchar(255) NOT NULL,
KEY `ex_id` (`ex_id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=14 ;



muchas gracias por su ayuda.
  #2 (permalink)  
Antiguo 18/03/2008, 07:21
Avatar de sumolari  
Fecha de Ingreso: mayo-2006
Ubicación: localhost
Mensajes: 1.367
Antigüedad: 17 años, 11 meses
Puntos: 18
Re: crear examen

Puedes probar creando una cookie o un variable de sesión.

En la base de datos almacenas las cookies o las variables de sesión, de forma que al visitar un alumno X de nuevo la página, el script revisaría si la variable de sesión (o la cookie) existen y en caso de que existiesen cargaría las preguntas correspondientes.

Los valores de la cookie serían aleatorios, de forma que cada vez generase uno distinto y no se repitiesen.

Crearía una tabla que almacenase: ID de las preguntas que le han salido la primera vez, valor de la cookie, veces que visita la página; y si es necesario, algo más.
  #3 (permalink)  
Antiguo 18/03/2008, 07:25
Avatar de hulray  
Fecha de Ingreso: septiembre-2006
Mensajes: 630
Antigüedad: 17 años, 7 meses
Puntos: 3
Re: crear examen

si entro con session, en eso no hay problema, mi problema es que no se como guardar el examen.

Gracias por contestar

Algun ejemplo que me puedan dar?
  #4 (permalink)  
Antiguo 18/03/2008, 07:29
Avatar de sumolari  
Fecha de Ingreso: mayo-2006
Ubicación: localhost
Mensajes: 1.367
Antigüedad: 17 años, 11 meses
Puntos: 18
Re: crear examen

Puedes usar ajax para que se guarde el examen cada X minutos, pero no sé mucho ajax, así que ahí no te puedo ayudar.
  #5 (permalink)  
Antiguo 18/03/2008, 08:28
Avatar de jorgedx  
Fecha de Ingreso: junio-2005
Ubicación: Chile, Los Andes
Mensajes: 406
Antigüedad: 18 años, 10 meses
Puntos: 4
Re: crear examen

en relaidad faltan datos que tienes que explicar
cuando generes tus 15 preguntas al instante guardalas en tu bd, luego cuando recarga la persona la pagina muestra esas mismas preguntas, hasta que hagas cambiar un campo dependiendo, por ejemplo de que si va en la proxima tanda de preguntas (suponiendo que son mas de 15 las que debe realizar)

luego te apoyas en otro campo para llevar el registro de preguntas que cada personas este contestando, no creo que sea muy dificil primero planteatelo y luego escribe codigo.

saludos
__________________
Nuevamente a las pistas ...
  #6 (permalink)  
Antiguo 18/03/2008, 08:41
Avatar de hulray  
Fecha de Ingreso: septiembre-2006
Mensajes: 630
Antigüedad: 17 años, 7 meses
Puntos: 3
Re: crear examen

Estimado compatriota jorgedx.
Me intentare explicar mejor.
Cree la base de datos, ingrese un promedio de 50 preguntas para el examen ej: "castellano" la prueba solo consta con 15 preguntas, con esto.

Código PHP:
$result=mysql_query ("select * from am_examen2 where ex_tipo = '$ar_equcer' order by RAND() limit 15"); 
me salen solo las 15 que necesit para el examen de "castellano" y de manera aleatoria "RAND()"

despues de eso ingreso todas las preguntas.

Código PHP:
while($row=mysql_fetch_row($result)){
  echo 
"<tr>
    <td><hr></hr><td></td></td><tr><td><strong>$row[2]</strong></td><tr></tr><tr></tr><tr></tr><tr></tr><tr></tr><tr></tr></tr><tr><td>A)        $row[3]</td></tr><tr><td>B)        $row[4]</td></tr><tr><td>C)        $row[5]</td></tr><tr><td>D)   $row[6]          </td><td> 
y con esto responden la pregunta.

Código PHP:
<select name="select\">
    <option value=\".\">.</option>
    <option value=\"A\">A</option>
    <option value=\"B\">B</option>
    <option value=\"C\">C</option>
    <option value=\"D\">D</option>
  </select></td><td></td></tr><tr></tr><tr></tr><tr></tr><tr></tr><tr></tr><tr></tr></tr><tr></tr><tr></tr><tr></tr><tr></tr><tr>
  </tr>
    </tr>"

como hago el "insert" si los datos salen aleatoriamente?

creo que con tan solo guardar el id de la pregunta ya que tiene un autonumerico. podre saber la respuesta y seguir con mi codigo.

Me entiendes ahora?
  #7 (permalink)  
Antiguo 18/03/2008, 09:14
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 11 meses
Puntos: 2135
Re: crear examen

Puedes llamar a tus controles como un arreglo y pasarles el id de la pregunta asi podras saber que id de pregunta tiene que respuesta, algo así:
Código PHP:
<select name="respuestas[<?php echo $row[0]; ?>]"></select>
Posteriormente una vez que te hagan el envío a PHP puedes hacer esto:
Código PHP:
foreach( $_POST['respuestas'] as $idPregunta => $respuesta ) {
      
// aqui haces el insert....
      
printf"Pregunta id: %s, respuesta: %s"$idPregunta$respuesta );

Saludos.
  #8 (permalink)  
Antiguo 18/03/2008, 09:23
Avatar de sumolari  
Fecha de Ingreso: mayo-2006
Ubicación: localhost
Mensajes: 1.367
Antigüedad: 17 años, 11 meses
Puntos: 18
Re: crear examen

Puedes crear una tabla para almacenar las respuestas de los alumnos.
Esa misma tabla te vale para los valores de la sesión.

Yo crearía al menos tres campos: sesión (ID o algo para identificar al alumno), ID de las preguntas (cada ID separada de la siguiente por un símbolo poco frecuente, como el asterisco (*)), respuesta elegida para cada pregunta (como antes separada por asterisco).

De forma que si yo respondo a todas las preguntas la respuesta A quedaría así:

Campo preguntas:
1*6*9*12*8*34*29*14*46*4*16*19*30*50*7

Campo de respuestas:
A*A*A*A*A*A*A*A*A*A*A*A*A*A*A

Usando la función explode() de php puedes separar una cadena en partes usando un símbolo como separador. El símbolo en este caso sería asterisco (*). De forma que te quedarían 15 trozos que contienen las ID de las preguntas realizadas y 15 trozos que contienen las respuestas correspondientes.
Además explode() permite crear un array con cada valor, de forma que podría quedarte:
Código PHP:
$preguntas[1] = 1;
$preguntas[2] = 6;
// ETC

$respuestas[1] = A;
$respuestas[2] = A;
//ETC 
De esta forma es muy sencillo relacionar los valores de las preguntas con las respuestas.

Puedes hacer el insert a la base de datos al principio, almacenando como valor de las respuestas sin responder 0, de forma que el script al ver 0 sepa que no se ha contestado a la pregunta,

Además con ajax puedes hacer que cada X tiempo se almacenen las respuestas en la base de datos (además de ponerle un botón de "Finalizar").

Ahora, yo tengo una duda, ¿cómo has ordenado las respuestas? Porque si el alumno ve que todas las correctas están en la 3ª posición será fácil aprobar el examen.
Debes hacer que las respuestas aparezcan cada vez en un orden distinto, de forma que si ahora en la lista aparece A, B, C, D y E; luego aparezca B, E, D, C y A.
  #9 (permalink)  
Antiguo 18/03/2008, 09:29
Avatar de hulray  
Fecha de Ingreso: septiembre-2006
Mensajes: 630
Antigüedad: 17 años, 7 meses
Puntos: 3
Re: crear examen

muchas gracias a los 2, ya se como hacerlo, se los agradesco
  #10 (permalink)  
Antiguo 18/03/2008, 13:23
Avatar de jorgedx  
Fecha de Ingreso: junio-2005
Ubicación: Chile, Los Andes
Mensajes: 406
Antigüedad: 18 años, 10 meses
Puntos: 4
Re: crear examen

que bien... nos cuentas el resultado y como les fue a los que rindieron la prueba xD
__________________
Nuevamente a las pistas ...
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 19:52.