![]() |
![]() ![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 2 Pomógł: 0 Dołączył: 4.08.2008 Ostrzeżenie: (0%) ![]() ![]() |
Witam!
Kombinowałem, kombinowałem i poległem... Szukałem na forum, ale nie znalazłem. Skrypt ma mieć możliwość dodania pozycji do formularza zamówienia wewnątrz firmy, a dopiero po wypełnieniu (możliwe kilka pozycji) zapisanie o do bazy danych. Wygenerowałem formularz, którego pola mają nazwy generowane przez skrypt. Ilość takich pól jest zmienna: Kod for ($licznik = 1; $licznik <= $ilosc_pol; $licznik++) { echo "<input type=\"text\" name=\"pos$licznik\" value=\"\"></input>"; // itd. } I wychodzi: Kod <form action="dodaj.php" method="POST"> <input type="text" value="" name="pos1"></input><input type="submit" name="del_pos1" name="Usuń"></input> <input type="text" value="" name="pos2"></input><input type="submit" name="del_pos2" name="Usuń"></input> <input type="text" value="" name="pos3"></input><input type="submit" name="del_pos3" name="Usuń"></input> ... <input type="text" value="" name="posX"></input><input type="submit" name="del_posX" name="Usuń"></input><BR><inoput type="submit" name="send" value="Zapisz"></input><BR></form><BR> Problem polega na tym, że nie wiem, jak zrobić, żeby automatycznie wydobyć informację o tym, które pole typu "SUBMIT" wysłało dane z formularza. Potrzebana była by jakaś pętla typu: Kod for ($licznik = 1; $licznik <= $ilosc_pol; $licznik++) { if (isset($_POST['del_pos$licznik'])) { cośtam się dzieje... } } Ale to nie działa, a nie wiem dlaczego. Argument podany, jako nazwa elementu w tablicy $_POST jest według mnie ciągiem znaków i powinien podlegać takim manewrom, jak generowanie jego nazwy, a jakoś nie działa. A może to coś innego? Ten post edytował GraphiCAD 4.08.2008, 10:35:26 |
|
|
![]()
Post
#2
|
|
![]() Grupa: Zarejestrowani Postów: 246 Pomógł: 19 Dołączył: 14.06.2007 Ostrzeżenie: (0%) ![]() ![]() |
Przecież nie chcesz wyciągnąć przycisku tylko to co jest w polu input. Czyli powinno być chyba tak:
Poza tym skoro wyciągasz tylko jedno pole to nie możesz zrobić tak aby wszystkie pola typu input miały tą samą nazwę? -------------------- "Wszyscy wiedzą, że czegoś nie da się zrobić, i przychodzi taki jeden, który nie wie, że się nie da, i on właśnie to robi." - Albert Einstein |
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 1 374 Pomógł: 149 Dołączył: 1.03.2006 Ostrzeżenie: (0%) ![]() ![]() |
A do czego są atrybuty name?
Poza tym nie tak: Tylko tak:
Ja takie rzeczy załatwiam inaczej. Zamiast tych submitów robię checkboxy i zaznaczam pozycje do usunięcia. Pod checkboxami daję jeden submit name="usuń" i obsługuję wszystkie zaznaczone na raz. Prosto i bez miliona warunków. Co więcej, jeśli liczna tych elementów jest zmienna i formularz jest tworzony w pętli radzę korzystrać ze zmiennych tablicowych. Ostatecznie u mnie wyglądałoby to tak:
Potem sprawdzenie:
Zaznaczone checkboxy mam w tablicy $_POST['del_pos'], sprawdzam jakie są w niej klucze (będą tylko te które użytkownik odhaczył) i je obsługuję. -------------------- |
|
|
![]()
Post
#4
|
|
Grupa: Zarejestrowani Postów: 2 Pomógł: 0 Dołączył: 4.08.2008 Ostrzeżenie: (0%) ![]() ![]() |
Prawie wszystko pięknie, ale:
1. Potrzebuję informacji z pól tekstowych ORAZ informacji, które "submity" wysłały dane, żeby wywalić odpowiednią pozycję z listy. 2. Atrybuty "name" przecież są tutaj elementami sterującymi. Ale nie będę robił żadnego "if... else...", albo "case $zmienna of...", bo do tego trzeba znać liczbę elementów, a ta jest zmienna. 3. Zmienna tablicowa w tym przypadku spowoduje, że wyświetli się takie coś, jak jest napisane, ale czy napiszę "del_pos[1]", czy "del_pos3", to i tak muszę to jakoś potem wydobyć z formularza. 4. Użytkownik jest przyzwyczajony do przycisków "usuń" przy każdej pozycji i tak został zatwierdzony interfejs. 5. JAK sprawdzić, czy którekolwiek z np. 200 pól, których nazwy są generowane, a nie stałe jest zaznaczone? Też przez: isset($_POST['nazwa_pola']), a tutaj się to wywala, bo nie umiem zrobić, żeby skrypt sprawdzał wszystkie pola z tablicy $_POST sam, bez podawania mu ręcznie nazw pól. |
|
|
![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 22 Pomógł: 8 Dołączył: 2.08.2008 Ostrzeżenie: (0%) ![]() ![]() |
Wprawdzie php to tylko takie moje male hobby i nigdy profesjonalnie sie tym nie zajmowalem, ale moze cos takiego Ci pomoze.
Otoz, o ile dobrze zrozumialem, masz formularz typu pole tekstowe - submit, ale ilosc takich par jest zupelnie dynamiczna. Ty chcesz aby po nacisnieciu ktoregos z submitow z takiej pary, skrypt przetwarzajacy dane rozpoznal ktory submit zostal nacisniety (inaczej mowiac od ktorej pary to bylo). Trzymajac sie Twojego kodu html, to plik dalej.php moglby miec cos takiego:
no i $nr zawiera nazwe wcisnietego submita. Na 100% istnieja jakies prostsze i bardziej optymalne rozwiazania, ale to dziala bo wlasnie testowalem. Moze w czym pomoze. |
|
|
![]()
Post
#6
|
|
Grupa: Zarejestrowani Postów: 1 374 Pomógł: 149 Dołączył: 1.03.2006 Ostrzeżenie: (0%) ![]() ![]() |
3. Zmienna tablicowa w tym przypadku spowoduje, że wyświetli się takie coś, jak jest napisane, ale czy napiszę "del_pos[1]", czy "del_pos3", to i tak muszę to jakoś potem wydobyć z formularza. W przypadku zmiennej tablicowej masz gotową funkcję, która sprawdza króte klucze istnieją w tablicy. Nie trzeba ifów ani case. Cytat 5. JAK sprawdzić, czy którekolwiek z np. 200 pól, których nazwy są generowane, a nie stałe jest zaznaczone? Też przez: isset($_POST['nazwa_pola']), a tutaj się to wywala, bo nie umiem zrobić, żeby skrypt sprawdzał wszystkie pola z tablicy $_POST sam, bez podawania mu ręcznie nazw pól. count($_POST['del_pos']) hihihi ![]() ![]() Na 100% istnieja jakies prostsze i bardziej optymalne rozwiazania, ale to dziala bo wlasnie testowalem. Moze w czym pomoze. Na 100 procent, bo substring jak większość operacji na stringach jest dość powolny. A teraz krótko i na temat i jak to powinno być zrobione jeśli klient upiera się, że nie chce checkbox tylko submit. Pętla tworząca pozycje (zauważ, że u Ciebie masz dwa razy atrybut name i przypisanie dwóch różnych wartości do każdego submita może stąd Twoje problemy z $_POST)
Sprawdzenie który submit wciśnięty odbywa się w jednej linijce.
-------------------- |
|
|
![]() ![]() |
![]() |
Wersja Lo-Fi | Aktualny czas: 24.07.2025 - 13:53 |