Εμφάνιση επιλογών από φόρμα

Σε αυτή την περιοχή μπορείτε να βρείτε ή να αναζητήσετε πληροφορίες σχετικές με την PHP

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

Απάντηση
giannismit
Δημοσιεύσεις: 8
Εγγραφή: 26 Δεκ 2010 14:38

Εμφάνιση επιλογών από φόρμα

Δημοσίευση από giannismit » 22 Ιαν 2015 22:26

Γεια σας,

Έχω μια db με έναν πίνακα που έχει 500 ερωτήσεις και πιθανές απαντήσεις σε κάθε ερώτηση.
Η κάθε ερώτηση έχει το λιγότερο 2 απαντήσεις και το μέγιστο 6 απαντήσεις.
Η κάθε απαντηση έχει βαθμούς απο το -6 έως και το +6.

Έχω λοιπόν μια φόρμα μέσα απο την οποία ο χρήστης επιλέγει αριθμό τυχαίων ερωτήσεων.
Π.χ. αν επιλέξει κάποιος 5 ερωτήσεις θα εμφανιστούν 5 ερωτήσεις και κάτω απο κάθε ερώτηση οι πιθανές απαντήσεις με ένα checkbox στην κάθε μιά για να επιλέξει ποιά(ές) θεωρεί σωστές.

Έως εδώ όλα καλά.
Το πρόβλημα μου είναι πώς να εμφανίσω τις επιλεγμένες απαντήσεις με τους βαθμούς τους.
Για να γίνω ποιό κατανοητός στην φόρμα έχω 6 checkbox (ένα για την κάθε πιθανή απάντηση), αλλά αυτά επαναλαμβάνονται τόσες φορές όσες είναι και οι ζητούμενες ερωτήσεις απο τον χρήστη. (Π.Χ 5 ερωτήσεις επι 6 checkbox = 30). Θέλω λοιπόν να ξεχωρίσω τις επιλογές της κάθε ερώτησης.

Παραθέτω και τον κώδικα της φόρμας:

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

<?php // Εμφάνιση ερωτήσεων και επιλογή των απαντήσεων
        if &#40;isset&#40;$_GET&#91;'arithmos'&#93;&#41; && &#40;!empty&#40;$_GET&#91;'arithmos'&#93;&#41;&#41;&#41; &#123; // Αν η μεταβλητή _GET δεν είναι άδεια, ανασύρω απο την βάση δεδομένα
                                                                        // ανάλογα με τον αριθμό των ερωτήσεων αλλά και το επίπεδο
            
        	$arithmos_id = $mysqli->real_escape_string&#40;$_GET&#91;'arithmos'&#93;&#41;;
            $epipedo_id = $mysqli->real_escape_string&#40;$_GET&#91;'epipedo'&#93;&#41;;
        	$result = $mysqli->query&#40;"SELECT * FROM `articles` WHERE " .$epipedo_id ." = 1 ORDER BY RAND &#40;&#41; LIMIT 0 ," . $arithmos_id &#41;;
        	if &#40;$result->num_rows > 0&#41; &#123;
        		while &#40;$row = $result->fetch_assoc&#40;&#41;&#41; &#123; //εμφάνιση όλων των επιλεγμένων ερωτήσεων
                    $kef_ar_ero = "Κεφ. ". $row&#91;'kefalaia_id'&#93;. " \"Ερ. " . $row&#91;'ar_ero'&#93;. "\"";
                    ?>
                    
                    <div class="row">
                         <div class="col-md-10"><h4><li><?php echo $row&#91;'erotisi'&#93;; ?> </li></h4>
                         </div>
                            <?php 
                                if &#40;!empty&#40;$_GET&#91;'showchapter'&#93;&#41;&#41; &#123;
                                    ?>
                                    <span class="label label-info"><?php echo $kef_ar_ero; &#125; ?></span>
                    </div>
                    <form class="form-horizontal" method="POST" action="index.php" name="form_apa" accept-charset="UTF-8">
                        <?php
                            echo "<p><input type=\"checkbox\" name=\"ap_1\"/> " . $row&#91;'apantisi1'&#93; . "<input type=\"hidden\" name=\"vath1\" value=" . $row&#91;'v1'&#93;. "></p>";
                            echo "<p><input type=\"checkbox\" name=\"ap_2\"/> " . $row&#91;'apantisi2'&#93; . "<input type=\"hidden\" name=\"vath2\" value=" . $row&#91;'v2'&#93;. "></p>";
                            if &#40;empty&#40;$row&#91;'apantisi3'&#93;&#41;&#41;&#123; 
                                echo ""; &#125; else &#123; 
                                    echo "<p><input type=\"checkbox\" name=\"ap_3\"/> " . $row&#91;'apantisi3'&#93; ."<input type=\"hidden\" name=\"vath3\" value=" . $row&#91;'v3'&#93;. "></p>"; &#125;
                            if &#40;empty&#40;$row&#91;'apantisi4'&#93;&#41;&#41;&#123; 
                                echo ""; &#125; else &#123; 
                                    echo "<p><input type=\"checkbox\" name=\"ap_4\"/> " . $row&#91;'apantisi4'&#93; ."<input type=\"hidden\" name=\"vath4\" value=" . $row&#91;'v4'&#93;. "></p>"; &#125;
                            if &#40;empty&#40;$row&#91;'apantisi5'&#93;&#41;&#41;&#123; 
                                echo ""; &#125; else &#123; 
                                    echo "<p><input type=\"checkbox\" name=\"ap_5\"/> " . $row&#91;'apantisi5'&#93; ."<input type=\"hidden\" name=\"vath5\" value=" . $row&#91;'v5'&#93;. "></p>"; &#125;
                            if &#40;empty&#40;$row&#91;'apantisi6'&#93;&#41;&#41;&#123; 
                                echo ""; &#125; else &#123; 
                                    echo "<p><input type=\"checkbox\" name=\"ap_6\"/> " . $row&#91;'apantisi6'&#93; ."<input type=\"hidden\" name=\"vath6\" value=" . $row&#91;'v6'&#93;. "></p>"; &#125;
                            echo "<hr>";
                        ?>

                    <?php  
                &#125;
            &#125;
        &#125;   
        if &#40;isset&#40;$_GET&#91;'arithmos'&#93;&#41; && &#40;!empty&#40;$_GET&#91;'arithmos'&#93;&#41;&#41;&#41; &#123;
            ?>
            <div class="form-group">
                <div class="col-sm-offset-4 col-sm-6">
                  <button type="submit" name="sub2" class="btn btn-success">Υποβολή</button>
                </div>
            </div>
            <?php
        &#125;
        ?>
    
    </form>

