![]() |
![]() |
![]()
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
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... |
|
|
![]() |
![]()
Post
#2
|
|
![]() Grupa: Zarejestrowani Postów: 320 Pomógł: 53 Dołączył: 18.09.2007 Skąd: Radom Ostrzeżenie: (0%) ![]() ![]() |
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 |
|
|
![]()
Post
#3
|
|
![]() Grupa: Zarejestrowani Postów: 428 Pomógł: 128 Dołączył: 17.06.2007 Ostrzeżenie: (0%) ![]() ![]() |
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ę)?
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.
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(). ![]() Na koniec zaproponuję ci taki oto kod (odwołując się do problemu nr. 1):
Ten post edytował ziqzaq 28.12.2008, 17:07:35 |
|
|
![]()
Post
#4
|
|
![]() Grupa: Zarejestrowani Postów: 4 340 Pomógł: 542 Dołączył: 15.01.2006 Skąd: Olsztyn/Warszawa Ostrzeżenie: (0%) ![]() ![]() |
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 ![]() 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. Ten post edytował skowron-line 28.12.2008, 17:32:17 -------------------- I'm so fast that last night I turned off the light switch in my hotel room and was in bed before the room was dark - Muhammad Ali.
Peg jeżeli chcesz uprawiać sex to dzieci muszą wyjść, a jeżeli chcesz żeby był dobry ty też musisz wyjść - Al Bundy. QueryBuilder, Mootools.net, bbcradio1::MistaJam http://www.phpbench.com/ |
|
|
![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 7 Pomógł: 0 Dołączył: 26.12.2008 Ostrzeżenie: (0%) ![]() ![]() |
1. Czy kolumna w której trzymasz 'id' ma nazwę/index "'0'" (w tablicy podajesz stringa, jako indeks a nie liczbę)?
Tak, kolumna to osoba_id, jest pierwszą kolumną w tabeli. 2.Jak byk widać błąd. Masz kod, szukaj.
Wybacz, ale za czorta dalej nie wiem gdzie jest błąd... Może wyłożysz mi go łapatologicznie? 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(). ![]() 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ć? ? Rozumiem, że do tablicy zostaną od razu przesłane ID wszystkich zaznaczonych checkbox'ów? 2. Coś w stylu: ? Proszę Panstwa, to moja pierwsza styczność z PHP i MySQL, dlatego proszę o wyrozumiałość i cierpliwość... Pozdrawiam... Ten post edytował ergoline 29.12.2008, 02:37:24 |
|
|
![]()
Post
#6
|
|
![]() 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):
Teraz ten kod:
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ż):
natomiast to stworzy tablicę asocjacyjną w której klucze bedą nazwami:
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? ![]() 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 ![]() Ten post edytował ziqzaq 29.12.2008, 09:18:14 |
|
|
![]()
Post
#7
|
|
Grupa: Zarejestrowani Postów: 7 Pomógł: 0 Dołączył: 26.12.2008 Ostrzeżenie: (0%) ![]() ![]() |
Witam!
Poprawiłem lekko kod, a przynajmniej tak mi się wydaje. Teraz ma postać:
Jednak ciągle nie usuwa zaznaczonych rekordów. Co znowu robię źle? Pozdrawiam... |
|
|
![]()
Post
#8
|
|
![]() Grupa: Zarejestrowani Postów: 428 Pomógł: 128 Dołączył: 17.06.2007 Ostrzeżenie: (0%) ![]() ![]() |
OMG człowieku, proszę cię, zacznij czytać ze zrozumieniem a nie przeklejać kod bezmyślnie.
![]() 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:
Chcesz wiedzieć co dostajesz z checkboxów? Ten kod wyświetli ci to co dostajesz z formularza (całą tablicę $_POST['delete']):
Zacznij myśleć co robisz i analizować (co skąd się bierze) swój kod bo czuję że wszystko co piszę idzie na marne ![]() 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:
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ż):
Acha i daję głowę że nie zmieniłeś error_reporting = E_ALL - wierz mi, ułatwiłoby ci to życie ![]() I jeszcze jedno. Zdajesz sobie sprawę z tego że to zapytanie wykonuje się za każdym wywołaniem skryptu?
Czyli za każdym wywołaniem próbujesz usunąć studenta... przynajmniej na to wygląda. Ten post edytował ziqzaq 29.12.2008, 17:16:37 |
|
|
![]()
Post
#9
|
|
Grupa: Zarejestrowani Postów: 7 Pomógł: 0 Dołączył: 26.12.2008 Ostrzeżenie: (0%) ![]() ![]() |
Znowu coś tam próbowałem poprawić:
1. Na razie chcę zobaczyć, czy w ogóle checkbox'y "zaznaczają się"... Jednak nie widzę, żadnego efektu. To samo jeśli wyciągnę przed warunek
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... |
|
|
![]()
Post
#10
|
|
![]() Grupa: Zarejestrowani Postów: 428 Pomógł: 128 Dołączył: 17.06.2007 Ostrzeżenie: (0%) ![]() ![]() |
Dobijesz mnie
![]() 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 ![]()
Ten post edytował ziqzaq 29.12.2008, 19:36:46 |
|
|
![]() ![]() |
![]() |
Wersja Lo-Fi | Aktualny czas: 14.08.2025 - 13:06 |