Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: problem z formularzem
Forum PHP.pl > Forum > PHP
stom123
Witam mam problem z formularzem. Napisałam formularz i wszystko wydaje mi się że powinno działać jednak nie przesyła wiadomości na email.
Tzn. sprawdziłam na jednym serwerze i przesyła email a na drugim już nie.
Czy problem istnieje w ustawieniach serwera czy gdzieś może mam błąd w kodzie.
Jak skrypt jest dobry to co trzeba zmienić w ustawieniach serwera aby przesyłał email?

Jestem nowym użytkownikiem i dopiero zaczynam z php. Czy znacie może jakąś lepszą metodę na przesłanie formularza której mogłabym się nauczyć?

  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  2. <html xmlns="http://www.w3.org/1999/xhtml">
  3. <head>
  4. <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  5. <title>Untitled Document</title>
  6. </head>
  7. <body>
  8. <?php
  9. if (!empty($_POST['email'])) {
  10.  
  11. $message ="Zapytanie:
  12. \nImie:$_POST[imie]
  13. \nNazwisko:$_POST[nazwisko]
  14. \nEmail:$_POST[email]
  15. \nTelefon:$_POST[telefon]
  16. \nTresc:\n$_POST[kontakt]";
  17.  
  18. $header = "From: $_POST[imie]";
  19. @mail("moj@email.com","Wiadomosc ze kwiaciarnia zgorzelec","$message","$header")
  20. or die('Nie udało się wysłać wiadomości');
  21. echo "<div align=\"center\"><strong>Wiadomość została wysłana poprawnie!</strong></div>";
  22. }
  23. else echo "<span style=\"color: #FF0000; text-align: center;\">Wypełnij wszystkie pola formularza!</span>";
  24. ?>
  25. </body>
  26. </html>


  1. <form action="kontakt.php" method="post" class="niceform">
  2. <legend>Formularz kontaktowy:</legend>
  3. <dl>
  4. <dt><label for="kontakt">Wiadomość:</label></dt>
  5. <dd><textarea name="kontakt" id="kontakt" rows="5" cols="40"></textarea></dd>
  6. </dl>
  7. <dl>
  8. <dt><label for="email">Imię</label></dt>
  9. <dd><input type="text" name="imie" id="imie" size="32" maxlength="128" /></dd>
  10. </dl>
  11. <dl>
  12. <dt><label for="nazwisko">Nazwisko</label></dt>
  13. <dd><input type="text" name="nazwisko" id="nazwisko" size="32" maxlength="128" /></dd>
  14. </dl>
  15. <dl>
  16. <dt><label for="email">Adres Email</label></dt>
  17. <dd><input type="text" name="email" id="email" size="32" maxlength="128" /></dd>
  18. </dl>
  19. <dl>
  20. <dt><label for="telefon">Telefon</label></dt>
  21. <dd><input type="text" name="telefon" id="telefon" size="32" maxlength="128" /></dd>
  22. </dl>
  23. <fieldset class="action">
  24. <dl>
  25. <dt></dt>
  26. <dd><input type="submit" name="submit" id="submit" value="Wyślij" class="button" /></dd>
  27. </dl>
  28. </form>



Kostek.88
Wydaje mi sie, ze w obecnych czasach na wielu serwerach zablokowana jest funkcja mail i na to nie ma rady, mozesz ew. prosic providera o wlaczenie jej specjalnie dla Ciebie, tj. Twojego konta. Ja polecam, bys zapoznala sie z klasa phpMailer. Uzylem jej kilka razy i nigdy mnie nie zawiodla. Znajdz przyklad, widzialem kiedys fajny, na polskiej stronie. Latwe w implementacji, ja nie mialem klopotow smile.gif

Co do kodu:

1) jesli wstawiasz znak @ przed mail, a nastepnie dajesz or die('tekst bledu'), to jestes pewna, ze w razie niepowodzenia ten blad sie wyswietli? Ja nie jestem pewien, a @ sluzy do maskowania wszelkich ostrzezen. Oczywiscie nie mowie, ze to jest blad.

2) Niepotrzebnie w HTML definiujesz wiele tagow "definition list" (DL), wystarczy cos takiego:

  1. <dl>
  2.  
  3. <dt>label</dt>
  4. <dd>input</dd>
  5.  
  6. <dt>label</dt>
  7. <dd>input</dd>
  8.  
  9. <dt>label</dt>
  10. <dd>input</dd>
  11.  
  12. <dt>label</dt>
  13. <dd>input</dd>
  14.  
  15. <dt>label</dt>
  16. <dd>input</dd>
  17. </dl>


Wiecej info na stronach typu w3schools i kurshml.edu.pl

EDIT: Aha, jeszcze jedno:

3) Co do fragmentu:
  1. if (!empty($_POST['email']))


Dobrze, sprawdzasz czy tablica $_POST['email'] nie jest pusta. Ale co w przypadku, gdy z jakichs przyczyn nie zostanie w ogole zadeklarowana? Widze tutaj 2 rozwiazania

a) dodatkowy test, czy tablica istnieje

  1. if( isset($_POST['email'] ) {
  2. if (!empty($_POST['email']))
  3.  
  4. // itd.


b ) uzycie count

  1. if (count($_POST) > 0) {
  2. // itd.
stom123
Ok dzięki za podpowiedź

Okazało się że trzeba dodać w funkcji mail jeszcze jedną zmienną:



  1. mail('moj email' ,'Wiadomosc', $message, 'From: email')

Kostek.88
Jaka? W sumie masz ten sam kod, co powyzej, ew. cudzyslowy przeszkadzaly...
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.