Άβαταρ μέλους
giannis17
Honorary Member
Δημοσιεύσεις: 1215
Εγγραφή: 06 Ιαν 2005 19:50
Τοποθεσία: Παγκράτι - Αθήνα
Επικοινωνία:

Εμφάνιση επιλογών από φόρμα

Δημοσίευση από giannis17 » 24 Ιαν 2015 03:06

κατ' αρχάς ακολουθείς λάθος δομή, εφόσον δεν υπάρχει σταθερός αριθμός απαντήσεων έπρεπε να βρίσκονται σε διαφορετικό πίνακα και να συνδέονται με ξένο κλειδί στο 'articles' και έπειτα να τις εμφανίζεις μέσα σε loop (ιδανικά να αποθηκεύεις το αποτέλεσμα σε ένα αντικείμενο ή array και να κάνεις foreach σε αυτό, όχι να τρέχεις ερώτημα για κάθε ερώτηση μέσα στο loop των ερωτήσεων)

anyway για να κάνεις αυτό που θες θα πρέπει είτε μέσα στο name είτε σε κάποιο data field να κρατάς και το id της ερώτησης, με σκέτο ap_1 πως να ξέρεις ποιανής ερώτησης είναι...
"There is only one problem with common sense; it’s not very common."
&#8211; Milt Bryce

giannismit
Δημοσιεύσεις: 8
Εγγραφή: 26 Δεκ 2010 14:38

Εμφάνιση επιλογών από φόρμα

Δημοσίευση από giannismit » 24 Ιαν 2015 11:24

Σε ευχαριστώ για την απάντησή σου.
Ναι το κατάλαβα ότι ακολούθησα λάθος δομή (κάπως αργά βέβαια, είναι όλα έτοιμα εκτός από αυτό.).
Αν και θα καθήσω να τα ξανακάνω πάλι, βλέπεις είναι η πρώτη μου εφαρμογή και μαθαίνω.

