簡體   English   中英

從具有自動完成功能的mysql表返回用戶ID

[英]Return User's id from mysql table with autocomplete

我只是想單獨處理id列的值,以便在mySQL的隱藏字段中使用它。 但是當我獲取ame,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>

這是更簡單的方法

search.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);
>                     },
>                 });
>             });

問題是您只返回一維數組中的最后一個結果以返回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對的一個數組,因此它假定ID為“ name”的值為“ Firstname”的項,依此類推。 您想做的是:

$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(如果我沒記錯的話)。

EDITTED

我建議將您的代碼更新為以下內容:

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'時,自動完成輸出才有效。 如果將其命名為其他名稱,它將無法正常工作。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM