Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Formularz kontaktowy. Problem z wysyłaniem przy zmiennej z pliku
Forum PHP.pl > Forum > Przedszkole
zearid
Witam.
Jest skrypt służący do wysyłania wiadomości w PHP z wykorzystaniem AJAX.

W pliku konfiguracyjnym (plik zawierał definicję oraz jej wartość - ręcznie wpisywany adres e-mail, został zastąpiony owy plikiem) jest taki kod.
  1. <?php
  2. // To
  3. $file = 'email.txt';
  4. $handler = fopen($file, 'r');
  5. $adres = fread($handler, filesize( 'email.txt'));
  6. fclose($handler);
  7. define("WEBMASTER_EMAIL", "$adres");
  8. ?>




Plik wczytywany zawiera jedynie adres e-mail i nic więcej.

Plik odpowiedzialny za przesyłanie wiadomości dołącza do siebie plik konfiguracji przez include.
W miejscu użycia definiowanego WEBMASTER_EMAIL wygląda tak:
  1. $mail = mail(WEBMASTER_EMAIL, $subject, $message,
  2. "From: ".$name." <".$email.">\r\n"
  3. ."Reply-To: ".$email."\r\n"
  4. ."X-Mailer: PHP/" . phpversion());




Wartość z pliku jest odczytywana poprawnie i trafia do głównego pliku. Sprawdzane za pomocą echo.
Problem jest taki:
Jeżeli WEBMASTER_EMAIL będzie posiadać wartość wpisaną ręcznie (adres) to wiadomość zostanie wysłana poprawnie.
Jeżeli WEBMASTER_EMAIL będzie miał wartość odczytywaną z pliku wiadomość nie zostanie wysłana ale serwer nie zwróci żadnego błędu (ani błędu, ani potwierdzenia wysłania wiadomości).
Sprawdzałem wartość zmiennej wpisanej ręcznie i z pliku i obie wyświetlają się poprawnie (w pliku nie ma niepotrzebnych pustych znaków, enterów przed czy po wartości tip. czysty ciąg znaków zawierający e-mail).

Pytanie brzmi - co może być przyczyną i jak można to naprawić lub jakakolwiek wskazówka pomagająca ten problem rozwiązać.
Pozdrawiam

PS. Dodam tylko iż bardzo rozbudowanej wiedzy o PHP nie posiadam. Wykorzystuję je tylko chwilami do niektórych zadań.
pifarek
Sprawdź czy w email.txt nie masz żadnych znaków specjalnych (spacji, tabulacji...)

Po za tym odczytywanie tego pliku tekstowego i podstawienie do stałej, możesz trochę skrócić. Np. tak:
  1. <?php
  2. define("WEBMASTER_EMAIL", file_get_contents('email.txt'));
  3. ?>


Możesz też włączyć raportowanie wszystkich błędów i ostrzeżeń dla php, może jednak zwraca jakiś komunikat.
zearid
W pliku jest tylko ciąg znaków zawierający email. Zero pustych itp. Kodowanie UTF-8 bez BOM
Na serwerze offline nie wypluwa błędów. Mam raportowanie włączone, lecz nie wysyła.
  1. Warning: mail() [<a href='function.mail'>function.mail</a>]: Failed to connect to mailserver at "localhost" port 25,
  2. verify your "SMTP" and "smtp_port" setting in php.ini or use ini_set() in SCIEZKA PLIKU on line 57

Jedyny kompunikat dotyczy funkcji mail.
Na online nie mam jak włączyć lub wyłączyć funkcji za bardzo. 1&1 ma bardzo ogranoczony PA.

Z uproszczenim też próbowałem (od tego zaczynałem) i nic nie daje.
Nie rozumiem po prostu gdzie leży problem.
Wyświetla wartość zmiennej poprawnie (sprawdzane echem) więc i powinno poprawnie wysyłać.
Problem polega na braku jakiejkolwiek akcji na serwerze.
Notyfikacji włączyć nie mam jak, ale na domowym nie mam żadnych informacji innych niż powyższa.

PS. Jedyne co mogę zmienić w ustawieniach PHP to PHP5 na PHP dev. Nie przynosi widocznych efektów. nie pojawiają się żadne nowe komunikaty
pifarek
a daj na początku skryptu


i powiedz też czy funkcja mail zwraca true czy false przy próbie wysłania
zearid
Dodałem na samym początku pliku odpowiedzialnego za przesłanie wiadomości.
Nic się nie wyświetla.
Jak sprawdzić funkcję mail (jaką ma wartość) ?

