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




No... nareszcie coś od siebie (IMG:style_emoticons/default/biggrin.gif)
Motasz za bardzo z warunkami. Najlepiej podziel sobie to ładnie na część "logiki" i część "prezentacji" bez mieszania ich ze sobą, tak jak to zrobiłem w jednym ze swoich postów tutaj.
Przemyśl na przykład coś takiego
  1. <?php $form['temat'] = '';
  2. $form['message'] = '';
  3. $form['imie'] = '';
  4. $form['email'] = '';
  5. $error = $form;
  6. $error['success'] = 2;
  7. if( isset($_POST) ) {
  8. if( empty( $_POST['temat'] ) ) {
  9. $error['temat'] = 'Brak tematu';
  10. $error['success'] = 0;
  11. }
  12. if( empty( $_POST['message'] ) ) {
  13. $error['message'] = 'Brak wiadomości';
  14. $error['success'] = 0;
  15. }
  16. if( empty( $_POST['imie'] ) ) {
  17. $error['imie'] = 'Brak imienia';
  18. $error['success'] = 0;
  19. }
  20. if( empty( $_POST['email'] ) ) {
  21. $error['email'] = 'Brak emaila';
  22. $error['success'] = 0;
  23. } elseif( prawidlowy_mail( $_POST['email'] ) ) {
  24. $error['email'] = 'Nieprawidłowy email';
  25. $error['success'] = 0;
  26. }
  27. if( $error['success'] == 1 ) {
  28. tutaj sobie wyślij maila
  29. }
  30. $form = $_POST;
  31. }
  32.  
  33. if( $error['success'] == 0 ) {
  34. tutaj możesz wyświetlić w pętli lub jakkolwiek inaczej błędy z tablicy $errors
  35. } elseif( $error['success'] == 1 ) {
  36. tutaj info o prawidłowym przebiegu
  37. }
  38. ?>
  39. <form id="sendmail" action="contact.php" method="POST" >
  40.  
  41. <p id="cont">Wszelkie uwagi, problemy i opinie na temat aaa.pl są mile widziane</p>
  42. <p id="m1">Temat: <input id="m2" name="temat" type="text" size="45" value="<?php echo $form['temat'] ?>" maxlength="30" /></p>
  43. <p id="m1">Imię i Nazwisko: <input id="m2" name="imie" type="text" value="<?php echo $form['imie'] ?>" size="45" maxlength="30" /></p>
  44. <p id="m1">E-mail: <input id="m2" name="email" type="text" value="<?php echo $form['email'] ?>" /></p>
  45. <p id="m1"><span class="m11">Wiadomość:</span> <textarea id="m3" name="message" type="textarea" cols="60" rows="5"><?php echo $form['temat'] ?>
  46. </textarea></p>
  47. <input id="send" name="submit" type="submit" />
  48. </form>

Tu jest maksymalnie chyba rozdzielone obie warstwy o jakich wspominałem, ale to tylko szkic, bo można to zrobić inaczej i powinno to być poprawione, gdyż walidacja jest w szczątkowej wersji i brak sprawdzania danych przesłanych postem by uniknąć XSS, SQL injection i błędów wynikających ze znaków specjalnych. Ale ogólnie od tego do poprawnego kodu działającego już tylko kroczki małe. Jeśli teraz już nie będziesz sam mógł dalej pchnąć to nie wiem co jeszcze może być trudnego. Każdy tu chyba piszący by to przerobił w chwilkę na pełnoprawny kod.
Zauważ, że formularz wyświetlam tylko raz, odpowiednio uzupełniwszy danymi. I tak właśnie szablon tego co chcesz zrobić powinien wyglądać. A tak całość formularza uzależniasz od warunków, które niekoniecznie muszą być prawidłowe. Przerobienie tego na MVC jakiego używa wiele stron i frameworków jest chwilką.

Dziala to tak... Jeśli jest to pierwsze wejście - wyświetla wartości puste, jakie ustawiłem na samym początku. Jeśli ktoś już coś wypełnił to sprawdza czy są błędy i odpowiednio ustawia komunikaty błędów dla konkretnych pól oraz zmienna oznaczająca sukces ustawia się na sukces lub porażka w zależności od tego czy błędy były. Jeśli po wstępnej walidacji był sukces to wysyłamy maila.
Do zmiennej z polami formularza, w razie gdy ktoś dał submit,wpisujemy dane z POST, niezależnie czy wynik był prawidłowy czy nie, bo inaczej te dane "zgubimy". Jest to ważne w razie błędów, bo dzięki temu user nie będzie musiał wypełniać pól od nowa.

No i na koniec wyświetlamy informację w zależności od flagi sukcesu 0 - błędy, 1 - mail wysłano. Do tego z tabeli errors możemy wypisać dokładnie jakie błędy były. No i wyświetlamy formularz uzupełniając go danymi z tablicy form. Czasem są one puste, ale jeśli było coś w post to nimi się formularz sam uzupełni. Prościej już chyba nie da się wytłumaczyć... Prostszy już byłby tylko gotowiec, a taki miły nie jestem (IMG:style_emoticons/default/winksmiley.jpg)
Go to the top of the page
+Quote Post

Posty w temacie


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: 3.10.2025 - 10:59