4

お問い合わせフォームでメッセージを送信した後、ホームページにリダイレクトしようとすると、フォームからメールが送信されますが、次のメッセージが表示されます。

Array
(
    [name] => Abdo
    [company] => Mediabyrån A&B
    [email] => a.el-madhoun@hotmail.com
    [content] => Hejsan
    [contact_to] => info@web.se
)

警告: ヘッダー情報を変更できません - /customers/4/5/a/webelite の (/customers/4/5/a/webelite.se/httpd.www/kontakt.php:3 で開始された出力) によって既に送信されたヘッダー。 39 行目の se/httpd.www/kontakt.php

私の連絡先フォーム;

<form action="kontakt.php" method="post">
<p><input type="text" required="required" id="name" name="name" class="text_input" size="22"  />
<label for="name">Namn *</label></p>

<p><input type="text" required="required" id="company" name="company" class="text_input" size="22"  />
<label for="company">Företag *</label></p>

<p><input type="email" required="required" id="email" name="email" class="text_input"  size="22"  />
<label for="email">Epost *</label></p>

<p><textarea required="required" name="content" class="textarea" cols="30" rows="5"></textarea></p>

<p><button type="submit" class="button white"><span>Skicka</span></button></p>
<input type="hidden" value="info@web.se" name="contact_to"/>
</form>

これは私のPHPです:

<?php

echo $name = $_POST['name'];
echo $company = $_POST['company'];
echo $email =  $_POST['email'];
echo $content = $_POST['content'];

$mail_to = 'info@webelite.se';
$subject = 'Lilla form'.$name;

$body_message = 'From: '. $name . "\n"; 
$body_message .= 'company: '. $company . "\n";
$body_message .= 'E-mail: '. $email ."\n";
$body_message .= 'Message: '. $content;

$headers = 'From: '. $mail_name . "\r\n";
$headers .= 'Reply-To: '. $email ."\r\n";

$success = mail($mail_to, $subject, $body_message, $headers);

echo "<pre>";
print_r($_POST);

header('Location:mydomain');

?>

私もifを使ってみました

($success){
print "<meta http-equiv=\"refresh\" content=\"0;URL=YOUR_PAGE_HERE.html\">"; 

これは機能しましたが、送信を押してからリダイレクトされるまでに0.5秒のフラッシュがありました。

すべてのヘルプは評価されます。

ありがとうございました

4

7 に答える 7

4

ヘッダーは、クライアントのブラウザーと通信するために使用されます。これらは、受信時にブラウザが実行する小さなコマンドのようなものです。データ(テキスト、数値など)を出力すると、クライアントのブラウザがそのデータを印刷します。その後、ブラウザはあなたが送信したヘッダーに関心を持たなくなります。

header()関数は、カスタム ヘッダーを送信するために使用される関数です。したがって、この関数が呼び出されると、ヘッダーがクライアントのブラウザーに送信されます。

これで、実際に何をしようとしているのかについて非常に簡単に理解できました。問題がどこにあるのかを確認できるはずです。

これらのカスタム ヘッダーを送信する前に、他のデータを出力しています。これがエラーの原因です。

したがって、この:

echo "<pre>";
print_r($_POST);

これより前であってはなりません:

header('Location:mydomain');
于 2012-10-14T17:32:21.590 に答える
4

リダイレクトする前に、画面に何も出力できません。

すべてのecho'es とprint_r's を削除すれば問題ありません。

編集:

また、@jhonraymosが述べたように、header()適切に使用してください。これを変更して、リダイレクト先の実際のページを非表示にした可能性があります。正しいパス定義を持つローカル ファイルを追加するか、他のドメインにリダイレクトする場合は、完全な URL を定義する必要があります。不明な点がある場合は、 Uniform Resource Locatorを参照してください。

別の編集:

質問を更新しました。などのインドの魔法を試すのをやめる

if ($success){
    print "<meta http-equiv=\"refresh\" content=\"0;URL=YOUR_PAGE_HERE.html\">";

以前は何も出力しないという事実を受け入れるだけheaders()で、あなたの魂は永遠に安全です. これは、http-meta を混在させる場所ではありません。PHP はこれを問題なく行うことができます。

これは最初は制限のように聞こえるかもしれませんが、そうではありません。それは祝福です。

于 2012-10-14T17:22:32.460 に答える
4

これはエラーです

print_r($_POST);

header('Location:mydomain');

あなたは何かの前に何かを印刷していますheader("location: mydomain.com")

于 2012-10-14T17:23:38.390 に答える
3

header はい、これをページの上部に配置する前に、エコーしたり、何かを印刷したりする必要はありません。

<?php ob_start(); ?>

次に、ページの下部に次の場所を配置します。

<?php ob_end_flush(); ?>
于 2012-10-14T17:28:33.867 に答える
2

これはphpで非常に一般的な問題です。整理するいくつかの方法:

  1. ページの上に使用します。

  2. php 開始タグの前または php 終了タグの後に誤って空白を追加していないか確認してください。

  3. それでも解決しない場合は、ヘッダーの代わりに java-script window.location を使用してください。

それが役立つことを願っています。ハッピーコーディング!!

于 2012-10-16T13:16:10.347 に答える
2

の目的は何 echo "<pre>"; print_r($_POST); ですか?

エコー関数が呼び出される前にリダイレクトが発生する可能性があります。

于 2012-10-14T17:30:04.753 に答える
1

header変数の値を画面に出力し、その後リダイレクトするため、この警告が表示されます。

print something ( , ...)の後にヘッダーを送信することはできません。それを修正するには、次のコードに従います。echoprint_r

$name = $_POST['name']; //no echo 
$company = $_POST['company'];//no echo 
$email =  $_POST['email'];//no echo 
$content = $_POST['content'];//no echo 




$mail_to = 'info@webelite.se';
$subject = 'Lilla form'.$name;



$body_message = 'From: '. $name . "\n"; 
$body_message .= 'company: '. $company . "\n";
$body_message .= 'E-mail: '. $email ."\n";
$body_message .= 'Message: '. $content;



$headers = 'From: '. $mail_name . "\r\n";
$headers .= 'Reply-To: '. $email ."\r\n";



$success = mail($mail_to, $subject, $body_message, $headers);



//echo "<pre>";
//print_r($_POST);
于 2012-10-14T17:25:04.913 に答える