【问题标题】:How to fix an array of inputs and display it correctly如何修复输入数组并正确显示
【发布时间】:2018-10-28 15:49:34
【问题描述】:

这个问题有点长,我已经编辑了太多以减少我的代码,但我希望任何人都可以帮助我!

我正在使用 php 在时间表项目中进行数学测试,该项目将要求用户输入他的姓名,然后问他 10 个问题,例如“2 x 2 = ?”提供四个按钮来选择答案,然后在回答 10 个问题后,用户将被重定向到 result.php 页面,该页面将显示结果,这是我迄今为止在 homePage.php 中写的内容:

<?php

session_start();

if (isset($_POST['submit']) ) {

    $_SESSION['QuestionNumber'] = 1;
    $_SESSION['CorrectAnswers'] = 0;
    $_SESSION['QuestionsAsnwered'] = 0;
    $_SESSION['QuestionsAnswered'] = 0;

    header("location: MathTest.php");

}

?>

<!DOCTYPE html>
<html>
<body>
    <h1 align="center">Math Test</h1>

    <form method="POST" action="">
        <div style="text-align: center;">
        <input type="submit" name="submit" value="Begin Test"">
        </div>
    </form>
</body>
</html>

在包含问题的 MathTest.php 中:

<?php

session_start();
//just controlling user answer no problem here
if (isset($_POST[$_SESSION['UserAnswer']])) {
    if ($_SESSION['QuestionNumber'] == 10) {
        header("location: result.php");
    }

    if ($_SESSION['UserAnswer'] == $_SESSION['CorrectAnswer']) {
        $_SESSION['QuestionNumber'] += 1;
        $_SESSION['CorrectAnswers'] += 1;
        $_SESSION['QuestionsAnswered'] += 1;
        QuestionGenerator();
    } else {
        $_SESSION['QuestionNumber'] += 1;
        $_SESSION['QuestionsAnswered'] += 1;
        QuestionGenerator();
    }
}
//I think that my problem(written down) is here
function QuestionGenerator(){
    $rnd1 = rand(1, 12);
    $rnd2 = rand(2, 12);

    $CorrectAnswer = $rnd1 * $rnd2;
    $WrongAnswer1 = $CorrectAnswer - 2;
    $WrongAnswer2 = $CorrectAnswer + 2;
    $WrongAnswer3 = $CorrectAnswer + 4;

    $_SESSION['rnd1'] = $rnd1;
    $_SESSION['rnd2'] = $rnd2;

    $_SESSION['CorrectAnswer'] = $CorrectAnswer;
    $_SESSION['WrongAnswer1'] = $WrongAnswer1;
    $_SESSION['WrongAnswer2'] = $WrongAnswer2;
    $_SESSION['WrongAnswer3'] = $WrongAnswer3;

    $_SESSION['AnswersArray'] = array($_SESSION['CorrectAnswer'], $_SESSION['WrongAnswer1'], $_SESSION['WrongAnswer2'], $_SESSION['WrongAnswer3']);
}

function EchoAnswers($array) {
    shuffle($array);    
    echo "<form method='POST' action='' ";
    foreach ($array as $_SESSION['UserAnswer']) {
        echo "<button><input style='width: 200px; height: 100px; font-size: 75px;' type='submit' name='" . $_SESSION['UserAnswer'] . "' value='" . $_SESSION['UserAnswer'] . "' ></button";
    }
    echo "</form>";
}

?>

<!DOCTYPE html>
<html>
<body>
    <?php echo "<h1 align='center' style='font-size: 75px;'>Question " . $_SESSION['QuestionNumber'] . " of 10</h1>"; ?>

    <h2 align="center" style="font-size: 60px"><?php echo $_SESSION['rnd1'] . " X " .  $_SESSION['rnd2'] . " = ?" ?></h2>
    <div align="center">
        <?php EchoAnswers($_SESSION['AnswersArray']) ?>
    </div>
</body>
</html>

问题是当我点击任何按钮时,它只会随机播放答案,但如果我按下最后一个按钮,它将完全正常工作

【问题讨论】:

  • 代码太多。您需要自己更好地解决此问题。我们不是调试器。您需要隔离问题并从那里进行调试。如果您遇到困难,请清楚说明 Minimal, Complete, and Verifiable example 的不适用之处。我建议阅读How to Ask 一个好问题和the perfect question。另外,请务必使用tour 并阅读this
  • @JohnConde 我已经编辑了我的问题并减少了代码量现在更好还是应该减少更多?
  • 我可以建议重构吗?首先,我会在 JavaScript 中完成所有这些客户端,因为实际上不需要服务器端资源。但是,我知道这个项目可能只是一个 PHP 实验,以后会做其他事情。在这种情况下,请考虑发布问题以及建议的答案。无需在会话数据中跟踪所有这些。

标签: php forms post


【解决方案1】:

我遇到的问题是,有 4 个提交按钮,每个按钮都有不同的 name 标签,因此会话将只存储最后一个输入按钮并使其正常工作,但对于其他按钮,它只会刷新页面,没有什么不同,因为它们不受 php 代码控制,因此为了解决这个问题,我只更改了 EchoAnswers 函数,如下所示:

function EchoAnswers($array) {
    shuffle($array);    
    echo "<form method='POST' action='' ";
    foreach ($array as $_SESSION['UserAnswer']) {
        echo "<button><input style='margin: 10px; border: 3px solid black; background-color: lightblue; width: 200px; height: 100px; font-size: 75px;' type='submit' name='UserAnswer' value='" . $_SESSION['UserAnswer'] . "' ></button";
    }
    echo "</form>";
}

name 标签也被设置为$_SESSION['UserAnswer'] 所以我把这部分改成了一个普通的名字,我也把php代码改成了这样:

if (isset($_POST['UserAnswer'])) {
    if ($_SESSION['QuestionNumber'] == 10) {
        header("location: result.php");
    }

    if ($_SESSION['UserAnswer'] == $_SESSION['CorrectAnswer']) {
        $_SESSION['QuestionNumber'] += 1;
        $_SESSION['CorrectAnswers'] += 1;
        $_SESSION['QuestionsAnswered'] += 1;
        QuestionGenerator();
    } else {
        $_SESSION['QuestionNumber'] += 1;
        $_SESSION['QuestionsAnswered'] += 1;
        QuestionGenerator();
    }
}

我在php代码中更改的部分是isset($_POST['UserAnswer']),因为UserAnswer被设置为$_SESSION['UserAnswer']而不是名称标签中的普通名称。

【讨论】:

  • 我很高兴你明白了,但请看一下我从上一个问题中推荐给你的书
猜你喜欢
  • 1970-01-01
  • 2022-12-05
  • 1970-01-01
  • 2013-08-20
  • 2020-03-01
  • 2023-01-26
  • 1970-01-01
  • 2020-02-20
  • 1970-01-01
相关资源
最近更新 更多