if(isset($_POST))
{
if(verify_post_data() == 'success')
{
if(do_something_with_verified_post_data() == 'success')
{
//do something else
header('location: success.php');
}
}
header('location: failure.php');
}
ユーザーが投稿したデータを複数のステップで処理したい(最初にすべてが正しいかどうかを確認してから、データを処理します)。
投稿データの検証とそれを使った何かが成功した場合、ユーザーをsuccess.phpにリダイレクトしたいと思います
検証が失敗した場合、またはデータで何かを実行できなかった場合は、失敗にリダイレクトしたいと思います。
何が起こっているのか:
コメントしてheader(...)関数を削除すると、代わりに
//header('location: success.php');
echo 'success!';
と
//header('location: failure.php');
echo 'failure!';
私のスクリプトは「success!failure!」を出力します 私のデータが正しく、データを使って何かをしたときにエラーが発生しなかった場合。完全に理にかなっています...成功のエコーがスクリプトを中断しなかったため、失敗は引き続き表示されます。
したがって、成功ヘッダーのコメントを解除すると(失敗ヘッダーはコメントのままになります)、実際にsuccess.phpに送信されます。
その後、failureヘッダーのコメントも解除すると、成功した場合でも、failure.phpに送信されます。
そんなことがあるものか?
ヘッダー関数がスクリプトを中断し、その後に続くコードを無視することを期待しています。私の仮定は間違っていますか?どういうわけか手動でスクリプトを終了する必要がありますか?
PHPはコードを1行ずつ処理しませんか?または、中括弧内のヘッダーが最後になり、他のヘッダーが最初になりますか、それとも何ですか?
または、これが発生しておらず、どこかでエラーが発生している必要がありますか?