Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP][MYSQL] Usuwanie kilku rekordów
Forum PHP.pl > Forum > Przedszkole
ergoline
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...
artur_dziocha
w checkbox za value podstaw id a nie on
chyli name = 'checkbox[]' value ='".$row['0']."'

proboj wyslwietlic dane po wyslaniu za pomocą var_dump

Pozdrawiam
ziqzaq
Nie dam ci gotowca na wszystko, ale podpowiem:
1. Czy kolumna w której trzymasz 'id' ma nazwę/index "'0'" (w tablicy podajesz stringa, jako indeks a nie liczbę)?
  1. <?php
  2. // ...
  3. echo '<td> <input type = "checkbox" name = "delete['.$row['0'].']" value = "on"></td>';
  4. // ...
  5. ?>

2.
Cytat
Dlaczego przy pierwszym wejściu na stronę dostaję błąd "Nie można zapisać wyniku w tabeli lub nie znaleziono żadnych studentów"?

Jak byk widać błąd. Masz kod, szukaj.
  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. ?>

Dodatkowo przy usuwaniu wielu id możesz się zainteresować klauzulą "delete ... where `kolumna` in (id,id,id)" - jedno zapytanie na wszystkie przesłane id - oraz funkcją php o nazwie implode(). winksmiley.jpg
Na koniec zaproponuję ci taki oto kod (odwołując się do problemu nr. 1):
  1. <?php
  2. // ... Dzieki temu dosajemy do skryptu tablice z _id jako wartosc w tablicy_
  3. echo '<td> <input type = "checkbox" name = "delete[]" value = "'.$row[0].'"></td>';
  4. // ...
  5. ?>
skowron-line
Cytat(ziqzaq @ 28.12.2008, 16:52:26 ) *
Nie dam ci gotowca na wszystko, ale podpowiem:
1. Czy kolumna w której trzymasz 'id' ma nazwę/index "'0'" (w tablicy podajesz stringa, jako indeks a nie liczbę)?

Ale czy napewno questionmark.gif
http://pl2.php.net/manual/pl/function.mysql-fetch-row.php

No ale zwracam honor koledze nie uważnie przeczytałem bo użyte jest mysql_fetch_array a tam indexami są nazwy kolumn.
ergoline
Cytat(ziqzaq @ 28.12.2008, 16:52:26 ) *
1. Czy kolumna w której trzymasz 'id' ma nazwę/index "'0'" (w tablicy podajesz stringa, jako indeks a nie liczbę)?
  1. <?php
  2. // ...
  3. echo ' ';
  4. // ...
  5. ?>


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

