multiple choice

Συζητήσεις για την βάση δεδομένων MySQL και το phpMyAdmin

Συντονιστές: WebDev Moderators, Super-Moderators

Απάντηση
Άβαταρ μέλους
dimos_mitel
Δημοσιεύσεις: 279
Εγγραφή: 07 Αύγ 2009 21:06
Επικοινωνία:

multiple choice

Δημοσίευση από dimos_mitel » 02 Νοέμ 2012 12:35

Καλησπέρα σε όλους. αντιμετωπίζω ένα πρόβλημα σχετικά με την εμφάνιση ερωτήσεων multiple choice σε χρήστη. καταρχήν έχω τους παρακάτω πίνακες:

Κώδικας: Επιλογή όλων

multiple_choice_questions (quiz_id, question,c_answer)
αυτός ο πίνακας έχει τις ερωτήσεις μαζί με τις σωστές απαντήσεις

Κώδικας: Επιλογή όλων

multiple_choice_answers (answer_id, quiz_id,answer)
εδώ είναι ο πίνακας απαντήσεων όπου υπάρχει σαν ξένο κλειδί το quiz_id που είναι primary key στον πίνακα multiple_choice_questions

Κώδικας: Επιλογή όλων

multiple_choice_info (info_id,quiz_id,onoma_test,taksi, mathima, 	thema, 	shmeiwseis,date)
εδώ υπάρχουν βασικές πληροφορίες για το κάθε quizακι όπου βοηθάνε στην ουσία στην επιλογή του κατάλληλου quiz από τον χρήστη. πχ αν βάλει μάθημα μαθηματικά θα εμφανιστούν τα τεστ που έχουν σαν mathima τα μαθηματικά.

έχω μπερδευτεί πολύ στο πως θα δομήσω το κατάλληλο ερώτημα ώστε να εμφανίζονται για παράδειγμα 10 τυχαίες ερωτήσεις μαζί με τις απαντήσεις τους. κάθε ερώτηση σημειώνω ότι έχει διάφορο πλήθος απαντήσεων και όχι σταθερό. υπάρχουν ερωτήσεις με 2 πιθανές απαντήσεις (answer) και άλλες με 5 ή 6 κλπ.

Οπότε συνοπτικά σε μια σελίδα, πρέπει να εμφανίζονται 10 τυχαίες ερωτήσεις με βάση επιλογές του χρήστη στον πίνακα multiple_choice_info και η κάθε ερώτηση να έχει από κάτω τις πιθανές απαντήσεις της σε radio button.

έκανα μια προσπάθεια για να τραβήξω τα δεδομένα που συνδέονται μέσω του quiz_id αλλά δεν οδηγούμε πουθενά με αυτή την λογική. είναι λάθος.. σορυ για τον κώδικα αλλά είμαι ακόμα άπειρος.

Κώδικας: Επιλογή όλων

<?php
include&#40;'../connect_db.php'&#41;;

$sql = "select * from multiple_choice_questions
inner join multiple_choice_answers on &#40;multiple_choice_questions.quiz_id = multiple_choice_answers.quiz_id&#41;
inner join multiple_choice_info on &#40;multiple_choice_questions.quiz_id = multiple_choice_info.quiz_id&#41;";
$myData3 = mysql_query&#40;$sql&#41;;
while&#40;$row = mysql_fetch_array&#40;$myData3&#41;&#41; &#123;
echo '<input type="text" value="'.$row&#91;'question'&#93;.'" name="q'.$row&#91;'quiz_id'&#93;.'"/><br>';
echo '<input type="radio" value="'.$row&#91;'answer'&#93;.'" name="q'.$row&#91;'answer'&#93;.'"/>"'.$row&#91;'answer'&#93;.'"';

&#125;
?>
Ευχαριστώ!
miteletsis

Άβαταρ μέλους
Christianago
Δημοσιεύσεις: 332
Εγγραφή: 12 Νοέμ 2009 13:36

multiple choice

Δημοσίευση από Christianago » 02 Νοέμ 2012 16:13

