【问题标题】:jQuery autocomplete not working connected to mySQL databasejQuery自动完成无法连接到mySQL数据库
【发布时间】:2015-10-27 14:39:11
【问题描述】:

我有一个运行良好的自动完成表单。我离开我的笔记本电脑然后回来,现在它不再工作了。

我的数据库名为 wallettest

我的表名为 population 并且有 4 列: ID、位置、slug、人口。

我有 3 个文件:index.php、script.js 和 ajax_refresh.php。

做一些测试,它似乎没有访问我的 ajax_refresh.php,它将我连接到我的数据库。所以从那里开始,我决定将我的 ajax_refresh.php 放在我的 index.php 文件中。好吧,现在我已连接到我的数据库,但出现错误(我不明白为什么它不会首先连接我,我的文件中有正确的语法:

js file:"$.ajax({
            url: "ajax_refresh.php",

无论如何,文件现在看起来像这样,我得到的错误如下:

index.php:

<?php
// PDO connect *********
//CHECK TO SEE IF CONNECTION IS MADE
 $db = mysql_connect("localhost","root","butthead"); 
 if ($db) {
 echo("- Connection to database successful -");
 }
 else if (!$db) {
 die("Database connection failed miserably: " . mysql_error());
 }


function connect() {
    return new PDO('mysql:host=localhost;dbname=wallettest', 'root', 'butthead', array(PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION, PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8"));
} 


$pdo = connect();
$keyword = '%'.$_POST['keyword'].'%';
$sql = "SELECT * FROM population WHERE slug LIKE (:keyword) ORDER BY population DESC LIMIT 0, 10";
$query = $pdo->prepare($sql);
$query->bindParam(':keyword', $keyword, PDO::PARAM_STR);
$query->execute();
$list = $query->fetchAll();
foreach ($list as $rs) {
    // put in bold the written text
    $slug = str_replace($_POST['keyword'], '<b>'.$_POST['keyword'].'</b>', $rs['slug']);
    // add new option
    echo '<li onclick="set_item(\''.str_replace("'", "\'", $rs['slug']).'\')">'.$slug.'</li>';
}

// END AJAX_REFRESH.PHP
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Autocomplete using PHP/MySQL and jQuery</title>
<link rel="stylesheet" href="css/style.css" />
<script type="text/javascript" src="js/jquery.min.js"></script>
<script type="text/javascript" src="js/script.js"></script>
</head>


<body>
    <div class="container">
        <div class="header">

        </div><!-- header -->
        <h1 class="main_title">Autocomplete using PHP/MySQL and jQuery</h1>
        <div class="content">
            <form>
                <p>Table consists of : ID, Location, Slug, Population </p>
                <br><br>
                <div class="label_div">Search for a Slug : </div>
                <div class="input_container">
                    <input type="text" id="slug" onkeyup="autocomplet2()">
                    <ul id="list_id"></ul>
                </div>
            </form>
            <br><br><br><br>
            <p>List will be ordered from Highest population to lowest population (Top to bottom)</p>
                <br><br>
        </div><!-- content -->    
        <div class="footer">
            Powered by Jason's Fingers</a>
        </div><!-- footer -->
    </div><!-- container -->
</body>
</html>

script.js:

// autocomplete : this function will be executed every time we change the text
function autocomplet2() {
    var min_length = 3; // min caracters to display the autocomplete
    var keyword = $('#slug').val();
    if (keyword.length >= min_length) {
        $.ajax({
            url: 'ajax_refresh.php',
            type: 'POST',
            data: {keyword:keyword},
            success:function(data){
                $('#list_id').show();
                $('#list_id').html(data);
            }
        });
    } else {
        $('#list_id').hide();
    }
}

// set_item : this function will be executed when we select an item
function set_item(item) {
    // Changes input to the full name on selecting
    $('#slug').val(item);
    // Hides list after selection from list
    $('#list_id').hide();
}

function change()

错误:

【问题讨论】:

  • 答案很明显,检查一下为什么关键字没有被发送到 PHP 脚本。
  • 如果没有明确地给它一个 POST 方法并且我没有在你的 JS 中看到 POST 并且没有带有 keyword 的名称属性,则表单默认为 GET。另外,为什么mysql_ 函数在与 PDO 相同的代码中?有点混乱。另外,这个autocomplet2() 函数在哪里? 这里有太多未知数 Sam - @JayBlanchard
  • 哦,是的,您希望我们在您的其他问题中查看的代码stackoverflow.com/q/31820341 知道了。好吧,有人给了你答案;和他们一起接受。您正在转发。
  • 那篇文章是一个完全不同的问题,这是一个独立的问题
  • 意识到我丢失了 .js 文件,我把它放在这里

标签: php jquery mysql autocomplete


【解决方案1】:

你的代码中有很多有趣的地方:

  1. 缺少表单方法(默认为 GET)。
  2. 混合使用 mysql_* 和 PDO API。您可以删除使用 mysql_connect() 的整个条件,因为您从不使用在那里创建的连接 ($db)。
  3. 输入元素中缺少名称属性:

    &lt;input type="text" id="slug" name="keyword" onkeyup="autocomplet2()"&gt;

产生错误的原因是您的 PHP 中的这一行:

$keyword = '%'.$_POST['keyword'].'%';

当您最初加载页面时,未定义变量 $keyword,因为尚未设置 $_POST 数组。防止这种情况发生的方法是在为变量赋值之前检查数组是否已设置:

if(isset($_POST)) {
    $keyword = '%'.$_POST['keyword'].'%';
    // other code relying on $keyword being set should go here
}

注意上面代码中的注释。 任何代码依赖于所设置的关键字,例如您的数据库查询,都应该在条件内。如果未设置变量,则运行该代码毫无意义。

最后,当您决定扩展现有内容时,您的代码组织将开始变得难以管理。考虑将 PHP、HTML 和 JS 相互分离,以便于管理。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-12-03
    • 2014-01-25
    • 1970-01-01
    • 2012-04-09
    • 2012-02-11
    • 1970-01-01
    • 2011-02-21
    相关资源
    最近更新 更多