PHP表单提交错误后返回内容消失问题

本文介绍了PHP表单提交后返回时表单信息丢失的问题及解决方案。通过设置HTTP头部或使用session_cache_limiter方法,可以避免因使用session_start造成的表单信息无法保留的情况。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

PHP表单提交错误后返回内容消失问题

今日发现一个问题,用户如果提交表单后,不符合要求返回,表单信息老是没有。把我郁闷坏了,我明明记得最开始做此功能的时候,是可以恢复表单状态的。经过网上查找,原来是由于我使用了session_start函数的原因,这个函数会强制当前页面不被刷新,解决方法就是在此函数后加入 header("Cache-control: private"),同时注意在本行之前你的PHP程序不能有任何输出。

还有基于session的解决方法,在session_start前加上

session_cache_limiter( 'nocache' ); // 清空表单
session_cache_limiter( 'private' ); //不清空表单,只在session生效期间
session_cache_limiter( 'public' ); //不清空表单,如同没使用session一般

不过从别人博客上看到如果直接设置session会使seesion出现cache的现象,从而导致当你应用到session的地方会出现session信息不能更新的问题。

记录于此,省得下次忘了。这也提醒了我,该时候花个时间好好的把PHP手册当教科书一样从头到尾最少看一遍。

补充:

第一,使用Header方法设置消息头Cache-control


  
1 header ( ' Cache-control: private, must-revalidate ' ); // 支持页面回跳

第二,使用session_cache_limiter方法

//注意要写在session_start方法之前
session_cache_limiter('private, must-revalidate');

补充:
Cache-Control消息头域说明
Cache-Control指定请求和响应遵循的缓存机制。在请求消息或响应消息中设置Cache-Control并不会修改另一个消息处理过程中的缓存处理过程。请求时的缓存指令包括no-cache、no-store、max-age、max-stale、min-fresh、only-if- cached,响应消息中的指令包括public、private、no-cache、no-store、no-transform、must- revalidate、proxy-revalidate、max-age。各个消息中的指令含义如下:

Public指示响应可被任何缓存区缓存。

Private指示对于单个用户的整个或部分响应消息,不能被共享缓存处理。这允许服务器仅仅描述当用户的部分响应消息,此响应消息对于其他用户的请求无效。

no-cache指示请求或响应消息不能缓存

no-store用于防止重要的信息被无意的发布。在请求消息中发送将使得请求和响应消息都不使用缓存。

max-age指示客户机可以接收生存期不大于指定时间(以秒为单位)的响应。

min-fresh指示客户机可以接收响应时间小于当前时间加上指定时间的响应。

max-stale指示客户机可以接收超出超时期间的响应消息。如果指定max-stale消息的值,那么客户机可以接收超出超时期指定值之内的响应消息。


zz:http://www.cnblogs.com/17too/archive/2010/07/03/1770679.html




在这样一个表单中,我们可以看到有些字段是不能为空的,如姓名、邮箱、性别。那么用户如果没有填写这三项内容,网页应该暂时不提交表单数据,并给出相关提示,待用户按照要求填写完毕后,再提交表单。 本关我们将完成对必需字段的验证工作。 相关知识 empty()函数 empty()函数用于检查一个变量是否为空,若变量不存在则返回TRUE;若变量存在且其值为""、0、"0"、NULL、FALSE、array()、var $var以及没有任何属性的对象,则返回TURE;若变量存在且值不为""、0、"0"、NULL、FALSE、array()、var $var以及没有任何属性的对象,则返回FALSE。 请注意与isset()函数加以区分。 验证方法(PHP 部分) 在 PHP 代码部分,我们为每个$_POST变量增加一个if else语句,这些语句将使用empty()函数检查$_POST变量是否为空。我们还将加入一些新的变量:$nameErr,$emailErr,$genderErr和 $websiteErr。这些变量用于在网页提示错误信息。 样例: if (empty($_POST['name'])) { $nameErr = '名字是必需的'; } else { $name = formatted_input($_POST['name']); } 验证方法(HTML 部分) 在 HTML 代码部分,我们为每个字段中添加一些脚本,各个脚本会在信息输入错误时显示错误信息。 样例: 姓名:<input type="text" name="name"> <span class="error">* <?php echo $nameErr;?></span> 编程要求 本关要求补全右侧的代码,具体要求如下: 根据相关知识中介绍的验证方法,完成对必需字段的验证工作。 若内容输入无误,则在表单下方显示输入的内容;反之给出相应提示
最新发布
04-03
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值