Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Problem ze skryptem wysłania e-maila
Forum PHP.pl > Forum > Przedszkole
Anubisss
Witam. Mam mały problem. Otóż, na stronie chcę zrobić taki motyw, że gdy ktoś wpisze w odpowiednie okienko swój e-mail, ja dostanę wiadomość na swój adres, o danym tekście. Działa do połowy. Po wpisaniu maila (tudzież nie wpisaniu) przenosi na drugą stronę, gdzie pokazuje się wiadomość. I tu się zaczyna problem. Bo zamiast po udanej akcji - pozytywna odpowiedź, a po nieudanej - negatywna, wszystko wyświetla się na raz.

Screeny:



Pole do wpisania maila:
  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
  2. <html xmlns="http://www.w3.org/1999/xhtml">
  3. <head>
  4. <title> xXx </title>
  5. <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  6. </head>
  7. <body>
  8. <form action="wysylanie.php" method="post"><p>Wpisz swój adres e-mail: <input class="mail" name="mail" type="text"/><input type="submit" value="Wyślij"/></p></form>
  9. </body>
  10. </html>


Plik z domniemanymi odpowiedziami:
  1. <?php
  2. $headers = 'MIME-Version: 1.0' . "\r\n";
  3. $headers .= 'Content-type: text/html; charset=utf-8' . "\r\n";
  4. $mail_lockerz = $_POST['mail'];
  5. $to = ' tu jest mój mail ';
  6. $subject = ' xXx ';
  7. $message = ' Tekst wiadomości ' .$mail_lockerz . '';
  8. if ($mail_lockerz <> '') {
  9. if (mail($to, $subject, $message, $headers)) {
  10. echo "<meta HTTP-EQUIV='REFRESH' content='2; url=index.php'><center><font color='green'><b>Mail wysłany. Zaproszenie zostanie wysłane w ciągu 24 godzin.</b></font><br>Za chwilę zostaniesz przeniesiony na poprzednią stronę...</center>";
  11. }
  12. else {
  13. echo "Mail nie wysłany. Nieznany problem";
  14. }
  15. }
  16. else {
  17. echo "<meta HTTP-EQUIV='REFRESH' content='2; url=index.php'><center><font color='red'><b>Musisz wpisać mail przed wysłaniem!</b></font><br>Za chwilę zostaniesz przeniesiony na poprzednią stronę...</center>";
  18. }
  19. ?>


Z góry dziękuję za pomoc. smile.gif
Larges
Źle zakotwiczyłeś w jednym if całość - "pozytywne i negatywne" wykonanie kodu.
Przypatrz się dokładnie dokąd sięga klamerka od if ($mail_lockerz <> '') {


  1. if ($mail_lockerz <> '') {
  2.  
  3. if (mail($to, $subject, $message, $headers)) {
  4.  
  5. echo "<meta HTTP-EQUIV='REFRESH' content='2; url=index.php'><center><font color='green'><b>Mail wysłany. Zaproszenie zostanie wysłane w ciągu 24 godzin.</b></font><br>Za chwilę zostaniesz przeniesiony na poprzednią stronę...</center>";
  6.  
  7. }
  8.  
  9. else {
  10.  
  11. echo "Mail nie wysłany. Nieznany problem";
  12.  
  13. }
  14.  
  15. }



hmmmmm sorka też się pogubiłem przez brak wcięć ;]
Zakotwiczenie dobre, nie bardzo wiem w czym Tkwi Twój problem.
Dziwnego screena dałeś. Dlaczego u Ciebie na screenie widać kod PHP?
Anubisss
Cóż.. Skrypt jest gotowcem z internetu, bo osobiście w PHP jestem noga, tak więc chyba nie za bardzo niestety rozumiem... ^^
Zosiek
Sprawdziłem to u siebie i działa. To że wyświetla ci się takie coś może być spowodowane różnymi czynnikami. Niecmoknięty jakiś nawias, ", ', wcześniej dany ?> błąd przy wysyłaniu maila postem.
Możliwe u ciebie, ze dałeś coś takiego w warunku if <>
nie wie czy to dobrze (chyba nie) ale możliwe że to kończy skrypt php. (tam chyab powinno być to:)
  1. if (isset($mail_lockerz)) {
  2. //kod
  3. }
  4. ?>
  5.  
