DB连接常量在ajax调用上抛出错误

时间:2015-04-05 22:21:12

标签: php jquery ajax

我正在制作测试预备应用。我将问题和答案存储在数据库中,当用户参加测验时,我实例化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

我遇到的问题是,当用户选择一个选项,然后点击检查答案按钮时,我的数据库连接常量会断开......

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

1 个答案:

答案 0 :(得分:2)

由于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中包含配置文件。毕竟,该文件使用常量,因此它包含它们所在的配置文件是有意义的。