Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> usuwanie wielu rekordów na raz
dragon7
post 15.10.2010, 13:21:30
Post #1





Grupa: Zarejestrowani
Postów: 51
Pomógł: 0
Dołączył: 1.10.2010

Ostrzeżenie: (0%)
-----


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

Ten post edytował dragon7 15.10.2010, 13:21:50
Go to the top of the page
+Quote Post
ktosiu
post 15.10.2010, 13:27:24
Post #2





Grupa: Zarejestrowani
Postów: 9
Pomógł: 1
Dołączył: 12.02.2010

Ostrzeżenie: (0%)
-----


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
Go to the top of the page
+Quote Post
dragon7
post 15.10.2010, 13:43:12
Post #3





Grupa: Zarejestrowani
Postów: 51
Pomógł: 0
Dołączył: 1.10.2010

Ostrzeżenie: (0%)
-----


To jak zrobić, żeby zczytywało wszystkie wszytskie wartości, jak np 3 checkboxy zaznaczone??

Ten post edytował dragon7 15.10.2010, 13:43:28
Go to the top of the page
+Quote Post
thek
post 15.10.2010, 13:48:27
Post #4





Grupa: Moderatorzy
Postów: 4 362
Pomógł: 714
Dołączył: 12.02.2009
Skąd: Jak się położę tak leżę :D




Użyć przy checkboxach jako name nawiasów kwadratowych, nadać im różne value i potem się bawić dalej zapytaniem z użyciem IN...


--------------------
Najpierw był manual... Jeśli tam nie zawarto słów mądrości to zapytaj wszechwiedzącego Google zadając mu własciwe pytania. A jeśli i on milczy to Twój problem nie istnieje :D
Go to the top of the page
+Quote Post
ktosiu
post 15.10.2010, 13:52:30
Post #5





Grupa: Zarejestrowani
Postów: 9
Pomógł: 1
Dołączył: 12.02.2010

Ostrzeżenie: (0%)
-----


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

Ten post edytował ktosiu 15.10.2010, 13:59:22
Go to the top of the page
+Quote Post
dragon7
post 15.10.2010, 14:03:48
Post #6





Grupa: Zarejestrowani
Postów: 51
Pomógł: 0
Dołączył: 1.10.2010

Ostrzeżenie: (0%)
-----


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??
Go to the top of the page
+Quote Post
ktosiu
post 15.10.2010, 14:09:00
Post #7





Grupa: Zarejestrowani
Postów: 9
Pomógł: 1
Dołączył: 12.02.2010

Ostrzeżenie: (0%)
-----


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[]"


Ten post edytował ktosiu 15.10.2010, 14:10:52
Go to the top of the page
+Quote Post
dragon7
post 15.10.2010, 14:23:56
Post #8





Grupa: Zarejestrowani
Postów: 51
Pomógł: 0
Dołączył: 1.10.2010

Ostrzeżenie: (0%)
-----


  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

Ten post edytował dragon7 15.10.2010, 14:19:35
Go to the top of the page
+Quote Post
ktosiu
post 15.10.2010, 14:27:13
Post #9





Grupa: Zarejestrowani
Postów: 9
Pomógł: 1
Dołączył: 12.02.2010

Ostrzeżenie: (0%)
-----


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')";


Ten post edytował ktosiu 15.10.2010, 14:31:10
Go to the top of the page
+Quote Post
dragon7
post 15.10.2010, 14:44:14
Post #10





Grupa: Zarejestrowani
Postów: 51
Pomógł: 0
Dołączył: 1.10.2010

Ostrzeżenie: (0%)
-----


działa tak jak trzeba już, usuwa to co chcęsmile.gif
Go to the top of the page
+Quote Post
ktosiu
post 15.10.2010, 14:51:41
Post #11





Grupa: Zarejestrowani
Postów: 9
Pomógł: 1
Dołączył: 12.02.2010

Ostrzeżenie: (0%)
-----


fakt... działa jak należy. to ja coś sobie złego uroiłem
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 24.06.2025 - 09:49