Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP]E-mail Formularz (Prosze o pomoc)
^(-.-)^
post
Post #1





Grupa: Zarejestrowani
Postów: 21
Pomógł: 0
Dołączył: 4.09.2008

Ostrzeżenie: (20%)
X----


Witajcie moi drodzy,

A wiec jestem poczatkujacym koderem jezeli chodzi o PHP i teraz mam male zamieszanie. A mianowicie chce zrobic formularz email do mojej strony pod nazwa contact.php. Napisalem 1/5 kodu php ale pozniej nie za bardzo wiem za co sie wziac pierwszy. Moze ktos mi pomoze. To jest moj kod:

  1. <?php
  2. include('include/header.php');
  3. ?>
  4.  
  5. <span class="content_bg"></span>
  6. <span class="content_bg2"></span>
  7. <span class="content_bg3"></span>
  8.  
  9. <div id="content2">
  10. <form id="sendmail" action="contact.php" method="POST" >
  11.  
  12.  
  13. <input type="hidden" name="ip" value="<?php echo $ipi ?>" />
  14. <input type="hidden" name="httpref" value="<?php echo $httprefi ?>" />
  15. <input type="hidden" name="httpagent" value="<?php echo $httpagenti ?>" />
  16.  
  17. <p id="contact"><img src="img/kontakt.jpg" alt="kontakt_obrazek" /></p>
  18. <p id="cont">Wszelkie uwagi, problemy i opinie na temat.... są mile widziane</p>
  19. <p id="m1">Temat: <input id="m2" name="temat" type="text" size="45" maxlength="30" /></p>
  20. <p id="m1">Imię i Nazwisko: <input id="m2" name="imie" type="text" size="45" maxlength="30" /></p>
  21. <p id="m1">E-mail: <input id="m2" name="mail" type="text" /></p>
  22. <p id="m1"><span class="m11">Wiadomość:</span> <textarea id="m3" name="message" type="textarea" cols="60" rows="5"></textarea></p>
  23. <input id="send" name="submit" type="submit" value="" />
  24.  
  25. <?php
  26. $ip = $_POST['ip'];
  27. $httpref = $_POST['httpref'];
  28. $httpagent = $_POST['httpagent'];
  29. $temat=$_POST['temat'];
  30. $imie=$_POST['imie'];
  31. $mail=$_POST['mail'];
  32. $message=$_POST['message'];
  33. $submit=$_POST['submit'];
  34. ?>
  35.  
  36. </form>
  37. </div>
  38.  
  39. <?php
  40. include('include/footer.php');
  41. ?>


Co ja chce robic?
1. Chce robic formularz zeby uzytkownicy mojej strony moga wysylac do mnie email. jako action chce zeby byla ta sama strona co zakladka czyli contact.php.
2. Chce zeby kazde komunikaty dotyczace wysylaniem email oraz bledy sa wyswietlone nad formularzem (Juz zrobilem CSS do tego).
3. Chce zeby wszystkie pole byly uwzglednione czyli jezeli 1 z tych pol bedzie pusty to bedzie komunikat jak "Wszystkie pole sa obowiazkowe"
4. Chce zabiezpieczyc sie przed spamerami (ustawic tak zeby usery mogli napisac email w odstepie 30 mn np) - przyda sie tez poprawnosc emaila podane przez usera.

To wszystko czego bym sobie zyczyl. Mam nadzieje ze duzo nie prosilem. I bede bardzo wdzieczny jezeli ktos mi w tym pomoze. A mianowicie bym sie nauczyc i czegos wiecej sie dowiedzial bo ucze sie php wlasnie i potrzebuje mala pomoc.

Pozdrawiam serdecznie
Johny
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
thek
post
Post #2





Grupa: Moderatorzy
Postów: 4 362
Pomógł: 714
Dołączył: 12.02.2009
Skąd: Jak się położę tak leżę :D




Odpowiedź na chyba wszystkie:
ad 1)
Układ kodu musiałby być taki, że sprawdzasz najpierw czy do pliku jest przesłana zmienna typu $_POST i jeśli tak to ją przetwarzasz. Dopiero potem następuje warstwa prezentacji. Innymi słowy mniej więcej tak:
  1. <?php
  2. if($_POST) {
  3. "odchwaszczamy_dane;"
  4. walidujemy_dane;
  5. robimy_co_chcemy;
  6. }
  7. ?>
  8. <html>
  9. <form action="">
  10. </form>
  11. </html>