Larges
a Tak ?

  1. if (!empty($mail_lockerz))
  2. {
  3. if (mail($to, $subject, $message, $headers))
  4. {
  5. echo "<meta HTTP-EQUIV='REFRESH' content='2; url=index.php'><center><font color='green'><b>Mail wysłany. Zaproszenie zostanie wysłane w ciągu 24 godzin.</b></font><br>Za chwilę zostaniesz przeniesiony na poprzednią stronę...</center>";
  6. } else {
  7. echo "Mail nie wysłany. Nieznany problem";
  8. }
  9. } else {
  10. echo "<meta HTTP-EQUIV='REFRESH' content='2; url=index.php'><center><font color='red'><b>Musisz wpisać mail przed wysłaniem!</b></font><br>Za chwilę zostaniesz przeniesiony na poprzednią stronę...</center>";
  11. }


Mam nadzieje ze ten kod PHP wstawiasz w plik z rozszerzeniem .php winksmiley.jpg))))
Zosiek
Cytat(Larges @ 10.10.2009, 20:52:35 ) *
Mam nadzieje ze ten kod PHP wstawiasz w plik z rozszerzeniem .php winksmiley.jpg ))))

Jakby było w innym to kod php był by widziany od samego początku tongue.gif
@edit
Nie róbmy offtopu tongue.gif Na priva ci napisałem Larges o co mi chodziło.
Larges
Tak ale przypatrz sie screenowi. Widoczny jest kod PHP zatem musi być coś nie ok smile.gif
Anubisss
Cytat
Parse error: syntax error, unexpected '}' in /var/www/virtual/lockerzz.cba.pl/pl/zapro/lol/index.php on line 72


Czyli, że 12 linia tutaj:
  1. <?php
  2. $headers = 'MIME-Version: 1.0' . "\r\n";
  3. $headers .= 'Content-type: text/html; charset=utf-8' . "\r\n";
  4. $mail_lockerz = $_POST['mail'];
  5. $to = ' tu jest mój mail ';
  6. $subject = ' xXx ';
  7. $message = ' Tekst wiadomości ' .$mail_lockerz . '';
  8. if ($mail_lockerz <> '') {
  9. if (mail($to, $subject, $message, $headers)) {
  10. echo "<meta HTTP-EQUIV='REFRESH' content='2; url=index.php'><center><font color='green'><b>Mail wysłany. Zaproszenie zostanie wysłane w ciągu 24 godzin.</b></font><br>Za chwilę zostaniesz przeniesiony na poprzednią stronę...</center>";
  11. }
  12. else {
  13. echo "Mail nie wysłany. Nieznany problem";
  14. }
  15. }
  16. else {
  17. echo "<meta HTTP-EQUIV='REFRESH' content='2; url=index.php'><center><font color='red'><b>Musisz wpisać mail przed wysłaniem!</b></font><br>Za chwilę zostaniesz przeniesiony na poprzednią stronę...</center>";
  18. }
  19. ?>