Με βαση τα δεδομενα που δινεις, πώς θα το εκανα εγω:
Κατ'αρχας θα εριχνα λιγο την πολυπλοκοτητα της λυσης του προβληματος επιβαρυνοντας λιγο το server
και μετα θα προσπαθουσα να το εκλεπτυνω λιγο.
Υποθετω οτι ο χρηστης επιλεγει μαθημα απο 1 φορμα: Αρα εχουμε

Κώδικας: Επιλογή όλων

 $mathima = $_POST&#91;'mathima'&#93;; 
ή με οποιον αλλο τροπο παιρνεις τα δεδομενα απο το χρηστη.

Κώδικας: Επιλογή όλων

$sql = "select quiz_id from multiple_choice_info where mathima = '$mathima' order by rand&#40;&#41; limit 10";
$query = mysql_query&#40;$sql&#41;; 
while&#40;$row = mysql_fetch_array&#40;$query&#41;&#41; &#123;

$sql2 = "select answer, question, quiz_id from multiple_choice_answers, multiple_choice_questions where multiple_choice_answers.quiz_id = '$row&#91;0&#93;' and multiple_choice_questions.quiz_id = multiple_choice_answers.quiz_id";
$query2 = mysql_query&#40;$sql2&#41;; 
    while&#40;$row2 = mysql_fetch_array&#40;$query2&#41;&#41; &#123;

    echo '<input type="text" value="'.$row2&#91;1&#93;.'" name="q'.$row2&#91;2&#93;.'"/><br>';
    echo '<input type="radio" value="'.$row2&#91;0&#93;.'" name="q'.$row2&#91;0&#93;.'"/>"'.$row2&#91;1&#93;.'"'; 

&#125;
Δεν εχω τεσταρει τον κωδικα δεν ξερω αν τρεξει σωστα απλα θελω μονο να σου δειξω τη λογικη.
Τελευταία επεξεργασία από το μέλος Christianago την 02 Νοέμ 2012 18:38, έχει επεξεργασθεί 2 φορές συνολικά.

Άβαταρ μέλους
dva_dev
Script Master
Δημοσιεύσεις: 3790
Εγγραφή: 16 Σεπ 2005 01:32
Επικοινωνία:

multiple choice

Δημοσίευση από dva_dev » 02 Νοέμ 2012 16:51

@dimos_mitel
Αυτοί είναι όλοι οι πίνακες που έχεις ή υπάρχουν κι άλλοι που δεν έχεις αναφέρει;

Άβαταρ μέλους
dimos_mitel
Δημοσιεύσεις: 279
Εγγραφή: 07 Αύγ 2009 21:06
Επικοινωνία:

multiple choice

Δημοσίευση από dimos_mitel » 02 Νοέμ 2012 17:59

ναι αυτοί είναι οι πίνακες, δεν υπάρχουν άλλοι. Βασικά έτσι όπως θέλω το κάνω το ερώτημα ίσως γίνει πιο πολύπλοκο. Στην σελίδα του χρήστη, θα επιλέγει αρχικά απο drop-down menu το επίπεδο δυσκολίας (τάξη δημοτικού που καταχωρείται στον πίνακα με τιμές από 1-6), μετά από αυτό θα επιλέγει μάθημα, στην συνέχεια είδος τεστ (για να παίξει multiple choice θα πρέπει να επιλέξει multiple choice), αφου επιλέξει είδος τεστ το θέμα του μαθήματος που τον ενδιαφέρει και στο τελευταίο drop-down menu το όνομα του τεστ. Έτσι θα ήταν το ιδανικό.
miteletsis

Άβαταρ μέλους
Christianago
Δημοσιεύσεις: 332
Εγγραφή: 12 Νοέμ 2009 13:36

multiple choice

Δημοσίευση από Christianago » 02 Νοέμ 2012 18:07

