Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/230.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php DB Connect常量在ajax调用中抛出错误_Php_Jquery_Ajax - Fatal编程技术网

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...