0

関数内のサーバー側フォームバリデーターからエラーメッセージを送信されたフォームに戻そうとしています。バリデーターは、残りのコードが計画どおりにデータベースに保存されないように機能しています。ただし、フォームに戻してエラーを表示することはできません

function saveComment(){
    $validate = array();
    $id = isset($_POST["articleId"]) ? $_POST["articleId"] : '';

    if ( isset( $_POST['saveChanges'] ) ) {

    if ( $_POST['name'] == "" ){
         $validate['errorMessage'] = "Please fill out your name.";
      header( "Location:".HOME_PATH."/.?action=viewArticle&articleId=".$_POST['articleID']."");
    }

私はそれをこれに戻そうとしています

if ( isset( $validate['errorMessage'] ) ) {
    echo $validate['errorMessage'];
} 

ifオン・ザ・ディスプレイ機能を削除すると、エラーが発生しますunidentified index

フォームにエラー メッセージを表示するにはどうすればよいですか。記事の表示を処理する関数に配列を渡す必要がありますか?

フィードバック

これが便利だと思う人のために、私は @OliverBS ポストメソッドをほとんど変更せずに使用しました。

@lethal-guitar にも感謝します。彼の説明は、どこが間違っていたのか、この問題を解決するために使用できるさまざまな方法を理解するのに役立ちました +1

4

5 に答える 5

1

一目でこれを試してみてください

セッションウェイ

session_start();saveCommentがあり、issetがチェックされているファイルの先頭で実行して、セッションを開始してください。

function saveComment(){

    $id = isset($_POST["articleId"]) ? $_POST["articleId"] : '';

    if ( isset( $_POST['saveChanges'] ) ) {

    if ( $_POST['name'] == "" ){
         $_SESSION['errorMessage'] = "Please fill out your name.";
         header( "Location:".HOME_PATH."/.?action=viewArticle&articleId=".$_POST['articleID']."");
    }

if ( isset( $_SESSION['errorMessage'] ) ) {
    echo $_SESSION['errorMessage'];
}

またはあなたは試すことができます

POSTウェイ

function saveComment(){

        $id = isset($_POST["articleId"]) ? $_POST["articleId"] : '';

        if ( isset( $_POST['saveChanges'] ) ) {

        if ( $_POST['name'] == "" ){
             $error = urlencode('Please fill out your name');
             header( "Location:".HOME_PATH."/.?action=viewArticle&articleId=".$_POST['articleID']. "&error=" . $error);
        }

    if ( isset( $_GET['error'] ) ) {
        echo urldecode($_GET['error']);
    }

私はこれをテストしていませんが、あなたは何をすべきかについての基本的な考えを得る必要があります。

于 2013-01-09T15:31:03.383 に答える
1

これをすべて1つのファイルで実行することをお勧めします。つまり、フォームと検証を1つのファイルとして実行します。

次に、これを行うことができます:

<?php
    //set success to 0
    $success = 0;
    $errormsgs = array();

    //check for post
    if(isset($_POST['submit'])){

        //get the data from the form post and validate it
        $valid = validateFuntion($_POST['data'])
            //the is function will validate the data. If it is not valid, it will add a message to $errormsgs

        //check for errors
        if(!$errormsgs){
            //data validation was successful, do stuff

        }
    }//if validation fails, it will fall out of the this code block and move on
?>


<html>
<body>
<?php
//check for errors
if($errormsgs){
    $content .= '<ul class="errors">';
                    foreach($errormsgs as $error){
                        $content .= "<li>" . $error . "</li>";  
                    }
    $content .= "</ul>";
    echo $content;
}
?>
<form name="name" action="" method="post">
    <input name="name" value="<?= (isset($_POST['data']) ? $_POST['data'] : '') ?>" type="text">
</form>
</body>
</html>
于 2013-01-09T15:31:44.163 に答える
1

ヘッダーの場所を指定すると、ユーザーが新しいページにリダイレクトされます。クエリ文字列でエラーを渡すか、理想的にはセッションで変数として渡す必要があります。

于 2013-01-09T15:16:47.857 に答える
0

headerステートメントを使用して、ユーザーを「エラー」ページにリダイレクトしています。問題はもちろん、これは完全に新しいページであり、状態が残っていないため、変数が存在しないことです。

これを行うには 2 つの方法があります。クエリ文字列に渡し (&error=... を追加)、それをテンプレートで解析するか、セッションに保存します。

もちろん、別の方法でテンプレートを表示する前に、実際にこれを行う必要がありますが、それはコードを完全に作り直すことになります。

于 2013-01-09T15:17:31.057 に答える