Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/255.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP代码未成功运行_Php_Html_Mysql_If Statement_While Loop - Fatal编程技术网

PHP代码未成功运行

PHP代码未成功运行,php,html,mysql,if-statement,while-loop,Php,Html,Mysql,If Statement,While Loop,我的问题很简单。我在这里编写的代码在网页上绝对不会产生任何输出。我整天都在做这件事,我确信这件事很简单,因为我错过了,我成了一个白痴。所以我在吸引你那善良的眼睛!如果有人能找出这不起作用的原因,我将不胜感激 前提是: 这是一个决策树在线调查,具有以下条件:如果用户已经开始调查,它将在数据库中找到他们,找到他们最后回答的问题并显示下一个问题。但是如果他们还没有开始,它将显示第一个问题 所有调查问题都保存在数据库以及决策树逻辑中(例如,如果用户为问题1选择选项2,则他们将被引导到问题3,而不是问题2

我的问题很简单。我在这里编写的代码在网页上绝对不会产生任何输出。我整天都在做这件事,我确信这件事很简单,因为我错过了,我成了一个白痴。所以我在吸引你那善良的眼睛!如果有人能找出这不起作用的原因,我将不胜感激

前提是:

这是一个决策树在线调查,具有以下条件:如果用户已经开始调查,它将在数据库中找到他们,找到他们最后回答的问题并显示下一个问题。但是如果他们还没有开始,它将显示第一个问题

所有调查问题都保存在数据库以及决策树逻辑中(例如,如果用户为问题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';
        }
    }
}
?>
<body>

<?php
// Display the concatenated information that has been previously defined
echo $ToDisplay;
?>

</body>
此位:

if ($StartedQueryCount > 0) {
可能计算结果为false,并且没有匹配的else标记添加内容。 尝试更改:

    }
?>
与:

编辑:

此外,这一点:

} else if (empty($LastQuestionAnswered)) {
可替换为更具可读性的:

} else {
因为它做的事情完全一样。 在您的while循环中,您不断地重新定义$ToDisplay,我想这是您想要的行为?否则,在顶部初始化变量(在while()循环之前),如下所示:

并将循环中的指定更改为串联,如下所示:

$ToDisplay = 'text assignment';
致:


谢谢你的帮助!我真的很感谢你们抽出时间

我终于意识到出了什么问题

在PHP代码的第18行,我有以下内容:

while ($row = mysql_fetch_array($sql)) {
当然应该是这样的:

while ($row = mysql_fetch_array($StartedQuery)) {
实际上,我是从错误的查询中调用了行。所以我感觉到了血块


再次感谢大家:)

无输出意味着启用错误报告和显示。您可能犯了致命错误<代码>错误报告(E_全部);ini设置(“显示错误”,1)我在我的脚本顶部有这个,但是网站上没有错误!你查过错误记录了吗?儿子,我想你。如果您清理代码,去掉那些嵌套循环,并学习如何使用,您的代码逻辑(以及错误)可能会更容易发现。我建议将此代码拆分为函数。一个函数返回LastQuestionResponsed。另一个函数根据参数“用户以前的答案”和“LastQuestionResponsed”返回NextQuestion…谢谢你的建议,Johannes,但这没有什么区别。不过,请欣赏您的输入:)这些似乎是您唯一的逻辑错误。如果这不能解决问题,那么我建议您遵循Michael Berkowski的提示,添加错误报告(E_ALL);和ini_集合(“显示错误”,1);再次感谢约翰。我添加了你的建议,但不幸的是没有更快乐的结局。我打开了错误报告功能,但它没有显示任何内容。关于重新定义$ToDisplay,我需要它显示第一个问题(如果此人尚未开始调查),或者下一个问题(如果他们之前已开始调查)。因此,为什么第一个$ToDisplay包含$SurveyStartedQuestionText,第二个包含$SurveyNotStartedQuestionText(请注意添加的“否”),我的脑袋都糊涂了!
$ToDisplay .= 'text concat'; // look at the dot before =
while ($row = mysql_fetch_array($sql)) {
while ($row = mysql_fetch_array($StartedQuery)) {