Cytat(ziqzaq @ 28.12.2008, 16:52:26 ) *
2.Jak byk widać błąd. Masz kod, szukaj.
  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 (&#092;"SELECT grupa_id FROM grupa where (kierunek = '$kierunek' and semestr = '$semestr')\")
  7. or die (&#092;"Nie można pobrać ID grupy\");
  8. $tabela = mysql_fetch_array($grupa)
  9. or die (&#092;"Nie można zapisać wyniku w tabeli lub nie znaleziono żadnych studentów\");
  10. // ...
  11. ?>


Wybacz, ale za czorta dalej nie wiem gdzie jest błąd... Może wyłożysz mi go łapatologicznie?

Cytat(ziqzaq @ 28.12.2008, 16:52:26 ) *
Dodatkowo przy usuwaniu wielu id możesz się zainteresować klauzulą "delete ... where `kolumna` in (id,id,id)" - jedno zapytanie na wszystkie przesłane id - oraz funkcją php o nazwie implode(). winksmiley.jpg


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ąć?

1. Jak się odwołać do tej tablicy? Zaznaczę kilka checkbox'ów, a jak się do tego odwołać?
  1. <?php
  2. $_POST['delete']
  3. ?>
?
Rozumiem, że do tablicy zostaną od razu przesłane ID wszystkich zaznaczonych checkbox'ów?

2. Coś w stylu:
  1. <?php
  2. //...
  3. $tablica = $_POST['delete'];
  4. $string = implode (",", $tablica);
  5. $usun = mysql_query ("DELETE FROM osoba WHERE id IN ($string)");
  6. //...
  7. ?>
?

Proszę Panstwa, to moja pierwsza styczność z PHP i MySQL, dlatego proszę o wyrozumiałość i cierpliwość...
Pozdrawiam...
ziqzaq
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? 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 winksmiley.jpg
ergoline
Witam!

Poprawiłem lekko kod, a przynajmniej tak mi się wydaje. Teraz ma postać:
  1. <?php
  2.  
  3. require ("check.php");
  4.  
  5. $polaczenie = mysql_connect ("localhost", "trautbergp", "123456")
  6. or die ("Nie można połączyć z serwerem baz danych");
  7. $wybor_bazy = mysql_select_db ("db_trautbergp")
  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" name = "znajdz" value = "Znajdź">
  65. </form>';
  66.  
  67. echo '<form action = "usun.php" method = "post">';
  68.  
  69. if ($_POST['znajdz'] == "Znajdź")
  70. {
  71.    $grupa = mysql_query ("SELECT grupa_id FROM grupa where (kierunek = '$kierunek' and semestr = '$semestr')")
  72.    or die ("Nie można pobrać ID grupy");
  73.    $tabela = mysql_fetch_array($grupa)
  74.    or die ("Nie można zapisać wyniku w tabeli lub nie znaleziono żadnych studentów");
  75.    $znajdz  = mysql_query ("SELECT * FROM osoba where (grupa_id = ".$tabela['grupa_id'].")")
  76.    or die ("Nie można znaleźć studentów o podanym ID grupy");
  77.    echo '<table cellpadding = \"11\" border = 3>';
  78.    echo '      <tr>
  79.            <td>ID</td>
  80.            <td>Grupa ID</td>
  81.            <td>Imię</td>
  82.            <td>Nazwisko</td>
  83.            <td>Usuń</td>
  84.        </tr>';
  85.    
  86.    while ($row = mysql_fetch_array($znajdz))
  87.    {
  88.        echo '<tr>';    
  89.        echo '<td>'.$row[0].'</td>';
  90.        echo '<td>'.$row[1].'</td>';
  91.        echo '<td>'.$row[2].'</td>';
  92.        echo '<td>'.$row[3].'</td>';
  93.        $klucz = 'mojklucz'.$row[0];
  94.        echo '<td> <input type = "checkbox" name = "delete['.$klucz.']" value = " '.$row[0].' "></td>';
  95.        echo '</tr>';
  96.    }
  97.    echo '</table>';
  98.        echo '</br>';
  99.        echo '<input type = "submit" name = "usun" value = "Usuń zaznaczone">';
  100.        echo '</form>';
  101.    
  102.    if ($_POST['usun'] == "Usuń zaznaczone")
  103.    {
  104.        $tablica = $_POST['delete']
  105.        or die ("Nie można utworzyć tablicy");
  106.        $string = implode (",", $tablica)
  107.        or die ("Nie można utowrzyć $string");
  108.        $usun = mysql_query ("DELETE FROM osoba WHERE id IN ($string)")
  109.        or die ("Nie można usunąć rekordów");
  110.    }
  111. }
  112.  
  113. ?>


Jednak ciągle nie usuwa zaznaczonych rekordów. Co znowu robię źle?

Pozdrawiam...
ziqzaq
OMG człowieku, proszę cię, zacznij czytać ze zrozumieniem a nie przeklejać kod bezmyślnie. dry.gif
Cytat
na końcu mojego pierwszego postu masz poprawny kod

Patrzyłeś co wklejasz, i co to robi czy poprostu walnąłeś to do skryptu i tyle. Nadal tworzysz tablicę asocjacyjną.
Te dwie struktury które ci pokazałem to były przykłady żebyś sobie przyswoił/zrozumiał o co chodzi.
Pisałem:
Cytat
Ad. 2) Tak. O coś takiego mi chodziło. Przetestuj sobie najpierw (echo $zapytanie) czy dostajesz dobrą listę elementów zanim zaczniesz robić zapytania.

po to żebyś widział to swoje zapytanie (u ciebie $zapytanie to zmienna $string + sql, oczywiście), daje głowę że tego nie zrobiłeś. Masz przykład:
  1. <?php
  2. echo "DELETE FROM osoba WHERE id IN ($string)";
  3. ?>

Chcesz wiedzieć co dostajesz z checkboxów? Ten kod wyświetli ci to co dostajesz z formularza (całą tablicę $_POST['delete']):
  1. <?php
  2. if (!empty($_POST['delete']) {
  3.    print_r($_POST['delete']);
  4. }
  5. ?>

Zacznij myśleć co robisz i analizować (co skąd się bierze) swój kod bo czuję że wszystko co piszę idzie na marne dry.gif
Natomiast jeśli chodzi o kod to widzę poprawę, ale musisz jeszcze popracować/przeanalizować jakieś przykłady jak postępować z formularzami. Masz na forum kursy więc skorzystaj z tego.
Przeczytaj może jakieś tutoriale do php, ściągnij jakiś darmowy skrypt, odpal go i przeanalizuj.

Nie obrażaj się, ale musisz duużo ćwiczyć a jak sam tego nie zrobisz to się nie nauczysz.
Powodzenia.

PS Nadal widzę kwiatki typu:
  1. <?php
  2. $imie = $_POST['imie'];
  3. $nazwisko = $_POST['nazwisko'];
  4. $usun = mysql_query ("DELETE FROM osoba WHERE (imie = '$imie' and nazwisko = '$nazwisko')")
  5. or die ("Bład przy usuwaniu rekordu");
  6. ?>

Zero sprawdzania zmiennych. A zwracałem ci na to uwagę.
Jeszcze to. Już jest dobrze ale po co wyświetlać pusty formularz? Wrzuć to echo do if'a (oczywiście zamknięcie formularza też):
  1. <?php
  2. echo '<form action = "usun.php" method = "post">';
  3.  
  4. if ($_POST['znajdz'] == "Znajdź")
  5. ?>

Acha i daję głowę że nie zmieniłeś error_reporting = E_ALL - wierz mi, ułatwiłoby ci to życie winksmiley.jpg

I jeszcze jedno. Zdajesz sobie sprawę z tego że to zapytanie wykonuje się za każdym wywołaniem skryptu?
  1. <?php
  2. $imie = $_POST['imie'];
  3. $nazwisko = $_POST['nazwisko'];
  4.  
  5. $usun = mysql_query ("DELETE FROM osoba WHERE (imie = '$imie' and nazwisko = '$nazwisko')")
  6. or die ("Bład przy usuwaniu rekordu");
  7. ?>

Czyli za każdym wywołaniem próbujesz usunąć studenta... przynajmniej na to wygląda.
ergoline
Znowu coś tam próbowałem poprawić:

  1. <?php
  2.  
  3. require ("check.php");
  4.  
  5. $polaczenie = mysql_connect ("localhost", "trautbergp", "123456")
  6. or die ("Nie można połączyć z serwerem baz danych");
  7. $wybor_bazy = mysql_select_db ("db_trautbergp")
  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" name = "skresl" 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. if ($POST['skresl'] == "Skreśl z listy studentów")
  32. {
  33.    $usun = mysql_query ("DELETE FROM osoba WHERE (imie = '$imie' and nazwisko = '$nazwisko')")
  34.    or die ("Bład przy usuwaniu rekordu");
  35. }
  36.  
  37.  
  38. echo ' 2. Znajdź studenta:';
  39. echo '</br>';
  40.  
  41. echo '<form action = "usun.php" method = "post">';
  42.  
  43. $sql = mysql_query ("SELECT nazwa FROM kierunek")
  44. or die ("Bład przy pobieraniu kierunków");
  45. echo 'Kierunek: <select name = "kierunek">';
  46. while ($row = mysql_fetch_assoc($sql))
  47. {
  48.    echo '<option value = " '.$row['nazwa'].' "> '.$row['nazwa'].' </option>';
  49. }
  50. echo '</select>';
  51. echo '</br>';
  52.  
  53. $sql1 = mysql_query ("SELECT ktory FROM semestr")
  54. or die ("Błąd przy pobieraniu semestrów");
  55. echo ' Semestr: <select name = "semestr">';
  56. while ($row1 = mysql_fetch_assoc($sql1))
  57. {
  58.    echo '<option value = " '.$row1['ktory'].' "> '.$row1['ktory'].' </option>';
  59. }
  60. echo '</select>';
  61. echo '</br>';
  62.  
  63. $kierunek = $_POST['kierunek'];
  64. $semestr = $_POST['semestr'];
  65.  
  66. </br>
  67. <input type = "submit" name = "znajdz" value = "Znajdź">
  68. </form>';
  69.  
  70. if ($_POST['znajdz'] == "Znajdź")
  71. {
  72.    echo '<form action = "usun.php" method = "post">';
  73.    $grupa = mysql_query ("SELECT grupa_id FROM grupa where (kierunek = '$kierunek' and semestr = '$semestr')")
  74.    or die ("Nie można pobrać ID grupy");
  75.    $tabela = mysql_fetch_array($grupa)
  76.    or die ("Nie można zapisać wyniku w tabeli lub nie znaleziono żadnych studentów");
  77.    $znajdz  = mysql_query ("SELECT * FROM osoba where (grupa_id = ".$tabela['grupa_id'].")")
  78.    or die ("Nie można znaleźć studentów o podanym ID grupy");
  79.    echo '<table cellpadding = \"11\" border = 3>';
  80.    echo '      <tr>
  81.            <td>ID</td>
  82.            <td>Grupa ID</td>
  83.            <td>Imię</td>
  84.            <td>Nazwisko</td>
  85.            <td>Usuń</td>
  86.        </tr>';
  87.    
  88.    while ($row = mysql_fetch_array($znajdz))
  89.    {
  90.        echo '<tr>';    
  91.        echo '<td>'.$row[0].'</td>';
  92.        echo '<td>'.$row[1].'</td>';
  93.        echo '<td>'.$row[2].'</td>';
  94.        echo '<td>'.$row[3].'</td>';
  95.        echo '<td> <input type = "checkbox" name = "delete[]" value = " '.$row[0].' "></td>';
  96.        echo '</tr>';
  97.    }
  98.    echo '</table>';
  99.        echo '</br>';
  100.        echo '<input type = "submit" name = "usun" value = "Usuń zaznaczone">';
  101.        echo '</form>';
  102.    
  103.    if ($_POST['usun'] == "Usuń zaznaczone")
  104.    {
  105.        if (!empty($_POST['delete'])) {print_r ($tablica);}
  106.        //or die ("Nie można utworzyć tablicy");
  107.        //$string = implode (",", $tablica)
  108.        //or die ("Nie można utworzyć $string");
  109.        //$usun = mysql_query ("DELETE FROM osoba WHERE id IN ($string)")
  110.        //or die ("Nie można usunąć rekordów");
  111.        
  112.    }
  113. }
  114.  
  115. ?>


1. Na razie chcę zobaczyć, czy w ogóle checkbox'y "zaznaczają się"... Jednak nie widzę, żadnego efektu. To samo jeśli wyciągnę
  1. <?php
  2. if (!empty($_POST['delete'])) {print_r ($tablica);}
  3. ?>
przed warunek
  1. <?php
  2. if ($_POST['usun'] == "Usuń zaznaczone")
  3. ?>


2. Ciągle nie umiem zrozumieć o co dokładnie chodzi z testowaniem zapytania. Mógłbyś jeszcze raz, powoli, spokojnie i dużymi literami to powiedzieć?

3. Co do raportowania błędów, to nie pcham się do tego - nie mój serwer...

Pozdrawiam...
ziqzaq
Dobijesz mnie smile.gif
ad. 1. Wrzuć albo przed albo w tym waruku. Dzięki temu zobaczysz jakie checkboxy idą do skryptu (jeśli jakiekolwiek idą).
ad. 2. Nawet nie testowanie. Poprostu zobacz je sobie i sprawdź czy jest poprawne (takie jak zakładałeś).
ad. 3. Ok. Myślałem, że testujesz na localhost.

Wkurzyłem się i nabazgrałem ten kod - porównaj sobie ze swoim.
Pisane z palca na szybkiego, nie sprawdzone (to znaczy że mogą być jakieś literówki i błędy, chociaż mam nadzieję że nie walnąłem jakiejś gafy winksmiley.jpg):
  1. <?php
  2. // UWAGA, sprawdzam czy mamy wszystkie potrzebne dane zanim pomysle o tworzeniu formularza
  3. // Poniewaz $_POSR['znajdz'] jest tylko w jednym formularzu
  4. // to tylko sprawdzam czy zostalo przeslane
  5. // (jesli go nie ma to znaczy ze to nie ta akcja ma byc wykonana)
  6. if (!empty($_POST['znajdz']) AND !empty($_POST['kierunek']) AND !empty($_POST['semestr']))
  7. {
  8.    // Teraz mozna przypisac kierunek i semestr
  9.    $kierunek = mysql_real_escape_string((string) $_POST['kierunek']); // Chcemy zeby to byly ciagi znakow
  10.    $semestr = mysql_real_escape_string((string) $_POST['semestr']);
  11.    
  12.    // Oto zapytanie
  13.    $sql = "SELECT grupa_id FROM grupa where (kierunek='$kierunek' and semestr='$semestr')";
  14.    $grupa = mysql_query($sql);
  15.    if($grupa) {
  16.        // Ok jest jakas grupa
  17.        // UWAGA: Pomysl co bedze gdy zaptanie wyzej pobierze wiecej grup
  18.        $grupa = mysql_fetch_array($grupa);
  19.        $sql2 = "SELECT * FROM osoba where (grupa_id=".$tabela['grupa_id'].")";
  20.        $studenci  = mysql_query($sql2);
  21.        if($studenci) {
  22.            // Zapytanie powiodlo sie mamy studentow, tworze formularz
  23.            echo '<form action="usun.php" method="post">';
  24.            echo '<table cellpadding ="11" border="3">';
  25.            echo '<tr>
  26.                <td>ID</td>
  27.                <td>Grupa ID</td>
  28.                <td>Imię</td>
  29.                <td>Nazwisko</td>
  30.                <td>Usuń</td>
  31.                </tr>';
  32.                
  33.            while ($row = mysql_fetch_array($studenci))
  34.            {
  35.                echo '<tr>';    
  36.                echo '<td>'.$row[0].'</td>';
  37.                echo '<td>'.$row[1].'</td>';
  38.                echo '<td>'.$row[2].'</td>';
  39.                echo '<td>'.$row[3].'</td>';
  40.                echo '<td><input type="checkbox" name="delete[]" value="'.$row[0].'" /></td>';
  41.                echo '</tr>';
  42.            }
  43.            echo '</table>';
  44.            echo '</br>';
  45.            echo '<input type="submit" name="usun" value="Usuń zaznaczone">';
  46.            echo '</form>';
  47.        }
  48.        else echo "Wystąpił błąd podczas pobierania studentów z bazy<br/>".mysql_error();
  49.   }
  50.   else echo "Wystąpił błąd podczas pobierania grupy z bazy<br/>".mysql_error();
  51. }
  52. // Zauwaz ze od razu sprawdzam czy przeslano jakies checkboxy i czy to jest tablica
  53. if ($_POST['usun'] == "Usuń zaznaczone" AND !empty($_POST['delete']) AND is_array($_POST['delete']))
  54. {
  55.    $tablica = $_POST['delete'];
  56.    // Zobaczmy co tam mamy w tablicy
  57.    print_r($tablica);
  58.    // Tworze ciag znakow z id (wartosciami z checkboxow)
  59.    // Mozna jeszcze sprawdzic czy w tablicy mamy tylko liczby a nie jakis kod sql injection
  60.    // ja zrobie tylko escape string
  61.    $numery_id = mysql_real_escape_string(implode(",", $tablica));
  62.    $sql = "DELETE FROM osoba WHERE id IN ($numery_id)";
  63.    // Zobaczmy jak wyglada nasze zapytanie
  64.    echo "SQL: ".$sql;
  65.    
  66.    // Twoje zapytanie
  67.    //$usun = mysql_query ("DELETE FROM osoba WHERE id IN ($string)")
  68.    //or die ("Nie można usunąć rekordów");
  69.    
  70.    // Teraz moje, mozesz odznaczyc pozniej dla sprawdzenia
  71.    /*
  72.     if(mysql_query($sql)) {
  73.         echo 'Usunięto z bazy wybrane rekordy';
  74.     }
  75.     else echo "Wystąpił błąd podczas usuwania rekordów z bazy<br/>".mysql_error();
  76.     */
  77. }
  78. ?>
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.