Προς το περιεχόμενο

εισαγωγή αθροίσματος τιμών από checkboxes σε βάση με html/php


despina_87

Προτεινόμενες αναρτήσεις

Δημοσ.

Γεια σας παιδια!

 

Έχω φτιάξει μια φόρμα με html στην οποία περιλαμβάνεται μια ερώτηση με checkboxes. Όταν ο χρήστης επιλέγει περισσότερες από μία απαντήσεις, πρέπει να περνιέται το άθροισμά τους σε μια βάση. Ο κώδικας που έχω γράψει είναι ο εξής, όμως σαν αποτέλεσμα δίνει μόνο την τιμή της τελευταίας απάντησης που επιλέχτηκε.

 

<script type="text/javascript">

function checkTotal() {

document.Form.total.value = '';

var sum = 0;

for (i=0;i<document.Form.benefit.length;i++) {

if (document.Form.benefit.checked) {

sum = sum + parseFloat(document.Form.benefit.value);

}

}

document.Form.total.value = sum;

}

</script>

 

<FORM name="Form" method="POST" action="results.php">

 

και μέσα στον πίνακα για την ερώτηση ο κώδικας είναι:

<td width=600> Alignment of corporate & personal goals</td>

<td><input type="checkbox" name="benefit" size="2" value = "2" onchange="checkTotal()" ></td>

</tr>

<tr>

<td>Reduction of operating costs</td>

<td><input type="checkbox" name="benefit" size="2" value = "4" onchange="checkTotal()" ></td>

</tr>

<tr>

<td>Company image</td>

<td><input type="checkbox" name="benefit" size="2" value = "8" onchange="checkTotal()" ></td>

</tr>

<tr>

Μπορεί κάποιος να βοηθήσει???:shifty::shifty::shifty:

Δημοσ.

Η απάντηση είναι ότι έτσι όπως το έχεις δουλεύει μόνο σε javascript όπως και το παράδειγμα που έβαλες. Εσύ όμως θέλεις να γίνει submit η φόρμα , να πάρεις τις τιμές με php (?) κια να τις βάλεις σε βάση δεδομένων.

Άρα, αντί για benefit θα βάλεις benefit[] , αν χρειαστείς να το επερξεργαστείς στη javascript θα το δεις ως benefit[] και στην php θα το πάρεις ως array με όνομα benefit (σκέτο).

Αν δεν έγινα κατανοητός (πολύ πιθανό) πες μου να δώσω παράδειγμα.

Δημοσ.

Δεν βλέπω πουθενά στον κώδικα σου το πεδίο "total".

 

Φαντάζομαι το έχεις δημιουργήσει.

 

Πάντως ο κώδικας σου παίζει μια χαρά το δοκίμασα και εγώ...

 

Πολύ απλά κάνε ένα alert(sum) στο τέλος της function σου να δεις ότι δουλεύει μια χαρά!

 

Τώρα εάν δεν αποθηκεύεται στην βάση είναι άλλο θέμα

Δημοσ.

Nαι, κάνω submit στη φόρμα μου και στο αρχείο php περνάω τις τιμές με POST ,όμως δεν χρησιμοποιώ benefit[ ] γιατι δεν θέλω να φτιάξω array, θέλω το άθροισμα να αποθηκεύεται σε ένα κελί του πίνακα της βάσης μου..

Δημοσ.

Είναι σωστός ο κωδικάς κάποια λεπτομέρεια σου λείπει μόνο...

 

μετά το post... το πεδίο που κρατάει την τιμή που θέλεις είναι το total.. όπως το έχεις σχεδιάσει στην javascript..

 

>
<script type="text/javascript">
   function checkTotal() {    
       document.Form.total.value = '';
       var sum = 0;
       for (var i=0;i<document.Form.benefit.length;i++) {
           if (document.Form.benefit[i].checked) {
               sum = sum + parseFloat(document.Form.benefit[i].value);
           }
       }
       document.Form.total.value = sum;
   }
</script>

και μέσα στον πίνακα για την ερώτηση ο κώδικας είναι:

<FORM name="Form" method="POST" action="results.php">
   <table>
       <tr>
           <td width=600> My Total Value</td>
           <td>[color=Red]<input type="hidden" name="total" size="50" value = ''>[/color]</td>
       </tr>
       <tr>
           <td width=600> Alignment of corporate & personal goals</td>
           <td><input type="checkbox" name="benefit" size="2" value = "2" onchange="checkTotal()" ></td>
       </tr>
       <tr>
           <td>Reduction of operating costs</td>
           <td><input type="checkbox" name="benefit" size="2" value = "4" onchange="checkTotal()" ></td>
       </tr>
       <tr>
           <td>Company image</td>
           <td><input type="checkbox" name="benefit" size="2" value = "8" onchange="checkTotal()" ></td>
       </tr>
   </table>
</form>

Η results.php θα αποθηκεύση την total στην βάση σου..

Η benefit μην σε απασχολέι.. είναι μεταβλητή που χρησιμοποιείται μόνο από client side.. για να κάνεις το άθροισμα σου.

Δημοσ.

Νομίζω ότι η πιο σωστή λύση είναι αυτή που πρότεινε ο hartzoua.

 

><FORM name="Form" method="POST" action="results.php">
   <table>
       <tr>
           <td width=600> Alignment of corporate & personal goals</td>
           <td><input type="checkbox" name="benefit[]" size="2" value = "2"></td>
       </tr>
       <tr>
           <td>Reduction of operating costs</td>
           <td><input type="checkbox" name="benefit[]" size="2" value = "4"></td>
       </tr>
       <tr>
           <td>Company image</td>
           <td><input type="checkbox" name="benefit[]" size="2" value = "8" ></td>
       </tr>
   </table>
</form>

 

και στην results.php

 

>$total = array_sum($_POST['benefit]);

 

Μικρότερος κώδικας και χωρίς JS (για κάτι που έτσι κι αλλιώς δεν πρέπει να γίνεται client-side)

Δημοσ.

Παιδιά το μπερδεύεται και είναι τόσο απλό.

 

Αυτό που είπε ο @earthworm είναι το πιο σωστό και απλό.

 

Κάνει submit την φόρμα και έχει στην μεταβλητή $_POST['total'] αυτό που θέλει.

 

Γιατί να κάνει την ζωή του πιο δύσκολη?

Δημοσ.

Μικρότερος κώδικας και χωρίς JS (για κάτι που έτσι κι αλλιώς δεν πρέπει να γίνεται client-side)

 

Γιατί βρε zinas ... άσε και τον client να κάνει τίποτα... όλα ο server θα τα κάνει ;; :P:p

Δημοσ.

Η υλοποίηση του zinas είναι η ενδεδειγμένη. Εκτός βέβαια αν θέλεις η σελίδα σου να έχει λειτουργικότητα μόνο αν ο user έχει ενεργοποιημένη τη javascript. Δεν είναι έγκλημα (άλλωστε πλέον τα μισά sites στηρίζονται σε jquery) αλλά τότε θα πρέπει να βρίσκεις αν είναι απενεργοποιημένη και να μην αφήνεις το user να προχωρήσει με συμπλήρωμα φόρμας κτλ κτλ. Ότι σου φαίνεται πιο λογικό κάνε.

Δημοσ.
Γιατί να κάνει την ζωή του πιο δύσκολη?

 

Η πιο απλή απάντηση είναι: για να μάθει να προγραμματίζει σωστά.

 

Και επίσης, δεν κάνει πιο δύσκολη τη ζωή του. Πιο εύκολη την κάνει. Έχει γράψει λιγότερες γραμμές, δεν χρειάζεται να ξέρει js, είτε έχει ο άλλος ενεργοποιημένη js είτε όχι και είναι πιο ασφαλές

 

Ειλικρινά δεν μπορώ να σκεφτώ ούτε ένα πλεονέκτημα της χρήσης js για το συγκεκριμένο

Δημοσ.

Δοκίμασα και τους δύο τρόπους και είναι και οι δύο αποτελεσματικοί!Το άθροισμα αποθηκεύεται στη βάση μου. :) Πραγματικά δεν ξέρω ποιος από τους δύο είναι καλύτερος, πάντως σας ευχαριστώ όλους πολύ για το χρόνο και τη βοήθειά σας!

Δημοσ.

εντάξει ο topic starter έκανε την δουλειά του οπότε off topic και η συζητηση συνεχίζεται σε... φιλοσοφικό τόνο :-)

 

