Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP][HTML]Walidacja formularza
nergla
post
Post #1





Grupa: Zarejestrowani
Postów: 14
Pomógł: 0
Dołączył: 8.05.2009

Ostrzeżenie: (0%)
-----


Mam taki formularz:
  1. <?php
  2. if (count($_POST))
  3. {
  4.        $_POST['nazw'];
  5.        $_POST['imie'];
  6.        $_POST['miasto'];
  7.        $_POST['kod'];
  8.        $_POST['ul'];
  9.        $_POST['nr1'];
  10.        $_POST['nr2'];
  11.        $_POST['tel'];
  12.        $_POST['x1'];
  13.        $_POST['x2'];
  14.        $_POST['wys'];
  15.        $body='';
  16.        
  17.        
  18.  
  19.    $email = 'mail@gmail.com';
  20.    $subject = 'temat';
  21.    $message = 'Dziękujemy za wysłanie formularza';
  22.    $error = 'Wystąpił błąd podczas wysyłania formularza';
  23.    $charset = 'iso-8859-2';
  24.    
  25.    $head =
  26.        "MIME-Version: 1.0r\n" .
  27.        "Content-Type: text/plain; charset=$charsetr\n" .
  28.        "Content-Transfer-Encoding: 8bit";
  29.  
  30.    echo mail($email, $subject , $body, $head) ? $message : $error;
  31. }
  32. else
  33. {
  34. ?>
  35. <form action="?" method="post"><div id="info">Zamówienie dotyczy
  36. tylko czarnej folii o standardowej grubości 1,1mm, pozostałe rodzaje
  37. folii oraz usługi wykonywane na miejscu u klienta dostępne są na
  38. zamówienie telefoniczne.</div>
  39. <div id="subheader">Dane adresowe</div>
  40. Nazwisko: <input maxlength="60" size="18" name="nazw" /><br />
  41. Imię: <input maxlength="40" size="16" name="imie" /><br /><br />
  42. Miejscowość: <input maxlength="60" size="18" name="miasto" /><br />
  43. Kod pocztowy: <input maxlength="6" size="6" name="kod" /><br />
  44. Ulica: <input maxlength="60" size="16" name="ul" /><br />
  45. Numer domu: <input maxlength="4" size="2" name="nr1" /><br />
  46. Numer mieszkania: <input maxlength="3" size="1" name="nr2" /><br /><br />
  47. Telefon kontaktowy: <input maxlength="16" size="10" name="tel" />
  48. <div id="subheader">Wymiary folii</div>Wymiary: <input maxlength="3" size="2" name="x1" />x<input maxlength="3" size="2" name="x2" />
  49. <div id="subheader">Wysyłka<br /></div>
  50. <input name="wys" value="pobr" type="radio" />Kurier "OPEK" za pobraniem<br />
  51. <input name="wys" value="prze" type="radio" />Kurier "OPEK" przelew (przedpłata)<br />
  52. <input name="wys" value="osob" type="radio" />Odbiór osobisty
  53. <div id="info">Składając zamówienie oświadczają Państwo że zapoznali się z
  54. <a class="tex" href="regulamin.html">regulaminem</a>
  55. i akceptują jego warunki.<br /><input value="Zamów" type="submit" /> <input value="Wyczyść" type="reset" />
  56. </div></form>
  57. <?php
  58. }
  59. ?>


Chcę aby przed jego wysłaniem został on dokładnie sprawdzony pod względem poprawności tj. minimalna ilość znaków, czy są cyfry bądź litery lub inne znaki. Jeżeli formularz jest poprawnie wypełniony powinna pojawiać się stosowna informacja np. dane które podał klient i to czy potwierdza ich wysłanie bądź anuluje, jeśli natomiast są błędy powinno wyświetlić się okienko że wystąpił błąd. Chciałbym aby okienko było takie jak to przy użyciu onsubmit="alert()" aby nie kasować tego co wpisał klient.
Oczywiście zależy mi na wykożystaniu php a nie js.

