Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP][MYSQL] Usuwanie kilku rekordów, czyli problem z checkbox'ami
ergoline
post
Post #1





Grupa: Zarejestrowani
Postów: 7
Pomógł: 0
Dołączył: 26.12.2008

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


Witam!

Chciałbym, mieć możliwośc usuwania kilku rekordów "za jednym zamachem" przy pomocy pól checkbox. Ogónie strona składa się z dwóch części:
1. usuwanie pojedynczego rekorku
2. usuwanie kilku rekordów

Pierwsza część działa dobrze, natomiast z drugą mam problem. Najpierw użytkownik wyszukuje rekordy (wybiera kierunek i semestr -> wyszukiwany jest numer grupy -> nr grupy zapisywany jest do tablicy -> pobrany z tablicy nr grupy jest wykorzystywany do wyszukiwania rekordów), wyświetla się tableka z wynikiem szukania, gdzie przy każdym rekordzie jest checkbox. Użytkownik zaznacza wybrane, klika "Usuń wszystkie" i ... nie działa

  1. <?php
  2.  
  3. require ("check.php");
  4.  
  5. $polaczenie = mysql_connect ("localhost", "tergoline", "123456")
  6. or die ("Nie można połączyć z serwerem baz danych");
  7. $wybor_bazy = mysql_select_db ("db_ergoline")
  8. or die ("Nie można wybrać wymaganej bazy danych");
  9.  
  10. echo '1. Proszę podać imię i nazwisko studenta:
  11. </br>
  12. <form action = "usun.php" method = "post">
  13.    <table>
  14.        <tr>
  15.            <td>Imię:</td>
  16.            <td><input type = "text" name = "imie"></td>
  17.        </tr>
  18.        <tr>
  19.            <td>Nazwisko:</td>
  20.            <td><input type = "text" name = "nazwisko"></td>
  21.        </tr>
  22.    </table>
  23.    </br>
  24.    <input type = "submit" value = "Skreśl z listy studentów">
  25.    <input type = "reset" value = "Wyczyść forumlarz">
  26. </form>';
  27.  
  28. $imie = $_POST['imie'];
  29. $nazwisko = $_POST['nazwisko'];
  30.  
  31. $usun = mysql_query ("DELETE FROM osoba WHERE (imie = '$imie' and nazwisko = '$nazwisko')")
  32. or die ("Bład przy usuwaniu rekordu");
  33.  
  34.  
  35. echo ' 2. Znajdź studenta:';
  36. echo '</br>';
  37.  
  38. echo '<form action = "usun.php" method = "post">';
  39.  
  40. $sql = mysql_query ("SELECT nazwa FROM kierunek")
  41. or die ("Bład przy pobieraniu kierunków");
  42. echo 'Kierunek: <select name = "kierunek">';
  43. while ($row = mysql_fetch_assoc($sql))
  44. {
  45.    echo '<option value = " '.$row['nazwa'].' "> '.$row['nazwa'].' </option>';
  46. }
  47. echo '</select>';
  48. echo '</br>';
  49.  
  50. $sql1 = mysql_query ("SELECT ktory FROM semestr")
  51. or die ("Błąd przy pobieraniu semestrów");
  52. echo ' Semestr: <select name = "semestr">';
  53. while ($row1 = mysql_fetch_assoc($sql1))
  54. {
  55.    echo '<option value = " '.$row1['ktory'].' "> '.$row1['ktory'].' </option>';
  56. }
  57. echo '</select>';
  58. echo '</br>';
  59.  
  60. $kierunek = $_POST['kierunek'];
  61. $semestr = $_POST['semestr'];
  62.  
  63. </br>
  64. <input type = "submit" value = "Znajdź">
  65. </form>';
  66.  
  67. echo '<form action = "usun.php" method = "post">';
  68. $grupa = mysql_query ("SELECT grupa_id FROM grupa where (kierunek = '$kierunek' and semestr = '$semestr')")
  69. or die ("Nie można pobrać ID grupy");
  70. $tabela = mysql_fetch_array($grupa)
  71. or die ("Nie można zapisać wyniku w tabeli lub nie znaleziono żadnych studentów");
  72. $znajdz  = mysql_query ("SELECT * FROM osoba where (grupa_id = ".$tabela['grupa_id'].")")
  73. or die ("Nie można znaleźć studentów o podanym ID grupy");
  74. echo '<table cellpadding = \"11\" border = 3>';
  75. echo '     <tr>
  76.        <td>ID</td>
  77.        <td>Grupa ID</td>
  78.        <td>Imię</td>
  79.        <td>Nazwisko</td>
  80.        <td>Usuń</td>
  81.    </tr>';
  82.    
  83. while ($row = mysql_fetch_array($znajdz))
  84. {
  85.    echo '<tr>';    
  86.    echo '<td>'.$row[0].'</td>';
  87.    echo '<td>'.$row[1].'</td>';
  88.    echo '<td>'.$row[2].'</td>';
  89.    echo '<td>'.$row[3].'</td>';
  90.    echo '<td> <input type = "checkbox" name = "delete['.$row['0'].']" value = "on"></td>';
  91.    echo '</tr>';
  92. }
  93. echo '</table>';
  94. echo '</br>';
  95. echo '<input type = "submit" name = "usun" value = "Usuń zaznaczone">';
  96. echo '</form>';
  97.  
  98. if ($_POST['usun'] == 'Usuń zaznaczone' and isset($_POST['delete']) and is_array($_POST['delete']))
  99. {
  100.    foreach ($_POST['delete'] as $key=>$value)
  101.    {
  102.        $q = "DELETE FROM osoba WHERE id = '{$key}';";
  103.        mysql_query($q);
  104.    }
  105. }        
  106. ?>


