2011-12-08 10 views
0

Iveはこの情報をmysqlデータベースに登録するスクリプトを手に入れました。今はすべて正常に動作し、誰かが間違っているとエラーが表示されます(たとえば、「ユーザー名が定義されていません」)PHPのリダイレクトが機能しない

しかし、間違っていると空のページにメッセージが表示されます私はそれがフォームページにリダイレクトされ、そこにメッセージを表示すると思った。ここ

は、作業スクリプトが

$forename = $_POST['forename'];  
$surname = $_POST['surname'];  
$email = $_POST['email'];  
$password = $_POST['password'];  
$username = $_POST['username']; 

$errors = array()です。

if(!$username) { 

    $errors[] = "Username is not defined"; 

} 

if(!$password) { 

    $errors[] = "Password is not defined"; 

} 

と続きます。

は今、私はちょうど私がこの

$errors = array(); 

if(!$username) { 

    $errors[] = header('Location: http://localhost/muiltabledistractions/#!/page_register_error-Username-is-not-defined') ; 

} 

if(!$password) { 

    $errors[] = "Password is not defined"; 

} 

を行うことができると思ったけど、いや、それはないすべてはそれを無視しています。

誰か私を助けてください

は、あなたがそれを

多くのおかげコナー

+0

あなたは[ヘッダードキュメント](HTTPを読みました: //php.net/manual/en/function.header.php)?この関数は何も返しません。 – GreenMatt

答えて

3

それはちょうど空のページ上にメッセージを表示するために非常に良い見ていない、

問題は何ですか?
なぜフォームを再度表示しないのですか?フィールドはすでに埋められています。
これはユーザーフレンドリーなインターフェースになるでしょう。

同じページにフィールドを入力してフォームを挿入するだけです。
これは、空白のフォームへのリダイレクトよりも一般的な方法です。

これが呼び出されるPOST/Redirect/GETここでパターンとは、それの短い例を行く:

コード

<? 
if ($_SERVER['REQUEST_METHOD']=='POST') { 

    $err = array(); 
    //performing all validations and raising corresponding errors 
    if (empty($_POST['name']) $err[] = "Username field is required"; 
    if (empty($_POST['text']) $err[] = "Comments field is required"; 

    if (!$err) { 
    // if no errors - saving data 
    // and then redirect: 
    header("Location: ".$_SERVER['PHP_SELF']); 
    exit; 
    } else { 
    // all field values should be escaped according to HTML standard 
    foreach ($_POST as $key => $val) { 
     $form[$key] = htmlspecialchars($val); 
    } 
} else { 
    $form['name'] = $form['comments'] = ''; 
} 
include 'form.tpl.php'; 
?> 

テンプレート

<? if ($err): ?> 
    <? foreach($err as $e): ?> 
<div class="err"><?=$e?></div> 
    <? endforeach ?> 
<? endif ?> 
<form> 
    <input type="text" name="name" value="<?=$form['name']?>"> 
    <textarea name="comments"><?=$form['comments']?></textarea> 
    <input type="submit"> 
</form> 
5

が必要な場合は、そのような配列のヘッダをラップすることはできませんスクリプトのより多くのためにお気軽にお尋ねください可能性があります。

関数を呼び出すだけで、リダイレクトされます。

header('Location: http://localhost/muiltabledistractions/#!/page_register_error-Username-is-not-defined') ; 
0

ヘッダー関数の戻り値を配列に配置してから、ページの実行を続けます。

リダイレクトの下で通常起こることについて気にしない場合は、私があなたが暗示していると信じているヘッダーを設定してすぐに終了する必要があります。ヘッダー関数の戻り値をそのようなエラー配列に配置しないでください。ポイントがないためです。

0

これが問題であるとは限りませんが、ヘッダーにもステータスコードを含めることが重要です。 Like:

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

307一時的なリダイレクト、302は永久に移動しました。 Chromeは、しばらく前に、ステータスコードなしでリダイレクトされたヘッダーを受け入れませんでした(私は最近知らない)。

0

あなたのエラー配列を充填した後、これを試してみてください。

if (count($errors) > 0) 
{ 
    header('Location: http://localhost/muiltabledistractions/#!/page_register_error-Username-is-not-defined'); 
    exit; 
} 

は、この部分の前に何のHTML出力があってはならない点に注意してください!

関連する問題