La evaluación con problemas planteados y sus respectivas opciones de respuesta de solo texto funciona sin inconvenientes por ejemplo:
a1 a2 a3 a4 answer
1/9 19/5 12/1 1/4 19/5
Las columnas a1, a2, a3, a4
son las opciones y la columna answer
tiene la respuesta correcta, mediante JSON se genera esta información:
[
'name' => 'respuesta_1',
'question' => 'Planteamiento del problema?',
'alternatives' => [1/9, 19/5, 12/1, 1/4],
'answer' => 19/5,
],
Donde sí selecciono la opción correcta 19/5
este me califica tal cual ganándome 1 punto.
Pero ya en el caso donde existen opciones donde no puedo agregar texto si no imágenes en las columnas a1, a2, a3, a4
, el código PHP no puede detectar si es o no la opción seleccionada correcta o incorrecta es más aún así cuando se ha seleccionado la respuesta de imagen correcta esta la evalúa como incorrecta.
Por ejemplo, en este caso de imagen, yo tenía los siguientes datos registrados:
a1
<img src="https://i.imgur.com/HdfyxwC.png" width="18">
a2
<img src="https://i.imgur.com/4QIRf6R.png" width="18">
a3
<img src="https://i.imgur.com/fSNMF2l.png" width="18">
a4
<img src="https://i.imgur.com/DMTiaxk.png" width="18">
answer
<img src="https://i.imgur.com/fSNMF2l.png" width="18">
Como puedo solucionar este problema de evaluación, me pueden explicar como puedo hacer para que el calificador funcione tanto para texto como para imagen.
El código PHP que realiza esta evaluación es el siguiente:
results-evaluations.php
$sql = "SELECT * FROM quiz";
$result = $con->query($sql);
while($row = mysqli_fetch_assoc($result)) {
$answers[] = [
'name' => 'respuesta_'.$row["id_question"],
'question' => $row["question"],
'alternatives' => [$row["a1"], $row["a2"],$row["a3"],$row["a4"]],
'answer' => $row["answer"]
];
}
$questions = [];
foreach($answers as $index => $answer) {
$questions[]=$answer;
$questions[$index]['answer']=null;
}
$final=[];
// Hay que evaluar
if(isset($_POST['student'])) {
$student = $_POST['student'];
$result=[];
$qualify_score = 0;
$top_score = sizeof($answers);
foreach($answers as $index => $answer) {
$result_quote=['index'=>$index];
$result_quote['question']=$answer['question'];
$result_quote['your_answer']=isset($_POST[$answer['name']])? $_POST[$answer['name']] : 'N/A';
$result_quote['correct_answer']= $answer['answer'];
$result_quote['qualify_score']=($result_quote['your_answer']==$result_quote['correct_answer'])? 1:0;
$qualify_score+=$result_quote['qualify_score'];
$result[]=$result_quote;
}
$final=[
'student'=>$student,
'result'=>$result,
'qualify_score'=>$qualify_score.' / '.$top_score
];
}
echo json_encode($final);
Por el momento entiendo que le código esta vulnerable, esto lo solucionare más adelante en la materia a orientados a objetos y seguridad.