Comment stocker toutes mes questions?

Fermé
KOJR Messages postés 2 Date d'inscription mercredi 20 juillet 2016 Statut Membre Dernière intervention 7 août 2016 - 7 août 2016 à 21:43
theolius Messages postés 8 Date d'inscription mardi 26 janvier 2010 Statut Membre Dernière intervention 12 juillet 2017 - 12 juil. 2017 à 22:07
Bonjour,

Bonsoir a tous et a toutes :D !
J'ai un std Class ObJect qui se presente comme suit:

std Class Object
(
[Quizz]=>Array
(
[0]=>std Class Object
(
[Nom du quizz]=>quizz un

)
[1] => std Class Object
(
[question]=>Qui est Jesus Christ?
[reponse]=>Le Sauveur et Seigneur de l'humanite
[premier leurre]=>un prophete
[deuxieme leurre]=>un ange
[troisieme leurre]=>un homme
)
[2]=>std Class Object
(
[question]=>Ou irons nous apres la mort?
[reponse]=>Au paradis
[premier leurre]=>en enfer
[deuxieme leurre]=>nulle part
[troisieme leurre]=>au pays des morts
)

)

)

j'ai travaille toute la journee mais je n'arrive toujours pas a stocker toute mes questions dans les deux tables suivantes:
table 1: tests
test_id (auto increment)
nomtest
table questions
idquestion (auto increment)
test_id (cle etrangere)
question
reponse
premier leurre
deuxieme leurre
troiseme leurre
J'ai les deux foreach loop suivantes :

$mon_test = $mon_object->Quizz; // Jaccede a la valeur de la propriete quizz de mon objet
for($q= 0; $q < count($mon_test); $q++){ // je parcooure mon tableau
foreach($mon_test[$q] as $k=>$v){
if($k == "Nom du test"){
$stocknom = $mon_test[$q]->Nom du test;
}
if($k == "Question"){
$stockquestion = $mon_test[$q]->Question;
}
if($k == "Reponse"){
$stockreponse = $mon_test[$q]->Reponse;
}
if($k == "premier leurre"){
$stockleurre1 = $mon_test[$q]->premier leurre;
}
if($k == "deuxieme leurre"){
$stockleurre2 = $mon_test[$q]->deuxieme leurre;
}
if($k == "troisieme leurre"){
$stockleurre3 = $mon_test[$q]->troisieme leurre;
}
}
}
$insertion1 = "INSERT INTO quizz (nom du quizz)VALUES ('$stocknom')";
if ($my_db_object->query($insertion1) === true){
$last_id = $my_db_object->insert_id;// jen ai besoin pour remplir la cle idtest qui me dit quelle question appartient a quel test
$succes = "donnees sauvegardees";
}
else{
$failure = "Erreur: " .$insertion1.$my_db_object->error;
}
$insertion2 = "INSERT INTO questions SET
idtest = '".$last_id."',
question = '".$stockquestion."',
reponse= '".$stockreponse."',
incorrect1 = '".$stockleurre1."',
incorrect2 = '".$stockleurre2."',
incorrect3 = '".$stockleurre3."'";

if ($my_db_object->query($insertion2) === true) {
$succes = "donnees sauvees";
}

else {
$echec = "Erreur: " .$my_insert_query2.$my_db_object->error;
}

le premier probleme est que ce code ne stocke qu'une seule question (la derniere) et le truc c'est que si je mets les insertion 1 et deux dans les foreach loop il ya insertion multiples ce dont je ne veux pas. Toute aide sera la bienvenue. Merci de m'avoir lue!

2 réponses

forum92 Messages postés 220 Date d'inscription lundi 6 juillet 2015 Statut Membre Dernière intervention 14 août 2018 133
Modifié le 10 juin 2017 à 01:58
bonjour,
Premièrement si je peux me permettre tu n'utilises pas suffisamment l'objet.
Pour moi tu devrai avoir un objet QUIZZ et un objet TEST au lieu des std objet et les attributs qui vont avec. Ainsi tu accéderais de la façon suivante aux valeurs :
// pour chaque test
foreach( $tests as $test){
    $test->getQuestion();
}


Un test est il égal à un quizz ?

C'est normal que tu insère que la dernière valeur vu que dans le boucle tu remplace tes valeurs au fur et à mesure que tu boucle.
Ton insertion multiple est lié à mon avis à tes deux boucles.

solution :
// pour chaque test
foreach( $tests as $test){
       $insertion2 = "INSERT INTO questions SET  
       idtest = $test->getIdTest(),
       question =$test->getQuestion(),
       reponse= $test->getReponse(),
       incorrect1 = $test->getIncorrect1(),
       incorrect2 = ' $test->getIncorrect2(),
       incorrect3 =  $test->getIncorrect3()
  
}
0
theolius Messages postés 8 Date d'inscription mardi 26 janvier 2010 Statut Membre Dernière intervention 12 juillet 2017
12 juil. 2017 à 21:30
Bonjour,

Dans ce cas de figure, n'allez vous pas insérer que 1 question par test ?
Il me semble qu'il manque une boucle non ?
0
theolius Messages postés 8 Date d'inscription mardi 26 janvier 2010 Statut Membre Dernière intervention 12 juillet 2017
Modifié le 12 juil. 2017 à 22:10
Bonjour,

...tout à fait d'accord. Il faudrait revoir t'on approche POO et la strucuture de la BDD (mais ce n'est pas la question) ;)



Ton problème vien du fait que tu "insert" tes valeurs hors de la 1er boucle.

for ($q = 0; $q < count($mon_test); $q++) { 
[ ... ]
}

$insertion1 = "INSERT INTO quizz (nom du quizz)VALUES ('$stocknom')
[ ... ]
$insertion2 = "INSERT INTO questions SET 



Alors qu'il faudrait faire des imbrications.
(représentation des grandes lignes)
// je parcoure mon tableau
for ($q = 0; $q < count($mon_test); $q++) { 
       //je récupère le nom de mon quizz
        [ ... ]
        //J'enregisre mon quizz
        [ ... ]
        //Je boucle sur mes questions
             [ ... ]
             //j'enregistre ma question
             [ ... ]
}//fin de boucle


... mais pas que .

Bref, il faut que tu revoir également la structure de ton code.
Daprès mois il n'y a pas de sens à créer des "objets" si c'est uniquement pour les appeleés par objet->propriété au lieu de array["ma_cle"]

Bonne continuation :)
0