Zawartość pliku contact.php - plik inicjowany przy wysyłaniu wiadomości:

  1. <?php
  2. /*
  3. Credits: Bit Repository
  4. URL: <a href="http://www.bitrepository.com/" target="_blank">http://www.bitrepository.com/</a>
  5. */
  6.  
  7.  
  8. include 'config.php';
  9.  
  10. error_reporting (E_ALL ^ E_NOTICE);
  11.  
  12. $post = (!empty($_POST)) ? true : false;
  13.  
  14. if($post)
  15. {
  16. include 'functions.php';
  17.  
  18. $name = stripslashes($_POST['name']);
  19. $email = trim($_POST['email']);
  20. $subject = stripslashes($_POST['subject']);
  21. $message = stripslashes($_POST['message']);
  22.  
  23.  
  24. $error = '';
  25.  
  26. // Check name
  27.  
  28. if(!$name)
  29. {
  30. $error .= 'Wpisz swoje imię.<br />';
  31. }
  32.  
  33. // Check email
  34.  
  35. if(!$email)
  36. {
  37. $error .= 'Wpisz swój adres e-mail.<br />';
  38. }
  39.  
  40. if($email && !ValidateEmail($email))
  41. {
  42. $error .= 'Wpisz poprawny adres e-mail!<br />';
  43. }
  44.  
  45. // Check message (length)
  46.  
  47. if(!$message || strlen($message) < 30)
  48. {
  49. $error .= "Wpisz swoją wiadomość. Powinna zawiarać minimum 30 znaków.<br />";
  50. }
  51.  
  52. if(!$error)
  53. {
  54. $mail = mail(WEBMASTER_EMAIL, $subject, $message,
  55. "From: ".$name." <".$email.">\r\n"
  56. ."Reply-To: ".$email."\r\n"
  57. ."X-Mailer: PHP/" . phpversion());
  58.  
  59.  
  60. if($mail)
  61. {
  62. echo 'OK';
  63. }
  64.  
  65. }
  66. else
  67. {
  68. echo '<div class="notification_error">'.$error.'</div>';
  69. }
  70.  
  71. }
  72. ?>
pifarek
Cytat(zearid @ 11.03.2012, 15:11:40 ) *
Jak sprawdzić funkcję mail (jaką ma wartość) ?

Sprawdzasz ją na to wychodzi w miejscu if($mail)... skrypt odpowiada OK ?

No i skasuj

  1. error_reporting (E_ALL ^ E_NOTICE);


skoro wcześniej dałeś (-1)
zearid
Skasowałem zaraz po zatwierdzeniu posta (edycji) i nie zwróciło żadnego błedu. Skrypt odpowiada.
Jeżeli podstawię zamiast zmiennej (treść pliku) ręcznie wpisaną wartość wiadomość zostaje wysłana poprawnie.

Wcześniej dla testu miałem na końcu pliku echo w celu sprawdzenia czy przekazywany jest poprawnie email z pliku. Po kliknieciu wyświetlało go nad formularzem i był poprawny (ani przed ani za nim nie było spacji itp).

Teraz bez tego nie widać reakcji choć odpowiada skrypt.
Żadnych błędów nie zwraca, po prostu nie wysyła wiadomości.
Zależało mi na zewnętrzym przechowywaniu adresu e-mail.
pifarek
Wrzuciłem sobie ten skrypt na serwer 1and1 i wszystko działa. Nie wiem, o co chodzi. ;D
zearid
A przekazujesz wartość z pliku ?
pifarek
skróciłem to do:

mail.php:
  1. <?php
  2. include 'config.php';
  3.  
  4. $mail = mail(WEBMASTER_EMAIL, 'temat', 'wiadomosc');
  5.  
  6. ?>


config.php:
  1. <?php
  2. define("WEBMASTER_EMAIL", file_get_contents('email.txt'));
  3. ?>


email.txt:
  1. adres@email.pl
zearid
Ja z ciekawości wrzuciłem katalog kontakt na samą góre struktury i usunąłem niepotrzebne include.
Jedyny efekt działanie jest komunikat o sukcesie.



Nic poza tym. Co ciekawsze nawet po wpisaniu e-maila ręcznie przestało wysyłać.
Teraz już totalnie nie kumam.
pifarek
może wiadomości wylądowały w spamie czy coś? tongue.gif
zearid
Widać co wyżej i nic poza tym ;]
Na bank spam nie ;] oznaczone mam jako nie SPAM haha.gif

W oryginalnym położeniu działa poprawnie tylko ze zdefiniowaną ręcznie wartością WEBMASTER_EMAIL.
Jeżeli jest w "" wysyła bez komunikatu.
Jeżeli bez "" to:
  1. Notice: Use of undefined constant WEBMASTER_EMAIL - assumed 'WEBMASTER_EMAIL' in SCIEZKA PLIKU on line 2
  2. OK


Generalnie problem stanowią zmienne.
Jeżeli zamiast uzytej pierwotnie wartości dam zmienną i określę jej wartość ręcznie (email) to działa.
Jeżeli wezmę tą samą zmienną i jako jej wartość podam otwierany plik i jego zawartość to nie działa.
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.