Foro de elhacker.net

Programación => PHP => Mensaje iniciado por: migue_coco en 29 Mayo 2013, 11:31 am



Título: Examen tipo test MySQL y PHP
Publicado por: migue_coco en 29 Mayo 2013, 11:31 am
Buenas a todos.
Tengo una duda en la que estoy atascado y espero que podais echarme un mano.
Tengo una base de datos en la que se han guardado las respuestas a un examen tipo test. Son 105 respuestas de tipo A, B, C y D
En la base de datos, la estructura es:
Lengua1
Lengua 2
Lengua 3
...
Lengua 15
Matematicas 1
Matematica 2
...
Matematicas 15
Sociales 1
Sociales 2
...
Hasta las 105 preguntas

El caso es que quisiera hacer un codigo PHP en el que yo le indico que recupere los valores de cada respuesta de la base de datos.
Y despues indicar que:
Lengua 1 debe ser = a B (como respuesta correcta)
Lengua 2 = C
Lengua 3 = A
...
Hasta ahi todo bien,
pero claro, lo que no tengo ni idea de como hacer es para que me cuente cuantas respuestas correctas, (o cuantas igualdades se confirman)

Habia pensado en indicar que si la igualdad es correcta le asigne  Value = 1, si es incorrecta Value = 0 y despues contar cuantos 1 existen
Pero no se si ese planteamiento es correcto, ni se como se debe hacer.

Creen que pueden echarme un mano con el codigo?
Es que de la idea en mi cabeza a escribir el codigo, para mi, hay un paso muy grande y no consigo plasmar la idea en php :S

Un saludo y muchas gracias por la ayuda!!


Título: Re: Examen tipo test MySQL y PHP
Publicado por: El Che Guevara en 29 Mayo 2013, 11:50 am
...parece algo simple pero hasta lo mas simple lleva mucho codigo de programacion....
bajate 'pangolin professional edition' y desile a tu profe que lo programaste vos! jaa  :laugh:


Título: Re: Examen tipo test MySQL y PHP
Publicado por: #!drvy en 29 Mayo 2013, 11:57 am
Hola,

Cuando dices:  "En la base de datos, la estructura es:"
Te refieres a que en una tabla tienes 105 celdas y cada una de ella es del tipo "Lengua1","Lengua 2" ?

O, podrías poner como tienes la estructura (exactamente) ?

Saludos



Título: Re: Examen tipo test MySQL y PHP
Publicado por: migue_coco en 29 Mayo 2013, 12:42 pm
El problema es que el profesor soy yo jajajaja
Si, la estructura es nombre, email, y las 105 respuestas, atendiendo a la forma que puse al principio.

Entonces, seria posible que si una igualdad se cumple, darle un value y despues hacer un count de los values=1??

O me estoy inventando esto??

Gracias por vuestra ayuda!!


Título: Re: Examen tipo test MySQL y PHP
Publicado por: #!drvy en 29 Mayo 2013, 13:50 pm
Hola,

Entonces, según he entendido no has guardado en la BD las respuestas correctas. Yo lo que haría, seria indicar todas en un array, tal y que 'Lengua1'=>'a', y así sucesivamente. Luego, sacaria todas las respuestas y las pasaría por el array.

Te dejo un ejemplo mas o menos.

Código
  1. <?php
  2. $client = mysqli_connect('localhost','root','','test');
  3. if(!$client){die('No se pudo conectar a la bd.');}
  4.  
  5. $correctas = array(
  6.   'Lengua1'=>'a',
  7.   'Lengua2'=>'b',
  8.   'Lengua3'=>'a',
  9.   'Lengua4'=>'d',
  10.   'Lengua5'=>'a',
  11.   'Matematicas1'=>'b',
  12.   'Matematicas2'=>'c',
  13.   'Matematicas3'=>'d',
  14.   'Matematicas4'=>'a'
  15. );
  16.  
  17. $query = 'SELECT * FROM examen';
  18. $resultado = mysqli_query($client,$query);
  19.  
  20. // $respuestas contendrá las cuentas (correctas/incorrectas) por cada columna.
  21. $respuestas = array(); // Array para modo estrcito.
  22.  
  23. // Por cada resultado,
  24. while($row = mysqli_fetch_array($resultado,MYSQLI_ASSOC)){
  25.   // Creamos un array por cada email que contara y lo ponemos en 0
  26.   $respuestas[$row['email']] = array('correctas'=>0,'incorrectas'=>0);
  27.   // Por cada item en $correctas.
  28.   foreach($correctas as $index=>$correcta){
  29.      // Comprobamos si el valor que contiene el nombre del item (Lengua1,Lengua2) que hemos sacado de la bd
  30.      // Coincide con la respuesta correcta.
  31.      if($row[$index]===$correcta){
  32.         // Si coincide sumamos 1 correctas
  33.         $respuestas[$row['email']]['correctas']++;
  34.      }else{
  35.         // Si no coincide sumamos a incorrectas.
  36.         $respuestas[$row['email']]['incorrectas']++;
  37.      }
  38.   }
  39. }
  40.  
  41. echo '<pre>';
  42. print_r($respuestas);
  43. ?>

