-1

我正在尝试将我的 Bootstrap 搜索栏(它使用预先输入)连接到一个远程 SQL 数据库,其中包含不同的食物。我知道预输入在某种程度上是有效的,因为当我输入“C”时,会弹出“Chicago”这个词,但是,“Chicago”不在我的 SQL 数据库中。我正在关注YouTube 上的本教程

这是我的网页的 HTML/PHP 代码:

这是我的搜索条形码:

<form class="navbar-search">
    <input type="text" id="search" class="search-query span3 pull-right" placeholder="Search" data-provide="typeahead">
    <div class="icon-search"></div>
</form>

这是我页面底部的 JS 代码:

<script src="//ajax.googleapis.com/ajax/libs/jquery/1.9.0/jquery.min.js"></script>
<script>window.jQuery || document.write('<script src="js/jquery-1.9.0.min.js"><\/script>')</script>

<!-- Bootstrap jQuery plugins compiled and minified -->
<script src="js/bootstrap.min.js"></script>

<!-- Bootstrap JS Code -->
<script>
    $(document).ready(function(){
        $('#search').typeahead({
            source: function(query, process) {
                $.ajax({
                    url: 'database.php'
                    type: 'POST';
                    data: 'query=' + query;
                    dataType: 'JSON';
                    async: true;
                    success: function(data) {
                        process(data);
                    }
                });
            }
        });
    });
</script>

这是我应该访问 SQL 数据库的 database.php 代码:

<?php

if (isset($_POST['query'])) {
    // Connect to database
    mysql_connect('localhost','root','root');
    mysql_select_db('Menu_Items');

    // Retrieve the query
    $query = $_POST['query'];

    // Search the database for all similar items
    $sql = mysql_query("SELECT * FROM foods WHERE name LIKE '%{$query}%'");
    $array = array();

    while ($row = mysql_fetch_assoc($sql)) {
        $array[] = row['name'];
    }

    // Return the json array
    echo json_encode($array);

}

?>

数据库信息如下:

数据库名称:Menu_Items

表名:食物

该表由 2 列组成,第 1 列是唯一 id,第 2 列标题为“名称”。

我似乎无法弄清楚我哪里出了问题,据我所知,我已经正确地遵循了教程。关于我在哪里搞砸的任何想法?

4

2 回答 2

2

圣 Sql 注射蝙蝠侠!请在将来使用这种形式来撰写您的查询:

$query = sprintf("SELECT firstname, lastname, address, age FROM friends 
    WHERE firstname='%s' AND lastname='%s'",
    mysql_real_escape_string($firstname),
    mysql_real_escape_string($lastname));
于 2013-02-26T13:48:52.190 回答
0

在您的代码中更改此:

$array[] = row['name'];

对此:

$array[] = $row['name'];

并确保您将:mysql_real_escape_string 应用到您的:$_POST['query'];以防止 SQL 注入。

于 2013-06-04T03:32:55.510 回答