Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php] Glupi problem z mail...
Forum PHP.pl > Forum > Przedszkole
juzio6666
No cóż... jestem początkujący i już w tym miejscu stanąłem. Funkcja mail. Otóż sytuacja jest taka...
Mam jeden plik o nazwie form.html i jego źródło wygląda tak:
  1. <HEAD>
  2. Formularz rejestracyjny.
  3. </TITLE>
  4. </HEAD>
  5. <BODY>
  6. <form name=form method=POST action=register.php>
  7. Login: <input type=text name="login"><br/>
  8. Nazwa w grze: <input type=text name="name"><br/>
  9. Haslo: <input type=password name="pass"><br/>
  10. Konfirmacja hasla: <input type=password name="pass2"><br/>
  11. <input type=submit name="wyslij" value="Zarejestruj sie!">
  12. </form>
  13. </BODY>
  14. </HTML>

Oczywiście jak widać odnosi się to do pliku register.php , który wygląda następująco:
  1. <?php
  2. $adres="konto@serwer.pl";
  3. $login=$_POST['login'];
  4. $name=$_POST['name'];
  5. $pass=$_POST['pass'];
  6. $pass2=$_POST['pass2'];
  7. IF(($_POST['login']=='')||($_POST['name']=='')||($_POST['pass']=='')||($_POST['pass']!==$_POST['pass2']))
  8. {
  9. echo "<form method=POST action=register.php>";
  10. echo "Formularz nie moze zostac wyslany. Uzupelnij wszystkie pola.<br/>";
  11. IF($login=='')
  12. echo "Login nie zostal wpisany!<br/>Login: <input type=text name='login'><br/>";
  13. ELSE
  14. echo "<input type=hidden name=login value=$login>";
  15. IF($name=='')
  16. echo "Imie nie zostalo wpisane!:<br/>Imie: <input type=text name=name><br/>";
  17. ELSE
  18. echo "<input type=hidden name=name value=$name>";
  19. IF($pass=='')
  20. echo "Haslo nie zostalo wpisane!<br/>Haslo: <input type=password name=pass><br/>Konfirmacja hasla: <input type=password name=pass2><br/>";
  21. ELSE
  22. IF($pass!==$pass2)
  23. echo "Nie powtorzyles poprawnie hasla!<br/>Haslo: <br/><input type=password name=pass><br/>Konfirmacja hasla: <input type=password name=pass2><br/>";
  24. ELSE
  25. echo "<input type=hidden name=pass value=$pass>";
  26. echo "<input type=submit name=submit value='Wyslij!'>";
  27. echo "<input type=reset name=reset value='Od nowa'>";
  28. echo "</form>";
  29. }
  30. ELSE
  31. {
  32. $wiadomosc = "Imie: $login Nazwa w grze: $name Haslo: $pass";
  33. $header = "From: $imiernReply-To: $emailrn";
  34. mail($adres, "Formularz", $wiadomoscr);
  35. echo 'Dzieki za wypelnienie formularza '.$login.'.';
  36. }
  37. ?>

Jaki jest problem? Otóż męczę się od dłuższego czasu nad tym żeby... ten mail doszedł. Niby nie ma żadnych błędów ale maila jak nie było tak nie ma. Wysyłałem kilkadziesiąt razy na różne konta i nic. usunąłem "$header" z funkcji mail żeby wyeliminować możliwość, że to z nim coś nie tak... proszę o pomoc. Podejrzewam że to jakiś banalny błąd a ja go nie widzę... dosłownie szlag mnie trafia... worriedsmiley.gif z góry wielkie dzięki za odpowiedź.
microh
Masz:
  1. <?php
  2. mail($adres, "Formularz", $wiadomoscr);
  3. ?>
powinno być:
  1. <?php
  2. mail($adres, "Formularz", $wiadomosc);
  3. ?>

Teraz działa?
juzio6666
Niestety nie... Ten błąd akurat sam zauważyłem ale niestety nie jest to ten poszukiwany.
strife
Zobacz czy, aby napewno konstrukcja mail" title="Zobacz w manualu PHP" target="_manual działa, tworząc prosty plik wysyłający na wybrane przez Ciebie konto mail'a.

  1. <?php
  2. mail('dupa@example.com', 'temat', 'dupa')
  3. ?>


Jeśli nie dochodzi, oznacza to, że serwer pocztowy na Twoim hostingu nawala, możesz wtedy wykorzystać klasę phpmailer, która umożliwia wysyłanie maila z konta pocztowego wybranego przez Ciebie smile.gif

Pozdrawiam.
juzio6666
Niestety problem jest ciągle... stworzyłem taki plik jak polecałeś i wysyłało normalnie. Włączyłem - wysłało. Włączyłem ten mój skrypt - cisza... znowu uruchomiłem Twój skrypt - wysłało... Nic nie rozumię sad.gif
microh
  1. <?php
  2. echo "<form method=POST action=register.php>";
  3. ?>


zmień:
  1. <?php
  2. echo "<form method='POST' action='register.php'>";
  3. ?>


