Test online - afisare aleator

Discutii despre script-uri si coduri PHP-MySQL, precum si lucru cu XML in PHP.
iuly
Mesaje: 11

Test online - afisare aleator

Salut,
de curand am inceput sa lucrez la un test online . Problema a aparut atunci cand am vrut sa afisez intreabrile si raspunsurile aleatoriu din baza de date . Are cineva vreo idee ? :roll:

ripe12 Mesaje: 12
Incearca cu functia "rand(min,max)". Unde min,max e intervalul din care iti va genera un numar intreg aleatoriu. Iar la max poti pune ca valoare folosind functia "mysql_num_rows($interogare)" unde $interogare=mysql_query("SELECT * FROM `tabelul_tau`"). Apoi cu "mysql_data_seek()" accesezi direct randul dorit...
Codul ar fi cam asa:

Cod: Selectaţi tot

$interogare=mysql_query("SELECT `intrebare` FROM `tabelul_tau`");
$nr_randuri=mysql_num_rows($interogare);
$nr_aleatoriu=rand(0,$nr_randuri);
if (mysql_data_seek($interogare, $nr_aleatoriu)) $rand = mysql_fetch_assoc($interogare);
Si asa $rand['intrebare'] contine o intrebare aleatorie... Sper ca nu am uitat vreo virgula sau vreo litera ca e destul de tarziu si sunt destul de obosit. Oricum vezi curs marplo: https://marplo.net/php-mysql/mysql3.html

Spor.

iuly Mesaje: 11
in primul rand mersi frumos ca mi-ai raspuns ,
acest lucru despre care vorbesti l-am facut si eu .. am pus totul intr-un for si imi afisez cate intrebari vreau eu.. problema intervine atunci cand vreau sa fac acelasi lucru cu raspunsurile , raspunsurile sunt introduse in baza de date avand un camp unde scrie "nu" si "da" pt raspuns corect sau incorect . In concluzie la o intrebare am 4 raspunsuri 3 cu nu si unu cu da , cum fac sa schimb locul raspunsurilor , dar sa il stiu care e corect pentru a verifica testul ?
tabelul intrebari contine : id , id_intrebare , intrebare
tabelul raspunsuri contine : id, id_intrebare , raspuns , raspuns_corect
am atasat ce am facut pana acum :) http://www.filehost.ro/932533/test_rar" target="_blank
daca mai ajuta raman profund indatorat ca mi-am tocit creierii :oops:
http://img6.imageshack.us/img6/1443/bazadedate.png" target="_blank

MarPlo Mesaje: 4343
Incearca sa te folosesti (inspiri) din urmatorul exemplu. Ideea e sa ai raspunsurile de pe un rand intr-un array. Mai mult ..., studiaza exemplul:

Cod: Selectaţi tot

<?php
// Randul cu raspunsurile
$row = array('inc1'=>'x', 'inc2'=>'x2', 'cor'=>'corect', 'inc4'=>'x4');

$re = array_rand($row, count($row));      // Amesteca ordinea cheilor

// Afiseaza valorile, in ordinea amestecata
for($i=0; $i<count($re); $i++) {
  $key = $re[$i];
  echo $row[$key]. '<br />';
}

// Stii ca unde $key = 'cor', e raspunsul corect
?>

iuly Mesaje: 11
ms .. pare buna ideea incerc si am sa revin cu rezultatele :)

iuly Mesaje: 11
Nu merge .. nu le schimba :((
scuze pentru dublu post

MarPlo Mesaje: 4343
Eu am testat modeul de mai sus si le schimba ordinea. Mai mult nu stiu ce trebuie.

iuly Mesaje: 11
exact modeulul de mai sus l-am incercat si eu si imi pastreaza aceeasi ordine :-??

MarPlo Mesaje: 4343
Nu stiu ce sau cum e la tine ori de ce nu afiseaza aleator.
Scriptul, asa cum e, pe localhost mi-a dat acum urmatorul rezultat:

Prima data mi-a afisat :
x2
x4
x
corect

A doua oara, la refresh, mi-a afisat :
corect
x4
x2
x

iuly Mesaje: 11
http:// lvais.com/test2/test.php" target="_blank atunci nu mai inteleg nimic :))

MarPlo Mesaje: 4343
Asa este, se poate sa fie ceva diferit la versiunile PHP.
Pe localhost amesteca, dar cand am testat acum si pe acest server e la fel ca la tine. Dar daca in loc de "count($row)" pui 3, da 3 rezultate amestecate.

Incearca urmatorul exemplu, cu "shuffle()" :)

Cod: Selectaţi tot

<?php
// Randul cu raspunsurile
$row = array('inc1'=>'x', 'inc2'=>'x2', 'cor'=>'corect', 'inc4'=>'x4');

$corect = $row['cor'];      // Retii valoarea corecta
shuffle($row);      // Amesteca valorile

// Afiseaza valorile, in ordinea amestecata
for($i=0; $i<count($row); $i++) {
  // Identifici cand a ajuns la raspunsul corect
  if($corect==$row[$i]) {
    echo "Raspunsul nr. $i e corect <br />";
  }

  echo $row[$i]. '<br />';     // Afiseaza valorile
}
?>

iuly Mesaje: 11
MarPlo scrie:Asa este, se poate sa fie ceva diferit la versiunile PHP.
Pe localhost amesteca, dar cand am testat acum si pe acest server e la fel ca la tine. Dar daca in loc de "count($row)" pui 3, da 3 rezultate amestecate.

Incearca urmatorul exemplu, cu "shuffle()" :)

Cod: Selectaţi tot

<?php
// Randul cu raspunsurile
$row = array('inc1'=>'x', 'inc2'=>'x2', 'cor'=>'corect', 'inc4'=>'x4');

$corect = $row['cor'];      // Retii valoarea corecta
shuffle($row);      // Amesteca valorile

// Afiseaza valorile, in ordinea amestecata
for($i=0; $i<count($row); $i++) {
  // Identifici cand a ajuns la raspunsul corect
  if($corect==$row[$i]) {
    echo "Raspunsul nr. $i e corect <br />";
  }

  echo $row[$i]. '<br />';     // Afiseaza valorile
}
?>
am aplicat scriptul mai sus mentionat si functioneaza perfect insa am intampinat o problema atunci cand incerc sa contorizez cumva raspunsurile , am incercat cu variabile da nu-mi ies . Am atasat documentul http://www.filehost.ro/938143/test_online_php" target="_blank
Daca reusesc sa trec si de chestia asta.. postez scriptul in semn de recunostinta :D

Subiecte similare