mythodea Δημοσ. 25 Απριλίου 2009 Δημοσ. 25 Απριλίου 2009 Καλησπέρα, Έχω έναν πίνακα στη βάση μου και τον εμφανίζω στην οθόνη με τον κώδικα από κάτω. Δίπλα σε κάθε εμφανιζόμενη εγγραφή έχω τoποθετήσει κι από ένα checkbox, έτσι ώστε όταν πατάω το κουμπί "delete selected" να διαγράφονται από τη βάση τα επιλεγμένα σύμφωνα πάντα με το "id" της κάθε εγγραφής. Το περίεργο που συμβαίνει εδώ είναι ότι όταν πατάω το κουμπί της διαγραφής διαγράφεται μόνο μία εγγραφή από τη βάση, αυτή με το μικρότερο id από τα checkboxes που έχω επιλέξει.Πχ, αν εχω επιλέξει να σβηστούν οι εγγραφές με id 1,2,5 και 8, θα μου σβηστεί μόνο αυτή με id=1. Στο php αρχείο που παραθέτω παρακάτω εμφανίζω το περιεχόμενο του >print_r($_POST['deleteme']); για να ξέρω αν έχουν επιλεγεί τα checkboxes που επέλεξα και μου δέιχνει ότι τα στοιχεία 1,2,5,8 τα έχει πάρει!Λέτε το λάθος να είναι στη συνάρτηση implode(); Παρακάτω δίνω τη φορμα και το php αρχείο. Το αρχείο με την φόρμα είναι το εξής: > echo "<form name='form1' onsubmit='return validate(field);' method='post' action='/drupal/?q=content/journals-catalog-delete-confirmation'>"; $i=1; while($row = mysql_fetch_array($res)) { $id=$row["id"]; $link=$row["url"]; echo "<tr>"; echo "<td>".$i.".</td>"; echo "<td><a href='$link'>".$row['journal-title']."</a></td>"; echo "<td>".$row['acronym']."</td>"; echo "<td>".$row['publisher']."</td>"; echo "<td>".$row['impact-factor']."</td>"; echo "<td>".$row['frequency']."</td>"; echo "<td>".$row['issn']."</td>"; echo "<td>".$row['description']."</td>"; echo "<td>".$row['online-paper']."</td>"; echo "<td align='center'><input type='checkbox' name='deleteme[]' value='$id'></td>"; echo "</tr>"; $i=$i+1; } echo "</table><br/>"; echo "<input type='button' name='CheckAll' value='Check All' onClick='checkAll(document.myform.list)'>"; echo "<input type='button' name='UnCheckAll' value='Uncheck All' onClick='uncheckAll(document.myform.list)'>"; echo "<input type='submit' name='Delete Selected' value='Delete Selected'>"; echo "</form>"; echo "<SCRIPT LANGUAGE='JavaScript'> function checkAll(field) { for (i = 0; i < field.length; i++) field[i].checked = true ; } function uncheckAll(field) { for (i = 0; i < field.length; i++) field[i].checked = false ; } function validate(field) { if (field.length==0){return false;} else {return true;} } </script>"; Και το php αρχείο που καλειται από τη φόρμα είναι: > <?php include("sites/default/files/config.inc.php"); $con=mysql_connect($dbServer,$dbUser,$dbPass) or exit("Cannot connect to database"); $res = mysql_db_query($dbDatabase , $sql); print_r($_POST['deleteme']); mysql_query("DELETE FROM journals_catalog WHERE id IN('" . implode(",", $_POST['deleteme']) . "')") or die("Error: ".mysql_error()); ?>
fromaz Δημοσ. 25 Απριλίου 2009 Δημοσ. 25 Απριλίου 2009 αυτό >...IN('" . implode(",", $_POST['deleteme']) . "')... -> ΙΝ('1,2,5,8') θα το γράψεις >...IN(" . implode(",", $_POST['deleteme']) . ")... -> ΙΝ(1,2,5,8) ή >...IN('" . implode("','", $_POST['deleteme']) . "')... -> ΙΝ('1','2','5','8') Σημ.: ο δεύτερος τύπος γίνεται injected πανεύκολα: αν σου στείλω >deleteme[] = '1' deleteme[] = '2\') OR (id > \'0' εσύ θα εκτελέσεις >DELETE FROM journals_catalog WHERE id IN('1','2') OR (id > '0') Γενικά, το user input θέλει validation...
mythodea Δημοσ. 26 Απριλίου 2009 Μέλος Δημοσ. 26 Απριλίου 2009 Φίλε Fromaz σ ευχαριστώ πολύ για την γρήγορη και έγκυρη απάντηση σου! Μου δούλεψε άψογα! Τώρα έχω ένα τελευταίο ερώτημα. Όπως θα είδες στον κώδικα της φόρμας μου έχω τοποθετήσει κάτω κάτω 3 συναρτήσεις μέσα σε ένα scriptακι, μία για να τσεκάρω όλα τα chechboxes, μία για να τα ξετσεκάρω κι άλλη μία που ελέγχει αν έχω τσεκάρει τουλάχιστον ένα όταν πατάω το delete selected button οπότε και τυπώνεται το μήνυμα:"Πρέπει να τσεκάρετε τουλάχιστον ένα προς διαγραφή". Δεν μου δουλεύει όμως κανένα από αυτά...τί έχω κάνει λάθος;
Προτεινόμενες αναρτήσεις
Αρχειοθετημένο
Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.