我正在制作测试预备应用。我将问题和答案存储在数据库中,当用户参加测验时,我实例化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...
答案 0 :(得分:2)
由于DB_HOST
中定义了config.php
,因此您似乎在初始页面加载中包含config.php
,但在从AJAX调用content.php
时则不行。
现在,您的问题中缺少包含config.php
的部分,因此我无法确切地看到发生了什么,但很可能:
要解决此问题,我需要采取以下几个步骤:首先,使用require_once
代替include
作为配置文件。当无法找到文件时,这将导致脚本失败并显示清除消息。此外,您可以多次调用它而不会出现问题,因此每个需要配置的文件都可以安全地将其包含在require_once
中。
其次,考虑在dbconnect.php中包含配置文件。毕竟,该文件使用常量,因此它包含它们所在的配置文件是有意义的。