使用jquery,php和sql进行表单验证

时间:2014-09-10 02:18:01

标签: php jquery sql

我正在尝试验证表单的一部分,在提交表单之前,我一直在检查数据库以查看公司名称是否存在。这是来自jquery ui模式的精简演示,另外还检查公司是否已经存在。我知道SQL注入,我还没有做任何事情。目前,由于我遗漏了某些内容,表单无法提交,我还不知道该怎么做。

非常感谢任何帮助。

这是我到目前为止所拥有的

JS代码:

$(function() {
var dialog, form,
    company_name = $( "#company_name" ),
    tips = $( ".validateTips" );

function updateTips( t ) {
    tips
        .text( t )
        .addClass( "ui-state-highlight" );
    setTimeout(function() {
        tips.removeClass( "ui-state-highlight", 1500 );
    }, 500 );
}

function checkCompany( o, n ) {
    $.ajax({
        type: "POST",
        url: "crud.php?act=check",
        data: "&company_name=" + o.val(),
        success: function(response){
            if(response > 0){
                o.addClass( "ui-state-error" );
                updateTips( n );
                return false;
            } else {
                return true;
            }
        }
    })
}

function addUser() {
    var valid = true;

    valid = valid && checkCompany( company_name, "Company Name already exists." );

    if ( valid ) {
        $.ajax({
            type: "POST",
            url: "crud.php?act=create",
            data: "&company_name=" + company_name.val(),
            success: function(data){
            }
        });
        dialog.dialog( "close" );
    }
    return valid;
}
dialog = $( "#dialog-form" ).dialog({
    autoOpen: false,
    height: 350,
    width: 350,
    modal: true,
    buttons: {
        "Create an account": addUser,
        Cancel: function() {
            dialog.dialog( "close" );
        }
    },
    close: function() {
        form[ 0 ].reset();
        allFields.removeClass( "ui-state-error" );
    }
});

form = dialog.find( "form" ).on( "submit", function( event ) {
    event.preventDefault();
    addUser();
});
$( "#create-user" ).button().on( "click", function() {
    dialog.dialog( "open" );
});
});

php方面(crud.php):

include 'connection.php';
$action = $_GET['act'];
if(isset($_POST['company_name'])){
  $company_name = $_POST['company_name'];
}
switch($action){
case 'create':
    $q = "INSERT INTO company_info (company_name) VALUES
        ('".$company_name."')";
    mysql_query($q);
    break;
case 'check':
    $result = mysql_query('SELECT company_name FROM company_info WHERE company_name = "'.$company_name.'"');
    $num = mysql_num_rows($result);
    echo $num;
    break;
}

1 个答案:

答案 0 :(得分:0)

CheckCompany什么都不返回。你从成功中回归真假,但这无处可去。

你需要一个外部延期,所以你可以从你的ajax成功返回一些东西,然后通过checkcompany返回你的电话。

基本上,调用checkcompany并正常退出/返回。太久以后,成功函数会运行,但这是独立的,因为它是异步的。它不是你的checkcompanmy函数的一部分。

理想情况下,您应该触发元素订阅的ajax成功事件。

以下评论中的示例:

checkCompany(o,n) {
  var retval = false;
  $.ajax({
     sync : true,
     success: function(data) {
        retval = true;
      }
  });
  return retval;
}

OR asynch:

checkCompany(o,n) {
  $.ajax({
    success: function(data) {
      $("#ID").trigger('ajsuccess.company');
    }
  });
}

或使用退回的承诺:

if (valid) {
  checkCompany().done(function() {
    do the secondary ajax call in here
  }
}

checkCompany(o,n) {
  return $.ajax();
}