dsapkqaduj6718493
2015-11-12 19:51
浏览 44
已采纳

PHP - 表单,发布到同一页面,错误处理,防止重新提交

I have come across quite the problem when making my own framework. I have found some other questions that come close to what I'm asking, but not quite.

This is what I am attempting:

  • Page has a form with method post and submits to itself (same page).
  • When you submit, the input is validated appropriate messages / errors are displayed.

It seems simple, but I am trying to:

  • Avoid form resubmission that comes with using post. This wouldn't be a problem if I also wasn't trying to...
  • Avoid having duplication or more code than needed. Redirection adds an extra action where I would need to check the input twice (once on the submit page for validation and once on the redirected page for messages/ errors).
  • Avoid using query strings, cookies or sessions. Which makes the solution of posting to another page and then redirecting while still having message handling impossible (as far as I know).
  • Avoid relying on AJAX since JS can be disabled.

Am I asking too much or is there a way to do this? Is there something I would need to compromise on to achieve this? If not, then I guess I will go with sessions and redirection.

图片转代码服务由CSDN问答提供 功能建议

在制作自己的框架时,我遇到了很多问题。 我发现了其他一些问题,这些问题与我提出的问题相近,但并不完全正确。

这就是我正在尝试的问题:

    \ n
  • Page有一个带有方法发布的表单并提交给自己(同一页面)。
  • 当你提交时,输入被验证相应的消息/错误 显示。 \ n

    看起来很简单,但我想:

    • 避免使用post附带的表单重新提交。 如果我也没有尝试,这不会是一个问题......
    • 避免重复或代码超出需要。 重定向添加了一个额外的操作,我需要检查输入两次(一次在提交页面上进行验证,一次在重定向页面上查看消息/错误)。
    • 避免使用查询字符串,cookie或 会话。 这使得发布到另一个页面然后重定向,同时仍然无法处理消息处理(据我所知)。
    • 避免依赖AJAX,因为JS可以被禁用。

      我问得太多了还是有办法做到这一点? 有什么我需要妥协才能实现这一目标吗? 如果没有,那么我想我会选择会话和重定向。

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 邀请回答

1条回答 默认 最新

  • dsff788655567 2015-11-12 20:27
    已采纳

    i am not sure i understood well, do you need to process $_POST on the same page, which holds the form and avoid re-sending the data?

    if so, u need to reload page, without POST after proceeding your form ... i.e.

     if(isset($_POST["YOUR_FORM_FIELD"])){
       header("Location: ".$_SERVER["HTTP_REFERER"]);
       exit();
     }
    

    BUT - reloading is in conflict with your request to not use _SESSION, or _GET nad send a message to be displayed. i did not find a way how to pass a variable through HTTP headers - which seems to me like the only way ...

    anyway i do recommend to consider using _SESSION ....

    点赞 评论

相关推荐 更多相似问题