Contacto | #php_para_torpes | Enlázanos | ¿Quiénes somos?
27 usuarios Online (0)
Darse de alta en la web | Recuperar password   
Inicio / Foros / PHP / Ayuda con Pregunta Aleatoria y sus respuesta
7 respuestas recibidas | 104 visitas | Categoría PHP

Ayuda con Pregunta Aleatoria y sus respuesta

Avatar de cmarrero
Nivel 2 Nivel 2 Nivel 2 Nivel 2 Nivel 2 Nivel 2 Nivel 2

(Nivel 2 - 70 posts)

#0 Offline cmarrero Usuario 31 mar 08 (15:29)  
Estoy armando un sistema de preguntas aleatorio. Digamos, selecciona de la tabla pregunta, 5 preguntas en forma aleatoria del mudulo 1, hasta aca todo bien, con el siguiente codigo:

[PHP]
$Conexion= mysql_connect ('localhost', 'pdu2207', 'sabrosos');
$database = 'pdu2207_2';
mysql_select_db($database, $Conexion);
$query = "SELECT * FROM pregunta WHERE idmodulo='1' ORDER BY RAND() LIMIT 0,5";
$res = mysql_query($query);
$array = mysql_fetch_array($res);
do {
$datos[] =$array;
} while ($array = mysql_fetch_array($res)) ;
[/PHP]
lugoe muestro la pregunta que quiero de las 5 encontradas

[PHP]
echo $datos[0]['idpregunta'];
echo $datos[1]['idpregunta'];
echo $datos[2]['idpregunta'];
echo $datos[3]['idpregunta'];
echo $datos[4]['idpregunta'];
[/PHP]
Bien, pero ahora en otra tabla preguntas, tengo distintas cantidades posibles preguntas, por ello hago lo siguiente y lo repito 5 veces modificando la variable $dato = $datos[0]['idpregunta']; colocando en $datos[] 1,2,3,4 no me funciona, me tira error, simplemente no funciona.

[PHP]
$dato = $datos[0]['idpregunta'];
$respuesta = "SELECT * FROM respuestas WHERE idpregunta='$dato' ";
$resultado = mysql_query($respuesta);
while ($linea = mysql_fetch_array($resultado)){
echo "".$linea["idrespuesta"]." | ".$linea["respuesta"]."<input type=checkbox name=".$linea["idrespuesta"]." id=checkbox /><br>
";
}
[/PHP]
Alguna alluda por favor, o alguna otra manera de hacerlo.
Repito de nuevo que es lo que intento hacer.

Conecto a la base de datos, selecciono 5 preguntas en forma aleatorio, cada pregunta tiene en otra tabla distinta candiad de respuestas que pueden o no ser todas o ninguna verdadera. estos datos son luego enviados medianto un formulario e una tabla examen (esta ultima parte no me hace falta, solo la consulta que me muestre los datos).

AYUDA PLISSS

la consulta, pero sin arrays

Avatar de jurena
Nivel 5 Nivel 5 Nivel 5 Nivel 5 Nivel 5 Nivel 5 Nivel 5

(Nivel 5 - 729 posts)

#1 Offline jurena Usuario 31 mar 08 (22:54)  
cmarrero,
no es la panacea, pero lo mismo sirve para orientarte.
La consulta que te mostraría todo sería algo parecida a esta, pero el mayor problema sería el de cargar en arrays las preguntas y respuestas para poder controlarlas y enviarlas

Código PHP


<?php
$Conexion
= mysql_connect ('localhost', 'pdu2207', 'sabrosos');
$database = 'pdu2207_2';
mysql_select_db($database, $Conexion);
$query = "SELECT idpregunta, pregunta FROM pregunta WHERE idmodulo='1'  ORDER BY RAND() LIMIT 0,5";
$res = mysql_query($query);
while (
$array = mysql_fetch_array($res)) {
echo
'<p>'.$array['pregunta'].'</p>';
$dato = $array['idpregunta'];
$queryresp = "SELECT * FROM respuesta WHERE idpregunta=$dato";
$resultado = mysql_query($queryresp);
while (
$resresp = mysql_fetch_array($resultado))
{
echo
$resresp['respuesta'].'<br>';}
}
?>


Suerte

con algo de arrays

