所以我使用的是Limonade PHP,它有一个RESTful设计,可以模拟创建,更新,删除的PUT,POST,DELETE路径。
我正在尝试开发一些表现良好的表单验证。我面临的主要问题是如何将我过滤的数据(验证失败)返回到重新填充创建或编辑表单。
如何做到这一点?我目前要创建一个页面:
/admin/page/new -> GET function
/admin/page -> POST function
+ validate
+ pass, update db
+ fail, add errors to flash, redirect to /admin/page/mew
由于我不知道如何使用无效但已过滤的数据填充/ admin / page / new,这一切都会失败。
答案 0 :(得分:1)
您是否使用会话将数据传输到/ admin / page / new? http://www.php.net/manual/en/session.examples.basic.php
编辑: 我刚刚发现这篇文章:http://www.recessframework.org/page/towards-restful-php-5-basic-tips建议在$ _SESSION上使用cookie。它没有详细说明原因,但任何一个都能达到你想要的结果。
答案 1 :(得分:1)
要将数据恢复到重定向页面,您需要使用会话或对请求进行垃圾处理,并为每个元素获取vars(不好看,对于书签不好,不会建议)。
我猜是'向flash添加错误'是使用会话变量(不熟悉Limonade)。
另一种选择是使用AJAX调用提交表单,然后表单数据甚至不会因错误而改变。
当然,您仍然需要一种非AJAX方法来实现向后兼容性。
更新:Limonade Source确认flash()
使用$_SESSION
。所以你已经在使用会话变量了。
答案 2 :(得分:0)
您可以输出表单而不重定向。将表单放在不包含其他HTML元素的脚本中。让它设置$_POST
中给出的任何表单输入的值(在使用适当的引用样式调用htmlspecialchars
之后)。在适当的情况下将表单脚本包含在其他脚本中。
在您的实用程序功能中:
function passthruFormInput($name) {
if (isset($_POST[$name])) {
echo htmlspecialchars($_POST[$name], ENT_QUOTES);
}
}
newForm.php(或任何你想要的名字):
<form action="..." method="POST" onsubmit="...(client side validation function)...">
...
<input name="foo" value="<?php passthruFormInput('foo'); ?>"/>
...
</form>
如果您动态生成表单,请调整以上内容以匹配。关于这种实现和方法的一些事情让人感到厌倦,但我无法完全理解它。
保持表单脚本可公开访问可能不是安全问题,但它应该位于文档根层次结构之外,或者位于受ORDER Allow,Deny
或mod_rewrite保护的分支中。它应该与观点一致。