我是PHP新手,正在从事一项作业。我快完成了,但是感觉到我最后一步在墙上撞了个头。
用户选择一个调查,然后回答10个问题。回答完第10个问题后,他们将被重定向到result.php页面,该页面应显示他们的问题和答案。
我知道我需要使用foreach
循环,但这是我第一次与他们合作。我已经完成了多个站点,以了解它们的工作原理,但是这些示例并不能帮助我理解如何使其在我的作业中发挥作用。
现在,当我运行文件时得到此信息:
解析错误:语法错误,意外的'endforeach'(T_ENDFOREACH),预计在第38行的C:\ xampp \ htdocs \ sandbox \ HW4 \ results.php中文件的结尾
当我删除endforeach时,被告知回声中的$ answer是未定义的。
我已经用尽了改变循环的方法。什么都没有。一些帮助,将不胜感激。如果包含与问题不相关的代码,我深表歉意。
在不太了解PHP的情况下,我不确定我需要包括什么,不需要包括什么。我包括来自Survey.php文件的代码,该文件包括数组会话,而来自结果文件的代码应包含我的foreach
循环。
谢谢您的时间。
$isPostBack = filter_input(INPUT_POST, 'submitButton') !== NULL;
if ($isPostBack) {
// This is what happens if there is a postback.
$choose_survey = filter_input(INPUT_POST, 'choose_survey', FILTER_VALIDATE_INT);
if ($choose_survey !== NULL) {
// Check the value of $choose_survey and then set 'survey' accordingly, e.g.
// These numbers are the keys to the arrays with the list of surveys
switch ($choose_survey) {
case 0:
$_SESSION['survey'] = $survey0;
break;
case 1:
$_SESSION['survey'] = $survey1;
break;
case 2:
$_SESSION['survey'] = $survey2;
break;
default:
break;
}
$_SESSION['answers'] = array();
$_SESSION['number'] = 1;
} else {
// A survey is not selected because it was already chosen.
// get the value from the radio button.
$answer = filter_input(INPUT_POST, 'answer', FILTER_DEFAULT);
if ($answer == NULL) {
echo '<p>Please select an answer before clicking Submit.</p>';
} else {
$question_key = filter_input(INPUT_POST, 'question_key', FILTER_VALIDATE_INT);
$question = $_SESSION['survey'][$question_key];
// this will be used later to display the answers/results
$_SESSION['answers'][$question] = $answer;
unset($_SESSION['survey'][$question_key]);
// This is adding 1 to the question number unless session number is 10
if ($_SESSION['number'] == 10) { // if = to 10 then we redirect to next page.
header('Location: results.php');
} else { // If number is less than 10, we add 1
$_SESSION['number'] += 1;
}
}
}
} else {
// This is what happens if there is no postback.
}
?>
results.php文件
<br /> <p>Thank you for participating in the survey!</p>
<html lang="en">
<head>
<title>Survey Results</title>
<link rel="stylesheet" type="text/css" href="">
</head>
<body>
<form action="logout.php">
<p>Here are your results</p>
<input type="submit" id="submit" value="Logout" />
</form>
<section>
<?php foreach ($_SESSION['answers'] as $question => $answer) ?>
<p>
<?php echo "$answer <br/>"; ?>
</p>
<?php endforeach; ?>
</section>
</body>
答案 0 :(得分:2)
您是否在文件中加载了session_start()
?如果不是这样,可能无法保存您正在设置的会话。另外,您还可以在results.php
上将代码更改为:
<?php foreach($_SESSION['answers'] as $question => $answer){ ?>
<p>
<?php echo $answer."<br/>"; ?>
</p>
<?php }
?>
希望这会有所帮助!
答案 1 :(得分:1)
我不确定,但是也许您可以将<?php session_start();?>
放在您的results.php的开头,以使您的脚本能够使用$ _SESSION变量?
另外,以防万一,请尝试使用result.php中的var_dump($_SESSION);
。
答案 2 :(得分:1)
令我惊讶的是,没有人注意到foreach
中的语法错误。
如果您想使用endforeach
样式,则可以这样更改代码(称为Alternative Syntax):
<section>
<?php foreach ($_SESSION['answers'] as $question => $answer): ?>
<p>
<?php echo "$answer <br/>"; ?>
</p>
<?php endforeach; ?>
</section>
或者,如果您想使用PHP方式制作foreach
,则可以这样编写:
<section>
<?php foreach ($_SESSION['answers'] as $question => $answer) { ?>
<p>
<?php echo "$answer <br/>"; ?>
</p>
<?php } ?>
</section>
但是,对于更干净的HTML和PHP代码,我建议您这样编写:
<section>
<?php
foreach ($_SESSION['answers'] as $answer) {
echo "<p>$answer</p>" . PHP_EOL;
}
?>
</section>
请注意,我删除了未使用的$question
变量。