【问题标题】:PHP - SQL Query Returns array(0) { } when using var_dumpPHP - 使用 var_dump 时 SQL 查询返回数组(0){}
【发布时间】:2016-11-23 15:01:48
【问题描述】:

我想知道为什么我的查询没有返回标题所暗示的数据

我的 JQuery:

$(".output").click(function() {
    var noteid = $(this).data("noteid");
    $("#right-box").load("connectionDetails.php", { noteid: noteid });
});

我的 connectionDetails.php

<?php
$myServer = "replaced";
$connectionInfo = array('Database' => 'replaced', 'UID' => 'replaced', 'PWD' => 'replaced');

//connection to the database
$conn = sqlsrv_connect($myServer, $connectionInfo)
  or die("Couldn't connect to SQL Server on $myServer"); 

//Test connection to server
// if ($conn) 
// {
//     echo "connection successful";    # code...
// }

//Defining my queries
$getNotes = "SELECT NoteID, NoteName, Note FROM Notes";
$getTemplateNotes = "SELECT TemplateNoteID, TemplateNoteName, TemplateNote FROM TemplateNotes";
$getReplaceVariables = "SELECT ReplaceVariableID, ReplaceVariableName, ReplaceVariableNote FROM ReplaceVariables";
$showNoteInfo = "SELECT Note FROM Notes WHERE NoteID = '" . isset($_POST['noteid']) . "'";

var_dump($_POST);

$resultNotes = sqlsrv_query( $conn, $getNotes );
$resultTemplate = sqlsrv_query($conn, $getTemplateNotes);
$resultVariables = sqlsrv_query($conn, $getReplaceVariables);
$showNotes = sqlsrv_query($conn, $showNoteInfo);




if( $resultNotes === false) 
{
    die( print_r( sqlsrv_errors(), true) );
}
if( $resultTemplate === false) 
{
    die( print_r( sqlsrv_errors(), true) );
}

if( $resultVariables === false) 
{
    die( print_r( sqlsrv_errors(), true) );
}

?>

我的 index.php

<!DOCTYPE html>
<html>
<head>
<title>Juan - Home</title>
<script type="text/javascript" src="http://code.jquery.com/jquery-latest.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.1/jquery.min.js"></script>
<script type="text/javascript" src="scripts/scripts.js"></script>
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css">
<link href="//maxcdn.bootstrapcdn.com/font-awesome/4.2.0/css/font-awesome.min.css" rel="stylesheet" media="all">
<link rel="stylesheet" href="styles/igotswag.css" type="text/css">
<link rel="stylesheet" href="styles/swaganimations.css" type="text/css">

</head>
<body>

<?php include 'connectionDetails.php'; ?>


<!-- Header Area -->
<table class="header-container">
    <tr>
        <td style="width: 40%; text-align: left;"><a href="index.php"><img class="hover-cursor" src="Images/TEAMS_Logo.png"></a></td>
        <td style="width: 10%;" class="custom-header">TEAMS Wiki <span style="font-size: 30px;" class="glyphicon glyphicon-globe"></span></td>
        <td style="width: 40%;">
            <table style="text-align: right; width: 100%">
                <tr>
                    <td style="text-align: right;"><span style="font-size: 24px; text-align: right;" class="hvr-icon-grow"></span></td>
                </tr>
            </table>
        </td>
    </tr>
</table>

<div class="pull-down-container">
    <div class="panel1">
        <br />
        <p>Now you see me!</p>
    </div>
    <p class="slide" style="text-align: center;">
        <div class="pull-me hvr-icon-hang" style="text-align: center; vertical-align: top;">More</div>
    </p>
</div>
<!-- End Header Area -->



<!-- Main Body Area -->

<div class="main-container-notes">
    <div id="left-box">
        <?php 

        echo "<div style='width: 100%;'>";

        while( $noteName = sqlsrv_fetch_array( $resultNotes, SQLSRV_FETCH_ASSOC)) 
        {
            echo "<div class='hvr-bounce-to-right1 hover-cursor output' data-noteid='{$noteName['NoteID']}' style='width: 100%; border-right: 5px solid #00AA88; height: 50px;'>" . $noteName['NoteName'] . "</div>";
        }

        echo "</div>";
        ?>
    </div>
    <div id="right-box">
       <?php 
            if ($note = sqlsrv_fetch_array( $showNotes, SQLSRV_FETCH_ASSOC)) 
            {
                echo $note['Note'];
            }
        ?>
    </div>
</div>

<!-- End Main Body Area -->


<!-- Footer Area -->

<!-- End Footer Area -->

</body>
</html>

在我的主索引中,有一个 while 循环可以很好地从数据库中检索数据,通过的每条数据都从我的 SQL 表中获得一个 ID,带有 data-noteid='{$noteName['NoteID']}',然后在我的 JQuery 中分配该 ID

因此,当我单击其中一个生成的 div 时,它会根据 ID 在同一页面上拉出扩展文本(因此是 AJAX)

当我在 connectionDetails.php 中使用 var_dump($_POST) 时,它返回 array(0) { }

那么为什么它没有找到任何 ID?