Η εφαρμογη δε γινεται πολυπλοκη απλα και μονο επειδη δεχεσαι διαφορες παραμετρους απο το χρηστη.
Σε αυτο το query: $sql = "select quiz_id from multiple_choice_info where mathima = '$mathima' order by rand() limit 10";
θα προσθεσεις στην where συνθηκη και τα υπολοιπα δεδομενα που δινει ο χρηστης. Τα δεδομενα που χρειαζεσαι υπαρχουν και σε στηλες στους πινακες σου
οποτε θα ειναι σχετικα ευκολο να κανεις το ερωτημα.

Άβαταρ μέλους
dimos_mitel
Δημοσιεύσεις: 279
Εγγραφή: 07 Αύγ 2009 21:06
Επικοινωνία:

multiple choice

Δημοσίευση από dimos_mitel » 02 Νοέμ 2012 18:17

ναι πραγματικά, απλά στον έλεγχο θα βάλω και τις υπόλοιπες παραμέτρους. προς το παρόν στον κώδικα έχω πρόβλημα στην δεύτερη λούπα. μου εμφανίζει 2 φορές: Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in C:\xampp\htdocs\Diplomatiki_eksaskisi\tests\multiple_choice_page.php on line 18 όλα τα ονόματα είναι σωστά, και των πεδίων και των πινάκων
miteletsis

Άβαταρ μέλους
Christianago
Δημοσιεύσεις: 332
Εγγραφή: 12 Νοέμ 2009 13:36

multiple choice

Δημοσίευση από Christianago » 02 Νοέμ 2012 18:40

Η γραμμη 18 ειναι στο 2ο sql ετσι; Εχεις καποιον editor που να σου βγαζει συντακτικο λαθος;
Εκτυπωσε το $row[0] στην 1η λουπα μπορει να ειναι κενο.
Τελευταία επεξεργασία από το μέλος Christianago την 02 Νοέμ 2012 18:42, έχει επεξεργασθεί 1 φορά συνολικά.

Άβαταρ μέλους
dimos_mitel
Δημοσιεύσεις: 279
Εγγραφή: 07 Αύγ 2009 21:06
Επικοινωνία:

multiple choice

Δημοσίευση από dimos_mitel » 02 Νοέμ 2012 18:42

βασικά στο netbeans δουλεύω. Ο κώδικας όπως είναι γραμμένος δεν φαίνεται να είναι γραμμένος λάθος. δεν μου εμφανίζει κάποιο συντακτικό.

Ναι στο 2ο sql
miteletsis

Άβαταρ μέλους
dimos_mitel
Δημοσιεύσεις: 279
Εγγραφή: 07 Αύγ 2009 21:06
Επικοινωνία:

multiple choice

Δημοσίευση από dimos_mitel » 02 Νοέμ 2012 18:45

βασικά που κλείνει η πρώτη λούπα;; εγώ την έκλεισα μετά την 2η

Το row[0] εμφανίζει το παρακάτω μαζί με τα λάθη:

7
Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in C:\xampp\htdocs\Diplomatiki_eksaskisi\tests\multiple_choice_page.php on line 18
8
Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in C:\xampp\htdocs\Diplomatiki_eksaskisi\tests\multiple_choice_page.php on line 18
miteletsis

Άβαταρ μέλους
dimos_mitel
Δημοσιεύσεις: 279
Εγγραφή: 07 Αύγ 2009 21:06
Επικοινωνία:

multiple choice

Δημοσίευση από dimos_mitel » 02 Νοέμ 2012 18:49

το όνομα του μαθήματος που έβαλα υπάρχει 2 φορές στον πίνακα.. γι αυτό βγάζει 2 φορές λαθος στην ίδια λουπα?
miteletsis

Άβαταρ μέλους
Christianago
Δημοσιεύσεις: 332
Εγγραφή: 12 Νοέμ 2009 13:36

multiple choice

Δημοσίευση από Christianago » 02 Νοέμ 2012 19:10

Υπαρχουν στους πινακες γραμμες με quiz_id = 7 και 8 και αντιστοιχια του quiz_id εκει που ειναι ξενο κλειδι;
Κανονικα επρεπε να λαβαινεις 10 εκτυπωσεις του $row[0], οχι μονο 2, επιλεγεις 10 τυχαιες γραμμες.
Τι τυπος δεδομενων ειναι το quiz_id?

