php 从数据库获取隐藏的product_id到jquery自动完成插件列表

enyaitl3  于 2023-02-21  发布在  PHP
关注(0)|答案(1)|浏览(136)

我正在使用jquery autocomplete插件使用PHP,MySql和 AJAX 从数据库中选择数据。该插件除了获取product_id之外运行良好。当该插件获取autocomplete列表时,我还想附加一个隐藏的product_id到产品中以区分产品,例如在多个产品具有相同product_name的情况下。
下面是仅与product_name一起使用的代码。

function select_name(){

     $("[id^='product_name']").focus(function() {
      var id = $(this).attr('id');
      id = id.replace("product_name",'');
      $("[id^='product_name']").autocomplete({
          
          source: 'store_supply/fetch_autocomplete_name.php',
          select: function (event, ui) {
              var pro_nm = ui.item.value; 
              $.ajax({
                      url:"store_supply_manage/fetch_product_code.php",
                      method:"POST",
                      data:{pro_nm:pro_nm}, 
     //here I want to post a product_id when selecting the     product_name
                      dataType:"json",
                      success:function(data){

                          $('#mu_emri_'+id).val(data.mu_name);
                          $('#product_code_'+id).val(data.barCode);
                          $('#vat_vlera_'+id).val(data.vat_value_4);
                          $('#product_id'+id).val(data.product_id);

                          calculateTotal();
                      }
              });
          }  
          
       });
     });
    }

        //fetch_autocomplete.php

    if (isset($_GET['term'])) {

      $term = $_GET['term'];

      $query = $db->prepare("SELECT product_name FROM products 
                             WHERE product_name LIKE '%$term%'   LIMIT 10");
      $query->execute();

       $nr = $query->rowCount();

      if ($nr > 0) {
        while ($row = $query->fetch()) {
        $result[] = $row['product_name'];
        }
       }
      else {
        $result = array();
      }
      //return json result
       echo json_encode($result);
      }
gmxoilav

gmxoilav1#

在你的代码中,你准备了你的SQL语句,但是插入了$term变量,而不是参数化你的查询。在下面的例子中,我参数化了你的查询。
如文档中所示,数据可以是:

  • 字符串数组:[“选择1”、“选择2”]
  • 具有label和value属性的对象数组:[ {标签:“选择1”,值:“值1”},...]

因此,您只需将fetch_autocomplete. php更改为如下内容:

if (isset($_GET['term'])) {

    $term = '%' . $_GET['term'] . '%';

    // parameterized query in nowdoc*
    $sql = <<<'SQL'
        SELECT id AS `value`, product_name AS `label`
        FROM products
        WHERE product_name LIKE :term
        LIMIT 10
        SQL;

    // prepare the query
    $query = $db->prepare($sql);

    // bind variables and execute
    $query->execute(['term'] => $term);

    // As fetchAll() returns an empty array if there are no matching
    // rows we do not need to check rows returned
    $result = $query->fetchAll(PDO::FETCH_OBJ);
    
    // return json result
    echo json_encode($result);
}
  • 瑙多克

id更改为产品id列的名称,现在,在select处理程序中,ui.item.value将是产品id而不是其名称。

相关问题