Η υλοποίηση του zinas είναι η ενδεδειγμένη. Εκτός βέβαια αν θέλεις η σελίδα σου να έχει λειτουργικότητα μόνο αν ο user έχει ενεργοποιημένη τη javascript. Δεν είναι έγκλημα (άλλωστε πλέον τα μισά sites στηρίζονται σε jquery) αλλά τότε θα πρέπει να βρίσκεις αν είναι απενεργοποιημένη και να μην αφήνεις το user να προχωρήσει με συμπλήρωμα φόρμας κτλ κτλ. Ότι σου φαίνεται πιο λογικό κάνε.

 

Γενικά πιστεύω το τι είναι ενδεδειγμένο και τι όχι είναι συνήθως θέμα σχετικό. Και εννοώ τα εξής 2 πραγματάκια...

 

Το 99,9% των site στα οποία μπαίνεις καθημερινά χωρίς την JS χάνουν όλη τους λειτουργικότητα, είτε αυτό αφορά εμφάνιση, είτε ευκολίες χειρισμού (jquery, ajax). Και 2ον κάποια πράγματα γίνονται μόνο σε JS και δεν υπάρχει εναλλακτικός δρόμος.

 

Άρα η εποχή που για κάποιον αδιόρατο (ή όχι) λόγο κάποιος απενεργοποιούσε την JS δεν νομίζω ότι υπάρχει σαν επιλογή πια. Ακόμα και οι browser των κινητών την υποστηρίζουν! Όποιος κλείνει την JS ναι, για μένα δεν πρέπει να έχει πρόσβαση στο περιεχόμενο, Όπως όταν κλείνει την flash δεν μπορεί να δει video στο youtube. Όπως δεν μπορείς να παίξεις παιχνίδι χωρίς DirectX κ.ο.κ... κ.ο.κ

 

Δηλαδή σκέψου να έχεις γράψει ένα site τίγκα στα ajax controls, για να βελτιώσεις την εμπειρία χρήσης, για το καλό του χρήστη δηλαδή, και να έρχεται ο άλλος και να σου απενεργοποιεί την JS. Θα κάτσεις από την αρχή να γράψεις εναλλακτική εκδοχή για χωρίς JS;; Όχι φίλε μου.

 

Αν ο άλλος γουστάρει να απενεργοποιήσει την flash, την JS, την Java και τα cookies... θα μπορεί να μπει μόνο στο site της θείας μου της Κούλας που έχει συνταγές για κουλουράκια.. (και πάλι παίζεται). :devil:

 

Η πιο απλή απάντηση είναι: για να μάθει να προγραμματίζει σωστά.

 

Και επίσης, δεν κάνει πιο δύσκολη τη ζωή του. Πιο εύκολη την κάνει. Έχει γράψει λιγότερες γραμμές, δεν χρειάζεται να ξέρει js, είτε έχει ο άλλος ενεργοποιημένη js είτε όχι και είναι πιο ασφαλές

 

Ειλικρινά δεν μπορώ να σκεφτώ ούτε ένα πλεονέκτημα της χρήσης js για το συγκεκριμένο

 

Γενικώς τώρα σαν φιλοσοφία (δική μου τουλάχιστον)... ότι μπορεί να γίνει σε JS προτιμώ να γίνεται σε JS. Όσο απλός και να είναι ένας υπολογισμός τι πιο λογικό από το να μοιράζεις τον φόρτο στους client εφόσον γίνεται. Σκέψου αυτό που σου λέω υπό το πρίσμα ότι έχεις ένα site με μεγάλη επισκεψιμότητα.

 

Τώρα από άποψη ασφάλειας.. οι έλεγχοι που πρέπει να γίνουν στην "απέναντι μεριά" θα γίνουν έτσι και αλλιώς.. ο άλλος κάνει POST ότι θέλει στην τελική... με ή χωρίς την JS.

 

Άρα μην είσαι τόσο σίγουρος για το ποια είναι η σωστή προγραμματιστική τεχνική για το συγκεκριμένο ζήτημα... Ή μήπως είναι τυχαίο ότι όλα τα μεγάλα site και cms είναι τίγκα στην JS. Μήπως αυτοί δεν ξέρουν να προγραμματίζουν σωστά;; B)

 

Εγώ λοιπόν σε αυτό που απαντάς θα απαντούσα ότι οι λιγότερες γραμμές δεν είναι πάντα το καλύτερο και ότι τώρα που είναι αρχή πρέπει να μάθει να παίζει και με την JS. :rolleyes:

