Foros del Web » Programando para Internet » PHP »

[SOLUCIONADO] Test con PHP fallo en verificación de aciertos

Estas en el tema de Test con PHP fallo en verificación de aciertos en el foro de PHP en Foros del Web. Hola buenas, Estoy haciendo una aplicación con PHP con una serie de preguntas obtenidas aleatoriamente de una base de datos MySql, y cuando paso a ...
  #1 (permalink)  
Antiguo 01/05/2013, 06:16
 
Fecha de Ingreso: octubre-2010
Mensajes: 3
Antigüedad: 13 años, 5 meses
Puntos: 0
Test con PHP fallo en verificación de aciertos

Hola buenas,
Estoy haciendo una aplicación con PHP con una serie de preguntas obtenidas aleatoriamente de una base de datos MySql, y cuando paso a comprobar las respuestas, mi intención es contabilizar las correctas y tomarlas como +1 a la nota, y las erróneas restarlas 0.2. Tengo el siguiente código en la hoja de respuestas:
Código PHP:
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";
            print 
"<td".( ( array_search("4",$envio) == $value1 && $value1!="" ) ? " class=\"fallo\"" " class=\"fallo1\"" )."><tt>".$assoc['incorrecta4']. "</tt></td>\n";

?></tr><?

    
    
}
}

?><table> <tr><td>
TU NOTA ES: <? 
$nota 
= array();
$arrayvalue 0;
while (
$arrayvalue <=9)
{
foreach (
$_SESSION['id_pregunta'] as $key=>$value)
{
if(
array_search("0",$envio) == $value1)
{
$nota[$arrayvalue++] = "1";
}
else
{
$nota[$arrayvalue++] = "-0.2";}
unset(
$value);

}






$scoring $nota[0]+$nota[1]+$nota[2]+$nota[3]+$nota[4]+$nota[5]+$nota[6]+$nota[7]+$nota[8]+$nota[9]; echo $scoringsession_destroy();
Y ocurre lo siguiente, si todas se aciertan, devuelve el valor 10, pero con que solo falles una ya las considera todas erróneas y devuelve -2. ¿Alguien podría ayudarme?
Gracias de antemano.
  #2 (permalink)  
Antiguo 01/05/2013, 08:05
Avatar de angelAparicio  
Fecha de Ingreso: julio-2009
Ubicación: Sevilla
Mensajes: 307
Antigüedad: 14 años, 9 meses
Puntos: 22
Respuesta: Test con PHP fallo en verificación de aciertos

¿Podrías poner un print_r( $SESSION['id_pregunta']) antes del bucle en el que se calculan las notas para ver que estás recibiendo?
__________________
Mis webs:
- Programador Web Autónomo
- Conciertos en Sevilla
  #3 (permalink)  
Antiguo 01/05/2013, 08:05
Avatar de repara2  
Fecha de Ingreso: septiembre-2010
Ubicación: München
Mensajes: 2.445
Antigüedad: 13 años, 7 meses
Puntos: 331
Respuesta: Test con PHP fallo en verificación de aciertos

La verdad es que tu código no se entiende mucho, ahí te paso un ejemplo a ver si sirve, salu2

Código PHP:
Ver original
  1. <?php
  2. //Las preguntas y sus respuestas correctas, en tu caso, esto viene de la db
  3. $answers = array(0 => 1,1 => 2,2 => 1,3 => 3,4 => 3);
  4. //lo que ha respondido el usuario, en tu caso se guarda en session
  5. $userAnwers = array(0 => 0,1 => 2,2 => 1,3 => 1,4 => 3); // 2 respuestas correctas
  6. //Contador
  7. $finalNote = null;
  8. //Revisar correctas contra respuestas del usuario
  9. for($i=0; $i<count($answers);$i++)
  10. {
  11.     if($answers[$i] == $userAnwers[$i]) $finalNote = $finalNote + 1;
  12.     else $finalNote = $finalNote - 0.2;  
  13. }
  14. //La note final no puede ser negativa
  15. if($finalNote <= 0) $finalNote = 0;
  16. //Output
  17. echo "Tu calificación es: $finalNote";
  18. ?>
__________________
Fere libenter homines, id quod volunt, credunt.
  #4 (permalink)  
Antiguo 01/05/2013, 08:07
Avatar de cuasatar  
Fecha de Ingreso: junio-2011
Ubicación: Bogotá Rock City
Mensajes: 1.230
Antigüedad: 12 años, 9 meses
Puntos: 181
Respuesta: Test con PHP fallo en verificación de aciertos

Pues no uses los números como cadenas sino como números.

Código PHP:
$nota[$arrayvalue++] = "1"


Código PHP:
$nota[$arrayvalue++] = 1


Igual con las respuestas negativas. No he visto el resto del script detenidamente pero creo que incluso se podria hacer mas eficiente. Pruebalo a ver si te funciona y ya nos comentas.

p.s. Se me adelanto repara2 en la respuesta, yo opino lo mismo que él, se ve un poco confuso y largo para una tarea sencilla.
__________________
Blog de humor http://elcuasatar.net63.net/
  #5 (permalink)  
Antiguo 01/05/2013, 09:50
 
Fecha de Ingreso: octubre-2010
Mensajes: 3
Antigüedad: 13 años, 5 meses
Puntos: 0
Respuesta: Test con PHP fallo en verificación de aciertos

Probé lo que me dijisteis, y funciona así, así que muchísimas gracias a todos.

Etiquetas: fallo, mysql, select, sql, test
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 05:53.