Php 提交前存储表单数据的最佳方式?

Php 提交前存储表单数据的最佳方式?,php,forms,session,datastore,Php,Forms,Session,Datastore,首先让我描述一下这个场景。假设一个用户在我的站点中填写表单。表单可能包含大约14个字段。现在,在完成7个字段后,他/她会错误地返回或关闭窗口或重新启动电脑 现在,当他/她回来时,有没有办法让他知道7个字段已满?现在有三种情况需要处理: 从主页返回 关上窗户 重新启动电脑 可能没有解决所有这些问题的办法。如果只有1和2的情况可以处理,这是很好的 我知道会话,但到目前为止,我知道要在会话中保存一些东西,您需要提交网站或刷新,这不是我的重要案例 所以我需要一个好方法来做到这一点 实际上,我的站点将在每

首先让我描述一下这个场景。假设一个用户在我的站点中填写表单。表单可能包含大约14个字段。现在,在完成7个字段后,他/她会错误地返回或关闭窗口或重新启动电脑

现在,当他/她回来时,有没有办法让他知道7个字段已满?现在有三种情况需要处理:

从主页返回 关上窗户 重新启动电脑

可能没有解决所有这些问题的办法。如果只有1和2的情况可以处理,这是很好的

我知道会话,但到目前为止,我知道要在会话中保存一些东西,您需要提交网站或刷新,这不是我的重要案例

所以我需要一个好方法来做到这一点


实际上,我的站点将在每个表单中托管大约20-40个字段。因此,如果用户关闭选项卡或返回,对其进行恢复是非常重要的

您可以使用将数据保存到会话。。。你不需要刷新。。您可以在每次字段更新时或任何时候调用ajax。。ajax调用不需要等待表单提交。。它可以在每次按键/keyup时触发(尽管不推荐)

您也可以每隔x秒通过ajax设置会话。这样就消除了刷新页面以保存会话值的问题

setInterval(function(){
     $.post("/ajaxLogin.php",{
            value: $("#value").val()
        }, 
        function(result){
            console.log('saved!');
      });
}, 2000);
这是通过ajax调用的ajaxLogin.php

<?php
    session_start();
    $_SESSION['value'] = $_POST["value"];
?>

在网络世界中,通常要做的事情是将数据保存在cookie或会话中。Cookie存储在用户的机器中,直到其到期日期为止,而会话的时间跨度通常较短(通常取决于服务器的会话生存时间)

一种方法是,如果用户可以在稍后离开并返回(即使在重新启动后),将其保存到cookie中。您可以在PHP中使用setcookie来实现这一点,并序列化数据

例如:

setcookie("UserFormData", serialize($_POST), time()+3600);  /* expire in 1 hour */

From:

您可以创建一个onchange函数。您可以为每个输入设置一个特定的cookie,假设您使用的是PHP和我提供的链接中的函数,您可以执行以下操作:

<input type="text" name="username" onchange="SetCookie('username',this.value,1);" value="<?=$_COOKIE['username'];?>" />

您应该逐页存储数据,只有在X分钟内未更新数据后才能“完成”。至少我是这样完成了一个类似的任务的,我在工作中为一个站点创建了一个4页的连接过程。以会话id作为密钥存储page1数据,然后对其他页面进行更新。这样,如果用户返回或取消,您仍然可以获得他们的一些数据。我想我没有让您了解我的情况。我的问题是,如果用户填写了表单的一半并将其关闭,那么我如何在会话中实际保存数据。如果用户在这种情况下提交,我可以在会话中保存数据。很难保证所有数据都以这种方式保存。有些可能,但不一定是全部。但是,有些总比没有好。如果在每个字段更新(更改)事件上触发ajax调用,那么保存数据是有意义的,否则为什么要保存特定字段的“未完成”项。。有意义吗?例如,在字段更改时保存更有意义,并且可能会使数据与用户有时间(在他/她关闭浏览器之前)一样准确,或者让用户做其他事情。如果cookie可用,会话存储和本地存储也是一个很好的替代品,但您希望在包含所有内容的单个JSON字符串上执行此操作。。。window.localStorage.setItem('idname',data);window.localStorage.getItem('idname');我不熟悉JSON。所以我最好使用cookie或会话SCUZYSETCOKIE是默认函数吗?同样在这种情况下,如果我对输入框进行更改,并且不提交按钮,它会将值保存到cookie吗?