我正在为我的CMS网站完成一个搜索栏
我快到了——我认为我的php是主要问题,
我有搜索输入
<div class="search">
<form method="post" action="search.php" class="search" id="search">
<input id='searchBar' class='search' placeholder="Search for a product" type='text'/>
</form>
</div>
然后我有一些java脚本可以在按键时支持,希望能过滤掉当前显示在屏幕上的项目,
function setSearchListener(){
var searchBar = document.getElementById('searchBar');
searchBar.addEventListener('keyup', function(){
searchBar.addEventListener('focus', runSearchBar(this.value));
});
}
function runSearchBar(str){
var oldTarget = document.getElementById('productscontainer');
if(str.length == 0){
console.log('hello');
oldTarget.style.display = 'block';
}
else{
oldTarget.style.display = 'none';
}
var newTarget = document.getElementById('searchTarget');
fetch(newTarget);
}
function fetch(target) {
var xhr, target;
// create a request object
xhr = new XMLHttpRequest();
changeListener = function () {
if (xhr.readyState === 4 && xhr.status === 200) {
target.innerHTML = xhr.responseText;
} else {
target.innerHTML = "<p>Something went wrong.</p>";
}
};
xhr.open("GET", "sql/search.php", true);
xhr.onreadystatechange = changeListener;
xhr.send();
console.log(name);
console.log('finding');
};
window.addEventListener('load', setSearchListener());
javascript端似乎对我来说一切都很好,但我不确定如何设置php与数据库交互端:
这是我的搜索.php
<?php
include("../dbase/config_database.php");
$query = "SELECT * FROM products WHERE id LIKE '%".$s."%' OR name LIKE '%".$s."%' OR description LIKE '%".$s."%' ";
$result = mysqli_query($mysqli, $query);
$rows = mysqli_fetch_array($result);
$response = array(
'id' => $rows ['id'],
'name' => $rows ['name'],
'description' => $rows ['description'],
'price' => $rows ['price'],
'quantity' => $rows ['quantity']
);
echo json_encode($response);
}
?>
我基本上有一个显示产品的页面,我希望当你使用每个按键上的搜索栏说"iphone"时,它只会在页面上显示iphone产品,除非删除搜索栏的按键,否则不会显示其他产品。
我在JavaScript中看到一个错误:
window.addEventListener('load', setSearchListener());
应该是
window.addEventListener('load', setSearchListener);
这也是错误的
searchBar.addEventListener('keyup', function(){
searchBar.addEventListener('focus', runSearchBar(this.value));
});
每次启动一个关键事件时,您都会附加另一个事件。另一个问题是,您不是同时附加函数,而是调用函数。
您的代码一团糟。例如,此行:
xhr.open("GET", "sql/search.php", true);
应该是
xhr.open("GET", "sql/search.php?searchstring=" + encodeURIComponent(document.getElementById("searchbar").value), true);
这意味着,现在您没有将搜索字符串发送到search.php。
在search.php中,您不会试图读取数据。为了能够使用$s
作为搜索字符串,您需要执行$s = $_GET['searchstring'];
。
我建议您学习所选择的Javascript参考和PHP文档。并承诺我永远不会在不使用mysqli_real_escape_string()
的情况下将用户提交的数据放入mysqli_query()
调用。这是基本的安全性。
一个SO问题的错误太多了。要么分开,要么去学习。