如何在不使用会话、JSON、Ajax、隐藏输入或其他文件的情况下在用户提交后保存表单的 POST 数据

How to save POST data of a form after user submission without using Sessions, JSON, Ajax, Hidden input or another file

首先,我会很真诚,我是一名学生,我被要求完成一项对我来说似乎不可能完成的任务。我不喜欢提问,因为一般来说,我总是能够通过搜索和学习来解决我的编码问题,但这是我第一次担任这个职位。

我需要创建一个 php 文件,其中包含一个表单,其中包含用户填写的两个输入项。一旦他点击提交,网站将在其顶部显示这两个值。到这里我还没有遇到问题,但是问题来了,下次用户发送另一个提交时,不是清除最后 2 个值并显示 2 个新值,而是现在需要显示 4 个值。

我知道这可以通过 JSON、使用会话、Ajax、隐藏输入或使用另一个文件(如果可以的话,我会决定使用最后一个文件) ),但老师说我们必须在同一个 html 文件上执行此操作,而不使用前面列出的任何方法。他说这可以通过存储数据的数组来完成,但正如我将在我的示例中展示的那样,当我这样做时,当用户单击提交时,数组值将被删除并从零开始创建。我知道最合乎逻辑的做法是问他,但我已经这样做了 4 次,他真的拒绝帮助我,所以我真的不知道该怎么做,除了在这里问。我应该指出答案必须是服务器端,因为主题是“服务器端编程”。

感谢您的帮助,在此先抱歉,因为我相信这最终会成为一个很容易回答的愚蠢问题。

为了简单起见,我删除了与格式有关的所有内容。这是代码:

<?php
    if (isset($_POST['activity']) && isset($_POST['time'])){
        $agenda = array();
        $activity = $_POST['activity'];
        $time = $_POST['time'];
        $text = $activity." ".$time;
        array_push($agenda, $text);
        foreach ($agenda as $arrayData){
            print implode('", "', $agenda);
        }
    }
?>
<html>
    <head>
    </head>
    <body>
        <form action="<?php echo $_SERVER['PHP_SELF'];?>" method="POST">
            <label for="Activity">Activity</label><br>
            <input name= "activity" type="text"><br><br>
            <label for="Time">Time</label><br>
            <input name= "time" type="time"><br><br>
            <input type="submit">
        </form> 
    </body>
</html>

老实说,你的问题不是很清楚,但我可能已经为你找到了一些有用的东西。

<?php

$formaction = $_SERVER['PHP_SELF'];
    
if (isset($_POST['activity']) && isset($_POST['time'])){
    $agenda = array();

    //if the parameter was passed in the action url
    if(isset($_GET['agenda'])) {
        $agenda = explode(", ", $_GET['agenda']);
    }

    //set activity time
    $text = $_POST['activity']." ".$_POST['time'];

    //push into existing array the new values
    array_push($agenda, $text);

    //print everything
    print implode(", ", $agenda);

    //update the form action variable
    $formaction = $_SERVER['PHP_SELF'] . "?agenda=" . implode(", ", $agenda);
}

?>

<html>
    <head>
    </head>
    <body>
        <form action="<?php echo $formaction; ?>" method="POST">
            <label for="Activity">Activity</label><br>
            <input name= "activity" type="text"><br><br>
            <label for="Time">Time</label><br>
            <input name= "time" type="time"><br><br>
            <input type="submit">
        </form> 
    </body>
</html>

摘要

由于您无法将发布的值保存到 SESSION vars 或 HIDDEN 输入中,下一个最好的办法是将发布表单的先前结果附加到表单的操作中 url。

发布表单时,我们验证查询字符串 agenda 是否存在,如果存在,我们将其分解为名为 $agenda 的数组。然后我们连接 $_POST['activity']$_POST['time'] 值并将其推送到 $agenda array。然后我们打印 array $agenda 并更新 $formaction 变量以包含添加到数组的新值。

在 HTML 部分,我们将 <form action="" 设置为 <form action="<?php echo $formaction; ?>