2016-04-15 211 views
1

无法找出这里出了什么问题,没有错误出现,但没有任何被返回。搜索栏应该从我的数据库中返回其他用户的名字。搜索栏不会返回结果

这里是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) 
); 

预先感谢您的帮助!

+2

您是否尝试过检查控制台日志中的错误? –

+1

“没有错误出现”,因为你不检查错误。您在js和php中都有错误。在JS中,你至少有一个括号问题。在PHP你的结果是'

Array
Array
...' – fusion3k

+0

嗯,我得到了这个工作。你应该能够把这一切都拼凑起来。 –

回答

2

除了缺少结肠

data {partialSearch:partialSearch}, 
    ^

应为已读:

data: {partialSearch:partialSearch}, 

您的PHP/MySQL语法已关闭。

你在

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

声明$row,但没有在任何地方使用它。

但是,这对于一个好的应用程序来说是不好的,因为你不需要太多的代码来开始。

另外,由于您使用的是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

如果仍然不为你工作,那么你很可能有错误,在数据库中的某个地方。

咨询:

0

你似乎TYO使用$用户名两次 -

首先对数据库的访问

$username = "root"; 

,然后引用数据库结果

$stmt->bind_result($username); 

这似乎引起冲突因为$ username =“root” - 尝试将名称更改为不同的变量,看看是否有所作为;例如:

$stmt->bind_result($user_name); 

也还没有宣布$ SearchResult所要推动元素融入前一个数组,while循环之前,添加以下内容:

$searchResults = array(); 
+0

谢谢,没有拿起。已经做出这些更改但仍然不提供结果? – imconnor

0

串联$partialSearch%通配符。

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

你还缺少一个 “:” 在阿贾克斯查询 - 应该是:

data: {partialSearch:partialSearch},