Gdzie popełniam błąd?

Pozdrawiam...

P.S.
Dlaczego przy pierwszym wejściu na stronę dostaję błąd "Nie można zapisać wyniku w tabeli lub nie znaleziono żadnych studentów"?
Taki sam błąd otrzymuję, gdy chcę usunąć kilka rekordów...
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
ziqzaq
post
Post #2





Grupa: Zarejestrowani
Postów: 428
Pomógł: 128
Dołączył: 17.06.2007

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


Cytat
Tak, kolumna to osoba_id, jest pierwszą kolumną w tabeli.

No to masz odpowiedź w moim pierwszym poście. Powtórzę na wszelki wypadek tworzysz tablicę w której kluczami są liczby (mysql_fetch_array()) a odwołujesz się do ciągu znaków ('0') dlatego to nie będzie działać (na końcu mojego pierwszego postu masz poprawny kod):
  1. <?php
  2. echo '<td> <input type = "checkbox" name = "delete['.$row['0'].']" value = "on"></td>';
  3. ?>

Teraz ten kod:
  1. <?php
  2. // ...
  3. $kierunek = $_POST['kierunek'];
  4. $semestr = $_POST['semestr'];
  5. // ... Jaki tu jest blad (polacz kod powyzej z ponizszym)? I nie chodzi tu o SQL.
  6. $grupa = mysql_query ("SELECT grupa_id FROM grupa where (kierunek = '$kierunek' and semestr = '$semestr')")
  7. or die ("Nie można pobrać ID grupy");
  8. $tabela = mysql_fetch_array($grupa)
  9. or die ("Nie można zapisać wyniku w tabeli lub nie znaleziono żadnych studentów");
  10. // ...
  11. ?>

Podstawowy banalny błąd. Uruchamiasz skrypt za pierwszym razem to przecież zmienne $_POST['kierunek'] i $_POST['semestr'] nie są ustawione bo jeszcze nie wysłałeś formularza. Jak zapytanie ma zadziałać skoro budujesz je na tych właśnie zmiennych? Na końcu przy usuwaniu rekordów najpierw sprawdzasz czy zmienne istnieją - i dobrze. Tutaj zastosuj podobne podejście.
Ustaw w php.ini error_repoting = E_ALL, będziesz widział wszystkie błędy i ostrzeżenia parsera (a ten kod który napisałeś da właśnie ostrzeżenie). Położenie php.ini szukaj na forum, lub google.

Cytat
Czyli rozumiem, że najpierw zaznaczone checkbox'y mają zostać przesłane do tablicy, później mam stworzyć string z tablicy, w którym będą wymienione id (nazwy checkbox'ów) po przecinku, a później usunąć?

Tak, ja bym starał się tak to zrobić żeby ograniczyć niepotrzebne zapytania, ale jeśli na razie nie chcesz kobinować to zostań przy starym sposobie.
I zapamiętaj tą strukturę. Ten kod prześle (po zatwierdzeniu formularza) do skryptu tablicę numeryczną (klucze są liczbami od 0 wzyż):
  1. <?php
  2. echo '<td> <input type = "checkbox" name = "delete[]" value = "'.$row[0].'"></td>';
  3. ?>

natomiast to stworzy tablicę asocjacyjną w której klucze bedą nazwami:
  1. <?php
  2. $klucz = 'mojklucz'.$row[0]; // tutaj tworze ciag znakow 'mojklucz0', 'mojklucz1' itd.
  3. echo '<td> <input type = "checkbox" name = "delete['.$klucz.']" value = "'.$row[0].'"></td>';
  4. ?>



Ad. 1) Tak. Odwołujesz się do atrybutu "name" elementu formularza i w tym przypadku dostajesz tablicę w której klucze są liczbami (od 0 wzwyż) a elementy wartościami wpisanymi w value="wartość".
Ad. 2) Tak. O coś takiego mi chodziło. Przetestuj sobie najpierw (echo $zapytanie) czy dostajesz dobrą listę elementów zanim zaczniesz robić zapytania.

Ok. To chyba już wszystko.

PS Nie przejmuj się tak, chyba chcesz żeby się czegoś nauczyć, nie? (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg)
I pamiętaj o szukaniu (google, forum, manual php, manual mysql), naprawdę dużo samemu mozna znaleźć.
No, a teraz kombinuj żeby to działało (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg)

Ten post edytował ziqzaq 29.12.2008, 09:18:14
Go to the top of the page
+Quote Post

Posty w temacie


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

 



RSS Aktualny czas: 11.10.2025 - 11:53