Δημοσ.

Μπορεί να γίνει ενδιαφέρουσα η κουβέντα, ειδικά για κάποιον που δεν έχει εμπειρία, οπότε ας σου απαντήσω...

 

Το 99,9% των site στα οποία μπαίνεις καθημερινά χωρίς την JS χάνουν όλη τους λειτουργικότητα, είτε αυτό αφορά εμφάνιση, είτε ευκολίες χειρισμού (jquery, ajax).

Επειδή το κάνει λάθος το 99,9%, δεν σημαίνει ότι θα το κάνω κι εγώ. Επίσης εγώ σου είπα ότι δεν πρέπει να χρησιμοποιείς js για interaction με τη βάση... για τη λειτουργικότητα κάνε ότι νομίζεις.

 

Και 2ον κάποια πράγματα γίνονται μόνο σε JS και δεν υπάρχει εναλλακτικός δρόμος.

Αυτό είναι μια μεγάλη κουβέντα από μόνο του. Νομίζω ότι πλέον με CSS3 υπάρχουν ελάχιστα που απαιτούν JS ντε και καλά (σε σύχρονους browser). Πάντως κάτι που γίνεται μόνο σε js συνήθως δεν είναι απαραίτητο στην εφαρμογή.

 

Άρα η εποχή που για κάποιον αδιόρατο (ή όχι) λόγο κάποιος απενεργοποιούσε την JS δεν νομίζω ότι υπάρχει σαν επιλογή πια. Ακόμα και οι browser των κινητών την υποστηρίζουν! Όποιος κλείνει την JS ναι, για μένα δεν πρέπει να έχει πρόσβαση στο περιεχόμενο, Όπως όταν κλείνει την flash δεν μπορεί να δει video στο youtube. Όπως δεν μπορείς να παίξεις παιχνίδι χωρίς DirectX κ.ο.κ... κ.ο.κ

Το Google έχει κλειστή τη JS πάντως. Κάνε εσύ ένα site που να είναι μόνο ajax, χωρίς ούτε ένα κανονικό link και να σε δω πως θα γίνει crawl η σελίδα.

 

Δεύτερος λόγος για να έχεις κλειστή τη JS είναι για να "εκμεταλεύεσαι" σελίδες που έχουν ελέγχους και άλλες σημαντικές ενέργειες σε JS.

 

Παράδειγμα στην συγκεκριμένη περίπτωση. Κλείνω JS, τικάρω αυτά που θέλω, βάζω και ένα ψεύτικο άθροισμα στο hidden που έχεις βάλει και τόσο απλά σου διέλυσα το συστημα. Φαντάσου λοιπόν να είχες υλοποιημένο έτσι ένα σύστημα πληρωμών.

 

 

Δηλαδή σκέψου να έχεις γράψει ένα site τίγκα στα ajax controls, για να βελτιώσεις την εμπειρία χρήσης, για το καλό του χρήστη δηλαδή, και να έρχεται ο άλλος και να σου απενεργοποιεί την JS. Θα κάτσεις από την αρχή να γράψεις εναλλακτική εκδοχή για χωρίς JS;; Όχι φίλε μου.

Nαι, φίλε μου, έστω και μόνο για το google.

 

Παρεπιπτόντως, να σου πω και περίπτωση που μου έτυχε πρόσφατα:

Φτιάχνω ένα μεγάλο στοιχηματικό portal και βάζω κάποια στατιστικά να πετάγονται με ajax popups. Πάρα πολύ όμορφα και γρήγορα. Μόλις τα είδαν, με βρίσαν (τρόπος του λέγειν) γιατί χάνουν hits και αυτοί πουλάνε χώρο για τα banners με βάση τα hits που κάνει το site. (pageviews δηλαδή)

 

Αν ο άλλος γουστάρει να απενεργοποιήσει την flash, την JS, την Java και τα cookies... θα μπορεί να μπει μόνο στο site της θείας μου της Κούλας που έχει συνταγές για κουλουράκια.. (και πάλι παίζεται). :devil:

Η λογική σου είναι λάθος. Πρέπει να σκέφτεσαι και να υπολογίζεις τα πάντα.

Ξεκίνα:

ξέχνα αυτούς που δεν έχουν js

ξέχνα αυτούς που έχουν ie6

ξέχνα αυτούς που δεν έχουν flash (iphone, ipad)

ξέχνα αυτούς που έχουν μικρές αναλύσεις

 

ξέχνα τον ένα, ξέχνα τον άλλο, καταλήγεις να φτιάχνεις κάτι για το 30% του web

 

PS. Ξέρω 3 site με συνταγές που βγάζουν αξιοπρεπέστατα λεφτά.

 

Γενικώς τώρα σαν φιλοσοφία (δική μου τουλάχιστον)... ότι μπορεί να γίνει σε JS προτιμώ να γίνεται σε JS. Όσο απλός και να είναι ένας υπολογισμός τι πιο λογικό από το να μοιράζεις τον φόρτο στους client εφόσον γίνεται. Σκέψου αυτό που σου λέω υπό το πρίσμα ότι έχεις ένα site με μεγάλη επισκεψιμότητα.

Αυτό που προσπαθώ να σου εξηγήσω είναι ότι υπάρχουν πράγματα που πρέπει να γίνονται με js και άλλα που δεν πρέπει. Η js είναι παντοδύναμο εργαλείο, αλλά άμα την χρησιμοποιήσεις λάθος θα έχεις πρόβλημα. Και πάντα είναι θέμα συνθηκών. πχ ένα admin εργαλείο που μπαίνεις με login μπορείς κάλιστα να το κάνεις μόνο js και να βγάλεις το άχτι σου εκεί (κι εγώ έτσι κάνω. στα admin δοκιμάζω ότι καινούριο jquery plugin μου γυαλίζει)

 

Τώρα από άποψη ασφάλειας.. οι έλεγχοι που πρέπει να γίνουν στην "απέναντι μεριά" θα γίνουν έτσι και αλλιώς.. ο άλλος κάνει POST ότι θέλει στην τελική... με ή χωρίς την JS.

Δεν ήταν έλεγχοι στο παράδειγμα, ήταν υπολογισμός. Για τους ελέγχους ιδανικά πρέπει να υπάρχουν και στη μεριά του client (ώστε να βελτιώνεται το user-experience) και στη μεριά του server ώστε να μεγιστοποιείται η ασφάλεια. Πρακτικά, περισσότερο γίνονται στο server, γιατί πιέζουν τα deadlines.

 

Άρα μην είσαι τόσο σίγουρος για το ποια είναι η σωστή προγραμματιστική τεχνική για το συγκεκριμένο ζήτημα... Ή μήπως είναι τυχαίο ότι όλα τα μεγάλα site και cms είναι τίγκα στην JS. Μήπως αυτοί δεν ξέρουν να προγραμματίζουν σωστά;; B)

Είμαι αρκετά σίγουρος για το ποια είναι τα best practices. Όσο για τα μεγάλα cms, έχω δει τον κώδικα αρκετών και τα έχω εκτιμήσει ανάλογα. Προσωπικά, ασχολούμαι χρόνια με τo web και δεν έχω χρησιμοποιήσει ποτέ κάποιο cms. Και έτσι κι αλλιώς όλα παίζουν χωρίς js, άσχετα αν την υποστηρίζουν.

 

Και να σου φέρω και το αντίθετο παράδειγμα. Το google, εκτός από το js api για google maps, δίνει και non-js τρόπο να βλέπεις το χάρτη. "Μήπως αυτοί δεν ξέρουν να προγραμματίζουν σωστά;; "

 

Εγώ λοιπόν σε αυτό που απαντάς θα απαντούσα ότι οι λιγότερες γραμμές δεν είναι πάντα το καλύτερο και ότι τώρα που είναι αρχή πρέπει να μάθει να παίζει και με την JS. :rolleyes:

 

less is more, και τώρα που το παλικάρι είναι στην αρχή πρέπει να μάθει σωστά να παίζει και με την js

 

 

Μην το πάρεις στραβά το κατεβατό που έγραψα. Απλά καλύτερα όσοι ξεκινάν τώρα, να ξεκινάνε με σωστή λογική.

 

Επίσης, στην πράξη δεν κάνω ούτε τα μισά από αυτά που γράφω, λόγω χρόνου :lol::lol::lol:

Αρχειοθετημένο

Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.

  • Δημιουργία νέου...