Показать результаты поиска по имени столбца

У меня есть поисковый ввод, который извлекает первые 10 результатов из моей базы данных, пока вы печатаете, и удаляете те, которые не совпадают на лету. Я получил этот пример от https://codeforgeek.com/2014/09/ajax-search-box-php-mysql/ который использует библиотеку JavaScript typeahead.

Моя проблема в том, что я должен определить, какой столбец я хочу искать, а не выбирать его в process-search.php. Что мне нужно, это выбрать столбец таблицы в поле выбора, а затем заполнить поиск, используя выбранный столбец. Я чувствую, что я близко, но пока это не сработало.

Я закомментировал запросы и код, который я пытался использовать ниже тех, которые работают. Алос Я оставил поле выбора в 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>

Поиск-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
});
});

Процесс-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);
?>

0

Решение

Немного некрасиво, но это должно сработать

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();
})
});

Процесс-search.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);
?>
0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]