2011-01-07 14 views
0

フォームに入力した電子メールをデータベースに送信するスクリプトがあります。電子メールを送信した後にPHPスクリプトをリダイレクトする方法があるのでしょうか?スクリプトの実行後にPHPをリダイレクト

私のスクリプトがある -

<?php 
$con = mysql_connect("localhost","User","Pass"); 
if (!$con) 
    { 
    die('Could not connect: ' . mysql_error()); 
    } 

mysql_select_db("emails", $con); 

$sql="INSERT INTO mlist (email) 
VALUES 
('$_POST[email]'')"; 

if (!mysql_query($sql,$con)) 
    { 
    die('Error: ' . mysql_error()); 
    } 

mysql_close($con) 
?> 

私はまだPHPを学んでいて、誰かが明確な指示を与えることができるしてください。コントローラに

mysql_select_db("emails", $con); 

$sql="INSERT INTO mlist (email) VALUES ('$_POST[email]'')"; 

if (!mysql_query($sql,$con)) { die('Error: ' . mysql_error()); } 

mysql_close($con); 

header('Location: http://www.example.com/'); 
+0

でJavaScriptを送る送信ヘッダ機能を追加します。 'header("場所:http://www.example.com/redirect/to/otherpage_or_samepage.php?with = different_variables ");'あなたが何かを出力して別のヘッダを送信すると、エラーが発生するでしょう... – acm

答えて

1

はこれを試してみてください。

header( 'Location:http://www.yoursite.com/new_page.html');

あなたが header()を使用する前に必ず echoprintまたは var_dump文を持たせるなど、出力が既にブラウザに送信されていない場合にのみこれを使用することができますことに注意し、example.comにブラウザをリダイレクトします
+0

ハハ、私たちは両方ともexample.com、すばらしいマインドを使用しました –

+0

@jakenoble私たちのどちらがもっと革新的かはわかりません:)しかし、私の手が速いのではなく、もっと速いと言うことができます:)) – Diablo

+0

しかし、heade( '');まだスクリプトを実行できない場合にのみ動作しますか? – nogggin1

0

リダイレクト:

0
header("Location http://www.example.com"); 

2

用途:

$url = 'http://your.redirect.url'; 
header('Location: ' . $url); 
1

同じドメイン上と同じディレクトリ内の別のページにリダイレクトされますheader()マニュアルページから取得したこのコード:

/* Redirect to a different page in the current directory that was requested */ 
$host = $_SERVER['HTTP_HOST']; 
$uri = rtrim(dirname($_SERVER['PHP_SELF']), '/\\'); 
$extra = 'mypage.php'; 
header("Location: http://$host$uri/$extra"); 
exit; 
3

このリダイレクトをさらに進めてください。ヘッダー「場所」は、古典的な200応答コードの代わりに302応答コードとともに使用する必要があります。 Thiosレスポンスコードは、HTTPレスポンスに対して「グローバル」です。 302は「リダイレクト」を意味します。ほとんどのブラウザは、302のレスポンスコードがなくてもロケーションヘッダを処理しますが、それを設定する必要があります(レスポンスのajax処理に役立ちます)。

header("Location: /foo.php",TRUE,302); 

もう1歩進んでいます。実際、303レスポンスコード(see-other)はより良いリダイレクトレスポンスコードです。投稿の後にリダイレクトとも呼ばれます。この特別なリダイレクトは、あなたのブラウザにとって、リダイレクトではないことを意味します。なぜなら、彼が間違った場所で尋ねたページだからですが、POSTアクションの後に新しいページの結果が必要になるからです。

header("Location: /foo.php",TRUE,303); 

編集: thirtydotで述べたように、より良い利用がリダイレクトで絶対URLである

header("Location: http://www.example.com/foo.php",TRUE,303); 

POST(つまりGETリクエストを意味するものではありshould'nt)潜在的なデータの変更を意味することを覚えておいてください。 303に続くPOSTは正しい方法であり、BACKボタンが同じリクエストを再ポストするのを防ぎます。

+1

[RFC2616](http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#)を参照してください。 sec14.30)。もちろん実際には、おそらくどこでもほとんどサポートされています。 – thirtydot

+0

あなたが正しいです、それはPHPのマニュアルからの高速コピー貼り付けでした。そのメモをありがとう。 – regilero

0

<?php 
$con = mysql_connect("localhost","User","Pass"); 
if (!$con) 
    { 
    die('Could not connect: ' . mysql_error()); 
    } 

mysql_select_db("emails", $con); 

$sql="INSERT INTO mlist (email) 
VALUES 
('$_POST[email]'')"; 

if (!mysql_query($sql,$con)) 
    { 
    die('Error: ' . mysql_error()); 
    }else{ 
header("Location: ".$_SERVER["HTTP_REFERER"]); 
} 

mysql_close($con) 
?> 

それとも、全く何も出力しない場合は、コード

<?php 
$con = mysql_connect("localhost","User","Pass"); 
if (!$con) 
    { 
    die('Could not connect: ' . mysql_error()); 
    } 

mysql_select_db("emails", $con); 

$sql="INSERT INTO mlist (email) 
VALUES 
('$_POST[email]'')"; 

if (!mysql_query($sql,$con)) 
    { 
    die('Error: ' . mysql_error()); 
    }else{ 

echo "<script>"; 
    echo "window.location.href= '".$_SERVER["HTTP_REFERER"]."';"; 
echo "</script>"; 

} 

mysql_close($con) 
?> 
関連する問題