funkcja sprawdzająca znaki w formularzu

Tutaj dyskutujemy o PHP oraz zgłaszamy i rozwiązujemy problemy dotyczące tego języka.
tajger
Zaawansowany
Zaawansowany
Posty: 223
Dołączył(a): niedziela, 11 marca 2012, 03:08
Lokalizacja: Poland
Contact:

funkcja sprawdzająca znaki w formularzu

Post przez tajger »

Opłacało by się napisać własną funkcję, która by sprawdzała wpisaną zawartość w formularzu? Mamy np. 2 inputy, jeden LOGIN i drugi PASSWORD, i chciałbym aby w jednym i w drugim można było wpisać tylko litery i cyfry. Czy koniecznie trzeba tutaj już użyć JSa? A jak Pan to stosuje u siebie na videokurs.pl?
Zawsze walcz do końca i nigdy się nie poddawaj!
Morfidon
Administrator
Administrator
Posty: 1332
Dołączył(a): wtorek, 5 sierpnia 2008, 21:48
Contact:

Re: funkcja sprawdzająca znaki w formularzu

Post przez Morfidon »

Najlepiej napisać pattern przy pomocy regexp w javascript (od strony przeglądarki) oraz oczywiście potem od strony php w razie gdyby dane były znaczące.

Można skorzystać z :
http://docs.jquery.com/Plugins/Validation
tajger
Zaawansowany
Zaawansowany
Posty: 223
Dołączył(a): niedziela, 11 marca 2012, 03:08
Lokalizacja: Poland
Contact:

Re: funkcja sprawdzająca znaki w formularzu

Post przez tajger »

Jak na razie omijam JSa bo nie wykupiłem kursu, i chcę to zrobić za pomocą czystego PHP. Generalnie każdy input jest sprawdzany po kolei, coś w tym stylu, i oczywiście na końcu ich są ELSY, lub ELSE IFY które sprawdzają kolejne warunki w innym wypadku, dzięki czemu w wypełnianiu formularzu mam komunikaty pod przyciskiem REJESTRACJA:

Code: Zaznacz cały

