我的问题很简单。我在这里编写的代码在网页上绝对没有输出。我一整天都在想这件事,我确信这很简单,因为我错过了,所以我是个白痴。所以我是在向你那善良的、新鲜的眼睛求助!如果有人能指出为什么这不起作用,我将非常感激。
的前提:
这是一个具有以下条件的决策树在线调查:如果用户已经开始调查,它将在数据库中找到他们,找到他们最后回答的问题并显示下一个问题。但如果他们还没有开始,它将显示第一个问题。
所有调查问题都保存在数据库和决策树逻辑中(例如,如果用户在问题1中选择选项2,他们将被引导到问题3,而不是问题2)。
请假设目前,我正在直接从数据库更新相关信息,而不是在网站上自动更新。
谢谢:)PHP:
<?php
//Find the latest question reached by the user for display on the page
$sql = mysql_query("SELECT QuestionNumberReached FROM User WHERE EmailAddress = '***'");
$sqlCount = mysql_num_rows($sql);
if ($sqlCount > 0) {
while ($row = mysql_fetch_array($sql)) {
$QuestionNumberReached = $row["QuestionNumberReached"];
}
}
?>
<?php
//Find the last question answered by the user from the database
$StartedQuery = mysql_query("SELECT LastQuestionAnswered FROM User WHERE EmailAddress = '***'");
//Count the number of rows that the query produces
$StartedQueryCount = mysql_num_rows($StartedQuery);
//If data is found, whether it be a number or null, define the value
if ($StartedQueryCount > 0) {
while ($row = mysql_fetch_array($sql)) {
$LastQuestionAnswered = $row["LastQuestionAnswered"];
//If the field has a value and is not null, find the next question from the database
if (!empty($LastQuestionAnswered)) {
//Find the User's ID and the ID of the last question answered
$sqlA = mysql_query("SELECT PKID, LastQuestionAnswered FROM User WHERE EmailAddress = '***'");
//If the operation produces an error, output an error message
if (!$sqlA) {
die('Invalid query for SQLA: ' . mysql_error());
}
//Count the number of rows output
$sqlACount = mysql_num_rows($sqlA);
//If rows exist, define the values
if ($sqlACount > 0) {
while ($row = mysql_fetch_array($sqlA)) {
$sqlAPKID = $row["PKID"];
$sqlALastQuestionAnswered = $row["LastQuestionAnswered"];
}
}
//Find the answer given by the user to the last answered question
$sqlB = mysql_query("SELECT Answer FROM Responses WHERE User = $sqlAPKID");
//If the operation produces an error, output an error message
if (!$sqlB) {
die('Invalid query for SQLB: ' . mysql_error());
}
//Count the number of rows output
$sqlBCount = mysql_num_rows($sqlB);
//If rows exist, define the values
if ($sqlBCount > 0) {
while ($row = mysql_fetch_array($sqlB)) {
$sqlBAnswer = $row["Answer"];
}
}
//Find the number of the next question to be answered based on the user's previous answer and the question they answered
$sqlC = mysql_query("SELECT NextQuestion FROM Answers WHERE QuestionNumber = $sqlALastQuestionAnswered AND PKID = $sqlBAnswer");
//If the operation produces an error, output an error message
if (!$sqlC) {
die('Invalid query for SQLC: ' . mysql_error());
}
//Count the number of rows output
$sqlCCount = mysql_num_rows($sqlC);
//If rows exist, define the values
if ($sqlCCount > 0) {
while ($row = mysql_fetch_array($sqlC)) {
$sqlCNextQuestion = $row["NextQuestion"];
}
}
//Find the question text pertaining to the ID of the next question that needs to be answered
$sqlD = mysql_query("SELECT QuestionText FROM Questions WHERE PKID = $sqlCNextQuestion");
//If the operation produces an error, output an error message
if (!$sqlD) {
die('Invalid query for SQLD: ' . mysql_error());
}
//Count the number of rows output
$sqlDCount = mysql_num_rows($sqlD);
//If rows exist, define the values
if ($sqlDCount > 0) {
while ($row = mysql_fetch_array($sqlD)) {
$SurveyStartedQuestionText = $row["QuestionText"];
}
}
//Set a string of information that will show the question number and question text as appropriate
$ToDisplay = '' . $QuestionNumberReached . ': ' . $SurveyStartedQuestionText . '<br /><br />Answer Text Here';
//If the value for QuestionNumberReached is null, the user has not started the survey
} else if (empty($LastQuestionAnswered)) {
//Find the question text of the first question in the survey
$sql3 = mysql_query("SELECT QuestionText FROM Questions WHERE PKID IN (SELECT FirstQuestion FROM Batch WHERE BatchNumber IN (SELECT BatchNumber FROM User WHERE EmailAddress = '***'))");
//Count the number of rows output
$sql3Count = mysql_num_rows($sql3);
//If rows exist, define the values
if ($sql3Count > 0) {
while ($row = mysql_fetch_array($sql3)) {
$SurveyNotStartedQuestionText = $row["QuestionText"];
}
}
//Set a string of information that will show the question number and question text as appropriate
$ToDisplay = '' . $QuestionNumberReached . ': ' . $SurveyNotStartedQuestionText . '<br /><br />Answer Text Here';
}
}
}
?>
HTML: <body>
<?php
// Display the concatenated information that has been previously defined
echo $ToDisplay;
?>
</body>
这一点:
if ($StartedQueryCount > 0) {
的计算结果可能为false,并且没有匹配的else标记来添加内容。试着改变:
}
?>
:
}
else {
$ToDisplay = 'Error: no rows found to display!';
}
?>
编辑:同样,这一点:
} else if (empty($LastQuestionAnswered)) {
可以替换为可读性更强的:
} else {
因为它做的是完全相同的事情。在你的while循环中,你不断重新定义$ToDisplay,我认为这是想要的行为?否则在顶部初始化变量(在while()循环之前),如下所示:
$ToDisplay = '';
并将循环中的赋值更改为串联,如下所示:
$ToDisplay = 'text assignment';
:
$ToDisplay .= 'text concat'; // look at the dot before =
感谢您的帮助!我真的很感谢你们抽出时间。
我终于明白是怎么回事了…
在PHP代码的第18行,我有以下内容:
while ($row = mysql_fetch_array($sql)) {
而它当然应该是这样的:
while ($row = mysql_fetch_array($StartedQuery)) {
基本上我是从错误的查询调用行。我因此感觉有血块!
再次感谢大家:)