【问题讨论】:

  • SQL注入警告!!!
  • @JonStirling 我也是这么想的,但是在手册中:The POST method is used if data is provided as an object; otherwise, GET is assumed.
  • @jeroen 好地方。我想这是有道理的,虽然不是很明显。
  • var noteid = $(this).data("noteid"); 之后使用console.log(noteid) 时会得到什么输出?
  • 我刚刚运行了一个非常精简的版本,它可以工作。我正在显示帖子。只是想看看有什么不同..

标签: php jquery mysql sql ajax


【解决方案1】:

嗯,我已经从您的代码中获取了一些基础知识并构建了一些测试代码。

所以我们有...

index.php

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="utf-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1">
</head>
<body>

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

<?php include "test.php"; ?>

<script>
    $(".output").click(function () {
        var noteid = $(this).data("noteid");
        console.log('Got here - Noteid = ' + noteid);
        $("#right-box").load("connectionDetails.php", {noteid: noteid});
    });
</script>
</body>
</html>

缩减您感兴趣的代码版本。

test.php

<div id="left-box">
    <?php
    echo "<div style='width: 100%;'>";
    $noteName['NoteID']   = 1;
    $noteName['NoteName'] = 'Note 1';
    echo "<div class='hvr-bounce-to-right1 hover-cursor output' data-noteid='{$noteName['NoteID']}' 
          style='width: 100%; border-right: 5px solid #00AA88; height: 50px;'>" . $noteName['NoteName'] . "
          </div>";

    $noteName['NoteID']   = 2;
    $noteName['NoteName'] = 'Note 2';
    echo "<div class='hvr-bounce-to-right1 hover-cursor output' data-noteid='{$noteName['NoteID']}' 
          style='width: 100%; border-right: 5px solid #00AA88; height: 50px;'>" . $noteName['NoteName'] . "
          </div>";
    ?>
</div>
<div id="right-box">
</div>

connectionDetails.php

<?php
var_dump($_POST);

所以这行得通...但是将 js 段移到 test.php 的 include 上方使其不起作用。

这表明您的 js 脚本需要在页面加载后运行。 如果我正确地假设您的 JS 在 &lt;script type="text/javascript" src="scripts/scripts.js"&gt;&lt;/script&gt; 中,您目前拥有它

所以你只需要把它移到页面的末尾...... DOM 元素必须在调用 JS 之前出现......但是只需检查 $(document).ready() 是否有帮助...... .

选项 2 无需更改您的 js 包含的位置...只需要像这样包装您当前的 js 代码...

$(document).ready(function () {
    $(".output").click(function () {
        var noteid = $(this).data("noteid");
        console.log('Got here - Noteid = ' + noteid);
        $("#right-box").load("connectionDetails.php", {noteid: noteid});
    });
})

正如它所暗示的那样,它会等到文档加载并且它会很高兴......

在大多数情况下,尽管您倾向于在页面末尾加载所有 JS,所以事情会在任何 JS 被触发之前出现...

下一点... 这真的很粗糙,准备好了,未经测试,但想法就在那里......

所以只处理你的connectionDetails.php的主要部分,我已经采取了 处理帖子的部分放在一边......

   //... Your pre existing code here for the DB etc...  

   // Rewrite of this section of connectionDetails.php

    //Defining my queries
    $getNotes = "SELECT NoteID, NoteName, Note FROM Notes";
    $getTemplateNotes = "SELECT TemplateNoteID, TemplateNoteName, TemplateNote FROM TemplateNotes";
    $getReplaceVariables = "SELECT ReplaceVariableID, ReplaceVariableName, ReplaceVariableNote FROM ReplaceVariables";

    $resultNotes = sqlsrv_query( $conn, $getNotes );
    $resultTemplate = sqlsrv_query($conn, $getTemplateNotes);
    $resultVariables = sqlsrv_query($conn, $getReplaceVariables);

    // Still in development
    // ====================
    //  This is very rough and ready just for testing
    //  On Initial Page load, we don't have anything so this is okish
    if (isset($_POST['noteid'])) {
        $showNoteInfo = "SELECT Note FROM Notes WHERE NoteID = " . $_POST['noteid'];
        $showNotes    = sqlsrv_query($conn, $showNoteInfo);
    }
    // *** The rest of your code *** 

记住这只是第一步,我们可以做得更好...

【讨论】:

  • 刚刚检查,稍后会报告!
  • 所以它在 var_dump 中仍然返回为 0,但是如果我使用控制台日志,控制台中什么也没有显示,这很奇怪,我在我的 js 脚本$(document).ready(function () { $(".output").click(function () { var noteid = $(this).data("noteid"); console.log('Got here - Noteid = ' + noteid); $("#right-box").load("connectionDetails.php", {noteid: noteid}); }); }); 中得到了这个,我的包含在底部,老实说,我不确定发生了什么
  • 请确保在 js 文件之前调用 jquery.min.js。我使用了您的确切脚本 src 调用只是为了确保。
  • :) 现在你到了某个地方:)
  • 我在您的 scripts.js 中看到您有两个文档就绪部分。您可以简单地将所有 js 放在一个文档就绪块中。
猜你喜欢
  • 1970-01-01
  • 2017-12-01
  • 1970-01-01
  • 2017-10-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多