La idea, es que el nombre de $correctas (Lengua1,Lengua2) coincida exactamente con el nombre que tiene la celda en la bd y que la respuesta (a,b,c,) sea la correcta. Si todo sale bien, el resultado seria algo asi xD.

Código:
Array
(
    [listillo@soylist.com] => Array
        (
            [correctas] => 9
            [incorrectas] => 0
        )

    [juancho@intentoserlisto.com] => Array
        (
            [correctas] => 2
            [incorrectas] => 7
        )

)

Saludos


Título: Re: Examen tipo test MySQL y PHP
Publicado por: migue_coco en 29 Mayo 2013, 18:25 pm
Gracias por la respuesta!!!

He probado ese codigo (con algunas modificaciones mias) y me reporta este error:

Warning: mysql_fetch_array() expects parameter 1 to be resource, null given in /home/../enviar.php on line 43

Array
(
)

Linea 43:
while($row = mysqli_fetch_array($resultado,MYSQLI_ASSOC)){

A que se debe ese error?
Un saludo!


Título: Re: Examen tipo test MySQL y PHP
Publicado por: #!drvy en 29 Mayo 2013, 18:32 pm
Algo te falla en la consulta Prueba cambiar esto:
Código
  1. $resultado = mysqli_query($client,$query);

Por
Código
  1. $resultado = mysqli_query($client,$query);
  2. if(!$resultado){die('Error en consulta: '.mysqli_error($client));}

Así te debería de mostrar el error que salta en la consulta.

Saludos


Título: Re: Examen tipo test MySQL y PHP
Publicado por: migue_coco en 29 Mayo 2013, 18:36 pm
Vale, el problema es que en parte de mi codigo esta usando
mysql_algo
Y despues al copiar, habiadejado
msyqlI_algo
Al quitar la I no aparece el error.
Pero el print sale sin ningun valor
Array(
)
No muestra nada dentro...

Jo, lamento mi torpeza!!


Título: Re: Examen tipo test MySQL y PHP
Publicado por: #!drvy en 29 Mayo 2013, 18:44 pm
Hola,

Yo te he puesto le código con la libreria mysqli (osease, con una i latina al final). Es porque mysql_ esta considerado como obsoleto y terminara por desaparecer de php.

Saludos


Título: Re: Examen tipo test MySQL y PHP
Publicado por: migue_coco en 29 Mayo 2013, 18:48 pm
Vale.
Ya lo he solucionado.
Os cuento, porque pensaba que podia hacer lo que yo tenia pero parece que no.
El caso es el siguiente.
Os lo explico con todo detalle:
Primero, la base de datos tiene el nombre, email, 105 respuestas y otros datos personales.
Claro, yo pensaba que podia añadir este codigo al que yo tenia, de forma que se mostraran los datos personales y debajo las respuestas correctas e incorrectas.
Pero tal y como lo tenia, hacia que el array no funcionara.
Mi codigo era este:
Código:
<HTML>
<HEAD>
<TITLE>Correcion</TITLE>
</HEAD>
<BODY>
<?php
//Incluimos datos de conexion
include("conectar.php");
// Nos conectamos a phpmyadmin
$conectar = mysql_connect($dbhost, $dbuser, $dbpasswd);
// Comprobamos que  nos pudieramos conectar a phpmyadmin
if (!$conectar) {
    die('No se pudo conectar a la base: ' . mysql_error());
}
// Nos conectamos a la base
mysql_select_db($dbname);
//Cogemos los campos del formulario
$ID=$_POST['ID'];
//Realizamos la consulta
$sql = "SELECT Nombre, Email, FROM test_online_1
WHERE ID = '$ID'";
$result = mysql_query($sql);
?>
<table align="center">
<tr>
<th>Nombre</th>
<th>Email</th>
</tr>
<?php
// Recoger y mostrar los resultados
while ($result_fila = mysql_fetch_array($result)){
echo '<tr><td>' .$result_fila['Nombre'] . '</td>';
echo '<td>'.$result_fila['Email'] . '</td></tr>';
}
mysql_free_result($result)
?>
</table>
</BODY>
</HTML>

Entonces yo habia pegado debajo del while que yo habia hecho, el while del codigo que habeis puesto aqui, pero asi no funciona.
Entonces, para que se entienda.
Una tabla en la que ponga
Nombre | Email | Dato personal 1 | Dato personal 2 | etc...
Y debajo me muestra el array.

Se entiende lo que quiero decir?
Muchisimas gracias por vuestra ayuda!!
Un saludo!!!!

P.D. ya, lo de la i latina lo conocia, pero son manias que cuesta dejar jejejeje


Título: Re: Examen tipo test MySQL y PHP
Publicado por: migue_coco en 29 Mayo 2013, 19:11 pm
Vale, ni caso al anterior comentario.

Deduzco que no pueden existir dos while?
Al menos quitando uno y metiendolo dentro del otro me sale ya todo bien.

Ahora solo me queda adornarlo un poco
:)

Muchas gracias por toda la ayuda!!
De verdad, muchas gracias.

Un saludo!