jQuery表单,存在检查

时间:2015-04-03 16:11:20

标签: javascript php jquery mysql forms

所以我创建了一个简单的表单,使用jQuery检查用户输入的值是否存在于我的数据库中。到目前为止,所有工作都在进行,但我发现自己陷入了下一个部分。

为了便于解释,我将展示我想要实现的一个例子。 对于这个例子,我将是" weeden"

weeden在我的数据库的公司表中的ID为255。

  1. 如果用户输入" weeden"进入客户领域
  2. 在客户字段的右侧(在网络表单上),文字" weeden不可用" 将会出现
  3. 我希望发生的是:" ID 255不可用"

    以下是相关代码。

    HTML表格

    <form action="addrecord.php" method="post" autocomplete="off"/>  
    <div class="form-field">
      <label for="client">Client: </label>
      <input type="text" name="client" id="client" class="check-exists" data-type="client" placeholder="#">
      <span class="check-exists-feedback" data-type="client"></span>
    </div>
    

    jQuery功能

    $.fn.existsChecker = function(){
      return this.each(function(){   
            var interval;
    
            $(this).on('keyup', function(){
                var self = $(this),
                    selfType = self.data('type'),
                    selfValue,
                    feedback = $('.check-exists-feedback[data-type=' + selfType + ']');
    
                if(interval === undefined){
                    interval = setInterval(function(){
    
                      if(selfValue !== self.val()){
                          selfValue = self.val();
    
                          if(selfValue.length >= 1){
                              $.ajax({
                                  url: 'check.php',
                                  type: 'get',
                                  dataType: 'json',
                                  data: {
                                        type: selfType,
                                        value: selfValue
                                  },
                                  success: function(data){
                                      if(data.exists !== undefined){
                                          if (data.exists === true){
                                              feedback.text(selfValue + ' is already taken.');
                                          }else {
                                              feedback.text(selfValue + ' is available');
                                          }
                                      }
                                  },
                                  error: function(){
    
                                  }
                               });
                           }
                      }
                  }, 1000);
              }
          });
      });
    };
    

    Check.php

    $db= new PDO('mysql:host=host;dbname=mydb', 'user', 'pass');
    
    if(isset($_GET['type'], $_GET['value'])){
    
    $type = strtolower(trim($_GET['type']));
    $value= trim($_GET['value']);
    
    $output = array('exists' => false);
    
    
    if(in_array($type,
                array('client')
                )
       ){
    
      switch($type){
          case 'client':
               $check = $db->prepare("
                    SELECT COUNT(*) AS count
                    FROM company
                    WHERE name = :value
                ");
           break;
    
    $check->execute(array('value'=> $value));
    $output['exists'] = $check->fetchObject()->count ? true: false;
    echo json_encode($output);
    

    非常感谢任何帮助/建议。我认为自己是初学者,这是我第一次参与网络项目。

    为了提前澄清,同一个网络表单上还有许多其他输入字段,例如:电子邮件,日期,第一个,最后一个等。 我希望我的问题很清楚。谢谢

2 个答案:

答案 0 :(得分:1)

您必须将查询更改为以下内容:

$check = $db->prepare("
            SELECT id, COUNT(*) AS count
            FROM company
            WHERE name = :value
        ");

我认为公司 -table上的主键字段名为 id

最后将id存储在output - Array

$result = $check->fetchObject();
$output['exists'] = $result->count ? true: false;
$output['id'] = $result->id;

然后你可以像这样输出id:

if (data.exists === true){
  feedback.text('ID ' + data.id + ' is unavailable');
}

答案 1 :(得分:0)

您可以处理查询中的所有内容

     $db= new PDO('mysql:host=host;dbname=mydb', 'user', 'pass');

     if(isset($_GET['type'], $_GET['value'])){

         $type = strtolower(trim($_GET['type']));
         $value= trim($_GET['value']);

         $output = array('exists' => false);


        if(in_array($type,array('client'))){

            switch($type){
                 case 'client':
                       $check = $db->prepare("
                    SELECT (CASE WHEN(COUNT(id)>0) THEN id ELSE FALSE END) AS count 
                    FROM company WHERE name = :value ");
                  break;
            }  
            $check->execute(array('value'=> $value));
            $output['exists'] = $check->fetchObject()->count ? true: false;
            echo json_encode($output);
       }

在Ajax成功

      if(data.exists !== undefined){
          if (!data.exists){
                feedback.text(selfValue + ' is already taken.');
          }else {
               feedback.text(selfValue + ' is already taken.');
          }
       }