Na moim serwku zadziałało guitar.gif

**Jeśli nie zadziała:
  1. <?php
  2. ini_set('display_errors', 1);
  3. ?>
na początku pliku daj smile.gif
strife
Cytat(juzio6666 @ 2.07.2007, 19:52:22 ) *
Niestety problem jest ciągle... stworzyłem taki plik jak polecałeś i wysyłało normalnie. Włączyłem - wysłało. Włączyłem ten mój skrypt - cisza... znowu uruchomiłem Twój skrypt - wysłało... Nic nie rozumię sad.gif


Przepisał bym Ci ten skrypt, ale jest u mnie burza i muszę komputer wyłączyć. W każdym bądź razie napiszę Ci co możesz zrobić, sprawdź czy warunek po else ( tam gdzie wysyła maila ) jest spełniany.

  1. <?php
  2. ELSE
  3. {
  4. // ...
  5. echo 'spelniony!';
  6. ?>


Zamiast konstrukcji

  1. <?php
  2. if ( $zmienna = '' )
  3. ?>


Użyj empty. Popraw cały kod, dodaj wcięcia, nie umieszczaj kodu html w php, nie ma sensu:

  1. <?php if ( $zmienna ) : ?>
  2. <div>HTML</div>
  3. <?php endif; ?>


Po co te wzkazówki? Ano ułatwią Ci znalezienie błędu. Poza tym ten cały formularz przerobił bym w drugą stronę:

  1. <?php
  2. if ( ! empty( $login ) && ! empty( $password ) ) {
  3. // wyslij maila
  4. } else {
  5.  // .. pokaz formularz
  6. }
  7. ?>


Pozdrawiam.

PS. Przepraszam, za brak ładu i składu biggrin.gif
uli
Taki 'mały' błąd jak na moje '!=='. Powinno być '!='.

Kod:

  1. <?php
  2. $adres="konto@serwer.pl";
  3. $login=$_POST['login'];
  4. $name=$_POST['name'];
  5. $pass=$_POST['pass'];
  6. $pass2=$_POST['pass2'];
  7. IF (empty($_POST['login']) || empty($_POST['name']) || empty($_POST['pass']) || $_POST['pass'] != $_POST['pass2'])
  8. {
  9. echo "<form method='POST' action='register.php'>";
  10. echo "Formularz nie moze zostac wyslany. Uzupelnij wszystkie pola.<br/>";
  11.  
  12. IF (empty($login))
  13. echo "Login nie zostal wpisany!<br/>Login: <input type=text name='login'><br/>";
  14. ELSE
  15. echo "<input type=hidden name=login value=$login>";
  16. IF (empty($name))
  17. echo "Imie nie zostalo wpisane!:<br/>Imie: <input type=text name=name><br/>";
  18. ELSE
  19. echo "<input type=hidden name=name value=$name>";
  20. IF(empty($pass))
  21. echo "Haslo nie zostalo wpisane!<br/>Haslo: <input type=password name=pass><br/>Konfirmacja hasla: <input type=password name=pass2><br/>";
  22. ELSE
  23. IF ($pass != $pass2)
  24. echo "Nie powtorzyles poprawnie hasla!<br/>Haslo: <br/><input type=password name=pass><br/>Konfirmacja hasla: <input type=password name=pass2><br/>";
  25. ELSE
  26. echo "<input type=hidden name=pass value=$pass>";
  27. echo "<input type=submit name=submit value='Wyslij!'>";
  28. echo "<input type=reset name=reset value='Od nowa'>";
  29. echo "</form>";
  30. }
  31. ELSE
  32. {
  33. $wiadomosc = "Imie: $login Nazwa w grze: $name Haslo: $pass";
  34. $header = "From: $imiernReply-To: $emailrn";
  35. mail($adres, "Formularz", $wiadomosc);
  36. echo 'Dzieki za wypelnienie formularza '.$login.'.';
  37. }
  38. ?>
juzio6666
Uli: wątpię żeby o to chodziło bo to akurat działa. Jakbyś próbował to wyświetla się to co trza, jak zapomnisz wpisać jakiejś wartości.

Microh: niestety to nic nie daje... błędów nie wyświetla żadnych i wszystko po staremu...

Strife: sensownie wygląda to co napisałeś... ale nie kapuję z tego nic a nic. Byłbym wdzięczny gdybyś napisał o so chodzi. Chociażby z tym empty. Ja jestem n00bem jeszcze więc nie wymagajcie ode mnie nic wielkiego tongue.gif
uli
No dobrze... A tak? Mi poszło bez większych problemów.

Ściągnij sobie klasę phpmailer i wrzuć katalog phpmailer do katalogu ze stroną. I wypróbuj ten kod:
  1. <?php
  2. $adres="ADRES_NA_KTÓRY_WYSŁAĆ";
  3. $login=$_POST['login'];
  4. $name=$_POST['name'];
  5. $pass=$_POST['pass'];
  6. $pass2=$_POST['pass2'];
  7. IF (empty($_POST['login']) || empty($_POST['name']) || empty($_POST['pass']) || $_POST['pass'] != $_POST['pass2'])
  8. {
  9. echo "<form method='POST' action='reg.php'>";
  10. echo "Formularz nie moze zostac wyslany. Uzupelnij wszystkie pola.<br/>";
  11.  
  12. IF (empty($login))
  13. echo "Login nie zostal wpisany!<br/>Login: <input type=text name='login'><br/>";
  14. ELSE
  15. echo "<input type=hidden name=login value=$login>";
  16. IF (empty($name))
  17. echo "Imie nie zostalo wpisane!:<br/>Imie: <input type=text name=name><br/>";
  18. ELSE
  19. echo "<input type=hidden name=name value=$name>";
  20. IF(empty($pass))
  21. echo "Haslo nie zostalo wpisane!<br/>Haslo: <input type=password name=pass><br/>Konfirmacja hasla: <input type=password name=pass2><br/>";
  22. ELSE
  23. IF ($pass != $pass2)
  24. echo "Nie powtorzyles poprawnie hasla!<br/>Haslo: <br/><input type=password name=pass><br/>Konfirmacja hasla: <input type=password name=pass2><br/>";
  25. ELSE
  26. echo "<input type=hidden name=pass value=$pass>";
  27. echo "<input type=submit name=submit value='Wyslij!'>";
  28. echo "<input type=reset name=reset value='Od nowa'>";
  29. echo "</form>";
  30. }
  31. ELSE
  32. {
  33. require("class.phpmailer.php");
  34. $mail = new PHPMailer();
  35.  
  36. $mail->PluginDir = "phpmailer/";
  37. $mail->From = "ADRES_MAILA"; //adres naszego konta
  38. $mail->FromName = $imie;//nagłówek From
  39. $mail->Host = "SERWER_SMTP";//adres serwera SMTP
  40. $mail->Mailer = "smtp";
  41. $mail->Username = "NAZWA_USERA_POCZTY";//nazwa użytkownika
  42. $mail->Password = "HASŁO_TWOJEJ_POCZTY";//nasze hasło do konta SMTP
  43. $mail->SMTPAuth = true;
  44. $mail->SetLanguage("en", "language/");
  45.  
  46. $mail->Subject = "Formularz";//temat maila
  47.  
  48. // w zmienną $text_body wpisujemy treść maila
  49. $text_body = "Imie: $login Nazwa w grze: $name Haslo: $pass";
  50.  
  51. $mail->Body = $text_body;
  52. // adresatów dodajemy poprzez metode 'AddAddress'
  53. $mail->AddAddress("$adres","");
  54.  
  55. if(!$mail->Send())
  56. echo "Błąd wysyłania maila <br>";
  57. echo $mail->ErrorInfo."<br>";
  58.  
  59. // Clear all addresses and attachments
  60. $mail->ClearAddresses();
  61. $mail->ClearAttachments();
  62. echo 'Dzieki za wypelnienie formularza '.$login.'.';
  63.  
  64. }
  65. ?>
juzio6666
ohmy.gif
Będę musiał się z tym bliżej zapoznać... kurka... trochę tego nowego tam jest. A czy z tego można zawsze korzystać jakbym chciał używać funkcji "mail"? Nie będzie to miało żadnego wpływu na to jak będą odczytywały tę stronę kompy innych? (żeby nie było to nie mam jeszcze zbytnio czasu na sprawdzenie tego wszystkiego czy działa ale jak zadziała to powiadomię smile.gif - dziękuję biggrin.gif).
uli
Możesz korzystać zawsze, pod warunkiem, że dołączysz phpmailer'a. Nie będzie miało wpływu na to, jak stronę widzą inni - nic się nie zmieni.

phpmailer to klasa alternatywnego wysyłania maili w stosunku do mail(). Różnicą jest możliwość wysyłania maili z serwera nie będącego fizycznie na tym samym kompie co strona www (czyli np. poprzez onet, wp itp itd).

Gdybyś miał pytania pisz, a z pewnością wielu z nas Tobie odpowie - to bardzo popularna klasa.
juzio6666
Dobra... myślałem że nie będę już musiał Was męczyć ale jednak. Podczas przeglądania tego kodu zauważyłem że potrzebny jest serwer SMTP. Czy nie można by było zrobić, żeby był on ustawiony na coś jakby AUTO? Bo przecież różne osoby będą to uzupełniać i różne będą (chyba worriedsmiley.gif) serwery SMTP.. przynajmniej tak mi się wydaje... choć przyznam że moja wiedza na temat poczty jest nikła dry.gif

Już sprawdziłem. ŁIIIII!!! DZIAŁA! biggrin.gif Wielkie dzięki! Pod koniec okazało się ze pod $adres podstawiłem juzio6666@.gmail.com ... i się dziwiłem czemu ciągle nie działa. No ale jeszcze raz wielkie dzięki i odwołuje pytanie.
Pozdrawiam!
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.