Avatar de jurena
Nivel 5 Nivel 5 Nivel 5 Nivel 5 Nivel 5 Nivel 5 Nivel 5

(Nivel 5 - 729 posts)

#2 Offline jurena Usuario 31 mar 08 (23:55)  
cmarrero,
sé que esto es manifiestamente mejorable por lo que se refiere a la carga y forma de mostrar los arrays, pero te servirá de referencia. Ahora están los datos guardados y pueden ser cargados, mostrados, comparados, etc.

Código PHP


<?php
$Conexion
= mysql_connect ('localhost', 'pdu2207', 'sabrosos');
$database = 'pdu2207_2';
mysql_select_db($database, $Conexion);
$query = "SELECT distinct idpregunta, pregunta FROM pregunta ORDER BY RAND() LIMIT 0,5";
$res = mysql_query($query);
$preguntasarray[]=array();
$respuestasarray[]=array();

while (
$array = mysql_fetch_array($res)) {
$preguntasarray[]=$array['pregunta'];
$dato = $array['idpregunta'];
$queryresp = "SELECT respuesta FROM respuesta WHERE idpregunta=$dato";
$resultado = mysql_query($queryresp);

while (
$resresp = mysql_fetch_array($resultado))
{
$respuestasarray[]=$resresp['respuesta'];
}
}


echo
'<br>';

echo
'<p>'.$preguntasarray[1].'</p>';
echo
$respuestasarray[1].'<br>';
echo
$respuestasarray[2].'<br>';
echo
$respuestasarray[3].'<br>';
echo
$respuestasarray[4].'<br>';
echo
$respuestasarray[5].'<br>';
echo
'<p>'.$preguntasarray[2].'</p>';
echo
$respuestasarray[6].'<br>';
echo
$respuestasarray[7].'<br>';
echo
$respuestasarray[8].'<br>';
echo
$respuestasarray[9].'<br>';
echo
$respuestasarray[10].'<br>';
echo
'<p>'.$preguntasarray[3].'</p>';
echo
$respuestasarray[11].'<br>';
echo
$respuestasarray[12].'<br>';
echo
$respuestasarray[13].'<br>';
echo
$respuestasarray[14].'<br>';
echo
$respuestasarray[15].'<br>';
echo
'<p>'.$preguntasarray[4].'</p>';
echo
$respuestasarray[16].'<br>';
echo
$respuestasarray[17].'<br>';
echo
$respuestasarray[18].'<br>';
echo
$respuestasarray[19].'<br>';
echo
$respuestasarray[20].'<br>';
echo
'<p>'.$preguntasarray[5].'</p>';
echo
$respuestasarray[21].'<br>';
echo
$respuestasarray[22].'<br>';
echo
$respuestasarray[23].'<br>';
echo
$respuestasarray[24].'<br>';
echo
$respuestasarray[25].'<br>';

?>

Me tira errar

Avatar de cmarrero
Nivel 2 Nivel 2 Nivel 2 Nivel 2 Nivel 2 Nivel 2 Nivel 2

(Nivel 2 - 70 posts)

#3 Offline cmarrero Usuario 01 abr 08 (13:13)  
Jurena, gracias por responder pero el script que me brindaste me tira error:

Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in C:\servidor\web\examenec\temporales\prueba.php on line 16

Estaba pensando en que si hago un ciclo de las respuestas me puede funcionar... a ver si me ayudas con esto...
un foreach seria una solucion..

Al script lo hice funcionar, el problema es que lo quiero optimizar, por que hago la consulta aleatoria a la base de datos, pero para las preguntas tengo que repetir la cantidad de preguntas que muestro cambiandole where y poniendole el idpregunta para que me itre las respuestas de la pregunta determinada...

Lo que quiero hacer es evitar tener que poner 5 veces el siguiente codigo:

//recordemos que lo que de aca modifo es la variable $dato para que el wehere cambie esto lo hago 5 veces... como puedo optimizarlo...

Código PHP


<?
$dato
= $datos[0]['idpregunta'];
$respuesta =  "SELECT * FROM respuestas WHERE idpregunta='$dato' ";
$resultado = mysql_query($respuesta);
while (
$linea = mysql_fetch_array($resultado)){
echo
"".$linea["respuesta"]."<input type=checkbox name=".$linea["idrespuesta"]." id=checkbox /><br>
"
;
}
?>