if(((strlen($_POST['name']) > 2) && strlen($_POST['surname']) > 2))
                                     {
                                        if($_POST['email'] == $_POST['repeat_email'] && strlen($_POST['email']) > 8)
                                        {
                                            if($_POST['reg_password'] == $_POST['repeat_reg_password'] && strlen($_POST['reg_password']) > 5)
if(strlen($_POST['reg_login']) > 2)

Najgłębiej jest strlen($_POST['reg_login']) > 2 i tam właśnie są zapytania do bazy itd. itp. Może to nie jest najlepsza metoda jaką robię bo JSem pewnie odciążyłbym serwer, ale kilkanaście zapytań dla serwera to chyba wielkiej różnicy nie zrobi.

Tak jak widać sprawdzam długości znaków, żeby były poprawne. Mam jeden problemik, chciałbym aby nie można było wpisać innych znaków niż cyfry i litery do wszystkich inputów oprócz inputa['email] gdzie wchodzi @ i KROPKA [.] . Używać funkcji ereg, eregi jest zdeprecjonowane i nie wiem czy są jakieś inne funkcje w php, które pomogły mi to zrobić. Czy napisać jakąś wielgachną funkcję z tablicą możliwych znaków, które na wejściu by sprawdzała podany ciąg z POSTA?
Zawsze walcz do końca i nigdy się nie poddawaj!
Morfidon
Administrator
Administrator
Posty: 1332
Dołączył(a): wtorek, 5 sierpnia 2008, 21:48
Contact:

Re: funkcja sprawdzająca znaki w formularzu

Post przez Morfidon »

z RegExp w php korzysta funkcja:
http://php.net/manual/en/function.preg-match.php
tajger
Zaawansowany
Zaawansowany
Posty: 223
Dołączył(a): niedziela, 11 marca 2012, 03:08
Lokalizacja: Poland
Contact:

Re: funkcja sprawdzająca znaki w formularzu

Post przez tajger »

Dzięki wielkie za tę funkcję. Bardzo się przydała.

Mam pytanie. Mam np. taki kod:

index.php

Code: Zaznacz cały

$a = 5;
require('kontakt.php');
kontakt.php

Code: Zaznacz cały

if ($a == 5)
    echo "Jest równe 5";
Użycie zmienne $a znajduję się także w kontakt.php. W pliku tym będzie ostrzeżenie, że zmienna $a powinna być zainicjalizowana, z tym że wszystko jest ok bo ładuje cały kod do index.php. WIem, że wszystko będzie fajnie działać, ale czy jednak nie powinno się tak robić? Czasami jest za dużo kodu już np. na głównej stronie dlatego dorzucamy pliki. A może są sposoby, żeby pokazać plikowi kontakt.php że istnieje już taka zmienna w innym pliku? A co z klasami? Z klasami i obiektami to chyba nie byłoby takich błędów w kodzie, bo je wszędzie można używać i do nich się odwołowywać.
Zawsze walcz do końca i nigdy się nie poddawaj!
Morfidon
Administrator
Administrator
Posty: 1332
Dołączył(a): wtorek, 5 sierpnia 2008, 21:48
Contact:

Re: funkcja sprawdzająca znaki w formularzu

Post przez Morfidon »

Jak widzisz powoli dochodzisz do stopnia zaawansowania, gdzie zauważasz sens istnienia klas ;) I dobrze to znaczy, że robisz postępy. Zacznij pisać obiektowo :)
tajger
Zaawansowany
Zaawansowany
Posty: 223
Dołączył(a): niedziela, 11 marca 2012, 03:08
Lokalizacja: Poland
Contact:

Re: funkcja sprawdzająca znaki w formularzu

Post przez tajger »

Szczerze to utknąłem na klasach bo miałem problem w ich zrozumieniu. Jak na razie opanowałem programowanie strukturalne w takim stopniu, że potrafie poprawiać po sobie błędy od pewnego czasu główkując nawet nawet kilka godzin, ale teraz to jest coraz szybciej, a także potrafię wymyślać, znaczy się nauczyłem się wymyślać nowe sposoby np. na obejście problemu lub zrealizowanie jakiegoś celu w różnorakie sposoby. Np. stworzyłem sam aktywację konta, gdzie wysyłany jest link na mail i po jego kliknieciu aktywuje sie konto, dodatkowo dodałem np. zabezpieczenia wygaśnięcia linku, lub np. źle podanego linku, jest tego masa. A najśmieszniejsze jest to, że nie wiedziałem, że w podobny sposób się robi aktywację konta. Potem sobie sprawdziłem na Internecie, że tak ludzie robią. Troszkę główkowałem nad tym jak sprawdzić coś na stronie co zostało kliknięte w emailu. Odrazu pomyślałem o zmiennej predefiniowanej GET oraz przekazaiu jakiegos argumentu w emailu np. rand(), który był potem sprawdzany na stronie w zapytaniu. Oczywiście takie pole musiało istniec w tabeli np. code. Następnie wystarczyło wywołać zapytanie UPDATE do kolumny activation i ustawić z 0 na 1, i z takim warunkiem użytkownik się może logować.

Wszystko dzięki Panu. O wiele lepiej teraz rozumiem, myślę, poprawiam błędy, zastanawiam się jak coś obejść aby było lepiej itd. Na razie nad optymalizacją nie myślę, ale nad poprawnośćią przede wszystkim i pełną zgodnością. Małymi kroczkami + praktykując i wymyślając to nowe sposoby można się nauczyć wiele, ale także rozwinąć swoje pomysły. :d

Na razie klasy chwilowo odstawiam na boczek. Teraz mi sie przypomniała taka sytuacja jaką mam w kodzie. Otóż, chciałbym sprawdzić wynik pewnej zmiennej jeszcze przed zadeklarowaniej jej. Jest mi to potrzebne akurat przy czyszczeniu formularzy jeśli został ktoś już zarejestrowany.

Code: Zaznacz cały

//nie deklarujemy tutaj zmiennej $a tylko potem, a chcemy sprawdzić warunek
if($a == 5)
   echo "Jest równe 5";

$a = 5;
To jest właśnie ten ból jak kod wykonuje się od góry do dołu. Taki przypadek mi się zdarzył dzisiaj i nie mam teraz pojęcia jak obejść coś takiego strukturalnie, ale pewnie coś wymyślę. Klasy też tak potrafią się odwoływać i będą widzieć zmienną wcześniej jeszcze przed deklaracją? Bo nie jestem pewien.
Zawsze walcz do końca i nigdy się nie poddawaj!
Morfidon
Administrator
Administrator
Posty: 1332
Dołączył(a): wtorek, 5 sierpnia 2008, 21:48
Contact:

Re: funkcja sprawdzająca znaki w formularzu

Post przez Morfidon »

No to fajnie, że się rozwijasz :)

Przecież zmienna przed zadeklarowaniem nie posiada żadnej wartości więc nie ma sensu sprawdzania jej wartości. Coś może pomieszałeś o co Ci dokładnie chodzi?
tajger
Zaawansowany
Zaawansowany
Posty: 223
Dołączył(a): niedziela, 11 marca 2012, 03:08
Lokalizacja: Poland
Contact:

Re: funkcja sprawdzająca znaki w formularzu

Post przez tajger »

Chodzi o to, że mam pewne zapytanie podczas tworzenia użytkownika i chciałbym sprawdzić wartość tego zapytania jeszcze przed jego zadeklarowaniem. WIem, że jest to niemożliwe z poziomu strukutralnego, ale czy obiektowo to przejdzie? Bo mam taką sytuację, że podczas stworzenie użytkownika chciałbym wyczyszczyć formularze, którą się znajdują powyżej tego kodu, a jedyny sposób jaki by działał to właśnie warunek rezultatu. Noi właśnie chodzi mi teraz o programowanie obiektowe, czy będzie mogło wstanie odwołać się jeszcze przed deklaracją, bo jak wiadomo można się wszędzie się odwoływać obiektowo, a czy jeszcze przed zadeklarowaniem nam pozwoli. Tego właśnie nie wiem.

Code: Zaznacz cały

 if($rezultat  == 1)

----- pełno kodu ------


$zapytanie = "INSERT INTO jakaś tabela (jakieś koloumny) VALUES ('jakieś wartości')";
$rezultat = mysql_query($zapytanie) or die(mysql_error());
Zawsze walcz do końca i nigdy się nie poddawaj!
Morfidon
Administrator
Administrator
Posty: 1332
Dołączył(a): wtorek, 5 sierpnia 2008, 21:48
Contact:

Re: funkcja sprawdzająca znaki w formularzu

Post przez Morfidon »

Weź najpierw poznaj JavaScript, a nie cuduj ;)
Post Reply