用PHP验证表单信息背后的逻辑

用PHP验证表单信息背后的逻辑,php,validation,forms,Php,Validation,Forms,我正在尝试使用PHP进行第一次表单验证 我需要一些逻辑指导 我有purchase.php(它有表单)和review purchase.php(它设置会话变量并显示输入的用户数据) 如果任何字段未通过验证,我不希望用户访问review-purchase.php 我应该将用户发送到review-purchase.php脚本,在那里检查验证,然后用错误消息重定向回purchase.php吗 或 我是否应该将if/else语句与$_SERVER['php_self']等一起使用,并将所有验证保留在pur

我正在尝试使用PHP进行第一次表单验证

我需要一些逻辑指导

我有purchase.php(它有表单)和review purchase.php(它设置会话变量并显示输入的用户数据)

如果任何字段未通过验证,我不希望用户访问review-purchase.php

我应该将用户发送到review-purchase.php脚本,在那里检查验证,然后用错误消息重定向回purchase.php吗

我是否应该将if/else语句与$_SERVER['php_self']等一起使用,并将所有验证保留在purchase.php页面上,并且仅在所有验证都通过时才让purchase review运行


对不起,这个问题让人困惑,但我自己也很困惑…

这是很多人问自己的问题,可能没有一个正确的答案

在你的情况下,我通常做的是:

  • purchase.php
    显示表单
  • 该表单在自身上发布(即,
    purchase.php
  • 提交数据后,将对其进行处理——仍在
    purchase.php中
    
    • 如果出现错误(例如输入中出现异常),您可以非常轻松地重新显示表单,方法如下:您已经拥有用户键入的所有值
    • 如果没有错误,你可以对数据做任何你必须做的事情;比如在会话中设置它,如果您需要的话,或者将它保存到数据库中
  • 只有在一切正常(数据验证正常和存储正常)时,才能重定向到“
    confirm.php
    • 确认页面除了显示一条消息说“谢谢您的购买”或类似的内容外,什么也不做

这意味着在您的
purchase.php
中添加更多内容,是的:

  • 表单的(重新)显示
  • 处理输入
但是,通过这种方式,当出现验证错误时,重新显示表单(预先填充用户首先键入的内容)确实更容易

不过,您可以使用函数/类/方法,甚至使用一些包含的文件,以避免最终得到一大块不可读/不可维护的代码

如果您的表单发布到另一个页面,那么重新显示表单将非常困难。。。如果您使用重定向,您将不得不传递URL中的所有内容,这将是一个混乱(而且还有大小限制)


这里,这意味着我将完全删除您的
reviewpurchase.php
文件;并将其转换为确认页面,这样用户就知道一切正常,他的购买也得到了处理

我想这正是你在最后一段中的意思,实际上:-)



注意:在将数据注入表单之前,必须考虑转义数据(请参见和/或);从用户那里得到的一切都是如此(我想说,对于PHP_SELF,可能也是如此);-)

这是许多人问自己的问题,可能没有一个正确的答案

在你的情况下,我通常做的是:

  • purchase.php
    显示表单
  • 该表单在自身上发布(即,
    purchase.php
  • 提交数据后,将对其进行处理——仍在
    purchase.php中
    
    • 如果出现错误(例如输入中出现异常),您可以非常轻松地重新显示表单,方法如下:您已经拥有用户键入的所有值
    • 如果没有错误,你可以对数据做任何你必须做的事情;比如在会话中设置它,如果您需要的话,或者将它保存到数据库中
  • 只有在一切正常(数据验证正常和存储正常)时,才能重定向到“
    confirm.php
    • 确认页面除了显示一条消息说“谢谢您的购买”或类似的内容外,什么也不做

这意味着在您的
purchase.php
中添加更多内容,是的:

  • 表单的(重新)显示
  • 处理输入
但是,通过这种方式,当出现验证错误时,重新显示表单(预先填充用户首先键入的内容)确实更容易

不过,您可以使用函数/类/方法,甚至使用一些包含的文件,以避免最终得到一大块不可读/不可维护的代码

如果您的表单发布到另一个页面,那么重新显示表单将非常困难。。。如果您使用重定向,您将不得不传递URL中的所有内容,这将是一个混乱(而且还有大小限制)


这里,这意味着我将完全删除您的
reviewpurchase.php
文件;并将其转换为确认页面,这样用户就知道一切正常,他的购买也得到了处理

我想这正是你在最后一段中的意思,实际上:-)



注意:在将数据注入表单之前,必须考虑转义数据(请参见和/或);从用户那里得到的一切都是如此(我想说,对于PHP_SELF,可能也是如此);-)

最常见的方法是在
purchase.php
中进行所有验证检查。这样,如果存在验证错误,则更容易使用用户已输入的所有信息重新显示表单

如果验证通过,您可以使用数据库中设置的必要购买信息重定向到
review purchase.php
,或者如果您不使用数据库,则可能重定向到
$\u SESSION

如果您可以将验证代码分离为函数,将显示代码分离为要包含的模板,那么就可以实现逻辑的良好分离,从而允许您从使用的任何文件中使用它们。您可能可以通过这种方式避免重定向,即在
purchase.php
中,您可以检查是否有$u POST输入,valida