Larges
muszisz poprawić klamerki. Klamerki otwarte zawsze trzeba domykać. Ilość klamerek otwierających musi być równa ilości zamykających "{" "}".
Zosiek
po jest niepotrzebny enter przed else
ma być
}else
{

Tak mi się wydaje bo {} sie zgadzają oraz wszytko jest zamknięte i są ; gdzie trzeba
Anubisss
Czyli powinno być tak?

  1. <?php
  2. $headers = 'MIME-Version: 1.0' . "\r\n";
  3. $headers .= 'Content-type: text/html; charset=utf-8' . "\r\n";
  4. $mail_lockerz = $_POST['mail'];
  5. $to = 'anubis94@o2.pl';
  6. $subject = 'Zaproszenie na Lockerz.com';
  7. $message = 'Cześć. Chciałbym otrzymać zaproszenie na Lockerz.com. Mój mail to: ' .$mail_lockerz . '';
  8. if (!empty($mail_lockerz))
  9. {
  10. if (mail($to, $subject, $message, $headers))
  11. {
  12. echo "<meta HTTP-EQUIV='REFRESH' content='2; url=index.php'><center><font color='green'><b>Mail wysłany. Zaproszenie zostanie wysłane w ciągu 24 godzin.</b></font><br>Za chwilę zostaniesz przeniesiony na poprzednią stronę...</center>";
  13. } else {
  14. echo "Mail nie wysłany. Nieznany problem";
  15. }
  16. } else {
  17. echo "<meta HTTP-EQUIV='REFRESH' content='2; url=index.php'><center><font color='red'><b>Musisz wpisać mail przed wysłaniem!</b></font><br>Za chwilę zostaniesz przeniesiony na poprzednią stronę...</center>";
  18. }
  19.  
  20. } else {
  21. echo "Mail nie wysłany. Nieznany problem";
  22. }
  23. } else {
  24. echo "<meta HTTP-EQUIV='REFRESH' content='2; url=index.php'><center><font color='red'><b>Musisz wpisać mail przed wysłaniem!</b></font><br>Za chwilę zostaniesz przeniesiony na poprzednią stronę...</center>";
  25. }
  26. ?>
Zosiek
Cytat(Anubisss @ 10.10.2009, 21:16:45 ) *
Czyli powinno być tak?

[PHP] pobierz, plaintext
  1. <?php
  2. $headers = 'MIME-Version: 1.0' . "\r\n";
  3. $headers .= 'Content-type: text/html; charset=utf-8' . "\r\n";
  4. $mail_lockerz = $_POST['mail'];
  5. $to = 'anubis94@o2.pl';
  6. $subject = 'Zaproszenie na Lockerz.com';
  7. $message = 'Cześć. Chciałbym otrzymać zaproszenie na Lockerz.com. Mój mail to: ' .$mail_lockerz . '';
  8. if (!empty($mail_lockerz))
  9. {
  10. if (mail($to, $subject, $message, $headers))
  11. {
  12. echo "<meta HTTP-EQUIV='REFRESH' content='2; url=index.php'><center><font color='green'><b>Mail wysłany. Zaproszenie zostanie wysłane w ciągu 24 godzin.</b></font><br>Za chwilę zostaniesz przeniesiony na poprzednią stronę...</center>";
  13. } else {
  14. echo "Mail nie wysłany. Nieznany problem";
  15. }
  16. } else {
  17. echo "<meta HTTP-EQUIV='REFRESH' content='2; url=index.php'><center><font color='red'><b>Musisz wpisać mail przed wysłaniem!</b></font><br>Za chwilę zostaniesz przeniesiony na poprzednią stronę...</center>";
  18. }
  19. } else {
  20. echo "Mail nie wysłany. Nieznany problem";
  21. }
  22. } else {
  23. echo "<meta HTTP-EQUIV='REFRESH' content='2; url=index.php'><center><font color='red'><b>Musisz wpisać mail przed wysłaniem!</b></font><br>Za chwilę zostaniesz przeniesiony na poprzednią stronę...</center>";
  24. }
  25. ?>
[PHP] pobierz, plaintext

Pogrubione i czerwone usunąć ii powinno być dobrze
Anubisss
Usunąłem, iii...
Cytat
Parse error: syntax error, unexpected T_ELSE in /var/www/virtual/lockerzz.cba.pl/pl/zapro/lol/index.php on line 71


Czyli w lini z
  1. echo "Mail nie wysłany. Nieznany problem";