Każda najmniejsza pomoc bardzo mile widziana (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)

Ten post edytował nergla 10.05.2009, 17:38:22
Go to the top of the page
+Quote Post
peter13135
post
Post #2





Grupa: Zarejestrowani
Postów: 1 447
Pomógł: 191
Dołączył: 26.03.2008

Ostrzeżenie: (0%)
-----


no skoro chcesz w php, to długość możesz sprawdzić przez strlen, poprawność maila to
  1. <?php
  2. function check_email($email)
  3.  {
  4.  if(!preg_match("/^([a-zA-Z0-9]+)([a-zA-Z0-9._-]*)@([a-zA-Z0-9_-]+)([a-zA-Z0-9._-]+)([a-zA-Z]+)$/" , $email))
  5.  return false;
  6.  return true;
  7.  }
  8. ?>


ale jak chcesz żeby było bez przeładowania strony to musisz to robić przez js
Go to the top of the page
+Quote Post
nergla
post
Post #3





Grupa: Zarejestrowani
Postów: 14
Pomógł: 0
Dołączył: 8.05.2009

Ostrzeżenie: (0%)
-----


Cytat
ale jak chcesz żeby było bez przeładowania strony to musisz to robić przez js


No to niech będzie js. Tylko czy jak ktoś ma obsługe js wyłączoną to nie sprawdzi formularza i go wyśle czy poprostu nie będzie można go wysłać?
Go to the top of the page
+Quote Post
Zyx
post
Post #4





Grupa: Zarejestrowani
Postów: 952
Pomógł: 154
Dołączył: 20.01.2007
Skąd: /dev/oracle

Ostrzeżenie: (0%)
-----


Niestety - nie wolno robić kontroli danych wyłącznie po stronie klienta, chyba że lubisz kłopoty. Wyłącznie po stronie serwera może być, tu i tu też może, ale wyłącznie po stronie klienta - nigdy.

Funkcjonalność, o jakiej piszesz, oferują rozmaite systemy obsługi/budowania formularzy, które automatycznie wykonują odpowiednie operacje dla każdego pola na podstawie określonych przez programistę reguł. Znajdziesz je w każdym poważniejszym frameworku. Oczywiście ręcznie też można coś takiego pisać, lecz ilość pracy w stosunku do efektów jest zbyt duża. Nie wiem, na jakim poziomie stoisz z PHP, by Ci coś konkretnego dokładniej polecić.

PS. Od sprawdzania poprawności adresu e-mail to jest funkcja filter_var() z flagą FILTER_VALIDATE_EMAIL:

  1. <?php
  2. if(filter_var($email, FILTER_VALIDATE_EMAIL))
  3. {
  4.  echo 'OK';
  5. }
  6. ?>
Go to the top of the page
+Quote Post
peter13135
post
Post #5





Grupa: Zarejestrowani
Postów: 1 447
Pomógł: 191
Dołączył: 26.03.2008

Ostrzeżenie: (0%)
-----


jak ktoś wyłączy js, to ci nie przefiltruje
najpierw zrób filtracje w php, potem ewentualnie w js

a ja bym polecał to zrobić tylko w php, z tym że aby nie tracić wpisanych danych, zrobić formularz w ten sposób
  1. <?php
  2. Imię: <input maxlength=\"40\" size=\"16\" name=\"imie\" value=\"$_POST['imie']\" />";
  3. ?>
Go to the top of the page
+Quote Post
nergla
post
Post #6





Grupa: Zarejestrowani
Postów: 14
Pomógł: 0
Dołączył: 8.05.2009

Ostrzeżenie: (0%)
-----


Cytat
Niestety - nie wolno robić kontroli danych wyłącznie po stronie klienta, chyba że lubisz kłopoty. Wyłącznie po stronie serwera może być, tu i tu też może, ale wyłącznie po stronie klienta - nigdy.