Άβαταρ μέλους
dimos_mitel
Δημοσιεύσεις: 279
Εγγραφή: 07 Αύγ 2009 21:06
Επικοινωνία:

multiple choice

Δημοσίευση από dimos_mitel » 02 Νοέμ 2012 19:17

το quiz_id (τύπου int)είναι primary key στον πίνακα multiple_choice_questions. Όταν ένας καθηγητής δημιουργεί ένα τεστ πολλαπλής επιλογής καταχωρεί τις βασικές πληροφορίες (multiple_choice_info), τις ερωτήσεις με την σωστή απάντηση (multiple_choice_questions) και τις απαντήσεις (multiple_choice_answers). Οι πίνακες βασικών πληροφοριών και απαντήσεων έχουν σαν ξένο κλειδί το quiz_id του πίνακα ερωτήσεων προκειμένου να συνδέονται. δες τον παρακάτω κώδικα που είναι της καταχώρησης:

Κώδικας: Επιλογή όλων

$question = mysql_real_escape_string&#40;$_POST&#91;'question'&#93;&#41;;
      $c_answer = mysql_real_escape_string&#40;$_POST&#91;'c_answer'&#93;&#41;;
      $onoma_test = mysql_real_escape_string&#40;$_POST&#91;'onoma_test'&#93;&#41;;
      $taksi = mysql_real_escape_string&#40;$_POST&#91;'taksi'&#93;&#41;;
      $mathima = mysql_real_escape_string&#40;$_POST&#91;'mathima'&#93;&#41;;
      $thema = mysql_real_escape_string&#40;$_POST&#91;'thema'&#93;&#41;;
      $shmeiwseis = mysql_real_escape_string&#40;$_POST&#91;'shmeiwseis'&#93;&#41;;
      $values = $_POST&#91;'values'&#93;;
      $today = date&#40;"Y-m-d H&#58;i&#58;s"&#41;;

	

	      $sql = "INSERT INTO multiple_choice_questions &#40;`question`, `c_answer`&#41; VALUES &#40; '".$question."', '".$c_answer."'&#41;";
	      mysql_query&#40; $sql &#41;;
		  $lastItemID = mysql_insert_id&#40;&#41;;


          $i=0;
          $num = count&#40;$values&#41;;
          for &#40;$i=0; $i < $num; $i++&#41;
          &#123;
	      $sql2 = "INSERT INTO multiple_choice_answers &#40;`quiz_id`, `answer`&#41; VALUES &#40; '".$lastItemID."', '".$values&#91;$i&#93;."'&#41;";
	      mysql_query&#40;$sql2&#41;;
          &#125;
          $sql3 = "INSERT INTO multiple_choice_info &#40;`quiz_id`, `onoma_test`, `taksi`, `mathima`, `thema`, `shmeiwseis`, `date` &#41; VALUES &#40; '".$lastItemID."', '".$onoma_test."',
                              '".$taksi."', '".$mathima."', '".$thema."', '".$shmeiwseis."', '".$today."' &#41;";
	       mysql_query&#40; $sql3 &#41;;
miteletsis

Άβαταρ μέλους
dimos_mitel
Δημοσιεύσεις: 279
Εγγραφή: 07 Αύγ 2009 21:06
Επικοινωνία:

multiple choice

Δημοσίευση από dimos_mitel » 02 Νοέμ 2012 19:35

το ξένο κλειδί στο όνομα του μαθήματος (mathima) έχει τις σωστές τιμές (7 και 8 ). Υπάρχουν και στους άλλους 2 πίνακες κανονικά.

Υπολόγισε ότι υπάρχουν μόνο 2 εγγραφές στον πίνακα τον info που σαν μάθημα έχουν την τιμή που έβαλα ως mathima
miteletsis

Απάντηση

Επιστροφή στο “MySQL”

Μέλη σε σύνδεση

Μέλη σε αυτήν τη Δ. Συζήτηση: Δεν υπάρχουν εγγεγραμμένα μέλη και 0 επισκέπτες