pappous_soulis Δημοσ. 22 Σεπτεμβρίου 2013 Δημοσ. 22 Σεπτεμβρίου 2013 (επεξεργασμένο) Έχω μια φόρμα με πέντε παραμέτρους την οποία περνάω με τη μέθοδο POST σε ένα .php αρχείο που ενεργεί στη βάση δεδομένων μου και θέλω, αντί να κάνω redirect απ'την αρχική σελίδα στο .php αρχείο και πάλι πίσω, να κάνω submit τη φόρμα με JQuery ώστε να παραμείνω στην σελίδα και να ανανεώσω στη συνέχεια επιλεγμένα στοιχεία εντός αυτής. Έχω δει παραδείγματα χρήσης των $.ajax() και $.post() και έχω προσπαθήσει και τις δυο με διάφορες παραμέτρους χωρίς επιτυχία. Ενώ φαίνεται να στέλνουν τα δεδομένα, η PHP δε κάνει απολύτως τίποτα στη βάση, οπότε υποψιάζομαι πως κάτι κάνω λάθος με την serialize(). Υπόψιν πως η PHP δούλευε κανονικά όταν έκανα submit με το κλασσικό τρόπο. Ο κώδικας της form: <form id="add-product" method="post" enctype="multipart/form-data" accept-charset="utf-8"> <ul> <li><input type="text" class="textfield" name="product" required/></li> <li><input type="text" class="textfield" name="description" required/></li> <li><input type="text" class="price" name="price" required/></li> <li> <select id="product-category" name="category" required> <?php echo $options; ?> </select> </li> <li><input type="hidden" id="pid" name="pid" value="-1"/> <input type="submit" id="submit" name="submit" value="Προσθήκη"></li> </ul> </form> Ο κώδικας Javascript με την $.post: $("#submit").click(function(){ $.post("insert.php", $("#add-product").serialize()); }); ..ή με την $.ajax: $("#submit").click(function(){ $.ajax({ type: "POST", url: "insert.php", data: $("#add-product").serialize() }); }); Το επίμαχο κομμάτι στο .php: parse_str($_POST, $param); if ($param['pid'] < 0){ $sql = "INSERT INTO products (product, description, subjectof, price) VALUES ('$param[product]', '$param[description]', '$param[category]', '$param[price]')"; }else{ $sql = "UPDATE products SET product = '$param[product]', description = '$param[description]', subjectof = '$param[category]', price = '$param[price]' WHERE pid = '$param[pid]'"; } Οποιαδήποτε ιδέα/πρόταση ευπρόσδεκτη. Επεξ/σία 22 Σεπτεμβρίου 2013 από pappous_soulis
defacer Δημοσ. 23 Σεπτεμβρίου 2013 Δημοσ. 23 Σεπτεμβρίου 2013 Αν κοιτάξεις στο manual για την parse_str θα δεις ότι παίρνει string σαν παράμετρο. Εσύ περνάς array οπότε προφανώς δεν θα δουλέψει. Επίσης θα σου βγάλει και ένα warning, το οποίο λέει ακριβώς αυτό το πράγμα. Αν έχεις απενεργοποιημένα τα μηνύματα κατά τη διάρκεια του development, ενεργοποίησέ τα γιατί διαφορετικά θα μαζοχίζεσαι. Αυτό που πρέπει να κάνεις είναι κατευθείαν indexing μέσα στην $_POST, δηλαδή $_POST['pid'] κλπ. Παρόλα αυτά ο κώδικας που έχεις περνάει τις παραμέτρους κατευθείαν μέσα στην SQL και άρα είναι ευάλωτος σε SQL injection, που σημαίνει ότι μπορούν να "σε χακέψουν" όχι μόνο παιδιά γυμνασίου αλλά και αυτοματοποιημένα προγράμματα. Καλά θα ήταν να σταματήσεις να βάζεις παραμέτρους στην SQL με το χέρι και να χρησιμοποιήσεις parameter binding. Το πώς θα γίνει αυτό ακριβώς εξαρτάται από τι το database library χρησιμοποιείς, π.χ. mysqli ή PDO.
Προτεινόμενες αναρτήσεις
Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε
Πρέπει να είστε μέλος για να αφήσετε σχόλιο
Δημιουργία λογαριασμού
Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!
Δημιουργία νέου λογαριασμούΣύνδεση
Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.
Συνδεθείτε τώρα