Właśnie dlatego zależy mi na php a nie js.
Cytat
Funkcjonalność, o jakiej piszesz, oferują rozmaite systemy obsługi/budowania formularzy, które automatycznie wykonują odpowiednie operacje dla każdego pola na podstawie określonych przez programistę reguł. Znajdziesz je w każdym poważniejszym frameworku. Oczywiście ręcznie też można coś takiego pisać, lecz ilość pracy w stosunku do efektów jest zbyt duża. Nie wiem, na jakim poziomie stoisz z PHP, by Ci coś konkretnego dokładniej polecić.

Hmm... jak by to ująść, z php dopiero zaczynam tak samo jak z js ale duża znajomość c++ znacznie ułatwia mi sprawę.
Cytat
PS. Od sprawdzania poprawności adresu e-mail to jest funkcja filter_var() z flagą FILTER_VALIDATE_EMAIL:

  1. <?php
  2. if(filter_var($email, FILTER_VALIDATE_EMAIL))
  3. {
  4.  echo 'OK';
  5. }
  6. ?>

W tej chwili nie przyda się gdyż klient nie potrzebuje posiadać maila do wysłania formularza, ale napewno przyda się przy kolejnych stronach (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post
kantek
post
Post #7





Grupa: Zarejestrowani
Postów: 73
Pomógł: 15
Dołączył: 2.04.2009
Skąd: koszalin

Ostrzeżenie: (0%)
-----


Prosze.

Daj sobie jedna wartość z form wysylek checked - coś będzie domyślne.

Przyklad okrojony (wywaliłem kilka pol aby nie było za długie - poradzisz sobie) czytaj komentarze

  1. <?php
  2. function sprawdz($tablica)
  3. {
  4.    foreach($tablica as $var){
  5.        //czy wypelniono wszystkie  pola
  6.        if(trim($var)==''){
  7.            echo 'Wszystkie pola musza byc wypelnione';
  8.            return false;
  9.        }
  10.    }
  11.    
  12.    //czy wymiary sa liczbami - jak ujemne to zamieniamy na dodatnie
  13.    $a = abs((int)$tablica['x1']);
  14.    $b = abs((int)$tablica['x2']);
  15.    
  16.    if($a * $b <= 0){
  17.        echo 'Wymiary musza byc liczbami calkowitymi, niezerowymi';
  18.        return false;
  19.    }    
  20.    
  21.    return true;
  22. }
  23.  
  24. if(isset($_POST['zamow'])){    
  25.    if(sprawdz($_POST)){
  26.        echo 'ok - wyslano i tu wysylasz sobie';
  27.    }
  28.    else{
  29.        //wypisz formularz z danym podanymi przez usera czyli np. gdzie
  30.        // name="nazw" wstawiasz value="$_POST['nazw']"; itd
  31.    }
  32. }
  33. ?>
  34. <form action="index.php" method="post"><div id="info">
  35.  
  36. Nazwisko: <input maxlength="60" size="18" name="nazw" /><br />
  37.  
  38. Wymiary: <input maxlength="3" size="2" name="x1" type="text" /> x <input maxlength="3" size="2" name="x2" type="text" /><br />
  39.  
  40.  
  41. <input name="wys" value="pobr" type="radio" checked />Kurier "OPEK" za pobraniem<br />
  42. <input name="wys" value="prze" type="radio" />Kurier "OPEK" przelew (przedpłata)<br />
  43. <input name="wys" value="osob" type="radio" />Odbiór osobisty<br />
  44.  
  45. <div id="info">Składając zamówienie oświadczają Państwo że zapoznali się z
  46. <a class="tex" href="regulamin.html" target="_blank">regulaminem</a>
  47. i akceptują jego warunki.<br /><br />
  48.  
  49. <input value="Zamów" type="submit" name="zamow" /> <input value="Wyczyść" type="reset" />
  50. </div></form>


a żeby sobie posprawdzać dlugości to strlen

Pozdrawiam

Ten post edytował kantek 10.05.2009, 18:48:16
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 22.08.2025 - 19:22