【问题标题】:Search bar wont return results [closed]搜索栏不会返回结果[关闭]
【发布时间】:2023-03-25 23:12:01
【问题描述】:

无法弄清楚这里出了什么问题,没有出现错误,但没有返回任何内容。搜索栏应该从我的数据库中返回其他用户的姓名。

这里是Test.php:

<?php
    session_start();
?>  

<!DOCTYPE html>
<head>
    <script type="text/javascript" src="//ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
    <script type="text/javascript">
        function search(partialSearch){
            $.ajax({
                url:"PHP.php",
                type:"POST",
                data {partialSearch:partialSearch},
                success:function(result){
                    $("#results").html(result);
                }
            });
        };
    </script>
</head>

<body>

    <div class="container">

        <h3>Find Other users</h3>

        <input type="text" name="partialSearch"onkeyup="search(this.value)"/>
        <div id="results"></div>
    </div>

</body>
</html>

这里是 PHP.php

<?php

    $servername = "localhost";
    $username = "root";
    $password = "root";
    $dbname = "coursework_db";

    // Create connection
    $conn = new mysqli($servername, $username, $password, $dbname);
    // Check connection
    if ($conn->connect_error) {
        die("Connection failed: " . $conn->connect_error);
    } 

    $partialSearch = $_POST['partialSearch'];

    $stmt = $conn->prepare("SELECT username FROM members WHERE username LIKE ? ");
    $stmt->bind_param('s',$partialSearch);
    $stmt->execute();
    $stmt->bind_result($username);
    while ($row = $stmt->fetch()) {
        $searchResults[] = $username;
        echo "<div>".$searchResults."</div>";
    }
?>

这是 SQL 表:

CREATE TABLE members (
memberID int(5) NOT NULL AUTO_INCREMENT,
username VARCHAR(65) NOT NULL UNIQUE,
password VARCHAR(65) NOT NULL,
PRIMARY KEY (memberID)
);

提前感谢您的帮助!

【问题讨论】:

  • 您是否尝试过检查控制台日志是否有错误?
  • “没有出现错误”,因为您不检查错误。您在 js 和 php 中都有错误。在 JS 中,您至少有一个括号问题。在 php 中,您的结果是 &lt;div&gt;Array&lt;/div&gt;&lt;div&gt;Array&lt;/div&gt;...
  • 好吧,我得到了这个工作。你应该可以把这一切拼凑起来。
  • 怎么样?我做了更改,但仍然不对
  • @ConnorRoberts 请参阅下面的答案。 享受

标签: php html mysql ajax


【解决方案1】:

除了缺少的冒号

data {partialSearch:partialSearch},
    ^

应该读作:

data: {partialSearch:partialSearch},

您的 PHP/MySQL 语法已关闭。

你在声明$row

while ($row = $stmt->fetch())

但不在任何地方使用它。

但是,这有点坏了,因为您不需要那么多代码来开始。

另外,由于您使用的是 LIKE,因此您没有使用正确的语法。

参见手册:http://dev.mysql.com/doc/refman/5.7/en/string-comparison-functions.html

你的代码应该是这样的:

$partialSearch = "%". $_POST['partialSearch'] ."%";
$stmt = $conn->prepare("SELECT username FROM members WHERE username LIKE ? ");

$stmt->bind_param('s',$partialSearch);
$stmt->execute();
$stmt->bind_result($username);

while ($stmt->fetch()) {

    echo $username;

    echo "<div>".$searchResults."</div>";
}

检查您的控制台并检查错误后,您就会知道发生了什么。

JS 控制台会抛出你:

SyntaxError: missing : after property id

如果这仍然对您不起作用,那么您的数据库中的某个地方很可能有错误。

咨询:

【讨论】:

    【解决方案2】:

    你似乎使用了两次 $username-

    首先用于数据库访问

     $username = "root";
    

    然后参考数据库结果

    $stmt->bind_result($username);
    

    这似乎会导致冲突,因为 $username="root" - 尝试将名称更改为不同的变量,看看是否会有所不同;例如:

    $stmt->bind_result($user_name);
    

    您还没有在将元素推入之前将 $searchResults 声明为数组,请在 while 循环之前添加以下内容:

    $searchResults = array();
    

    【讨论】:

    • 谢谢,没听懂。进行了这些更改,但仍未提供结果?
    【解决方案3】:

    $partialSearch% 通配符连接起来。

    $stmt = $conn->prepare("SELECT username FROM members WHERE username LIKE ? ");
     $partialSearch = "%". $_POST['partialSearch'] ."%";
    $stmt->bind_param('s',$partialSearch);
     ...
    

    【讨论】:

      【解决方案4】:

      您还缺少 Ajax 查询中的“:” - 应该是:

      data: {partialSearch:partialSearch},
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2018-12-10
        • 2021-07-06
        • 1970-01-01
        • 2014-05-29
        • 1970-01-01
        • 1970-01-01
        • 2020-01-16
        相关资源
        最近更新 更多