javascript - 使用 MYSQL 防止已选择的选项 Jquery 自动完成

标签 javascript php jquery html mysql

我正在使用 Jquery Autocomplete 从 mysql 表中获取标签列表。当用户从列表中选择一个标签时,它就会保存在页面上。我试图阻止已保存的标签再次显示。

这是我的代码:

HTML

<input type="text" id="tag">
<input type="text" id="tags" style="display:none;">

Jquery

$('#tag').autocomplete({
            source : function(request, response) {
                $.ajax({
                    url : 'tags.php',
                    dataType : "json",
                    method : 'post',
                    data : {
                        searchQuery : request.term, 
                        selectedTags: $('#tags').val() //sends already selected terms
                    },
                    success : function(data) {
                        response($.map(data, function(item) {
                            var code = item.split("|");
                            return {
                                label : code[0],
                                value : code[0],
                                data : item
                            }
                        }));
                    },
                    error: function(jqxhr, status, error)
                    {
                        alert(error);
                    }
                });
            },
            autoFocus : true,
            minLength : 1,
            select : function(event, ui) {
                var names = ui.item.data.split("|");

                tag_ids = [];
                tag_names = [];
                tags = $('#tags').val();
                if(tags != '')tag_names = tags.split(',');
                tag_ids.push(names[1]);
                tag_names.push("'" + names[0] + "'");
                $('#tags').show();
                $('#tags').val( tag_names.join( "," ) );
                $('#tag').val('');
            }

PHP

$searchQuery = $_POST['searchQuery'];
$selectedTags = $_POST['selectedTags'];

if(!empty($selectedTags))
{ $query = $db->prepare("SELECT * FROM tags WHERE name LIKE ? AND name NOT IN ?");
$query->execute(array($searchQuery . "%", $selectedTags));
}
else
{
$query = $db->prepare("SELECT * FROM tags WHERE name LIKE ?");
$query->execute(array($searchQuery . "%"));
}

当我选择第一个建议时,它会保存在 #tags 中,但不会显示其他建议。如果有任何其他建议可以实现这一目标,那就太好了。

最佳答案

我明白了。我试图将一个数组传递给准备好的语句。 PDO 不是这样工作的。 为了解决这个问题,我先声明了参数的数量,然后将它们放入准备好的语句中,同时使用 foreach 为每个参数绑定(bind)值。

这是最终的解决方案:

//exploding the string to an array first
$selectedTags = explode(',', $selectedTags); 

//creating another array with parameters equal to the size of the selectedTags
$bindValues = implode(',', array_fill(0, count($selectedTags), '?')); 

//putting the parametes
$query = $db->prepare("SELECT * FROM tags WHERE name LIKE ? AND name NOT IN (" . $bindValues .")");


//binding values
$query->bindValue(1, $searchQuery . '%');

//Now, using foreach to bind selected tags values
foreach($selectedTags as $k => $selectedTag)
{
 //using k+2 as index because index starts at 0 and first parameter is the search query
 $query->bindValue($k+2, $selectedTag);
}
$query->execute();

这解决了问题。我希望它也能帮助其他人。

关于javascript - 使用 MYSQL 防止已选择的选项 Jquery 自动完成,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28989797/

相关文章:

javascript - 通过 javascript 调用更改 onclick 函数时无法发送动态 javascript 参数

jquery - jQuery document.ready 中的 Coffeescript 调用函数

javascript - 加载时淡入背景图像

PHP、MYSQL 和 JSON

javascript - 即使验证失败,表单也会提交

javascript - 带动画文字的 D3 Canvas 地球仪

php - 语言翻译语法

php - mysql 创建帖子并将图像和段落存储在单个表或多个表中

php - Mysql按不同和缺失和新的两个日期求和

jquery - 在 jQuery 中通过 HTML5 数据属性选择元素