0

jquery livevalidateで検証し、phpスクリプトで処理する単純なフォームがあります。フォームが正常に送信されたらページをリダイレクトする代わりに、jquery を使用して div を表示したいと思います (同じページにとどまります)。

<form action="/process_form.php" method="post">


      <div id="field1-container">
           <label>Name</label>
           <input type="text" name="name" id="name">

             <script type="text/javascript">
                var f1 = new LiveValidation('name');
                f1.add(Validate.Presence);
                f1.add( Validate.Length, { minimum: 4, maximum: 30 } );
              </script>
      </div>


      <div id="field4-container" class="field f_100 twelve columns">
           <label>
                Email Address
           </label>
           <input type="text" name="email" id="email">

               <script type="text/javascript">
                var f2 = new LiveValidation('email');
                f2.add(Validate.Presence);
                f2.add( Validate.Email );
              </script>

      </div>


      <div id="field3-container" class="field f_100 twelve columns">
           <label>Message</label>
           <textarea rows="5" name="message" id="message"></textarea>

<script type="text/javascript">
                var f3 = new LiveValidation('message');
                f3.add(Validate.Presence);
              f3.add( Validate.Length, { minimum: 20, maximum: 300 } );
              </script>

      </div>

<br>

<div id="form-submit">
           <input type="submit" class="small button radius" value="Submit">
</div>

<!-- mymodal div revealed on form success -->

<script type="text/javascript">
if ($("#contactform").valid()) {
        $("#myModal").reveal();
    }
 </script>

</form> 

処理コード (process_form.php) は次のとおりです。

<? ob_start(); ?>
<?php

$to = "destemail@domain.com \r\n";//<== update the email address
$headers = "From: $email_from \r\n";
$name = $_POST['name'];
$visitor_email = $_POST['email'];
$message = $_POST['message'];


$email_from = 'an@email.com';//<== update the email address
$email_subject = "Contact via website";
$email_body = "You have received a new message from $name.\n\n".
"Here is the message:\n $message\n\n\n".

$headers .= "Reply-To: $visitor_email \r\n"; //Send the email!

mail($to,$email_subject,$email_body,$headers);

// Function to validate against any email injection attempts
function IsInjected($str)
{
$injections = array('(\n+)',
          '(\r+)',
          '(\t+)',
          '(%0A+)',
          '(%0D+)',
          '(%08+)',
          '(%09+)'
          );
$inject = join('|', $injections);
$inject = "/$inject/i";
if(preg_match($inject,$str))
{
return true;
}
else
{
return false;
}
}

?> 

<? ob_flush(); ?>

div '#mymodal' が表示されますが、ページは php ファイルにリダイレクトされます...どうすればこれを停止できますか?

4

1 に答える 1

0

私が見逃していない限り、提出を妨げているようには見えません。

送信時のデフォルト アクションを防止する JavaScript を記述し、代わりに AJAX を使用してフォーム データをプロセッサの PHP スクリプトに送信する必要があります。php は返したいものを返し、AJAX はそれをモーダル ウィンドウに表示します。

まず、Javascript の preventDefault と JQUERY ライブラリの .ajax 関数を調べます。

于 2013-01-26T03:35:15.433 に答える