【问题标题】:Prevent array from being recreated each time form is submitted防止每次提交表单时重新创建数组
【发布时间】:2014-08-23 12:48:20
【问题描述】:

我试图在 3 个不同的数组中存储和显示来自表单的会话数据,每次提交表单时都会更新数组。第一次提交表单时,数组数据会正确显示,但此后每次似乎都重新创建了它,而不是将新值推送到数组中。

我相信每次提交表单时都会重新创建数组,但我不知道如何防止这种情况。新手程序员在这里,非常感谢任何帮助。

<!DOCTYPE HTML>
<?php session_start(); ?>

<html>
<head>
    <title> Populating Arrays from User </title>
</head>
<body>

<?php   
// Create the three arrays
    $teamsports = $solosports = $favteam = array(); 
// Create variables to hold each value
    $team = $solo = $country = "";
?>
<form method="POST" action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>">
    Team Sport: <input type="text" name="team"><br><br>
    Solo Sport: <input type="text" name="solo"><br><br>
    Fav Team: <select name="country">
        <option value="Canada">Canada</option>
        <option value="Canada">USA</option>
        <option value="England">England</option>
        <option value="Germany">Germany</option>
    </select><br><br>
    <input type="submit" name="submit" value="Click to submit">
</form>

<?php
if ($_SERVER["REQUEST_METHOD"] == "POST") {
    $_SESSION["team"] = $_POST["team"];
    $_SESSION["solo"] = $_POST["solo"];
    $_SESSION["country"] = $_POST["country"];

    array_push($teamsports, $_SESSION["team"]);
    array_push($solosports, $_SESSION["solo"]);
    array_push($favteam, $_SESSION["country"]); 
}
?>

<h2> Results </h2><br>
Team Sports:<?php foreach ($teamsports as $value) {echo $value;}?><br><br>
Solo Sports:<?php foreach ($solosports as $value) {echo $value;}?><br><br>
Fav Teams:<?php foreach ($favteam as $value) {echo $value;}?><br><br>

</body>
</html>

【问题讨论】:

    标签: php arrays forms session


    【解决方案1】:

    Josh 是正确的,数组被覆盖了。我相信这可能更符合您的要求:

    <!DOCTYPE HTML>
    <?php session_start(); ?>
    
    <html>
    <head>
        <title> Populating Arrays from User </title>
    </head>
    <body>
    
    <form method="POST" action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>">
        Team Sport: <input type="text" name="team"><br><br>
        Solo Sport: <input type="text" name="solo"><br><br>
        Fav Team: <select name="country">
            <option value="Canada">Canada</option>
            <option value="Canada">USA</option>
            <option value="England">England</option>
            <option value="Germany">Germany</option>
        </select><br><br>
        <input type="submit" name="submit" value="Click to submit">
    </form>
    
    <?php
    if ($_SERVER["REQUEST_METHOD"] == "POST") {
    
        $_SESSION["team"][] = $_POST["team"];
        $_SESSION["solo"][] = $_POST["solo"];
        $_SESSION["country"][] = $_POST["country"];
    }
    ?>
    
    <h2> Results </h2><br>
    Team Sports:<?php foreach ($_SESSION["team"] as $value) {echo $value;}?><br><br>
    Solo Sports:<?php foreach ($_SESSION["solo"] as $value) {echo $value;}?><br><br>
    Fav Teams:<?php foreach ($_SESSION["country"] as $value) {echo $value;}?><br><br>
    
    </body>
    </html>
    

    【讨论】:

    • 好的,我知道它是如何工作的,非常感谢您的回复。我还有一个问题:你怎么一开始就去掉了创建变量的代码?您不必创建变量来保存表单数据,还是在提交表单时将它们自动存储在 $_POST 数组中?再次感谢大家,非常感谢。
    • 谢谢@JoshKG! @user3798449,是的,您是对的,当您提交表单时, $_POST 数组包含所有表单数据,因此您不需要那些额外的变量。
    【解决方案2】:

    您的 PHP 数组仅在页面加载时才存在。当您发布新表单时,页面会重新加载并吹走数组。您需要将该数组数据保留在会话中。

    【讨论】:

      猜你喜欢
      • 2011-04-24
      • 1970-01-01
      • 1970-01-01
      • 2019-03-28
      • 2019-07-20
      • 2019-01-21
      • 1970-01-01
      • 2013-07-24
      相关资源
      最近更新 更多