使用Jquery / $ .ajax和php验证

时间:2012-07-20 05:51:46

标签: php jquery ajax

我有一个带有无线电的表单并尝试以jq / $。ajax开头验证,然后在php中发布信息。

form.php的

<tr>
  <td class="h"><span class="txt_wht">t1</span></td>
        <input type="hidden" name="gm[0]" value="t1" />
  <td class="vs"><span class="txt_yel_sm">vs</span></td>
  <td class="a"><span class="txt_wht">t2</span></td>
        <input type="hidden" name="gm[1]" value="t2" />

  <td><input type="radio" name="g1" value="a" /></td>
  <td><input type="radio" name="g1" value="b" /></td>
  <td><input type="radio" name="g1" value="c" /></td>
  </tr>
<tr>
  <td class="h"><span class="txt_wht">t1</span></td>
        <input type="hidden" name="gm[0]" value="t1" />
  <td class="vs"><span class="txt_yel_sm">vs</span></td>
  <td class="a"><span class="txt_wht">t2</span></td>
        <input type="hidden" name="gm[1]" value="t2" />

  <td><input type="radio" name="g2" value="a" /></td>
  <td><input type="radio" name="g2" value="b" /></td>
  <td><input type="radio" name="g2" value="c" /></td>
 </tr>

validade.js

$(document).ready(function () {
    //global vars

    form.submit(function () {
        if (validate1() && validate2()) {
            //vars
            var exst_email = $('#exst_email').attr('value');
            var g1 = $("input[name='g1']:checked").attr('value');
            //more vars

            $.ajax({
                type: "post",
                url: "scripts/sbmt.php",
                data: "exst_email=" + exst_email,
                success: function (exst_rsp) {

                    //if its not exist
                    if (exst_rsp == "not_exist") {
                        valInfo.text("Error1!");
                        valInfo.addClass("error");
                        email_reg_err = true;
                    } else {
                        valInfo.text("");
                        valInfo.removeClass("error");
                        email_reg_err = false;
                    }
                    //more validation with error msgs

                    //validate 1 & validate 2 functions

和sbmt.php

session_start();
// connect to db
require_once('conn.php');

if($stmt = $mysqli->prepare('SELECT email FROM table WHERE email=?')){
   $stmt->bind_param("s", $_POST['exst_email']); 
   $stmt->execute();
   $stmt->store_result();

   $numRows = $stmt->num_rows();
   if($numRows < 1){
       echo 'not_exist';
       exit();
   }
   $stmt->close();
}
//more validation

现在,

  1. 由于Dreamweaver,我知道我没有输入错误或未关闭的标签。

  2. 我的验证1&amp; 2个功能正常。

  3. 由于萤火虫,

    a)我知道我的数据发布在sbmt.php

    b)我没有回复显示错误信息。

  4. 我正在使用完全相同的方式(不同的js / php文件)验证另外3个表单(只有在重要的情况下才是textareas)并且它们工作正常!

    关于这里可能有什么问题的任何建议?

2 个答案:

答案 0 :(得分:1)

在提交功能中,您可以尝试:

form.submit(function(e){

   e.preventDefault(); // to prevent the form from submitting itself

  // you all validation code

});

注意

我认为$_POST['email']代码中的PHP应为$_POST['exst_email'],因为AJAX中发布的数据包含exst_email密钥data: "exst_email="+ exst_email, 但不是email

因此,如果您PHP是正确的,那么您应该将数据发送为data: "email="+ exst_email

答案 1 :(得分:0)

<强>解决

我不知道为什么,但这是修复:

我没有将<input type="hidden">值传递给sbmt.php,因为我现在没有使用

但我也希望发布它们以确定它是否有用。它有效!