Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Nie działa przekierowanie stron
Forum PHP.pl > Forum > PHP
tifoso
Poniższy kod przetwarza i pobiera dane z formularza gdzie użytkownik wypełniając go, może wysłać do mnie maila. Gdy wszystkie pola są wypełnione i użytkownik klika "wyślij", powinno nastąpić przekierowanie na stronę z potwierdzeniem wysłania maila. Zamiast tego wyświetla się biała strona (ale mail dochodzi)

Zmieniłem url strony z potwierdzeniem na google.pl żeby nie było podejrzeń o złą ścieżkę. Dopiero poznaję php więc proszę o wyrozumiałość i szybką pomoc.

  1. <?php error_reporting(6143);
  2.  
  3. require_once('recaptchalib.php');
  4.  
  5. $publickey = "6Ldmbr8SAAAAAGT17oCjkB8Y60kSqvq_0w7APAJp";
  6. $privatekey = "6Ldmbr8SAAAAAMY5lEl-7LnkWCovoFa9G7Vl3_kA";
  7.  
  8. isset($_POST['Email']) ? $Email = $_POST['Email'] : $Email = "";
  9. isset($_POST['imie']) ? $imie = $_POST['imie'] : $imie = "";
  10. isset($_POST['nazwisko']) ? $nazwisko = $_POST['nazwisko'] : $nazwisko = "";
  11. ?>
  12.  
  13. <meta http-equiv="content-type" content="text/html; charset=iso-8859-2">
  14. <body bgcolor="#000000"></body>
  15.  
  16. <link href="loginmodule.css" rel="stylesheet" type="text/css" />
  17.  
  18. <title>tytuł</title>
  19.  
  20. <?php
  21.  
  22. if (isset($_POST['Submit']))
  23. {
  24. //Validate form
  25. $errormessage = "";
  26.  
  27. $resp = recaptcha_check_answer ($privatekey,
  28. $_SERVER["REMOTE_ADDR"],
  29. $_POST["recaptcha_challenge_field"],
  30. $_POST["recaptcha_response_field"]);
  31.  
  32. if ($imie == '') { $errormessage .= "<li>Musisz podać swoje imię.</li> ";}
  33. if ($nazwisko == '') { $errormessage .= "<li>Musisz podać swoje nazwisko.</li>";}
  34. if ($Email == '') { $errormessage .= "<li>Zapomniałeś podać swój adres e-mail!</li>";}
  35. if (!eregi("^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,3})$", $Email)){ $errormessage = $errormessage . "<li>To nie jest poprawny e-mail. </li>";}
  36. if (!$resp->is_valid) {
  37. // What happens when the CAPTCHA was entered incorrectly
  38. $errormessage .= "<li>Przepisz poprawnie te dwa wyrazy?</li>";
  39. }
  40.  
  41. echo "</ul></p>";
  42. //If errors, return error message(s) and form
  43. if ($errormessage != "")
  44. { ?>
  45.  
  46. <span class="link1"><a href="index.php">Powrót</a></span>
  47. <img src="images/czarny.JPG">
  48. <table align="center">
  49. <p align="center" class="err_bold">Coś tu nie gra:</p> <span class="text_err"><ul><?=$errormessage?></span>
  50. </table>
  51.  
  52. <?php
  53. include("formularz.php");
  54.  
  55. } else {
  56. //If good, mail to DL
  57. $email_subject = "\nowy mail z portalu blablabla!";
  58. $email_headers = "From: $name [$Email] \r\n";
  59.  
  60. $to = "blabla@hotmail.com";
  61. $message_content =
  62. "----------------------------------------------------------------------------------\n".
  63. " Nowy email\n".
  64.  
  65.  
  66. "Imię: $imie\n".
  67. "Nazwisko: $nazwisko\n".
  68. "E-mail: $Email\n".
  69.  
  70. "-----------------------------------------------------------------------------------\n\n";
  71.  
  72. //Email message to Requestor
  73.  
  74. if (mail($to, $email_subject, $message_content, $email_headers))
  75. {
  76. //Display Sent Confirmation (Successful or NOT!) ?>
  77.  
  78.  
  79. <?php header("location: <a href="http://www.google.pl/&quot%3b%29;" target="_blank">http://www.google.pl/");</a>
  80.  
  81. exit;?>
  82.  
  83.  
  84. <?php
  85. }
  86. }
  87. } else {
  88. ?>
  89. <span class="link1"><a href="index.php">Powrót</a></span>
  90. <img src="images/czarny.JPG"><br>
  91. <p class="err" align="center">Wypełnij poniższy formularz w celu wysłania maila!<br/></p>
  92.  
  93. <?php include("formularz.php");?>
  94.  
  95. <?php
  96. };
  97.  
Scalak
odpowiedź jest w dokumentacji http://pl2.php.net/manual/en/function.header.php

Maciek
tifoso
Cytat(Scalak @ 16.12.2010, 00:19:59 ) *
odpowiedź jest w dokumentacji http://pl2.php.net/manual/en/function.header.php

Maciek


Jesli masz na myśli to, że header() powinien być przed kodem html ktory wysyła wiadomosc do uzytkownika, to juz tego probowalem ale wtedy strona automatycznie się przekierwouje na google.pl (w tym przypadku) gdy wchodze na strone z formularzem, wiec nawet nie mam mozliwosci wypelnienia go. A przekierowanie powinno nastapic gdy uzytkowinik kliknie "wyslij" w formularzu. Czy nie to miales na mysli??
cycofiasz
Problem jest taki że mieszasz html z kodem php i nie można obejść problemu bez przepisania całego kodu lub użycia buforowania wyjścia (ob_start itp).

Dodatkowo masz błędy w składni.
Scalak
reasumując "na czuja":

linie 79-84 zmień na:
header("location: http://www.google.pl/");

i zgodnie z sugestią przedmówcy zmodyfikuj linię 1 na:
<?php ob_start(); error_reporting(6143);

M

EDIT:
pomocnym w procesie pisania w php jest wyświetlanie błędów. W pliku php.ini: display_errors = On (zapewne masz Off jeśli php nie informuje Cię o błędach)
tifoso
Cytat(Scalak @ 16.12.2010, 00:51:44 ) *
reasumując "na czuja":

linie 79-84 zmień na:
header("location: http://www.google.pl/");

i zgodnie z sugestią przedmówcy zmodyfikuj linię 1 na:
<?php ob_start(); error_reporting(6143);

M

EDIT:
pomocnym w procesie pisania w php jest wyświetlanie błędów. W pliku php.ini: display_errors = On (zapewne masz Off jeśli php nie informuje Cię o błędach)


Nie pomogło :/ znów przekierowuje mnie prosto na google.pl

Co dziwne, ten kod działał bezbłędnie gdy testowałem go na darmowym hostingu cba.pl a przekierowanie przestalo dzialac po przeniesieniu plików na płatny superhost.pl (a nie zmieniałem nic kodu)
Scalak
Cytat
Nie pomogło :/ znów przekierowuje mnie prosto na google.pl


czyli od razu po otwarciu strony dostajesz maila i przekierowuje na google?

M
tifoso
Cytat(Scalak @ 16.12.2010, 01:05:32 ) *
czyli od razu po otwarciu strony dostajesz maila i przekierowuje na google?

M


Od razu po otwarciu strony przekierowuje na google ale bez wysyłania maila (mail nie dojdzie jesli nie sa wypelnione wymagane pola)

Dzięki
Scalak
jeszcze raz. Tę część kodu:
Kod
if (mail($to, $email_subject, $message_content, $email_headers)){
//Display Sent Confirmation (Successful or NOT!) ?>
<?php header("location: <a href="http://www.google.pl/&quot%3b%29;" target="_blank">http://www.google.pl/");</a>
exit;?>
<?php
}

zmień na:
Kod
if (mail($to, $email_subject, $message_content, $email_headers)) header('Location: http://www.example.com/');

i dodaj ob_start na samym początku tak jak pisałem.
Nadal po odpaleniu nie wysyła maila a przekierowuje? Jeśli tak to poszukaj może w innym miejscu masz przekierowywanie. W powyższym ifie mail po wysłaniu zwróci TRUE po czym header przekieruje.

Maciek
tifoso
Cytat(Scalak @ 16.12.2010, 01:55:53 ) *
jeszcze raz. Tę część kodu:
Kod
if (mail($to, $email_subject, $message_content, $email_headers)){
//Display Sent Confirmation (Successful or NOT!) ?>
<?php header("location: <a href="http://www.google.pl/&quot%3b%29;" target="_blank">http://www.google.pl/");</a>
exit;?>
<?php
}

zmień na:
Kod
if (mail($to, $email_subject, $message_content, $email_headers)) header('Location: http://www.example.com/');

i dodaj ob_start na samym początku tak jak pisałem.
Nadal po odpaleniu nie wysyła maila a przekierowuje? Jeśli tak to poszukaj może w innym miejscu masz przekierowywanie. W powyższym ifie mail po wysłaniu zwróci TRUE po czym header przekieruje.

Maciek


Teraz wyświetla formularz ale znow po wyslaniu wyświetla się biała strona (mail cały czas dochodzi)

Tak dla pewności, tak teraz wygląda kod:

  1. [php]
  2. <?php ob_start(); error_reporting(6143);
  3.  
  4. require_once('recaptchalib.php');
  5.  
  6. $publickey = "6Ldmbr8SAAAAAGT17oCjkB8Y60kSqvq_0w7APAJp";
  7. $privatekey = "6Ldmbr8SAAAAAMY5lEl-7LnkWCovoFa9G7Vl3_kA";
  8.  
  9. isset($_POST['Email']) ? $Email = $_POST['Email'] : $Email = "";
  10. isset($_POST['imie']) ? $imie = $_POST['imie'] : $imie = "";
  11. isset($_POST['nazwisko']) ? $nazwisko = $_POST['nazwisko'] : $nazwisko = "";
  12. ?>
  13.  
  14. <meta http-equiv="content-type" content="text/html; charset=iso-8859-2">
  15. <body bgcolor="#000000"></body>
  16.  
  17. <link href="loginmodule.css" rel="stylesheet" type="text/css" />
  18.  
  19. <title>tytul</title>
  20.  
  21.  
  22. <?php
  23.  
  24. if (isset($_POST['Submit']))
  25. {
  26. //Validate form
  27. $errormessage = "";
  28.  
  29. $resp = recaptcha_check_answer ($privatekey,
  30. $_SERVER["REMOTE_ADDR"],
  31. $_POST["recaptcha_challenge_field"],
  32. $_POST["recaptcha_response_field"]);
  33.  
  34. if ($imie == '') { $errormessage .= "<li>Musisz podac swoje imie.</li> ";}
  35. if ($nazwisko == '') { $errormessage .= "<li>Musisz podac swoje nazwisko.</li>";}
  36. if ($Email == '') { $errormessage .= "<li>Zapomniales podac swój adres e-mail!</li>";}
  37. if (!eregi("^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,3})$", $Email)){ $errormessage = $errormessage . "<li>To nie jest poprawny e-mail. </li>";}
  38. if (!$resp->is_valid) {
  39. // What happens when the CAPTCHA was entered incorrectly
  40. $errormessage .= "<li>Przepisz poprawnie te dwa wyrazy?</li>";
  41. }
  42.  
  43. echo "</ul></p>";
  44. //If errors, return error message(s) and form
  45. if ($errormessage != "")
  46. { ?>
  47.  
  48.  
  49.  
  50. <span class="link1"><a href="index.php">Powrót</a></span>
  51. <img src="images/czarny.JPG">
  52. <table align="center">
  53. <p align="center" class="err_bold">Cos tu nie gra:</p> <span class="text_err"><ul><?=$errormessage?></span>
  54. </table>
  55.  
  56. <?php
  57. include("formularz.php");
  58.  
  59. } else {
  60. //If good, mail to DL
  61. $email_subject = "\nowy mail z portalu blablabla!";
  62. $email_headers = "From: $name [$Email] \r\n";
  63.  
  64. $to = "blabla@hotmail.com";
  65. $message_content =
  66. "----------------------------------------------------------------------------------\n".
  67. " Nowy email\n".
  68.  
  69.  
  70. "Imie: $imie\n".
  71. "Nazwisko: $nazwisko\n".
  72. "E-mail: $Email\n".
  73.  
  74.  
  75. "-----------------------------------------------------------------------------------\n\n";
  76.  
  77.  
  78.  
  79. //Email message to Requestor
  80.  
  81. if (mail($to, $email_subject, $message_content, $email_headers)) header('Location: <a href="http://www.google.com/&#39%3b%29;" target="_blank">http://www.google.com/');</a>
  82. }
  83. } else {
  84.  
  85. ?>
  86. <span class="link1"><a href="index.php">Powrót</a></span>
  87. <img src="images/czarny.JPG"><br>
  88. <p class="err" align="center">Wypelnij ponizszy formularz w celu wyslania maila!<br/></p>
  89.  
  90. <?php include("formularz.php");?>
  91.  
  92. <?php
  93. };
  94.  

[/php]
Scalak
linię 81 z headerem zamień proszę na tę konstrukcję co podałem.
Odpalasz to na localhoście? Trzeba włączyć raportowanie błędów bo nie pojedziemy sad.gif (biała strona zapewne wyświetla się z powodu błędu/ów w kodzie).
tifoso
Cytat(Scalak @ 16.12.2010, 02:28:49 ) *
linię 81 z headerem zamień proszę na tę konstrukcję co podałem.
Odpalasz to na localhoście? Trzeba włączyć raportowanie błędów bo nie pojedziemy sad.gif (biała strona zapewne wyświetla się z powodu błędu/ów w kodzie).


Pokazuje:
  1. if (mail($to, $email_subject, $message_content, $email_headers)) header('Location: <a href="http://www.google.com/&#39%3b%29;" target="_blank">http://www.google.com/');</a>

ale w rzeczywistosci jest:

if (mail($to, $email_subject, $message_content, $email_headers)) header('Location: http://www.google.com/');

Zmienilem na:

if (mail($to, $email_subject, $message_content, $email_headers)) header('Location: http://www.example.com/');

ale wciąż to samo czyli wyswietlana jest biała strona. Nie, nie odpalam na localhoscie, testuje na stronie "live".

Jak moge wlaczyc raportowanie błędów?
Scalak
Cytat
Jak moge wlaczyć raportowanie błędów?

spróbuj dodać na początku:
ini_set('display_errors','On');
jak nie poleci to zerknij czy z poziomu pliku .htaccess da radę

dobrej nocy
Maciek

---- EDIT ----
o sorry z dokumentacji:
Cytat
Using
<?php ini_set('display_errors', 1); ?>
at the top of your script will not catch any parse errors. A missing ")" or ";" will still lead to a blank page.

This is because the entire script is parsed before any of it is executed. If you are unable to change php.ini and set

display_errors On

then there is a possible solution suggested under error_reporting:

<?php
error_reporting(E_ALL);
ini_set("display_errors", 1);
include("file_with_errors.php");
?>

jw lub ht jak nie masz dostępu do php.ini
tifoso
  1. <?php
  2. ini_set("display_errors", 1);
  3. include("file_with_errors.php");
  4. ?>


Powyzszy kawalek kodu wklejam na samej gorze pliku php. w ktorym chce wykryc bledy, a co daje w file_with_errors.php?

Dzieki!
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.