PHP搜索现在不返回任何内容,但没有错误

PHP搜索现在不返回任何内容,但没有错误,php,html,css,mysql,Php,Html,Css,Mysql,我正在建立一个在线商店不是一个真正的使用PHP。我有一个搜索结果页面和一个完整的规格页面,完整的规格页面工作得很好,但是当我创建了一个购物车页面,也工作得很好,搜索结果页面不再返回任何内容。我在注释if语句和while语句时发现,no items found消息确实有效,但如果这是有效的搜索,则无法使其返回任何内容。过了几天,我仍然不知道问题出在哪里。我将包括添加到篮子和表单代码,因为表单也包含在完整的规范页面上,这是可行的。如果你能给我指出正确的方向,我将不胜感激 **Search Bar c

我正在建立一个在线商店不是一个真正的使用PHP。我有一个搜索结果页面和一个完整的规格页面,完整的规格页面工作得很好,但是当我创建了一个购物车页面,也工作得很好,搜索结果页面不再返回任何内容。我在注释if语句和while语句时发现,no items found消息确实有效,但如果这是有效的搜索,则无法使其返回任何内容。过了几天,我仍然不知道问题出在哪里。我将包括添加到篮子和表单代码,因为表单也包含在完整的规范页面上,这是可行的。如果你能给我指出正确的方向,我将不胜感激

**Search Bar code**
<?php
    global $ConnectingDB;
    if (isset($_GET["SearchButton"])) {
                            
   }
?>
    <form class="mt-5" method="GET" action="searchResults.php" style="width: 100%;">
       <div class="form-group">            
       <input class="form-control mb-2" type="text" name="Search" placeholder="Search for Item" value="">
            <button class="btn btn-success" name="SearchButton" style="width: 100%;">Search</button>
        </div>
    </form> 
搜索结果代码

添加到篮子代码

形式


用于搜索的SQL语句可能格式不正确:

$sql = $db->query("SELECT * FROM products WHERE productName LIKE '%$Search%' OR productNumber LIKE '%$Search%' OR briefProductInfo LIKE '%$Search%'");
根据经验,我可以告诉您,在语句开头加上双撇号并在语句中加上通配符%可能是错误的做法,请尝试以下方法:

$sql = $db->query('SELECT * FROM products WHERE productName LIKE "%'.$Search.'%" OR productNumber LIKE "%'.$Search.'%" OR briefProductInfo LIKE "%'.$Search.'%"');
这将通配符%从SQL正在查找的搜索词中分离出来。通过将%包含在语句中,SQL语句可能会运行,但结果为零,并转到下一条语句,因为它正在查找“%book%”,而它应该只查找“book”。这将为您提供“找不到项”消息,因为它将移动到下一条语句

 if (isset($_GET["productNumber"])) {
这是2020年10月30日发布的新信息 您正在使用搜索作为此输入中的姓名:

<form class="mt-5" method="GET" action="searchResults.php" style="width: 100%;">
       <div class="form-group">            
       <input class="form-control mb-2" type="text" name="Search" placeholder="Search for Item" value="">
            <button class="btn btn-success" name="SearchButton" style="width: 100%;">Search</button>
        </div>
    </form> 
或许可以试着做类似的事情:

$Search = filter_input(INPUT_GET, 'Search');
/*use the preg_replace to remove any special characters*/
$Search = preg_replace('/[^a-zA-Z0-9]/', '', $Search);
echo $Search; /*Just to see if it appears*/
/*instead of  if (isset($_GET["productNumber"])) {  use */
if($Search != ''){ 
$sql = $db->query('SELECT * FROM products WHERE productName LIKE "%'.$Search.'%" OR productNumber LIKE "%'.$Search.'%" OR briefProductInfo LIKE "%'.$Search.'%"');
continue with code

警告:您的代码易受攻击。一些提示:1。isset可以接受多个参数,因此isset$\u GET['productNumber']&&isset$\u GET['quantity']可以变成isset$\u GET['productNumber'],$\u GET['quantity']。2.如果值与文本相同,则声明的value属性没有任何好处。3.您应该只使用准备好的语句。请看以下内容:$sql=$db->querySELECT*,这些产品中的productName(如“%$Search%”)或productNumber(如“%$Search%”)或briefProductInfo(如“%$Search%”)$result=newmysqli$db,$sql…使用连接变量$db执行mysqli oop样式的查询,然后将结果对象保存到$sql。变量名的选择很差-我建议使用$result。接下来,您将尝试实例化一个新的mysqli连接对象,方法是向它提供预先存在的连接对象$db和查询的结果对象$sql。我认为这是一个主题外的输入错误,因为未来的研究人员不太可能偏离php手册,使用现有的mysqli连接变量调用fir一个新的mysqli连接。放弃你目前的技术,使用mysqli的oop风格的预处理语句。这是否意味着$sql=$result->查询sql语句感谢你让我知道,遗憾的是,使用了你建议的方法,我仍然得到相同的结果。你可以在$Search=$db->real\u escape\u string$\u GET[Search]之后进行回显吗;。您想查看$Search项是什么,这可能有助于找出查询无法正确查看它的原因。Na它仍然不会显示任何内容,但会出现在URL栏中搜索结果是什么,只是不在页面上显示。请查看答案中的编辑,了解新想法。不错,现在,这是我输入到搜索中的内容,例如产品编号,将对其进行调整,看看如何进行。谢谢你的帮助
<form class="mt-5" method="GET" action="searchResults.php" style="width: 100%;">
       <div class="form-group">            
       <input class="form-control mb-2" type="text" name="Search" placeholder="Search for Item" value="">
            <button class="btn btn-success" name="SearchButton" style="width: 100%;">Search</button>
        </div>
    </form> 
 if (isset($_GET["productNumber"])) {
$Search = filter_input(INPUT_GET, 'Search');
/*use the preg_replace to remove any special characters*/
$Search = preg_replace('/[^a-zA-Z0-9]/', '', $Search);
echo $Search; /*Just to see if it appears*/
/*instead of  if (isset($_GET["productNumber"])) {  use */
if($Search != ''){ 
$sql = $db->query('SELECT * FROM products WHERE productName LIKE "%'.$Search.'%" OR productNumber LIKE "%'.$Search.'%" OR briefProductInfo LIKE "%'.$Search.'%"');
continue with code