PHP在jQuery Load中丢失连接字符串

时间:2016-02-02 18:02:52

标签: php jquery mysql

我遇到了一些困难,我不确定自己哪里出错了,我有一个mySQL数据库,它将数据提供给网页。以下工作正常:

<?php include "includes/db.php"; ?>

我在我的index.php页面上的html标签上面包含我的连接php文件,其中包含以下内容;

<?php

// Create an assosciative array holding connection data
$db['db_host'] = "localhost"; 
$db['db_user'] = "XXXXXXXX";
$db['db_pass'] = "XXXXXXXX";
$db['db_name'] = "XXXXXXXX";


// Convert array values into constants, this is much more secure.
foreach($db as $key => $value)
{
    // Create constant and convert to upper case
    define(strtoupper($key), $value);
    define(strtoupper($key), $value);
}


// Initiate database connection and assign to a variable to test whether it was successful or not.
$connection = mysqli_connect(DB_HOST, DB_USER, DB_PASS, DB_NAME);

// If Database connection is incorrect - display an error. 
if(!$connection)
{
    echo "Error: Database Connection Failed";
} ?> 

这提供了我的连接字符串。在此之后,我正常构建网页并按如下方式请求数据:

<div id="latest-temperature" class="col-xs-6 col-sm-3 col-lg-offset-1 infoSections" style="background: #45d4ff;">

        <?php include "includes/get-latest-temperature.php"; ?>

</div>

包含的文件如下所示:

<?php
echo "<h4>Latest Temperature</h4>";

$query =  "SELECT * FROM `XXXXX`.`temperature_values` ";
$query .= "WHERE time_added IN (select max(time_added) from temperature_values GROUP BY entry_id)";
$query .= "ORDER BY time_added DESC LIMIT 1;";

$select_latest_temperature = mysqli_query($connection, $query);

if(!$select_latest_temperature)
{
    echo "DB Connection Error";
    die();
}

while($row = mysqli_fetch_assoc($select_latest_temperature))
{
    // Assign data to variables
    $temperature = $row['temperature'];
    $time = $row['time_added'];
} 


echo "<p>" . $temperature . " degrees </p>";
echo "<span class='text-muted'>Recorded at: " . date("G:i a", strtotime($time)) .  " on " . date("j F Y", strtotime($time)) . "</span>"; ?>

以上工作正常,直到我尝试通过jQuery重新加载数据,如下所示(在 Head 中):

<script src="//code.jquery.com/jquery-1.12.0.min.js"></script>

<script type="text/javascript">

    function reloadRealTimeInfo() 
    {
        $('#latest-temperature').load('includes/get-latest-temperature.php');
        $('#fan-status').load('includes/get-fan-status.php');
        $('#temperature-entries').load('includes/get-temperature-entries.php');
    }

    $(document).ready(function()
    {
        reloadRealTimeInfo();
    });

    $(function()
    {
        setInterval(reloadRealTimeInfo, 2000);
    });

</script>

重新加载div后,数据消失,看起来它完全丢失了连接字符串。我试图在每个.php文件中包含db.php文件,该文件需要它也不起作用。我找到的一个解决方案是将db.php的内容复制到每个PHP脚本中 - 这可以正常工作。

这是为什么?我试过使字符串全局,我已经尝试删除常量。虽然我有一个&#34;解决方案&#34;我不喜欢将数据库连接细节复制到每个文件中的想法,因为在更大的网站上,更改细节会很痛苦。

感谢您的时间 - 如果我错过了什么,请告诉我。

编辑:我几乎可以肯定这个问题已经到了范围,但我对PHP来说相当新,所以我不能确定。在逐行读取文件后加载PHP文件会有效地消除文件顶部声明的$连接字符串吗?我确实尝试将其设为全局,并将其添加到全局数组中。

EDIT2:我已将文件移动到本地XAMPP安装上,这使我可以轻松查看PHP错误。问题如下:

Notice: Constant DB_USER already defined in D:\xampp\htdocs\project\includes\db.php on line 15
Notice: Constant DB_PASS already defined in D:\xampp\htdocs\project\includes\db.php on line 15
Notice: Constant DB_NAME already defined in D:\xampp\htdocs\project\includes\db.php on line 15

接下来是jQuery正在更新的每个div元素中的另一个错误:

Notice: Undefined variable: connection in D:\xampp\htdocs\project\includes\get-latest-temperature.php on line 9
Warning: mysqli_query() expects parameter 1 to be mysqli, null given in D:\xampp\htdocs\project\includes\get-latest-temperature.php on line 9

第9行指的是:

$select_latest_temperature = mysqli_query($connection, $query);

这些错误似乎证实了我最初的怀疑,即问题与常数和范围有关,希望有人可以提供帮助!

2 个答案:

答案 0 :(得分:2)

您可能会遇到一些问题,范围问题以及DOM尚未准备好执行您要求的操作。为了解决这个问题,将所有JavaScript / jQuery代码放入一个文档就绪处理程序(你有两个,你的第二个是一个可以使用但在这种情况下不必要的快捷方式):

<script type="text/javascript">

$(document).ready(function()
{
    function reloadRealTimeInfo() 
    {
        $('#latest-temperature').load('includes/get-latest-temperature.php');
        $('#fan-status').load('includes/get-fan-status.php');
        $('#temperature-entries').load('includes/get-temperature-entries.php');
    }
    reloadRealTimeInfo(); // will perform when the page loads
    setInterval(reloadRealTimeInfo, 2000); // then the timer is set
});

</script>

这样做将确保所有元素都已加载到DOM中并可供使用。

要了解可能的jQuery AJAX错误,请查看this post。在浏览器中单击 F12 键将向您显示有关您的AJAX的全部信息。

答案 1 :(得分:0)

通常情况下,我只是看起来太难了,一起错过了这个问题。我感谢所有试图解决这个问题的人,问题似乎如下:

在索引页面上,我包含以下内容:

<?php include "includes/db.php"; ?>

哪个工作正常,因为索引页面是下面的一个文件夹,所以路径是正确的,这也意味着对脚本的初始调用工作。当jQuery将页面加载到div中时,问题一直存在,那么所发生的事情就是include然后在与调用脚本相同的目录级别创建路径

include "db.php";

将此include添加到需要它的每个文件中并将其从索引中删除后,一切都按预期工作。也许还有另一种解决方案,但这解决了我的问题并满足了我的要求,只能在一个地方编辑连接细节。

再次感谢!