Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: usuwanie wielu rekordów na raz
Forum PHP.pl > Forum > PHP
dragon7
Szukałem, patrzyłem po internecie, nic z znalezionych mi sposobów nie działa. Mianowicie, chcę aby usuwało mi wszystkie rekordy zaznaczone checkboxami. Oto kod:
  1. $conn = mysql_connect("127.0.0.1","root","krasnal");
  2. mysql_select_db("liceum");
  3. @$enazwa=$_POST['enazwa'];
  4. @$ezdjecie=$_POST['ezdjecie'];
  5. @$eid=$_POST['eid'];
  6. @$id=$_POST['id'];
  7. $edit = "UPDATE galeria SET nazwa='$enazwa', zdjecie='$ezdjecie' WHERE id='$id'";
  8. $ile=count($eid);
  9. for ($a=0; $a<$ile; $a++) {
  10. $delete = "DELETE FROM zdjecia WHERE id = '$eid' LIMIT 1";
  11. $wyn2 = mysql_query($delete, $conn); }
  12. $wyn = mysql_query($edit, $conn);
  13. if ($wyn and $wyn2) {
  14. echo "<b>Edycja powiodła się</b>";
  15. }
  16. else {
  17. echo "<b>Edycja nie powiodła się</b>";
  18. }
  19. mysql_close($conn);

W tym wypadku usuwa tylko 1, bez pętli for usuwa także 1, usuwając limity lub dodając dodatkowe fragmenty kodu albo usuwa po 1 albo wcale. Co mam zmienićquestionmark.gif
ktosiu
usuwa jedno bo namieszałeśtongue.gif
  1. $delete = "DELETE FROM zdjecia WHERE id = '$eid' LIMIT 1";

przecież $eid ma cały czas tą samą wartość więc nic dziwnego że usuwa tylko raz
dragon7
To jak zrobić, żeby zczytywało wszystkie wszytskie wartości, jak np 3 checkboxy zaznaczone??
thek
Użyć przy checkboxach jako name nawiasów kwadratowych, nadać im różne value i potem się bawić dalej zapytaniem z użyciem IN...
ktosiu
ja tam nigdy nie byłem orłem... ale sprawdziłem i mi działa:D
prawdopodobnie będziesz musiał lekko przerobić formularz bo znając życie każdy checkbox ma tą samą nazwę czyli eid

ja zrobiłem to w ten sposób i działało
formularz
  1. <form name="myform" action="form.php" method="POST">
  2. <input type="checkbox" name="option1" value="Milk"> Milk<br>
  3. <input type="checkbox" name="option2" value="Butter" checked> Butter<br>
  4. <input type="checkbox" name="option3" value="Cheese"> Cheese<br>
  5. <input type="submit" value="dalej" />
  6. <br>
  7. </form>


skrypt
  1. foreach($_POST as $k=>$v){
  2. if (preg_match("/option[0-9]+/",$k)){
  3. $eid[]=$v;
  4. }
  5. }


w ten sposób tworzysz tabelkę z id które trzeba skasować, później w następnej pętli tworzysz albo zapytanie albo wstawiasz to do tego co masz i wywalasz pojedynczo

pewnie ktoś mnie zjedzie ze to prostackie podejście, ale cóż ja też się dopiero uczę

sposób thek'a duuużo wygodniejszy smile.gif
dragon7
ale tak się zastanowiwszy to eid nie ma cały czas tej samej wartości, bo pod tą nazwa kryje się id zdjęcia (skrypt dotyczy galerii), a id jest unikalne dla każdego zdjęcia, więc jeśli są zaznaczone 2 checkboxy to 2 różne id, a usuwa tylko 1 i dlaczego??
ktosiu
może gadam głupoty, ale żeby się o tym przekonać musiałbyś pokazać kod tego formularza
jeżeli każdy checkbox ma
  1. <input type="checkbox"name="eid" value="costam" /> costam
  2. <input type="checkbox" name="eid" value="ble" /> ble

to ono chwyta ostatni zaznaczony checkbox i tylko on jest przekazywany dalej
wiec zmień name="eid" na
  1. name="eid[]"
dragon7
  1. $conn = mysql_connect('localhost',login,haslo);
  2. mysql_select_db("liceum");
  3. @$idn=$_GET['idn'];
  4. $zapytanie = "SELECT * FROM galeria WHERE id = '$idn'" ;
  5. $zap = "SELECT * FROM zdjecia WHERE idgal = '$idn' ORDER BY id DESC" ;
  6. $wynik = mysql_query($zapytanie);
  7. $wyn = mysql_query($zap);
  8. $wpis = mysql_fetch_assoc($wynik);
  9. $nazwa=$wpis['nazwa'];
  10. $zdjecie=$wpis['zdjecie'];
  11. echo '<span class="admin"><form method="post" action="editg.php">
  12. <br />
  13. Nazwa galerii:<input type="text" name="enazwa" size="70" value="'.$nazwa.'" /><br /><br />
  14. Link do zdjęcia:<input type="text" name="ezdjecie" size="70" value="'.$zdjecie.'" /><br /><br />
  15. <input type="hidden" name="id" value="'.$idn.'"><br />Usuń zdjęcia:';
  16. echo "<table border='0' cellspacing='0' cellpadding='3'><tr><form>";
  17. $licznik = 0;
  18. while($wpis2 = mysql_fetch_assoc($wyn)){
  19. $licznik++;
  20. $adres=$wpis2['adres'];
  21. $id=$wpis2['id'];
  22. echo "<td width='140'><input type='checkbox' name='eid[]' value='".$id."' /><br /><img border='1' src='../images/".$adres."_m.jpg' /></td>";
  23. if($licznik%4 == 0) {
  24. echo "</tr><tr>";
  25. }}
  26. echo "</form></tr></table>";
  27. echo'<input type="submit" value="Zapisz" /></form>';
  28. mysql_close($conn);

no tak właśnie usuwa ostatni zaznaczony

już wiem wystarczyło dodać [$a]
  1. $delete = "DELETE FROM zdjecia WHERE id = '$eid[$a]' LIMIT 1";

Ale i tak pomogłeś, bo trzeba było też wstawić w nazwie eid[]. Dzięki:D
ktosiu
akuratnie to co napisałeś niekoniecznie może usuwać to co akurat ty chcesz usunąć tongue.gif
ja bym to zrobił tak
to
  1. for ($a=0; $a<$ile; $a++) {
  2. $delete = "DELETE FROM zdjecia WHERE id = '$eid' LIMIT 1";
  3. }

zamienił na to
  1. $in='';
  2. foreach($eid as $v){
  3. $in.=$v.',';
  4. }
  5. $delete = "DELETE FROM zdjecia WHERE id IN ('$in')";
dragon7
działa tak jak trzeba już, usuwa to co chcęsmile.gif
ktosiu
fakt... działa jak należy. to ja coś sobie złego uroiłem
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.