使用自动完成功能从 mysql 表中返回用户 ID

Posted

技术标签:

【中文标题】使用自动完成功能从 mysql 表中返回用户 ID【英文标题】:Return User's id from mysql table with autocomplete 【发布时间】:2013-06-17 12:54:08 【问题描述】:

我只想单独处理id 列的值,以便在mysql 的隐藏字段中使用它。但是当我获取 name,surname,id 它们出现在搜索文本字段中时,id 值也出现了。 我只想在隐藏字段的值区域中使用 id。 只有姓名,姓氏必须出现在文本字段中。如何立即将 id 的值设置为隐藏字段?

autocomplete.php

<?php 
include 'config/db.connect.php';
$return_arr = array();


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

    $stmt = $db->prepare('SELECT id,user_username,name,surname FROM user WHERE name LIKE :receiver or surname LIKE :receiver or user_username LIKE :receiver');
    $stmt->execute(array('receiver' => '%'.$_GET['term'].'%'));

    while($row = $stmt->fetch()) 
         $return_arr['name'] = $row['name'];
         $return_arr['surname']= $row['surname'];
         $return_arr['id']= $row['id'];
    

 catch(PDOException $e) 
    echo 'ERROR: ' . $e->getMessage();

echo json_encode($return_arr);

 

?>

我的表单页面中的脚本

<script type="text/javascript">
$(function() 

//autocomplete
$("#receiver").autocomplete(
    source: "autocomplete.php",
    minLength: 1,

    select: function(event, ui)  
    $("#receiver_id").val(ui.item.value); 


);             

);
</script>

表格

<form action="action_send_message.php" method="POST"  >
     <label for="receiver">Receiver</label>
     <input type="text" name="receiver" id="receiver" placeholder="Receiver" class="span12" />
     <input type="hidden" name="receiver_id" id="receiver_id" value=""/>
     <textarea id="messagebody" name="message_body" class="wysihtml5 span12" rows="5" placeholder="Mesajınızı Yazın"></textarea>
     <button type="submit" class="btn btn-large color-10">Gönder</button>
</form>

【问题讨论】:

不是SELECT id,user_username,name,surname,而是SELECT user_username, name, surname? 或者,如果您确实想要 ID 但希望隐藏它,为什么您的 &lt;input type="hidden"&gt; 不起作用? autibyte,从选择中删除 id 是行不通的,因为 OP 表示他们需要在隐藏字段中使用它。 @autibyte 如果我从 SQL 查询中删除 id 我无法返回 ID 值,那么如何将 ID 写入 SQL 表?我只想在隐藏字段的值区域中查看用户 ID 【参考方案1】:

这是一种更简单的方法

搜索.php

while($row = $stmt->fetch()) 

           $return_arr[] = array('value' => $row['name'], 'id' => $row['id']);

        

     catch(PDOException $e) 
        echo 'ERROR: ' . $e->getMessage();
    



    echo json_encode($return_arr);

$(function() 
>                 //autocomplete
>                 $("#autocomplete").autocomplete(
>                     source: "search.php",
>                     minLength: 1,
>                     select: function(event, data) 
>                     $("#hidden").val(data.item.id);
>                     $("#autocomplete").val(data.item.value);
>                     ,
>                 );
>             );

【讨论】:

【参考方案2】:

已编辑

我建议将您的代码更新为以下内容:

autocomplete.php

....
     $return_arr[] = array('value' => $row['name'] . ' ' . $row['surname'],
                           'id' =>  $row['id']);
....

echo json_encode($return_arr);

表单页面中的脚本

$("#receiver").autocomplete(
    source: function(request, response) 
        jQuery.ajax(
            url: 'autocomplete.php',
            dataType: 'json',
            success: function(data) 
                response(data);
            
        );
    ,
    minLength: 1,
    select: function(event, data)  
        $("#receiver_id").val(data.item.id); 
    
);

请注意,仅当 $return_arr 项目上的数组键为 'value' 时,自动完成输出才会起作用。如果这被命名为其他名称,它将不起作用。

【讨论】:

我尝试了您的解决方案,但它不起作用。自动完成后,我使用 post 方法按下提交按钮,并尝试使用 echo $_POST['receiver_id'];但它显示注意到 我更新了我的代码,但它仍然无法工作:(现在它也无法搜索任何东西 如何将source: 'autocomplete.php' 更改为:` source: function(request, response) jQuery.ajax( url: 'autocomplete.php', dataType: 'json', success: function(data ) 响应(数据); ); ` 我更新了上面的代码。看起来评论一团糟。【参考方案3】:

问题是您只返回一维数组中的最后一个结果以返回 JSON 对象。 您的对象将如下所示:


    name: "Firstname",
    surname: "Surname",
    id: "id"

而不是结果数组:


    "0":  name: "Firstname", surname: "Surname", id: "id" ,
    "1":  name: "Firstname", surname: "Surname", id: "id" ,
    "2":  name: "Firstname", surname: "Surname", id: "id" ,

您只会看到一个结果,而不是几个。 jQueryUI 默认假设它们都是一个 id-value 对的数组,因此它假设带有“Firstname”的项目作为 ID 为“name”的值,依此类推。 你想做的是:

$i = 0;
while($row = $stmt->fetch()) 
     $i++
     $return_arr[$i]['name'] = $row['name'];
     $return_arr[$i]['surname']= $row['surname'];
     $return_arr[$i]['id']= $row['id'];

而不是您在代码中使用的 while 循环。 然后,自动完成将按照默认行为隐藏 ID(如果我没记错的话)。

【讨论】:

您的结果数组在 PHP 结果中的外观如何(手动尝试搜索词)?

以上是关于使用自动完成功能从 mysql 表中返回用户 ID的主要内容,如果未能解决你的问题,请参考以下文章

使用 LIMIT 从 MySQL 表中选择平均值

如何从 MySQL 数据库中获取数据并在 javascript 自动完成中使用?

Mysql中怎么使设置了自动增加的id,实现动态更新?

在 MySQL 表中复制行后如何返回行 ID?

使用 php、mysql 和 jQuery 实现自动完成

MySQL 从分配自动增量 ID 的表插入并更新第三个表中的 FK