PHP ...使用forloop显示数组(调查结果)

时间:2019-03-05 06:04:24

标签: php

我是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>

3 个答案:

答案 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变量。