DB Connect常量在ajax调用中引发错误


DB Connect constants throwing errors on ajax call

我正在制作一个测试准备应用程序。我将问题和答案存储在数据库中,当用户进行测试时,我实例化content.php中定义的Question类,并调用其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

我遇到的问题是,当用户选择一个选项并单击check Answer按钮时,我会中断DB连接常数。。。

Use of undefined constant DB_HOST - assumed 'DB_HOST' in C:'wamp'www'...'php'dbconnect.php on line 2

检查答案按钮:

echo '<br/><br/><button id="checkAnswer" onclick="checkVal()">Check Answer</button>';

哪个调用:

                function checkVal() {
                    var chx = document.getElementsByTagName('input');
                    var userAnswer = null;
                    for (var i = 0; i < chx.length; i++) {
                        if (chx[i].type === 'radio' && chx[i].checked) {
                            userAnswer = chx[i].id;
                        }
                    }
                    $.get("./php/content.php", {_input : userAnswer, "_functionToRun" : "getAnswer"},
                        function(returned_data) {
                            $("#output").html(returned_data);
                        }
                    );
                }

哪个返回:

$functionToRun = (isset($_GET['_functionToRun']) ? ($_GET['_functionToRun']) : 0); 
if (isset($_GET['_functionToRun']) && !empty($_GET['_functionToRun'])) {
    include 'dbconnect.php';
    if ($functionToRun == "getAnswer") {
        $qry = 
            "SELECT q.*
            FROM questions q
            WHERE question_id = $questionID";
        $result = $mysqli->query($qry); 
        mysqli_close($mysqli);
        $row = $result->fetch_assoc();
        echo $row['answer'];    
    }
}

问题是:为什么只有在ajax调用中,dbconnection常量才返回未定义?然而,当我第一次加载页面时,常量不会抛出错误?


dbconnect文件:在root/php folder中,与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_HOST是在config.php中定义的,因此在初始页面加载中似乎确实包含了config.php,但在从AJAX调用content.php时却没有。

现在,您的问题中缺少包含config.php的部分,所以我看不出到底发生了什么,但很可能是:

  • config.php包含在不满足条件的if中
  • content.php位于子文件夹中,或者由于其他原因,config.php的路径无效

为了解决这个问题,我将采取几个步骤:首先,对配置文件使用require_once而不是include。当找不到文件时,这将导致脚本失败并显示一条清除消息。此外,您可以多次调用它而不会出现问题,因此每个需要配置的文件都可以安全地将其包含在require_once中。

其次,考虑将配置文件包含在dbconnect.php中。毕竟,该文件使用常量,因此它包含它们所在的配置文件是有意义的。