Τέλος πάντων εγκυκλοπαιδικά τώρα μέχρι να μου απαντήσης είχα κάνει τις εξείς αλλαγές.
Όρισα μια μεταβλητή πρίν απο την φόρμα που μου δίνει τον αριθμό της ερώτησης και τον αριθμό του κεφαλαίου που βρίσκεται αυτή (Υπ' όψιν ότι οι ερωτήσεις έχουν δοθεί έντυπα στους ενδιαφερόμενους και είναι δομημένες σε κεφάλαια και αριμό ερώτησης σε κάθα καφάλαιο). Έτσι είναι καλύτερα να το ελέγχω:

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

$kefEro = $row&#91;'ar_ero'&#93; . "-" . $row&#91;'kefalaia_id'&#93;;
Μετά άλλαξα το inpout στην φόρμα σε αυτό:

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

<p><input type="checkbox" name="ap_1_<? echo $kefEro ;?>" /> <? echo $row&#91;'apantisi1'&#93;;?>
   <input type="hidden" name="vath1_<? echo $kefEro ;?>" value="<? echo $row&#91;'v1'&#93;;?>"/></p>
Τώρα κάνωντας μια δοκιμή ζητάω 3 ερωτήσεις και παίρνω τον εξείς array:

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

Array
&#40;
    &#91;ap_1_55-1&#93; => on
    &#91;vath1_55-1&#93; => -6
    &#91;ap_2_55-1&#93; => on
    &#91;vath2_55-1&#93; => -6
    &#91;ap_3_55-1&#93; => on
    &#91;vath3_55-1&#93; => 6
    &#91;ap_1_6-1&#93; => on
    &#91;vath1_6-1&#93; => -6
    &#91;ap_2_6-1&#93; => on
    &#91;vath2_6-1&#93; => -6
    &#91;ap_3_6-1&#93; => on
    &#91;vath3_6-1&#93; => 6
    &#91;ap_1_27-1&#93; => on
    &#91;vath1_27-1&#93; => -6
    &#91;ap_2_27-1&#93; => on
    &#91;vath2_27-1&#93; => 6
    &#91;ap_3_27-1&#93; => on
    &#91;vath3_27-1&#93; => -6
    &#91;sub2&#93; => 
&#41;
Από εδώ λοιπόν με ενδιαφέρουν όσες απαντήσεις είναι "on" (εδώ τις έχω τσεκάρει όλες για αυτό είναι όλες "on") και οι αντίστοιχες βαθμολογίες τους.
Εδώ έχω κολήσει παλι!!!!
Θα ήθελα να εμφανίσω τις επιλεγμένες ερωτήσεις με τις τσεκαρισμένες απαντήσεις και την βαθμολογία τους.

Άβαταρ μέλους
giannis17
Honorary Member
Δημοσιεύσεις: 1215
Εγγραφή: 06 Ιαν 2005 19:50
Τοποθεσία: Παγκράτι - Αθήνα
Επικοινωνία:

Εμφάνιση επιλογών από φόρμα

Δημοσίευση από giannis17 » 24 Ιαν 2015 13:35

Έχεις σκεφτεί το ενδεχόμενο αφού δίνεις τις βαθμολογίες στην ίδια σελίδα απλά να πάει κάποιος με ένα firebug και να βάλει στη λάθος απάντηση 6 και να στείλει τη φόρμα; :D

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

Επίσης καλό είναι να οριστικοποιήσεις ένα pattern για να μπορείς να πάρεις εύκολα την απάντηση, ερώτηση και κεφάλαιο από το name. π.χ. ap1.55.1 κάνεις substr τους 2 πρώτους χαρακτήρες και μετά tokenize με την τελεία. το 1ο σκέλος είναι ο αριθμός απάντησης, το 2ο το κεφάλαιο και τελευταίο η ερώτηση
"There is only one problem with common sense; it’s not very common."
&#8211; Milt Bryce

giannismit
Δημοσιεύσεις: 8
Εγγραφή: 26 Δεκ 2010 14:38

Εμφάνιση επιλογών από φόρμα

Δημοσίευση από giannismit » 24 Ιαν 2015 20:30

:D όχι δεν το είχα σκεφθεί.

Θα προσπαθήσω να τα πάρω απο το name με τον τρόπο που μου είπες και με νέο ερώτημα να κάνω την βαθμολόγιση.
Αν κολήσω θα επανέλθω!!
Ευχαριστώ για το χρόνο σου.

giannismit
Δημοσιεύσεις: 8
Εγγραφή: 26 Δεκ 2010 14:38

Εμφάνιση επιλογών από φόρμα

Δημοσίευση από giannismit » 24 Ιαν 2015 22:09

:o
Όλες οι τελείες που βάζω στο "name" μετατρέποναται στον array σε κάτω παύλες _ .

Άβαταρ μέλους
giannis17
Honorary Member
Δημοσιεύσεις: 1215
Εγγραφή: 06 Ιαν 2005 19:50
Τοποθεσία: Παγκράτι - Αθήνα
Επικοινωνία:

Εμφάνιση επιλογών από φόρμα

Δημοσίευση από giannis17 » 24 Ιαν 2015 22:42

χαχα, ε βάλε κάτω παύλες να τελειώνουμε :P
"There is only one problem with common sense; it’s not very common."
&#8211; Milt Bryce

giannismit
Δημοσιεύσεις: 8
Εγγραφή: 26 Δεκ 2010 14:38

Εμφάνιση επιλογών από φόρμα

Δημοσίευση από giannismit » 24 Ιαν 2015 23:17

Εγώ να βάλω κάτω πάυλες, αλλά πώς θα ξεχωρήσω μόνο αυτά που θέλω?
Δεν ξέρω τον τρόπο..

Άβαταρ μέλους
giannis17
Honorary Member
Δημοσιεύσεις: 1215
Εγγραφή: 06 Ιαν 2005 19:50
Τοποθεσία: Παγκράτι - Αθήνα
Επικοινωνία:

Εμφάνιση επιλογών από φόρμα

Δημοσίευση από giannis17 » 24 Ιαν 2015 23:50

"There is only one problem with common sense; it’s not very common."
&#8211; Milt Bryce

giannismit
Δημοσιεύσεις: 8
Εγγραφή: 26 Δεκ 2010 14:38

Εμφάνιση επιλογών από φόρμα

Δημοσίευση από giannismit » 30 Ιαν 2015 12:25

Όλα καλά.

Ευχαριστώ πολύ για την βοήθεια.

Απάντηση

Επιστροφή στο “PHP Προγραμματισμός”

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

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