![]() |
![]() |
![]()
Post
#1
|
|
![]() Grupa: Zarejestrowani Postów: 72 Pomógł: 0 Dołączył: 17.02.2007 Ostrzeżenie: (0%) ![]() ![]() |
Hejka,
jak zrobić walidacje formularza tak żeby po za komunikatem typu 'nie wypełniony np nick' zaznaczał pola nie wypełnione zmieniając czcionkę danego pola na czerwono. Wtedy wystarczył by jeden komunikat 'proszę uzupełnić pola zaznaczone na czerwono' W tej chwili mój formularz wygląda następująco:
|
|
|
![]() |
![]()
Post
#2
|
|
![]() Grupa: Zarejestrowani Postów: 1 429 Pomógł: 195 Dołączył: 6.10.2008 Skąd: Kraków/Tomaszów Lubelski Ostrzeżenie: (0%) ![]() ![]() |
Odpowiedni warunek if z empty +
-------------------- O! Zimniok :P
|
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 1 675 Pomógł: 286 Dołączył: 15.06.2009 Skąd: Wieliczka Ostrzeżenie: (0%) ![]() ![]() |
Odpowiedni warunek if z empty +
to jest javascript ![]() najprościej będzie nadać mu jakąś klasę np. zle i potem w css przypisać jej czerwony kolor |
|
|
![]()
Post
#4
|
|
![]() Grupa: Zarejestrowani Postów: 72 Pomógł: 0 Dołączył: 17.02.2007 Ostrzeżenie: (0%) ![]() ![]() |
a możecie mi to wytłumaczyć na przykładzie jeśli będziecie na tylu uprzejmi
![]() |
|
|
![]()
Post
#5
|
|
![]() Grupa: Zarejestrowani Postów: 1 429 Pomógł: 195 Dołączył: 6.10.2008 Skąd: Kraków/Tomaszów Lubelski Ostrzeżenie: (0%) ![]() ![]() |
Nom o to mi chodziło, można zrobić to na początku w JS lub potem w PHP, no jak kto woli, albo najlepiej tak i tak.
Rossco: choćby i tak:
Ten post edytował MateuszScirka 21.03.2010, 16:29:01 -------------------- O! Zimniok :P
|
|
|
![]()
Post
#6
|
|
![]() Grupa: Zarejestrowani Postów: 72 Pomógł: 0 Dołączył: 17.02.2007 Ostrzeżenie: (0%) ![]() ![]() |
jak uważacie czy ja nie powinnam wywalić formularz z kodu php? jeśli tak to na co uważać żeby nie przestał działać?
|
|
|
![]()
Post
#7
|
|
![]() Grupa: Zarejestrowani Postów: 1 429 Pomógł: 195 Dołączył: 6.10.2008 Skąd: Kraków/Tomaszów Lubelski Ostrzeżenie: (0%) ![]() ![]() |
Możesz zostawić, możesz wywalić, osobiście skłaniam się ku temu drugiemu wariantowi, tzn. ja bym wywalił, trochę to nieestetycznie wygląda, taka masa printów, nie widać kolorowania składni, można gdzieś się pomylić no i pewnie są jeszcze jakieś inne ważniejsze argumenty, uważaj przy tym żeby zamknąć tag php przed kodem HTML i otworzyć po
![]() -------------------- O! Zimniok :P
|
|
|
![]()
Post
#8
|
|
![]() Grupa: Zarejestrowani Postów: 72 Pomógł: 0 Dołączył: 17.02.2007 Ostrzeżenie: (0%) ![]() ![]() |
jestem początkująca ale też mi się wydaje że powinnam wywalić formularz z php. Tylko on jest wrzucony w IF-a ($_GET["id"]=='nowy') i nie wiem za bardzo jak do tego się zabrać.
|
|
|
![]()
Post
#9
|
|
![]() Grupa: Zarejestrowani Postów: 1 429 Pomógł: 195 Dołączył: 6.10.2008 Skąd: Kraków/Tomaszów Lubelski Ostrzeżenie: (0%) ![]() ![]() |
To nic że jest w ifie, będzie działało. Warunek zostanie zachowany
-------------------- O! Zimniok :P
|
|
|
![]()
Post
#10
|
|
Grupa: Zarejestrowani Postów: 2 178 Pomógł: 596 Dołączył: 25.09.2009 Skąd: Piwniczna-Zdrój Ostrzeżenie: (0%) ![]() ![]() |
Niestety u Ciebie nie da się zrobić takiej walidacji, jaką chcesz, bo warunki w blokach if...elseif...else Cię nie puszczą. Dokładniej chodzi o to, że nie są w odpowiedniej kolejności. Myślę, że warto przemyśleć jeszcze raz kilka kwestii, np.:
1. kiedy wyświetlany jest formularz, 2. czy potrzebujemy tylu $_GET-ów, 3. co sprawdzamy najpierw (chodzi o to, czy formularz został wysłany, czy może pojawił się pierwszy raz), 4. itp... Odnośnie wyświetlania formularza, to podpowiem, że powinien on być wyświetlany w którymś z końcowych warunków, albo nawet w zupełnie odrębnym bloku if. Cytat jak uważacie czy ja nie powinnam wywalić formularz z kodu php? jeśli tak to na co uważać żeby nie przestał działać? Kod HTML można przeplatać z kodem php np.Możesz też formularz zapisać w osobnym pliku html i użyć funkcji include. Możesz napisać funkcję wstawiającą formularz. Każdy sposób jest dobry. Ten post edytował mortus 21.03.2010, 17:08:42 |
|
|
![]()
Post
#11
|
|
![]() Grupa: Zarejestrowani Postów: 72 Pomógł: 0 Dołączył: 17.02.2007 Ostrzeżenie: (0%) ![]() ![]() |
Zrobiłam tak:
formularz przeniosłam do pliku form.php
Dodałam include
O dziwo działa ![]() I najważniejsze - czy przybliżyłam się chociaż o krok od możliwości zrobienia walidacji jaką opisałam? |
|
|
![]()
Post
#12
|
|
![]() Grupa: Zarejestrowani Postów: 1 429 Pomógł: 195 Dołączył: 6.10.2008 Skąd: Kraków/Tomaszów Lubelski Ostrzeżenie: (0%) ![]() ![]() |
Nie trzeba wszedzie sprawdzac tym issetem ;] Chodzi o to, że sprawdzamy czy formularz został wysłany, żeby od razu nie wyświetlał się ten czerwony border ;] Wystarczy jeden if z issetem który obejmuje cały kod który ma się wykonać po naciśnięciu submita
-------------------- O! Zimniok :P
|
|
|
![]()
Post
#13
|
|
![]() Grupa: Zarejestrowani Postów: 72 Pomógł: 0 Dołączył: 17.02.2007 Ostrzeżenie: (0%) ![]() ![]() |
if(isset($_POST["stanowisko"])) { Tu coś wpisuję? if(empty($_POST["stanowisko"])) { $border="border-top: 1px solid red"; } } i co muszę wywalić w obecnym kodzie żeby walidację sobie nie przeszkadzały? |
|
|
![]()
Post
#14
|
|
Grupa: Zarejestrowani Postów: 2 178 Pomógł: 596 Dołączył: 25.09.2009 Skąd: Piwniczna-Zdrój Ostrzeżenie: (0%) ![]() ![]() |
Nie trzeba wszedzie sprawdzac tym issetem ;] Chodzi o to, że sprawdzamy czy formularz został wysłany, żeby od razu nie wyświetlał się ten czerwony border ;] Wystarczy jeden if z issetem który obejmuje cały kod który ma się wykonać po naciśnięciu submita Chyba się mylisz, bo skąd będziemy wiedzieć, które pola oznaczyć, jeżeli będzie tylko jeden isset? Przecież nie każde pole trzeba wypełnić i nie wszystkie pola, które musimy wypełnić, muszą być puste po naciśnięciu submita.@rossco Po pierwsze zwróć uwagę na te $_GET-y. Zauważ, że jeśli wybierzesz opcję dodania nowego ogłoszenia, to w $_GET['id'] masz wartość 'nowy' i wtedy wyświetlasz formularz. Ale gdy przyciśniesz przycisk 'Wyślij', to w $_GET['id'] masz wartość 'dodaj', formularz przechodzi walidację i jeśli nie wszystkie wymagane pola zostały wypełnione to znowu wyświetlasz formularz. Chyba trochę bez sensu, ale przyjmijmy, że tak ma być. A jeśli tak, to skrypt mniej więcej powinien wyglądać tak No i pola tresc i stanowisko w pliku form.php |
|
|
![]()
Post
#15
|
|
![]() Grupa: Zarejestrowani Postów: 1 429 Pomógł: 195 Dołączył: 6.10.2008 Skąd: Kraków/Tomaszów Lubelski Ostrzeżenie: (0%) ![]() ![]() |
Mortus, nie mylę się. Isset ma sprawdzać tylko czy formularz został przesłany, równie dobrze może być (powinien) jeden isset na cały kod, który ma się wyk. po przesłaniu formularza. A za to czy pole się zaczerwieni, odpowiada warunek z empty.
-------------------- O! Zimniok :P
|
|
|
![]()
Post
#16
|
|
![]() Grupa: Zarejestrowani Postów: 72 Pomógł: 0 Dołączył: 17.02.2007 Ostrzeżenie: (0%) ![]() ![]() |
Mortus ja się dopiero uczę i pewnie dlatego ten kod jest "bez sensu". Skoro tak to nie chce nabrać złych nawyków. Mi się wydaje że ten kod nie wykonuję się w dobrej kolejności. Podpowiedz mi proszę jak najlepiej Ty byś go napisał.
|
|
|
![]()
Post
#17
|
|
Grupa: Zarejestrowani Postów: 2 178 Pomógł: 596 Dołączył: 25.09.2009 Skąd: Piwniczna-Zdrój Ostrzeżenie: (0%) ![]() ![]() |
Mortus, nie mylę się. Isset ma sprawdzać tylko czy formularz został przesłany, równie dobrze może być (powinien) jeden isset na cały kod, który ma się wyk. po przesłaniu formularza. A za to czy pole się zaczerwieni, odpowiada warunek z empty. Właściwie to nie ma większego znaczenia to w jaki sposób będziemy sprawdzać, czy formularz został wysłany. Zarówno isset, jak i empty doskonale się do tego nadają. Tylko podaj mi źródło, w którym przeczytałeś, że powinien być jeden isset na cały kod. A jak sprawdzisz czy pole, w którym możemy wpisać 0, i które w ostateczności nie może być puste, rzeczywiście nie jest puste? Gwarantuję, że empty nie zadziała tak, jakbyśmy chcieli i musimy użyć isset (nawet dwukrotnie w jednym warunku). Przykładowy kod:W moim odczuciu empty lepiej się nadaje do sprawdzenia, czy formularz został przesłany. Dlaczego? Dlatego, że tablica $_POST istnieje zawsze i dopóki nie prześlemy czegoś za pomocą metody post, tablica $_POST będzie pusta. Jeżeli natomiast prześlemy puste pole z ustawionym atrybutem name, to tablica $_POST już nie jest pusta, ale $_POST['nazwa_pola'] nadal jest puste i możemy użyć empty, żeby to sprawdzić. Tyle, że w wyżej opisanym przypadku empty nas "oszuka". @rossco Powyżej Ci podałem jak, to mniej więcej powinno wyglądać. Z tym, że do pierwszego warunku można mieć uwagi. Skoro w formularzu przesyłasz ukryte pole o nazwie id i wartości dodaj, to zamiast możemy użyć tylko A w akcji formularza nie potrzebujemy index.php?id=dodaj. Oczywiście to jest tylko jeden ze sposobów rozwiązania kwestii walidacji (takiej, o jaką Tobie chodzi). |
|
|
![]()
Post
#18
|
|
![]() Grupa: Moderatorzy Postów: 4 362 Pomógł: 714 Dołączył: 12.02.2009 Skąd: Jak się położę tak leżę :D ![]() |
Mortus jak widzę czuwa. I ma rację. $_POST to tablica superglobalna i wisi, więc jej wypełnienie musi być sprawdzane występowaniem któregoś z elementów zawartego w niej. Większość osób robi to sprawdzając istnienie submita o określonym name w nim. Ale count jest podstawowym dla mnie gdy mam formularz z kilkoma submitami. Bo przecież nie będę zgadywał który submit wcisnął user lub sprawdzał istnienie wszystkich. Za to zliczę ile mam wpisów w niej
![]() ![]() I ma rację mortus... Sposobów rozwiązania problemu jest więcej niż jedna. Ja osobiście skłaniam się do takiej: - tworzymy strukturę przechowującą domyślne wartości pól. - jeśli przechwyciliśmy GET sprawdzamy uprawnienia i zamiast domyślnych wrzucamy pobrane. - jeśli wyłapujemy POST to walidacja idzie, zapis itp - dopiero teraz wyświetlamy formularz z polami uzupełnionymi wartościami ze struktury wartości pól. Czemu tak? Bo to nam kapitalnie upraszcza wszystko, włącznie z komunikatami błędów o formie jaką chcesz zastosować. Wystarczy, że stworzymy drugą strukturę, która przechowuje błędy. Jeśli w czasie walidacji napotkamy błąd, to wrzucamy do niej ów błąd z nazwą pola jako kluczem. A teraz cudujemy... Jeśli owa struktura jest pusta to robi się insert lub update. Jeśli zawiera choć jeden wpis ( count ) to operacje na bazie nie następują, a pod danym polem następuje sprawdzenie czy tablica błędów zawiera wpis o nazwie pola. Tak? No to wyświetlamy ów komunikat ![]() -------------------- 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
|
|
|
![]()
Post
#19
|
|
Grupa: Zarejestrowani Postów: 2 178 Pomógł: 596 Dołączył: 25.09.2009 Skąd: Piwniczna-Zdrój Ostrzeżenie: (0%) ![]() ![]() |
Sugestia o isset jest dobra, ale można także używać array_key_exists('name_pola', $_POST) i to rozwiązanie ja stosuję najczęściej, bo nie wywali nam się, podobnie jak isset, na wartości 0, co już mortus zasugerował. isset na wartości zero się nie wywali, wywali się natomiast, jeżeli nie wpiszemy niczego, dlatego samo sprawdzenienie wystarcza i musimy sprawdzać, czy ta zmienna nie jest pustym łańcuchem znaków Oczywiście mówimy cały czas o danych przesyłanych za pomocą formularza (choć w przypadku zmiennych inicjowanych w samym skrypcie sprawa wygląda podobnie). Na wartości 0 na pewno wywali się empty, bo $zmienna = '0'; to nadal pusta (empty) zmienna. Ogólnie to w rzeczywistości mamy tyle rozwiązań ilu programistów (choć pewnie większość rozwiązań będzie podobna, albo identyczna), jedyną kwestią jaką trzeba rozważyć jest natomiast wydajność, która i tak w przypadku samej walidacji formularza może się tylko nieznacznie różnić w różnych rozwiązaniach, no chyba, że ktoś to strasznie zamota. Ten post edytował mortus 22.03.2010, 13:35:56 |
|
|
![]()
Post
#20
|
|
![]() Grupa: Zarejestrowani Postów: 72 Pomógł: 0 Dołączył: 17.02.2007 Ostrzeżenie: (0%) ![]() ![]() |
Chyba na początek nauki w php (podejście trzecie:)) wybrałam za trudne zadanie. Przerobiłam skrypt, ale pokazuję się błąd w linijce 56 "
Parse error: syntax error, unexpected T_BOOLEAN_AND, expecting ')' in /ogloszenia/index.php on line 56" i podejrzewam że źle zastosowałam się to twoich wskazówek Mortus
Jeśli można to proszę o podpowiedzi co źle zrobiłam |
|
|
![]() ![]() |
![]() |
Aktualny czas: 20.08.2025 - 09:02 |