【问题标题】:Failed to build AJAX + PHP request无法构建 AJAX + PHP 请求
【发布时间】:2015-06-28 19:15:33
【问题描述】:

我正在尝试发出 AJAX 请求,但未能构建正确的 php 文件。 我在 php_error.log 中收到此类错误。相同的 php 代码在通常的 html 文件中工作正常。

PHP Notice:  Undefined variable: dbh
PHP Fatal error:  Call to a member function prepare()

像这样包含 jQuery

<script src="http://code.jquery.com/jquery-latest.min.js" type="text/javascript"></script>

AJAX:

$(function() {
    $('.openbook').click(function() {
        function testAjax(handleData) {
            $.ajax({
                url:'getopen.php',  
                success:function(data) {
                    handleData(data); 
                    alert(data);
                }
            });

testAjax(函数(输出){ document.getElementById('#thiswindow').innerHTML = 输出; }); } } });

getopen.php:

<!DOCTYPE html>
<html>
    <head>
        <title></title>
    </head>   
    <body>
    <?php
        if ( isset( $_SESSION['login'] ) ) {
            $login    = $_SESSION['login'];
            $id=$_SESSION['id'];

            $username="root";
            $password="root";
            $hostname = "localhost";
            $dbname= "kotik";

            function testdb_connect ($hostname, $username, $password) {
                $dbh = new PDO("mysql:host=$hostname;dbname=kotik", $username, $password);
                return $dbh;
            }

            try {
                $dbh = testdb_connect ($hostname, $username, $password);
            } catch(PDOException $e) {
                echo $e->getMessage();
            }
        }

        $title_select_query= $dbh -> prepare("SELECT title FROM books WHERE id = :id ORDER BY date DESC LIMIT 5,5 ");
        $title_select_query ->execute(array(':id' => $id));
        $title_select_query_result = $title_select_query->fetchColumn(); 
        echo($title_select_query_result);

    ?>
    </body>
</html>

这里有什么问题?我还尝试了 html+php 和 getopen.php 中的仅 php 结构。你能解释一下有什么区别吗?

编辑 2:AJAX 输出

编辑:根据一些变化:

 <?php 

    session_start();

                                    if ( isset( $_SESSION['login'] ) ) {

  $login    = $_SESSION['login'];
  $id=$_SESSION['id'];

$username="root";
$password="root";
$hostname = "localhost";
$dbname= "kotik";




     function testdb_connect ($hostname, $username, $password){
    $dbh = new PDO("mysql:host=$hostname;dbname=kotik", $username, $password);
    return $dbh;
}


try {
    $dbh = testdb_connect ($hostname, $username, $password);

} catch(PDOException $e) {
    echo $e->getMessage();

}

}




?>

             <!DOCTYPE html>
       <html>
       <head>
       <title></title>
       </head>   
       <body>

                                  <?php



                  $title_select_query= $dbh -> prepare("SELECT title FROM books WHERE id = :id ORDER BY date DESC LIMIT 5,5 ");
    $title_select_query ->execute(array(':id' => $id));
             $title_select_query_result = $title_select_query->fetchColumn(); 
echo($title_select_query_result);

?>

</body>
</html>

【问题讨论】:

    标签: php jquery html ajax pdo


    【解决方案1】:

    您已将 PDO 连接分配给 if 条件内的 $dbh 变量。然后您退出 if 并在其余代码中仍然使用 $dbh 变量。它看起来很像您不满足 if 语句的条件,因此在尝试使用它之前从未分配 $dbh。

    【讨论】:

    • MuppetGrinder 是正确的。变量 $dbh、$username、$hostname、$password 和 $dbname 仅在 $_SESSION['login'] 变量存在并且我没有看到在您的代码中创建的情况下才被定义。如果该会话变量不存在,则其他变量不能在条件语句之外使用,除非它们是在条件之外定义的
    【解决方案2】:

    您还没有在 getopen.php 中启动会话。所以你不能检查isset( $_SESSION['login'] )。所以你不会初始化 $dbh 变量。

    尝试在getopen.php中添加session_start();

    【讨论】:

    • PHP 警告:session_start():无法发送会话缓存限制器 - 标头已发送
    • 现在没有错误,但数据现在仍然显示 html 是正确的,我检查过
    • 变量 $_SESSION['login'] 是什么。是之前定义的吗?
    • 至少相同的代码在 index.php 中可以正常工作 - 条件必须正确
    • if ( isset( $_SESSION['login'] ) ) { 替换为if (1) { 并检查。还是 PHP 警告和错误?
    猜你喜欢
    • 1970-01-01
    • 2016-09-22
    • 2017-04-23
    • 2012-10-11
    • 1970-01-01
    • 1970-01-01
    • 2013-06-13
    • 1970-01-01
    • 2017-03-13
    相关资源
    最近更新 更多