我遇到了一些困难,我不确定自己哪里出错了,我有一个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);
这些错误似乎证实了我最初的怀疑,即问题与常数和范围有关,希望有人可以提供帮助!
答案 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添加到需要它的每个文件中并将其从索引中删除后,一切都按预期工作。也许还有另一种解决方案,但这解决了我的问题并满足了我的要求,只能在一个地方编辑连接细节。
再次感谢!