能不能不用 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 1
最好还是用 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 2
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 1
像 laravel 的 falsh data 使用 session ,他的 session 可以用 Redis 驱动,不知楼主觉得这样算不用 session 吗
|
13
linauror 2015-11-09 09:46:29 +08:00 1
异步提交
|
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 2015-11-09 10:22:39 +08:00
1. 一般框架都有自动填充数据的办法 就是有辅助的重新渲染一次模板
2. ajax 包治百病 3. history.back 可保留除了 input type=password 所有表单数据 |
25
zhs227 2015-11-09 10:23:47 +08:00 1
其实还是要仔细分析一下你为啥对 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 1
用类处理,每个表单对应一个类,提交的数据自动储存到类,表单验证也由类处理,失败直接踢回给 edit 页面,你提交的数据都在里面了。
|
35
lansexinyu 2015-11-10 09:49:43 +08:00
那就把之前填写的信息继续输出到对应表单,找个地方显示提示信息!
|