Php DB Connect常量在ajax调用中抛出错误
我正在制作一个备考应用程序。我将问题和答案存储在数据库中,当用户进行测验时,我实例化Php DB Connect常量在ajax调用中抛出错误,php,jquery,ajax,Php,Jquery,Ajax,我正在制作一个备考应用程序。我将问题和答案存储在数据库中,当用户进行测验时,我实例化content.php中定义的问题类,并调用其getQuestions函数循环并返回当前问题ID的数据 $question = new Question($questionID); echo $question->getQuestions(); 它连接到数据库,运行该问题ID的查询,并以单选按钮的形式呼出许多选项: while ($row = $imgpath->fetch_ass
content.php
中定义的问题类,并调用其getQuestions函数循环并返回当前问题ID的数据
$question = new Question($questionID);
echo $question->getQuestions();
它连接到数据库,运行该问题ID的查询,并以单选按钮的形式呼出许多选项:
while ($row = $imgpath->fetch_assoc()) {
$this->id = $row['question_id'];
echo '
<p>' . $row['question']. '</p><br/>
<br/><input type="radio" name="choice1" id="c1"> ' . $row['choice_1'] . ' , etc
“检查答案”按钮:
echo '<br/><br/><button id="checkAnswer" onclick="checkVal()">Check Answer</button>';
问题是:为什么只有在ajax调用中,dbconnection常量才会返回未定义?然而,当我第一次加载页面时,常量不会抛出错误
数据库连接文件:在
根/php文件夹中
,与content.php位于同一文件夹中
$mysqli = new mysqli(DB_HOST, DB_UN, DB_PW, DB_NAME);
if ($mysqli->connect_errno) {
echo "Failed to connect to MySQL: (Error code: " . $mysqli->connect_errno . ")... " . $mysqli->connect_error;
}
config.php:网站根目录中的文件
if(!defined("DB_HOST")) define("DB_HOST", "stuff");
if(!defined("DB_UN")) define("DB_UN", "stuff");
if(!defined("DB_PW")) define("DB_PW", "stuff");
if(!defined("DB_NAME")) define("DB_NAME", "stuff");
config.php
从我的index.php
文件加载,该文件确定要加载的HTML:
include './config.php';
$action = isset($_GET['action']) ? $_GET['action'] : "";
switch($action) {
case 'practice':
require(TEMPLATE_PATH . "/practice.php");
break;
case 'about':
require(TEMPLATE_PATH . "/about.php");
break, etc...
由于
DB\u HOST
是在config.php
中定义的,因此您似乎在初始页面加载中包含了config.php
,但在从AJAX调用content.php
时没有
现在,您的问题中缺少了包含config.php
的部分,因此我无法确切了解发生了什么,但很可能:
- config.php包含在不满足条件的if中
- content.php位于子文件夹中,或者由于其他原因,config.php的路径无效
require\u一次
,而不是include
。这将导致脚本在找不到文件时失败,并显示一条清除消息。此外,您可以多次调用它而不会出现问题,因此每个需要配置的文件都可以安全地将其包含在require\u once
中
第二,考虑在DCONCONT.PHP中包含配置文件。毕竟,该文件使用了常量,因此它包含了它们所在的配置文件是有意义的。
使用未定义的常量DB\u HOST-假定“DB\u HOST”是一个通知,而不是致命错误。这很可能发生在第一页加载时,而不是根据错误报告级别显示。DB_主机是在哪里定义的,您的dbconnect.php文件是什么样子的?(减去任何敏感的db凭据)@JohnMcMahon请参见编辑配置文件包含在我的index.php
文件中,请参见上文,是的,content.php
位于子文件夹php/
中。在content.php
文件中,我确实require_once./config.php'代码>在文件顶部,我同意GolezTrol。您的ajax调用正在请求”/php/content.php“
,并绕过index.php文件。这是可以的,但是您应该在content.php或dbconnect.php中使用require_once('/path/to/config.php')
。@JohnMcMahon好的,在我的dbconnect.php
,位于root/php/
中,我使用require_once('./config.php'),包括位于根目录中的config.php
代码>。我知道要访问父文件夹中的文件,您需要做两件事,例如require_once('../config.php')代码>但两者都返回“无此类文件或目录”错误。。。使用。
,它会立即返回错误;使用
,当我运行ajaxI时,它会返回错误。我以前在包含一个文件时遇到了包含路径错误,而该文件又包含其他文件。解决此问题的一种方法是使用绝对路径而不是相对路径。(绝对路径来自服务器文件系统的“/”根目录,而不是您的web根目录。)
$mysqli = new mysqli(DB_HOST, DB_UN, DB_PW, DB_NAME);
if ($mysqli->connect_errno) {
echo "Failed to connect to MySQL: (Error code: " . $mysqli->connect_errno . ")... " . $mysqli->connect_error;
}
if(!defined("DB_HOST")) define("DB_HOST", "stuff");
if(!defined("DB_UN")) define("DB_UN", "stuff");
if(!defined("DB_PW")) define("DB_PW", "stuff");
if(!defined("DB_NAME")) define("DB_NAME", "stuff");
include './config.php';
$action = isset($_GET['action']) ? $_GET['action'] : "";
switch($action) {
case 'practice':
require(TEMPLATE_PATH . "/practice.php");
break;
case 'about':
require(TEMPLATE_PATH . "/about.php");
break, etc...