【问题标题】:Display Search Results by Column name按列名显示搜索结果
【发布时间】:2016-05-07 13:06:52
【问题描述】:

我有一个搜索输入,它会在您键入时从我的数据库中提取前 10 个结果,并即时消除那些不匹配的结果。我从 https://codeforgeek.com/2014/09/ajax-search-box-php-mysql/ 得到这个例子,它使用 Twitter typeahead JavaScript 库。

我的问题是,我必须定义要搜索的列,而不是在 process-search.php 中选择它。我需要的是从选择字段中选择一个表列,然后使用所选列填充搜索。我觉得我很接近,但到目前为止还没有奏效。

我已经在有效的查询和代码下方注释掉了我尝试使用的查询和代码。 Alos 我已经把选择框​​留在了 html 中。

任何帮助将非常感谢。

Index.php

<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<script type="text/javascript" src="../inc/js/typeahead.min.js"></script>
<script type="text/javascript" src="search-script.js"></script>

<div id="search-topic-group" class="dhl-group">
    <label for="term">Search By:</label>
    <select name="term">
        <option value="">-- Select a Search Term --</option>
        <option value="username">Username</option>
        <option value="city">City</option>
    </select>
</div>

<div id="group" class="dhl-group">
  <label for="keyword">Enter a Keyword:</label>
  <input type="text" name="keyword" class="typeahead tt-query" autocomplete="off" spellcheck="false" placeholder="Type your Query">
</div>

search-script.js

// JavaScript Document
var col = 'country'
$(document).ready(function(){
    "use strict";
     //Type Ahead Functions for the Search
 $('select[name="term"]').change(function(){
     col = $('select[name="term"]').val();
});
$('input.typeahead').typeahead({
    name: 'keyword',
    remote:'process-search.php?key=%QUERY&col=' + col,
    limit : 10
  });
});

process-search.php

<?php
    $key=$_GET['key'];
    $col = $_GET['col']
    //$term = $_GET['term'];

    $array = array();
    $errors = array();
    $db = mysqli_connect(<HOST>,<UID>,<PWD>,<DB>);
    if($db->connect_errno > 0){
        die('Unable to connect to database [' . $db->connect_error . ']');
    }
    $sql = "select * from table_name where ".$col." LIKE '%{$key}%'";

    if(!$result = $db->query($sql)){
        die('There was an error running the query [' . $db->error . ']');
    }
    while($row = $result->fetch_assoc()){
        $array[] = $row[$col];
    }
    echo json_encode($array);
?>

【问题讨论】:

  • 永远不要显示如何进入你的数据库(即:用户名、密码、它在哪里)。除非你只是喜欢让黑客攻击你。 :-/ 使用通用标签,如 标签。 :-)
  • stackoverflow.com/questions/4849652/…stackoverflow.com/questions/4197657/… 的可能重复项。使用相同的方法获取所有列名,以便您进行选择。
  • 谢谢你发现,刚刚从我身边溜了过去……我自己拍了自己的手腕
  • 顺便说一句 - 你知道了吗?如果是这样 - 发布您的答案并检查它的绿色复选标记,以便将其标记为已关闭。
  • 不,我还没有找到解决方案。您发布的链接不重复。他们试图在不同的表中找到相同的列,而我试图使用 typeahead.js 插件在一个表中找到一列,而不是事先定义列。上面的示例仅在您知道要搜索的列的情况下才有效。我正在尝试使用选择框选择列,然后按关键字搜索。

标签: php livesearch


【解决方案1】:

有点难看,但这应该可以工作

jquery:

var col = "default"; //Change it to whatever you want your column to default to.

$(document).ready(function(){
    "use strict";
    //Type Ahead Functions for the Search

    $('input.typeahead').typeahead({
        name: 'keyword',
        remote:'process-search.php?key=%QUERY&col='+col,
        limit : 10
      });

   //Grabs the currently selected column when it changes
   $("select[name='term']").change(function(){
      col = $("select[name='term']").val();
   })
 });

过程搜索.php

<?php
    $key=$_GET['key'];
    $col=$_GET['col'];

    $array = array();
    $errors = array();
    $db = mysqli_connect(<HOST>,<UID>,<PWD>,<DB>);
    if($db->connect_errno > 0){
        die('Unable to connect to database [' . $db->connect_error . ']');
    }

    $sql = "select * from table where ".$col." LIKE '%{$key}%'";

if(!$result = $db->query($sql)){
    die('There was an error running the query [' . $db->error . ']');
}
while($row = $result->fetch_assoc()){
    $array[] = $row['username'];

    $array[] = $row[$term];
}
echo json_encode($array);
?>

【讨论】:

  • 感谢您的回复。包括您的回复后,它正在工作,但仍然存在问题。当我设置默认列说“国家”时,无论我选择什么,返回的值都不会改变,它总是返回一个国家。我还尝试将 .typeahead 函数放入 .change 函数中,但它只适用于我选择的第一列并且永远不会改变。因此,如果我选择用户名,它将提取用户名,但如果我之后选择城市,它仍然只提取用户名。我已经更新了我的代码以反映我当前的版本
  • 嗯,当您选择不同的列时,.change() 是否会触发?
  • 是的,我添加了一个警报(col);在它结束时,每次我更改选择选项时都会触发。
  • 尝试将 .typeahead 函数中的 col 替换为 $('select[name="term"]').val()
  • 不,它仍然只会使用第一个选项值。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-01-25
  • 2023-04-07
相关资源
最近更新 更多