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

Πέρασμα μεταβλητών JS σε συνάρτηση PHP χωρίς submit/reload


bikey77

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

Δημοσ.

Σπάω το κεφάλι μου εδώ και 2 ώρες πάνω σε κάτι θεωρητικά απλό και σας το postάρω μπας και δείτε αυτό που δε βλέπω εγώ...

 

Σε μια φόρμα ο χρήστης επιλέγει προϊόντα μαρκάροντας τα αντίστοιχα checkboxes που τους αντιστοιχούν και σε ένα άλλο πεδίο (cost) θελω να εμφανίζεται η τιμή όσων έχει επιλέξει. Επειδή όμως, όσο περισσότερα checkboxes ( προϊόντα) επιλέξει, τόσο μεταβάλλεται παραμετρικά η συνολική τιμή (εκπτώσεις, συνδυασμοί προϊόντων κλπ), δεν μπορώ να υπολογίσω την τιμή βάσει αθροίσματος αλλά με μια php function που κάνει υπολογισμούς και επιστρέφει την τιμή. Το πρόβλημά μου είναι ότι δεν καταφέρνω να περάσω μια μεταβλητή javascript στην PHP function, άγνωστο το γιατί.

 

Παραθέτω τον κώδικα και ελπίζω να με βοηθήσετε να ξεκολλήσω...

 

><script language="javascript" type="text/javascript">
function calculate() {

var elems = document.forms['form1'].elements;
var total = 0;
for(var i=0;i<elems.length;i++) {
	if (elems[i].checked) {total += +(elems[i].value); } // αθροίζω τα checkboxes που είναι επιλεγμένα
}
elems['cost'].value = <? getPrice($total); ?>;
}
</script>

 

PHP function:

 

><? 
function getPrice($symb) {
$res = mysql_query("SELECT $symb as price from times");
$row = mysql_fetch_array($res);
echo $row['price'];
}?>

 

To αποτέλεσμα των παραπάνω είναι το εξής error:

 

mysql_fetch_array(): supplied argument is not a valid MySQL result resource

γιατί η function δε λαμβάνει σωστά την τιμή $symb που περνάω κατά την κλήση της.

 

Any ideas people?

Δημοσ.

α) Γιατί βάζεις "<?" και όχι "<?php";

β) Αυτό που θες να κάνεις, νομίζω πως δεν γίνεται. Η JavaScript εκτελείται στον πελάτη (client) ενώ η PHP στον διακομιστή (server). Άρα δεν μπορούν να επικοινωνήσουν απευθείας.

 

Μια λύση που ίσως θα μπορούσε να κάνει αυτό που θέλεις:

Φτιάξε μια σελίδα η οποία θα έχει την function που θέλεις και θα περνάς την παράμετρο μέσω του URL (πχ/ http://www.xxxx.gr/functionpage.php?parameter=XXX).

Το αποτέλεσμα θα «αποθηκεύεται» σε έναν πίνακα.

Μέσω της json_encode() θα μετατρέπεις τον πίνακα σε JSON.

Μέσω της JavaScript θα καλέις την σελίδα που έφτιαξε και θα παίρνεις το περιεχόμενό της.

Το περιεχόμενο θα πρέπει να ειναι το JSON, δηλαδή το αποτέλεσμα της function που θέλεις.

 

Είναι λίγο μπερδεμένο αλλά αυτό μου ήρθε τώρα. Άμα ψάξεις για "AJAX form submit" πιστεύω θα βρεις αρκετά παραδείγματα αλλά και έτοιμα JS.

Δημοσ.

Φυσικά και δε μπορούν να επικοινωνήσουν απευθείας. Όταν εγώ ζητάω να δω τη σελίδα σου, πρώτα θα εκτελεστούν όλες οι γραμμές του κώδικα που περικλείονται ανάμεσα στα <?php ?>, το output αυτών θα ενσωματωθεί στην υπόλοιπη σελίδα και μετά θα αναλάβει ο browser να τα μεταφράσει σύμφωνα με την html. Αυτό πρακτικά σημαίνει ότι για την php η μεταβλητή $total δεν έχει οριστεί πουθενά. Έτσι, καλεί την getPrice() χωρίς κανένα όρισμα, επιστρέφει το αποτέλεσμα αυτής (που προφανώς δεν υπάρχει) και μετά έρχεται και η javascript και βλέπει το απόλυτο μηδέν. Λύση: είτε ακολουθείς αυτά που σου είπε και ο macabre με jquery, είτε εναλλακτικά φτιάχνεις έναν πίνακα στη javascript που περιέχει τις τιμές των προϊόντων και το ελέγχεις έτσι

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

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

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