使用ajax,jQuery和php一起进行实时表单验证

时间:2011-06-22 22:03:39

标签: php jquery ajax

好的,我有一个用户填写的表单,这些是用户名字段和颜色验证字段。当焦点更改时,用户名字段会自动检查我的数据库,以提醒用户是否使用了用户名。颜色验证字段将屏幕上显示的图像颜色与用户输入的颜色进行比较。如果这两个字段都成功完成,则显示要注册的按钮。这是我正在使用的jQuery

$(document).ready(function()
{
    $("#username").blur(function()
    {
    //remove all the class add the messagebox classes and start fading
    $("#msgbox2").removeClass().addClass('messagebox').text('Checking...').fadeIn("slow");
    //check the username exists or not from ajax
    $.post("checkusername.php",{ username:$(this).val() } ,function(data)
    {
      if(data=='no') //if username not avaiable
      { 
        $("#msgbox2").fadeTo(200,0.1,function() //start fading the messagebox
        {//alert(data);
          //add message and change the class of the box and start fading
          $(this).html('Your username was taken<? $_SESSION['test2'] = 0; ?>').addClass('messageboxerror') .fadeTo(900,1);
        });     
      }
      else 
      {
        $("#msgbox2").fadeTo(200,0.1,function()  //start fading the messagebox
        { //alert(data);
          //add message and change the class of the box and start fading
          $(this).html('User name is available!<? $_SESSION['test2'] = 1; ?>').addClass('messageboxok').fadeTo(900,1);  
        });


      }

    });

});
});

以上代码的php文件是:

session_start();
require("../db.php");
$username = $_POST['username'];

$sql ="SELECT * FROM user WHERE username = '$username'";
$go = mysql_query($sql,$db);
$numrows = mysql_num_rows($go);


if ($numrows) {
// no
echo("no");
} else {
// yes
echo "yes";
}

第二个颜色字段设置相同:

$(document).ready(function()
{
$("#color").blur(function()
{
    //remove all the class add the messagebox classes and start fading
    $("#msgbox").removeClass().addClass('messagebox').text('Checking...').fadeIn("slow");
    //check the color is right or not
    $.post("checkcolor.php",{ color:$(this).val() } ,function(data)
    {
      if(data=='no') //if color is incorrect
      { 
        $("#msgbox").fadeTo(200,0.1,function() //start fading the messagebox
        {//alert(data);
          //add message and change the class of the box and start fading
          $(this).html('Your color was incorrect<? $_SESSION['test1'] = 0; ?>').addClass('messageboxerror') .fadeTo(900,1);
        });     
      }
      else 
      {
        $("#msgbox").fadeTo(200,0.1,function()  //start fading the messagebox
        { //alert(data);
          //add message and change the class of the box and start fading
          $(this).html('Verification Successful<? $_SESSION['test1'] = 1; ?>').addClass('messageboxok').fadeTo(900,1);  
        });
      }

    });

});
});

以上代码的php文件是:

session_start();

$sescolor= $_SESSION['color'];
$usercolor = $_POST['color'];
$_SESSION['usercolor']= $_POST['color'];
$usercolor = strtoupper($usercolor);
if ($sescolor==$usercolor) {
    echo("yes");
} else {
  echo "no";
}

我想要发生的是两个字段“username”和“color”来根据状态改变'test1'和'test2'的会话变量。因此,如果用户名无效,则test2将被指定为0而不是1.相同的颜色验证。然后我的想法是我会进行单独的功能检查,看看'test1'和'test2'是否都是1.如果是,用户会看到提交按钮,如果没有,他们会看到一条错误信息。

这就是“checkboth.php”的样子

$test1= $_SESSION['test1'];
$test2= $_SESSION['test2'];


echo $test1;
echo $test2;
if(($test1 ==1) && ($test2 ==1))
{
echo("yes");
}
else{
echo("no");
}

我对第三个函数使用相同的jQuery结构。然而,这有效,我总是回来'是'。在会话的var_dump上,我发现test1和test2总是等于0.我该如何完成这个? 提前谢谢!

2 个答案:

答案 0 :(得分:0)

为什么不使用漂亮的jquery validation plugin?它有remote validation method

答案 1 :(得分:0)

我更喜欢ajax发布....毕竟,你试图在不中断UI体验的情况下对数据进行异步检查。那是ajax中的“A”。

$.ajax({
url: "checkusername.php",                   //
timeout: 30000,
type: "POST",
data: data,
dataType: 'json',
error: function(XMLHttpRequest, textStatus, errorThrown)  {
    alert("An error has occurred making the request: " + errorThrown)
},
success: function(data){
        //do highlights
}
});

如果您计划使用JSON作为我显示的返回数据,那么您必须在php doc中返回json。现在,你已经在页面上返回yes / no,如果你将回调类型指定为文本,这将有效。否则,使用你的方法就会感到困惑。

关于你的颜色验证,我会在第一次成功后“堆叠”它,因为在检查用户名之前你不能发生它。