Larges
a zamiast tego to:

  1. if (!empty($_POST['mail']))
  2. {
  3. if (mail($_POST['mail'], $subject, $message, $headers))
  4. {
  5. echo "<meta HTTP-EQUIV='REFRESH' content='2; url=index.php'><center><font color='green'><b>Mail wysłany. Zaproszenie zostanie wysłane w ciągu 24 godzin.</b></font><br>Za chwilę zostaniesz przeniesiony na poprzednią stronę...</center>";
  6. } else {
  7. echo "Mail nie wysłany. Nieznany problem";
  8. }
  9. } else {
  10. echo "<meta HTTP-EQUIV='REFRESH' content='2; url=index.php'><center><font color='red'><b>Musisz wpisać mail przed wysłaniem!</b></font><br>Za chwilę zostaniesz przeniesiony na poprzednią stronę...</center>";
  11. }


Działa?
Anubisss
Nie, dalej problem z
  1. echo "Mail nie wysłany. Nieznany problem";
Zosiek
usuń z końca to
Kod
else {

      echo "Mail nie wysłany. Nieznany problem";


      } else {

      echo "<meta HTTP-EQUIV='REFRESH' content='2; url=index.php'><center><font color='red'><b>Musisz wpisać mail przed wysłaniem!</b></font><br>Za chwilę zostaniesz przeniesiony na poprzednią stronę...</center>";

      }

TO do tego co wczesniej wkleiłeś (nad postem Largesa)

Cytat(Larges @ 10.10.2009, 21:24:20 ) *
a zamiast tego to:

[PHP] pobierz, plaintext
  1. if (!empty($_POST['mail']))
  2. {
  3. if (mail($_POST['mail'], $subject, $message, $headers))
  4. {
  5. echo "<meta HTTP-EQUIV='REFRESH' content='2; url=index.php'><center><font color='green'><b>Mail wysłany. Zaproszenie zostanie wysłane w ciągu 24 godzin.</b></font><br>Za chwilę zostaniesz przeniesiony na poprzednią stronę...</center>";
  6. } else {
  7. echo "Mail nie wysłany. Nieznany problem";
  8. }
  9. } else {
  10. echo "<meta HTTP-EQUIV='REFRESH' content='2; url=index.php'><center><font color='red'><b>Musisz wpisać mail przed wysłaniem!</b></font><br>Za chwilę zostaniesz przeniesiony na poprzednią stronę...</center>";
  11. }
[PHP] pobierz, plaintext

Działa?

Wywal czerowne
Anubisss
Nic nie dało...
Cytat
Parse error: syntax error, unexpected $end in /var/www/virtual/lockerzz.cba.pl/pl/zapro/lol/index.php on line 111


Lini 111 nawet nie mam w pliku...
Zosiek
dodaj } na końcu :
} else {<li> echo "<meta HTTP-EQUIV='REFRESH' content='2; url=index.php'><center><font color='red'><b>Musisz wpisać mail przed wysłaniem!</b></font><br>Za chwilę zostaniesz przeniesiony na poprzednią stronę...</center>";<li>}}
Anubisss
Spróbowałem ogarnąć cały temat, i powstało mi coś takiego:

  1. <?php
  2. $headers = 'MIME-Version: 1.0' . "\r\n";
  3. $headers .= 'Content-type: text/html; charset=iso-8859-2' . "\r\n";
  4. $mail_lockerz = $_POST['mail'];
  5. $to = ' tu jest mój mail ';
  6. $subject = ' xXx ';
  7. $message = ' Tekst wiadomości ' .$mail_lockerz . '';
  8. if (!empty($mail_lockerz))
  9. {
  10. if (mail($to, $subject, $message, $headers))
  11. {
  12. echo "<meta HTTP-EQUIV='REFRESH' content='2'; url='index.php'><center><font color='green'><b>Mail wysłany. Zaproszenie zostanie wysłane w ciągu 24 godzin.</b></font><br>Za chwilę zostaniesz przeniesiony na poprzednią stronę...</center>";
  13. } else {
  14. echo "Mail nie wysłany. Nieznany problem";
  15. } else {
  16. echo "<meta HTTP-EQUIV='REFRESH' content='2' url='index.php'><center><font color='red'><b>Musisz wpisać mail przed wysłaniem!</b></font><br>Za chwilę zostaniesz przeniesiony na poprzednią stronę...</center>";
  17. }}
  18. ?>