ad 2) i ad 3) (bo się wiążą ze sobą)
Jesli chcesz wyświetlać errory to wystarczy ustawić sobie podczas walidacji zmienne odpowiedzialne za konkretne pola. Jeśli nie przejdą one walidacji to przypisz do nich komunikat błędu a w warstwie prezentacji sprawdź czy aby dla pola wartość jego zmiennej jest rózna od wartości pustej czy null
  1. <?php
  2. $form['field'] = ''
  3. $error['success'] = 1;
  4. if( $_POST ) {
  5. "odchwaszczamy_dane;"
  6. if( empty($_POST['field']) ) {
  7. $error['success'] = 0;
  8. $error['field'] .= 'Pole jest puste';
  9. $form['field'] = $_POST['field'];
  10. }
  11. if( $error['success'] == 1 ) {
  12. przejdź_na_stronę_z_informacja_o_wysłaniu_maila;
  13. }
  14. robimy_co_chcemy;
  15. }
  16. ?>
  17. <html>
  18. <form action="">
  19. <?php if( $error['field'] ) echo $error['field']; ?>
  20. <input type="text" name="field" value="<?php echo $form['field'] ?>" />
  21. </form>
  22. </html>

Ten kod robi masę dobrej roboty bo załatwia kilka rzeczy jednocześnie. $form przechowuje dane formularza. Jeśli wchodzimy na formularz po raz pierwszy to korzysta z domyślnych wartości jakie wprowadzamy na początku (mogą być to wartości puste), ale jesli się kod wysypie błędem, to do formularza przywracamy z powrotem co napisał użytkownik, czyli nie musi wpisywać tego od nowa i wystarczy, że poprawi. Kod sprawdzający istnienie błędów możesz wrzucić gdzie chcesz, ale najlepiej tuż nad polem jakiego tyczy, bo dzięki temu user wie GDZIE ma błąd. Możesz oprócz sprawdzania czy jest puste pole ustawić także inne warunki. Ważne by gdzieś sprawdziło czy wszystkie pola były zwalidowane i zmienna $error['success'] miała wartość zgodną z pełnym sukcesem lub porażką, bo od niej zależeć będzie czy wyjdziemy ze strony czy też wyświetlimy ja ponownie. To jakie warunki sobie w walidacji ustawisz jest obojętne. Możesz tam sprawdzac czy pole jest puste czyjest obowiązkowe, czy ma określony format danych itp.

ad 4) Możesz dla usera w bazie dać kolumnę z czasem ostatniego maila i podczas walidacji sprawdzać różnicę między nim oraz aktualnym. Od Ciebie zależy czy będziesz wtedy resetował w bazie znowu ten czas do aktualnego, czy poczekasz aż minie owo 30 minut. Pierwsze rozwiązanie będzie lepsze jeśli ktoś ostro próbuje spamować mailami, bo każda nieudana próba spowoduje zresetowanie licznika znów do 30 minut i przez to zablokuje spamera na dłużej (IMG:style_emoticons/default/winksmiley.jpg) A możesz też ustawić kolejne pole, które będzie inkrementować licznik takich prób i jeśli wyniesie on iles tam, to mu wyłączysz wysyłanie na ileś godzin lub dni.
Jeśli chodzi o poprawność emaila to najlepsze są wyrażenia regularne. Format maila to mniej więcej:
- user: znaki alfanumeryczne oraz kropka, podkreślenie,myślnik,
- małpa: @
- strona: podobnie jak user,
- kodowe oznaczenie kraju: 2 lub 3 litery.
napisa wyrażenie mając te dane nie jest trudno, a frameworki nawet to ułatwiają bo często mają do tego gotową funkcję w stylu valid_email() lub podobna w nazwie (IMG:style_emoticons/default/smile.gif)

Od razu zaznaczam, że sniffer32 podpowiada dobrze, przy czym można stosować kilka submitów o różnym name w tym samym formularzu i wtedy podczas walidacji posta sprawdzamy który z nich był wywołany w sposób:
  1. if( array_key_exists( 'nazwa_submita', $_POST ) ) {
  2. tu robimy instrukcje dla danego submita;
  3. }

Nie trzeba budować kilku formularzy by to zadziałało. Kto zaś dobrze pomyśli, to zrobi w sprytny sposób zamiast if, switch i osiągnie ciekawe efekty podczas walidacji kodu bez jego zbytniego rozrostu kodu, gdyż nie będzie dublował instrukcji wykonywanych w przypadku różnych submitów. Wystarczy, że te wykonywane we wszystkich przypadkach pójdą na sam dół i pominie się instrukcje break, które większość osób z rozpędu wstawia (IMG:style_emoticons/default/winksmiley.jpg)
Go to the top of the page
+Quote Post

Posty w temacie


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

 



RSS Aktualny czas: 7.10.2025 - 07:29