我正在制作一个测试准备应用程序。我将问题和答案存储在数据库中,当用户进行测试时,我实例化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中。毕竟,该文件使用常量,因此它包含它们所在的配置文件是有意义的。