能不能不用 session ,能不能不用 js
![]() | 1 66beta 2015-11-09 09:36:11 +08:00 可以啊,提交过来的数据,填到页面里去 |
![]() | 2 cevincheung OP |
![]() | 3 odirus 2015-11-09 09:39:39 +08:00 ![]() 最好还是用 session 吧,很多框架都提供了 flash data 功能。 |
4 frjalex 2015-11-09 09:40:12 +08:00 @cevincheung Ajax json POST |
![]() | 5 cevincheung OP @odirus 那是怎么 flash 呢? |
![]() | 6 doushiyinweini 2015-11-09 09:40:52 +08:00 ![]() header('Cache-control: private, must-revalidate'); |
7 tibbers 2015-11-09 09:41:03 +08:00 如果只是单纯的页面跳转, js 的 history.go(-1),就行了,其实就是返回上一页面,数据不会丢 |
8 TangMonk 2015-11-09 09:41:07 +08:00 何必重定向,直接重新 render 。 if valid redirect esle render "edit" |
![]() | 9 oott123 2015-11-09 09:42:23 +08:00 via Android <form method=post> <input name=a value="<?=$_POST['a']?:'';>"> |
![]() | 10 shuax 2015-11-09 09:42:36 +08:00 提交数据不要刷新页面不就行了 |
![]() | 11 cevincheung OP @doushiyinweini 然后 location 回到之前的页面数据还在么? |
![]() | 12 phpcxy 2015-11-09 09:43:30 +08:00 ![]() 像 laravel 的 falsh data 使用 session ,他的 session 可以用 Redis 驱动,不知楼主觉得这样算不用 session 吗 |
13 linauror 2015-11-09 09:46:29 +08:00 ![]() 异步提交 |
![]() | 14 cevincheung OP @phpcxy 其实个人对 session 有点厌恶。一般用户登录什么的都是存加密的 cookie 。最近又开始纠结到底用不用 session 了……- -# |
![]() | 15 adexbn 2015-11-09 09:47:51 +08:00 基本不用 Form ,都是手动 js 异步提交的 |
![]() | 16 odirus 2015-11-09 09:50:24 +08:00 @cevincheung 其实就是在你进行提交的时候, session 中可以保存一些数据,这些数据只会被取出一次,之后就会被删除。你看一下这个,应该对你有帮助, http://laravel-china.org/docs/5.0/session |
![]() | 17 cevincheung OP @odirus 所以还是存到 session 中。每次请求都判断如果有就取出并删除如果没有就不做操作。就像 ci 的 userdata |
![]() | 18 cevincheung OP |
![]() | 20 wizardforcel 2015-11-09 10:03:02 +08:00 via Android 渲染表单所在的模板 把传进来的参数再填回去就行了 或者 ajax 发生错误的时候不跳转 |
![]() | 21 Wangxf 2015-11-09 10:08:51 +08:00 提交的时候把东西写进 localstorage (逃) |
22 GGGG430 2015-11-09 10:16:17 +08:00 可以将当前页面的地址一起 post 过去 |
![]() | 23 hisway 2015-11-09 10:17:24 +08:00 为什么不用 ajax 异步提交,不跳转页面数据都还在~ |
![]() | 24 realpg PRO 1. 一般框架都有自动填充数据的办法 就是有辅助的重新渲染一次模板 2. ajax 包治百病 3. history.back 可保留除了 input type=password 所有表单数据 |
![]() | 25 zhs227 2015-11-09 10:23:47 +08:00 ![]() 其实还是要仔细分析一下你为啥对 SESSION 厌恶。我记得很早以前(大概 03 年)看过一本书,其中有一章专门讲述了用 mysql 重新实现一个 SESSION handler ,所以 SESSION 不过是一个 KV 的存储系统, K 来自于 cookie , V 来自服务器。和你在项目中使用了 mysql 没有啥本质的区别。 分析一下你的厌恶感来源,对症下药,不一定准确。 1. 如果你厌恶的是 SESSION 存储目录的那一大堆乱七八糟的文件,完全可以采用 memcached 或者 Redis 来做 session 存储。 2. 如果你厌恶 ci_session 这么招摇的名字,可以在 php.ini 里换个名字 3. 如果你本身也讨厌 cookie ,呃,当我没说。这个世界上基本上涉及到帐号的系统都会用到 cookie 4. 接上条,不存 cookie 也有一个办法,把 session id 放在 query string 里,比如 example.com/?ci_session=xxxxxxx 说的有点长了。基于问题本身,楼上提到了很多,无外乎 1. ajax 请求,后台判断错误了不提交。 2.在错误页面直接 render 表单,换句话说在 save.php 里面实现和 submit.php 里完全相同的表单,这样出现错误以后,所有的数据都是在$_POST 里现成的,就不用存 SESSION 了。 codeigniter 的 Validator 实现的是类似的方案,表单和存储都在同一个表页完成,不使用 POST-Redirect 方案。 根因分析: 要实现数据不丢失,基本的一条是页面跳转以后把值传到其它页面; 解决方法 1 ,对应上面的 1 ,不跳转,这样就不需要传值; 解决方法 2 ,对应上面的 2 ,$_POST 传值跳转。 所以应该还有其它解决方案,包括但不限以下: 在 save.php 里面,用$_POST 再把数据提交到 submit.php 通过数据库把值从 save.php 传入到 submit.php |
![]() | 26 Chrics 2015-11-09 10:37:53 +08:00 session flash data. |
![]() | 27 yeyeye 2015-11-09 11:38:18 +08:00 js ajax 是最优雅的 js 返回上一页是最简单的 只用纯 php 不用 session 和 js 是可以实现的,只要你不嫌麻烦 简单说就是判断有错误后输入原先的表单页面,同时把 POST 来的数据一个个放入表单,这是 3 个方式里最复杂的。跟优雅一点关系都没有。除非是为了兼容客户端不支持 /不开启 JS ,否则……或许只有它适合你了 |
![]() | 28 jaguar 2015-11-09 12:15:50 +08:00 via Android 大哥,你用 ajax 要屎啊? |
29 dwhdrbdhs 2015-11-09 14:39:49 +08:00 如果不用 ajax 的话有个方法 lz 可以试一下 可以提交到本页里的一个隐藏的 iframe 去 <form action="toSubmit.php" target="hiddenIframe"> iframe : <iframe id="hiddenIframe" name="hiddenIframe" width="0" height="0" frameborder="0" style="display:none"></iframe> 这样本页的表单数据都会保留了就 需要注意的是如果结果要返回字符串的 js 交互的话 控制原先表单页面需要加 parent |
![]() | 30 msxcms 2015-11-09 14:44:40 +08:00 前端体验的问题,就应该用 js 来实现 |
![]() | 32 jugelizi 2015-11-09 21:31:48 +08:00 你都写 php ; 还在乎优雅 |
![]() | 33 Light3 2015-11-09 21:56:06 +08:00 我以前觉得我想做个优雅的人 来到我现在的公司就是我才不管那 我没想这 get 提交就不错了(小公司的痛) |
![]() | 34 cxbig 2015-11-10 04:14:14 +08:00 ![]() 用类处理,每个表单对应一个类,提交的数据自动储存到类,表单验证也由类处理,失败直接踢回给 edit 页面,你提交的数据都在里面了。 |
![]() | 35 lansexinyu 2015-11-10 09:49:43 +08:00 那就把之前填写的信息继续输出到对应表单,找个地方显示提示信息! |