[PHP]Walidacja formularza - gdzie jest błąd?


(Spectatorx) #1

(Drobok) #2

linia 119 */

linia 127 ; przed or die

Jesteś pewien że plik ma nazwę: dodanieogloszenia.php ? Gdyż do takiego odwołujesz się w form.

Z tego co widzę u siebie, to sypie błędami na include (bowiem go nie mam), z mysql (bo nie mam bazy / config), oraz eregi (w php 5.3, inaczej się je pisze). Ale działa normalnie (tzn wyświetla się twoja wiadomość) + form. Po submit również. Może masz jakąś literówkę w nazwie ?


(M@ster) #3

Co to tam robi:

*/

druga sprawa, wykonujesz zapytanie na bazie danych bez połączenia się z nią. a tak poza tym, mnóstwo tam drobnych błędów jest, który wprawdzie nie powodują przerwania wykonywania skryptu ale warto by je poprawić. Jak chcesz spr. czy string jest nie pusty ty po prostu if ($ciag) { ... }, po co te porównanie do null? eregi jest depricated od chyba kilku wersji PHP, nie stosuje się tego już, zaznajom się z preg_match(). Konstrukcja $tytul = $_POST['tytul']; jest niepoprawna bo jeśli nie będzie pola tytuł to mamy już warninga, potem niby sprawdzasz czy $tytul jest nullem ale nie tędy droga, już lepiej tak:

$tytul = isset($_POST['tytul']) ? $_POST['tytul'] : '';

a później po prostu:

if ($tytul) { ... }

(Spectatorx) #4

Średnik przed or die sprawiał problem, dzięki za wskazanie go.

Koniec komentarza został po próbach debugowania :slight_smile:

M@ster, dzięki za cenne wskazówki. Co do eregi() to wiem, że jest deprecated jednak co ciekawe preg_match() nie zawsze działa z wyrażeniami regularnymi, aż byłem zaskoczony gdy musiałem w innym dokumencie zamienić preg_match() na eregi() by zapytanie działało.


(M@ster) #5

Bo z tego co pamiętam eregi ma inną składnie wyrażenia a niżeli obecne preg_match(). Radzę i tak się z tym zaznajomić gdyż wyrażenia regularne to potężne narzędzie i w każdym języku programowania niemal jest dostępne i ma składnię taką jak preg_match :wink:


(Drobok) #6

spróbój tak:

preg_match("/^ wyrażenie z eregi $/i")

(Spectatorx) #7

Główna różnica jest taka, że eregi() ma wyrażenia formatu posix, a preg_match() perl-owe. Jeśli dobrze wyczytałem... :wink:


(Sucat) #8

a nie sądzisz, że walidację formularza lepiej byłoby przeprowadzić po stronie klienta za pomocą JS?


(M@ster) #9

Bardzo łatwe do obejścia i z uwagi na to niebezpieczne. Można oczywiście dla wygody dodać client-side walidację, ale po stronie serwera obowiązkowo.


(Sucat) #10

owszem, nie wyraziłem się może do końca jasno. ale walidację client-side bym dodał dla odciążenia serwera i wygody użytkownika (niepotrzebne oczekiwanie na przeładowanie strony, itd... a tak to kumunikaty mamy natychmiast). Osobiście bym wypuścił dopiero zapytanie do serwera w momencie (z regułami walidującymi w PHP oczywiście również), kiedy JS nam przepuści formularz.


(Spectatorx) #11

Wystarczy, że jakiś tępy użytkownik ie nie pozwoli na wykonanie skryptu na stronie i masz po walidacji w js :wink:


(Drobok) #12

Tak, ale większość z nich tak nie zrobi. Wtedy właśnie js odciąża ci serwer :stuck_out_tongue: