【问题标题】:How saves an ID and no the Data from jquery ui autocomplete?如何保存 ID 而没有来自 jquery ui 自动完成的数据?
【发布时间】:2017-02-16 15:57:11
【问题描述】:

我有这个代码:

buscarcliente.php

<?php
include("../../conexion.php");

$nombre=$_GET["term"]; 
$sql_cliente="SELECT cod, nombre FROM rc_clientes WHERE nombre LIKE '%$nombre%'";
$buscar = mysqli_query($conexion,$sql_cliente);

$json=array();

while($row = mysqli_fetch_array($buscar)) {
  array_push($json, $row['nombre']);
}
echo json_encode($json);

?>

renta_form.php jQuery:

$(function() {
  $( "#cliente" ).autocomplete({
    source: 'modulos/inspeccion/buscarcliente.php'
  });
});

renta_form.php HTML:

 <tr>       
   <td><b>Cliente:</b><br><input id="cliente" name="cliente" type="text"></td>
 </tr>

此代码向我显示每个 id 的值以自动完成 input,但它保存的是 name 而不是 id,我可以做些什么来显示值来帮助用户但保存id 在数据库中?

祝你有美好的一天!

更新代码:

现在向我显示我正在呼叫的名称列表,但是当我单击我想要的名称时,会自动替换为 id cliente_cod 的 cod

HTML:

<tr>        
        <td><b>Cliente:</b><br><input id="cliente" name="cliente" type="text"></td>
        <input id="cliente_cod" name="cliente_cod" type="hidden">
</tr>

JavaScript:

$(function() {
    $( "#cliente" ).autocomplete({
    source: 'modulos/renta/buscarcliente.php',
        select: function(event, ui)
        {       
            $("#cliente").val(ui.item.label);           
            $("#cliente_cod").val(ui.item.value);
        }     
    });
  });

PHP

<?php
include("../../conexion.php");

$nombre = $_GET["term"]; 
        $sql_cliente="SELECT cod, nombre FROM rc_clientes WHERE nombre LIKE '%$nombre%'";
        $buscar = mysqli_query($conexion,$sql_cliente);

        $json=array();
            while($row = mysqli_fetch_array($buscar)) {
                array_push($json, array('value' => $row['cod'], 'label' => $row['nombre']));
            }

            header('Content-Type: application/json');
            echo json_encode($json);

?>

【问题讨论】:

  • 欢迎来到 Stack Overflow。请包含一些从您的 PHP 脚本返回的示例数据。它也可能有助于查看您的 JavaScript 代码。

标签: php jquery sql jquery-ui


【解决方案1】:

如果您的数据类似于:

cod     nombre
1       Homer Simpson
2       Marge Simpson
3       Bart Simpson
4       Lisa Simpson
5       Maggie Simpson

当你运行 SQL Query 时,如:

SELECT cod, nombre FROM rc_clientes WHERE nombre LIKE '%b%'

你会得到如下结果集:

3       Bart Simpson

当我们通过 JSON 传回它时,我们需要一个 value 和一个 label。为此,我们希望在 PHP 中执行以下操作。您需要调整您的 PHP,因为它非常容易受到 SQL 注入的影响

PHP 代码段

$json=array();
while($row = mysqli_fetch_array($buscar)) {
  array_push($json, array('value' => $row['cod'], 'label' => $row['nombre']));
}
header('Content-Type: application/json');
echo json_encode($json);

生成的 JSON 数据应该是:

[
  {
    "value": 3,
    "label": "Bart Simpson"
  }
]

现在我们可以在 select 回调中处理我们习惯的做法:

HTML 片段

<table>
  <tr>
    <td><b>Empleado:</b>
      <br>
      <input id="empleado" type="text">
      <input id="empleado_cod" type="hidden">
    </td>
  </tr>
</table>

JavaScript

$(function() {
  $("#empleado").autocomplete({
    source: 'modulos/inspeccion/buscarcliente.php',
    focus: function(event, ui){
      $("#empleado").val(ui.item.label);
      return false;
    },
    select: function(event, ui){
      $("#empleado").val(ui.item.label);
      $("#empleado_cod").val(ui.item.value);
      return false;
    }
  });
});

查看更多:

【讨论】:

  • 非常感谢!!但是我有一个小问题,当我查找名称时,名称列表会出现,但是当我选择名称时,输入(#empleado)(标签)会自动更改为 cod(值)。您认为这里发生了什么?
  • @IvanJ。这表明您没有将value 委托存储在某个地方。请编辑您的帖子并包含您更新的示例代码。
  • 我忘记了一个元素:return false;。正在更新答案。
猜你喜欢
  • 2012-10-22
  • 1970-01-01
  • 2013-10-10
  • 2014-06-05
  • 1970-01-01
  • 1970-01-01
  • 2011-06-23
  • 1970-01-01
  • 2011-02-21
相关资源
最近更新 更多