Po czym wywala mi błąd:
Cytat
Parse error: syntax error, unexpected T_ELSE in /var/www/virtual/lockerzz.cba.pl/pl/zapro/lol/index.php on line 67


Czyli coś jest źle z:
  1. echo "<meta HTTP-EQUIV='REFRESH' content='2' url='index.php'><center><font color='red'><b>Musisz wpisać mail przed wysłaniem!</b></font><br>Za chwilę zostaniesz przeniesiony na poprzednią stronę...</center>";
Zosiek
  1. <?php
  2. $headers = 'MIME-Version: 1.0' . "\r\n";
  3. $headers .= 'Content-type: text/html; charset=iso-8859-2' . "\r\n";
  4. $mail_lockerz = $_POST['mail'];
  5. $to = ' tu jest mój mail ';
  6. $subject = ' xXx ';
  7. $message = ' Tekst wiadomości ' .$mail_lockerz . '';
  8. if (!empty($mail_lockerz))
  9. {
  10. if (mail($to, $subject, $message, $headers))
  11. {
  12. echo "<meta HTTP-EQUIV='REFRESH' content='2'; url='index.php'><center><font color='green'><b>Mail wysłany. Zaproszenie zostanie wysłane w ciągu 24 godzin.</b></font><br>Za chwilę zostaniesz przeniesiony na poprzednią stronę...</center>";
  13. }else {
  14. echo "Mail nie wysłany. Nieznany problem";
  15. }}else {
  16. echo "<meta HTTP-EQUIV='REFRESH' content='2' url='index.php'><center><font color='red'><b>Musisz wpisać mail przed wysłaniem!</b></font><br>Za chwilę zostaniesz przeniesiony na poprzednią stronę...</center>";
  17. }
  18. ?>
  19.  


Na marginesie. Linia kodu nie oznacza zawsze błędu w tej linij tylko wcześniej. Np tu } był w złym miejscu i drugi else odnosił się do poprzedniego else. Teraz na pewno działa.
Anubisss
Cóż... Działa lepiej, niż było, ale znowu nie idealnie... Czegokolwiek nie wpiszę (albo jak nie wpisze niczego) to zawsze pojawia się ta sama informacja ,,Musisz wpisać mail przed wysłaniem!". I strona się tylko odświeża, a powinna przejść do wcześniejszej... Czyli doszły dwa problemy...
Zosiek
  1. <?php
  2. $headers = 'MIME-Version: 1.0' . "\r\n";
  3. $headers .= 'Content-type: text/html; charset=iso-8859-2' . "\r\n";
  4. $mail_lockerz = $_POST['mail'];
  5. $to = 'karolnarowski@gmail.com';
  6. $subject = ' xXx ';
  7. $message = ' Tekst wiadomości ' .$mail_lockerz . '';
  8. if (!empty($mail_lockerz))
  9. {
  10. if (mail($to, $subject, $message, $headers))
  11. {
  12. echo '<html>
  13. <head>
  14. <meta HTTP-EQUIV="Refresh" CONTENT="3; URL=index.php">
  15. </head>
  16. <body>
  17. Za 3 sekundy zostaniesz przekierowany Mail wysłany
  18. </body>
  19. </html>';
  20. }else {
  21. echo "Mail nie wysłany. Nieznany problem";
  22. }}else {
  23. echo '<html>
  24. <head>
  25. <meta HTTP-EQUIV="Refresh" CONTENT="3; URL=index.php">
  26. </head>
  27. <body>
  28. Za 3 sekundy zostaniesz przekierowany Mailnei wysłany
  29. </body>
  30. </html>';
  31. }
  32. ?>


Z tego co było widać na początku miałeś osobny plik z formularzem i osobny ze skryptem wysyłania
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.