Ora cosa que necesitaria es saber si alguien sabe como tomar los datos de los checkbox sin saber la cantidad, como los recibo en otra pagina..... para cargarlos en mi BD

te diré mi opinión

Avatar de jurena
Nivel 5 Nivel 5 Nivel 5 Nivel 5 Nivel 5 Nivel 5 Nivel 5

(Nivel 5 - 729 posts)

#4 Offline jurena Usuario 01 abr 08 (15:36)  
cmarrero,

Parece que te da un error, Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in C:\servidor\web\examenec\temporales\prueba.php on line 16, pero dime cuál es esa línea de código 16. A mí me funciona correctamente la sintaxis y me carga las 5 preguntas en un array y las 25 respuestas en otro. Y puesto que las carga en orden, puedes saber las respuestas que corresponden a cada pregunta por el número. Creo que esa que te propuse es una forma rápida de cargar los datos: sólo dos consultas iteradas y una de ellas anidada que te permiten sacar todo de una vez. Prueba otra vez y dinos dónde se produce el problema, pues tal vez al adaptar yo los nombres de los campos a los tuyos, me he equivocado en algo. Mira eso antes.
En cuanto a lo otro, a lo de saber cómo tomar los datos de los checkbos sin saber la cantidad, no entiendo bien a qué te refieres, si hablas del número de checkbox o qué, pues si conoces el número de respuestas por pregunta, ya lo sabes, y en caso de que sea variable siempre puedes saber mediante un mysql_num_rows de la consulta de respuestas el total de datos encontrados y, si quieres, con un count posterior del array, si las guardas todas en un mismo array (y si no te basta con sumar los totales de cada array), también puedes saber el número de preguntas y respuestas posibles. El número de checkbox dependerá de eso, imagino. ¿Te refieres a eso?

con arrays algo más organizados

Avatar de jurena
Nivel 5 Nivel 5 Nivel 5 Nivel 5 Nivel 5 Nivel 5 Nivel 5

(Nivel 5 - 729 posts)

#5 Offline jurena Usuario 02 abr 08 (23:32)  
Aunque no he conseguido poner los índices numéricos como quería, esta solución te permite cargar con índices que indican la pregunta (de 1 a 5) y el número de respuesta (las respuestas van de 0 a 4).

Código PHP


<?php
$Conexion
= mysql_connect ('localhost', '', '');
$database = 'cmarrero';
mysql_select_db($database, $Conexion);
mysql_query ("SET NAMES 'utf8'");

$query = "SELECT distinct idpregunta, pregunta FROM preguntas ORDER BY RAND() LIMIT 0,5";
$res = mysql_query($query);
$preguntasarray[]=array();
$respuestasarray[]=array();

while (
$array = mysql_fetch_array($res)) {
$preguntasarray[]=$array['pregunta'];
$dato = $array['idpregunta'];
$queryresp = "SELECT respuesta FROM respuestas WHERE idpregunta=$dato";
$resultado = mysql_query($queryresp);

while (
$resresp = mysql_fetch_array($resultado))
{
$d=array_keys($preguntasarray);
foreach(
$d as $valor)
{
$respuestasarray[$valor][]=$resresp['respuesta'];}
}
}
Print_r($respuestasarray);//aquí ves cómo se cargan las respuestas
echo '<br>';

echo
$preguntasarray[1].'<br>';//puedes mostrar preguntas
echo $respuestasarray[1][0].'<br>';//y respuestas. Te las pongo sin iterar. Naturalmente, ahora sí puedes interar..., pero no olvides que las preguntas de 1 a 5 y las respuestas de 0 a 4
echo $respuestasarray[1][1].'<br>';
echo
$respuestasarray[1][2].'<br>';
echo
$respuestasarray[1][3].'<br>';
echo
$respuestasarray[1][4].'<br>';
echo
$preguntasarray[2].'<br>';
echo
$respuestasarray[2][0].'<br>';
echo
$respuestasarray[2][1].'<br>';
echo
$respuestasarray[2][2].'<br>';
echo
$respuestasarray[2][3].'<br>';
echo
$respuestasarray[2][4].'<br>';
echo
$preguntasarray[3].'<br>';
echo
$respuestasarray[3][0].'<br>';
echo
$respuestasarray[3][1].'<br>';
echo
$respuestasarray[3][2].'<br>';
echo
$respuestasarray[3][3].'<br>';
echo
$respuestasarray[3][4].'<br>';
echo
$preguntasarray[4].'<br>';
echo
$respuestasarray[4][0].'<br>';
echo
$respuestasarray[4][1].'<br>';
echo
$respuestasarray[4][2].'<br>';
echo
$respuestasarray[4][3].'<br>';
echo
$respuestasarray[4][4].'<br>';
echo
$preguntasarray[5].'<br>';
echo
$respuestasarray[5][0].'<br>';
echo
$respuestasarray[5][1].'<br>';
echo
$respuestasarray[5][2].'<br>';
echo
$respuestasarray[5][3].'<br>';
echo
$respuestasarray[5][4].'<br>';
?>



