2017-08-03 14 views
1

私は、ポスト/リダイレクト/ PHPのパターンの実装方法に少し困惑しています。フォームを送信した後に、ヘッダーの機能を追加するだけで、いくつかの回答が表示されています。私はそれを行ったが、入力フィールドが空であるかどうかを検証すると、コードを実行した後にヘッダ関数を追加したにもかかわらず、何も印刷されない。私は単にこれをどのように統合するのか見つけることができないので、とにかく頼んでいます。入力フィールドが空の場合、PHPはエコーしません。 PRGパターン

私は、コードを書いていたが、私はそれが動作しませんがわかってきたように、私はこの問題を解決する方法をしっかりと ポスト/リダイレクト/パターンを実装する方法を求めていると私は知っている
<?php 

require '../BACKEND/DB/DB_CONN.php'; 

if(isset($_POST['submit-register'])) { 

    if(empty($_POST['email'])) { 
     echo 'Email cannot be nothing.'; 
    } 

    header("Location: index.php"); 
    die(); 
} 

if(isset($_POST['submit-login'])) { 

    if(empty($_POST['loginUser'])) { 
     echo 'Field Empty.'; 
    } 

    header("Location: index.php"); 
    die(); 

} 

?> 

<div class="forms"> 
     <form method="post" action="index.php" role="form" class="forms-inline register "> 
     <h4>Register</h4> 
      <input type="text" name="email" placeholder="Email Address" autocomplete="off" /> 
      <input type="text" name="username" placeholder="Username" autocomplete="off" /> 
      <input type="password" name="password" placeholder="Password" autocomplete="off" /> 
      <input type="submit" name="submit-register" value="Register" role="button" name="login-btn" /> 
     </form> 
     <form method="post" action="index.php" role="form" class="forms-inline login "> 
     <h4>Login</h4> 
      <input type="text" name="loginUser" placeholder="Username" /> 
      <input type="password" name="loginPass" placeholder="Password" /> 
      <input type="submit" name="submit-login" value="Register" role="button" /> 
     </form> 
    </div> 

できます。

+0

ページに情報が印刷されていると、ヘッダーが正しく動作しません。また、ヘッダーが機能している場合、ページが実際にロードされる前にリダイレクトされるため、その出力は決して表示されません。 – GrumpyCrouton

+0

@GrumpyCrouton私はさらに印刷の前にヘッダーを置いた、何も印刷されません。 – Adam

答えて

0

ヘッダー(パス)を使用すると、ページがリセットされます。 したがって、前に印刷されたエコーは破棄されます。

2

submit-registerを参照してください。POST操作で検証され、検証メッセージを渡してindex.phpにリダイレクトされます。ヘッダーメソッドから渡されたメッセージを取得する必要があります。

PRGパターンでは、データを持つPOST操作を実行するときに、リダイレクトしてPOST後にGETしてPRGを維持する場合は、最後の宛先GET URLにデータを渡す必要があります。

コードでは、両方の方法を参照してください。最初にインデックスにメッセージを渡しますが、検証でエラーが発生した場合はPRGではありません。

//PRG.......................................... 
if(isset($_POST['submit-register'])) { 

    if(empty($_POST['email'])) { 
     echo 'Email cannot be nothing.'; 
     $msg = "Email cannot be nothing"; 
    } 

    header("Location: index.php?msg=$msg"); 
    //Get your this message on index by $_GET //PRG 

} 
//Not full PRG with no passing data to destination......................... 
if(isset($_POST['submit-login'])) { 

    if(empty($_POST['loginUser'])) { 
     echo 'Field Empty.'; 
    } 
    else{ 
     header("Location: index.php"); 
    } 

} 

メモヘッダーメソッドの前にはページに何も印刷しないでください。これは単にヘッダーメソッドの前にエコーがないことを意味します。

最初の1つはPRGで、2つ目はPRGですが、データは宛先に渡されません。

header("Location: index.php?msg=$msg"); 
+0

何も印刷する前にヘッダーを配置しましたが、何も印刷されませんでした。 – Adam

+0

更新されたコードを参照してください......そしてコードに関するコメントは、あなたのmsgをindex.phpに渡す必要があります。投稿とリダイレクトの後、ヘッダで新しいgetリクエストを開始してもメッセージは送られません。あなたのPRGパターンの最後のGET(ヘッダーメソッドURL)操作までのデータ。 – webDev

+0

さて、URLバーではうまく動作しますが、ページ上の別の場所にメッセージを印刷するにはどうすればよいですか? – Adam

関連する問題