PHP的便利功能是PHP表单的处理方法。要了解的一个非常重要的原则是,表单中的所有元素都会自动在PHP脚本中启用。
示例1简单的HTML表单:
<form action="action.php" method="post"> <p>姓名: <input type="text" name="name" /></p> <p>年龄: <input type="text" name="age" /></p> <p><input type="submit" /></p> </form>
此表单没有特殊的,不使用特殊标识符。如果用户在表单中输入并点击发送按钮,则页面action。调用php。使用此文件,您可以添加以下内容:
从Example#2表单打印数据
你好,<?php echo htmlspecialchars($_POST['name']); ?>。 你 <?php echo (int)$_POST['age']; ?> 岁了。
此脚本的输出如下:
你好,Joe。你 22 岁了。
除了htmlspecialchars()和(int)部分,这个程序做什么是显而易见的。使用htmlspecialchars()可以正确编码HTML的特殊字符,因此用户不会将HTML标记或Javascript代码插入页面。例如,因为知道age字段是数字,所以将其转换为int并自动删除不需要的字符。这也可以使用PHP的过滤器扩展功能自动完成。PHP为$_开机自检['name']和$_自动设置开机自检[’age’]变量。以前是超全局变量$_虽然使用了SERVER,但这次是包含所有开机自检数据的超全局变量$_已部署开机自检。请注意表单如何发送数据。使用GET方法,表单中的信息可以是超全局变量$_存储在GET中。如果不介意请求数据的源,则包含所有GET、POST、COOKIE和FILE数据的超全局变量$_也可以使用REQUEST。
您也可以在PHP中处理XForms输入,但用户可能更喜欢使用长期以来充分支持的HTML表单。XForms还不适合初学者,但用户可能会感兴趣。
根据HTTP规范,当您使用表单更改服务器端的某些内容的状态时,应该使用POST方法。例如,如果页面具有允许用户添加自己评论的表单,如这里的页面,则表单应使用POST。如果您在通过帖子访问的页面上单击“重新加载”或“刷新”,则几乎总是一个错误——您不应该两次发布同一条评论——这就是为什么这些页面没有书签或缓存。
当您的表单从服务器上获取某些内容,而实际上没有更改任何内容时,您应该使用GET方法。例如,搜索引擎的表单应该使用GET,因为搜索Web站点不应该改变客户端可能关心的任何内容,对搜索引擎查询结果进行书签或缓存与对静态HTML页面进行书签或高速缓存一样有用。
此外,永远不要在表单中使用GET方法来捕获密码和其他隐藏的东西。
值得澄清的是:
POST并不比GET更安全。
选择GET vs POST的原因涉及各种因素,例如请求的意图(您是否“提交”信息?),请求的大小(URL的长度有限制,并且在URL中发送GET参数),以及您希望操作可共享的容易程度——例如,Google搜索是GET,因为它可以通过共享URL轻松地复制和共享搜索查询。
由于GET比POST更容易共享,因此这里只考虑安全性。示例:您不希望通过GET发送密码,因为用户可能会共享结果URL并无意中暴露其密码。
但是,如果您不部署TLS/SSL来保护网络连接本身,GET和POST同样容易被位置合适的恶意人员拦截。
所有通过HTTP(通常是端口80)发送的表单都是不安全的,而今天(2017年),公共网站没有太多理由不使用HTTPS(基本上是HTTP+传输层安全)。
作为奖励,如果您使用TLS,您可以最大限度地降低您的用户将代码(广告)注入到您的流量中的风险,而这些代码不是由您输入的。