A ver si te sirve

Tema solucionado

Avatar de cmarrero
Nivel 2 Nivel 2 Nivel 2 Nivel 2 Nivel 2 Nivel 2 Nivel 2

(Nivel 2 - 70 posts)

#6 Offline cmarrero Usuario 03 abr 08 (13:34)  
Gracias, pero mira, lo he podido solucionar de la siguiente manera, te paso el script por si te sirve de algo....

Saludos

Código PHP


function consultaP($idmodulo=1,$numero=5)
{
        
               $res = mysql_query("SELECT * FROM pregunta WHERE idmodulo='".$idmodulo."' ORDER BY RAND() LIMIT 0,".$numero);
            while ($p = mysql_fetch_assoc($res))
                            {
                    
                    
                    echo "<tr><td bgcolor=<a class=\"numPost\" href=\"/foros/PHP/29191#666666\">#666666</a> height=25><div align=center><span class=style9><strong>
                    <img src=http://www.extendedcollege.com.ar/examenec/imagenes/ayuda.gif width=18 height=18 />
                    <input name=".$p['idpregunta']."  type=hidden value=".$p['idpregunta']." />
                    ".$p['pregunta']." </strong></span></div></td></tr>";
        
                        $resultado =  mysql_query("SELECT * FROM respuestas WHERE idpregunta='".$p['idpregunta']."' ");
                        while ($linea = mysql_fetch_assoc($resultado))
        {
            echo "<tr><td bgcolor=#f4f4f4>&nbsp;&nbsp;".$linea["respuesta"]."<input type=checkbox name=".$linea["idrespuesta"]." id=checkbox /></td></tr>";
        }
    }
}
consultaP();



Y para recivir los datos... hago lo siguiente...

Código PHP


function requestModular($modulo=1)
{
        $iduser = $_POST['iduser'];
        $fecha = $_POST['fecha'];
        $preg = mysql_query("SELECT * FROM pregunta WHERE idmodulo='".$modulo."'");
        while ($p = mysql_fetch_array($preg))
            {
        
        if ( $_REQUEST[$p['idpregunta']] )
        echo "'".$p[0]."',";
        $res = mysql_query("SELECT * FROM respuestas WHERE idpregunta in(".$p[0].")");
        while ($linea = mysql_fetch_array($res))
            {
            
        if ( $_REQUEST[$linea['idrespuesta']] )
        mysql_query("INSERT INTO examen (`iduser`,`idpregunta`,`idrespuesta`,`fecha`) VALUES ('$iduser','".$linea[0]."','".$linea['idrespuesta']."','$fecha')");
            
            }        

            }
        
}




Saludos y gracias por responder

me alegro

Avatar de jurena
Nivel 5 Nivel 5 Nivel 5 Nivel 5 Nivel 5 Nivel 5 Nivel 5

(Nivel 5 - 729 posts)

#7 Offline jurena Usuario 03 abr 08 (15:51)  
Me alegro de que hayas encontrado la solución que buscabas. Enhorabuena. Yo veré tu propuesta y seguro que me servirá para algunos scripts míos. Gracias.

Responder mensaje

Para poder participar debes estar registrado e identificado. Si no estás registrado como usuario de PHP-Hispano, :: Registrar ::
Login / Password   

Web alojada en Zilos

php-hispano.net 2002 - 2008 | XHTML 1.0
Datos Legales | Webmaster