1

1 つのページに同じフォーム (名前/メール/メッセージ フィールド) の複数のインスタンスがあります。それらはすべて、1 つのクラス (「.contact-form」) と異なる (動的に生成された ID) を共有します。

jQuery Tools Validator を使用してそれらを検証します (これにはまったく問題がないため、関係ありません)。

$(".contact-form").validator();

問題は私の sendmail.php ファイルにあると思います。それが、すべての POST 値を取得して検証する方法です。

//grab the fields
$address = trim($_POST['address']);
$title = trim($_POST['title']);
$message = $_POST['message'];

//check if empty
if(empty($name) || empty($title) || empty($message)) { 
   $wrong = true; 
}

if($wrong) { 
        http_response_code(400);
} else { 
    // do stuff
    http_response_code(200);
}

今、私が直面している問題は次のとおりです。

  • ページの最初のフォームを除いて、他のフォームを送信できません。残りのフォームは (適切に入力されていても)、次のエラーが発生します。

注意: 未定義のインデックス:行3のmysitesaddressのアドレス

  • 最初のフォームを送信した後 - 他のフォームは期待どおりに動作しません - すべてのフィールドが空のままであっても、それらは通過します (バリデーターはフロントエンドにエラーを表示しますが、sendmail.php が " 200OK」。

それを修正する方法/最初のフォームだけでなくすべてのフォームをチェックする方法/送信後にPOSTデータをクリアする方法はありますか? PHPでそれを行う簡単な方法があると確信しています。私はその言語に精通していないので(主にフロントエンドの人)、どんな助けも大歓迎です。

ありがとうございました!

(私はしばらく答えを探していましたが、「POST」はトリッキーな名前のようで、Wordpress/blogs/forums 関連のものをほとんど取得しています...)

[アップデート]

各フォームの HTML コードは次のとおりです。

<div class="wrapper">

    <form class="contact-form" action="sendmail.php" method="post" novalidate="novalidate">
        <input name="title" type="text" required="required" />
        <input name="address" type="email" required="required" />  
        <textarea name="message" required="required" ></textarea>               
        <input type="Submit" value="Submit" />
    </form> 

    <div class="sucess">
        Success message that replaces form ^.
    </div>
</div>
4

2 に答える 2

1

HTML フォーム コードが見えませんが、フォーム タグは次のようになっていると思います

<form action="sendmail.php" method="post">

これにより、送信されたフォームからすべてのフィールドが取得され、$_POST 経由で sendmail.php に送信されます。データを処理した後 (edwardmp は、変数を割り当てる前にデータがそこにあることを確認するための優れたヒントを提供しました)、ページをある種の成功したランディングにリダイレクトするか、元のフォーム ページに戻します。これを行うために私が使用してきた方法は次のとおりです。

if($wrong) { 
    $error = "Please check your entry and try again.";
    header("Location: http://example.com/formpage.html?error=" . htmlencode($error),true,303);
    exit();
} else { 
    // do stuff
    $msg = "Your form was successfully submitted.";
    header("Location: http://example.com/formpage.html?msg=" . htmlencode($msg),true,303);
    exit();
}

この設計により、ページをリロードすることで $_POST データがクリアされ、$_GET['msg'] または $_GET['error'] を介して表示する元のページにメッセージを送信できるようになります。これにより、フォームが誤って送信されるのを防ぐことができます。

于 2013-05-18T01:58:40.857 に答える