PHP 表单处理 $_POST
我们将创建一个具有不同类型输入的简单HTML表单,然后编写 PHP 代码来处理提交时的表单数据。
我们还将学习一些在处理表单数据时可以使用的有用技巧,例如检查空输入值、验证字段等。让我们开始吧。
HTML 表单
我们将创建一个 HTML 表单,其中包含 2 个用于姓名和电子邮件的文本字段,1 个文本区域供用户提供自我描述和一个用于询问用户性别的单选按钮集。
下面是表单的 HTML 代码。
<html> <body> <form action="form-handler.php" method="POST"> Name: <input type="text" name="name"> <br/> Email: <input type="text" name="email"> <br/> About Me:<br/> <textarea name="aboutme"></textarea> <br/> Gender: <input type="radio" name="gender" value="female"> Female <input type="radio" name="gender" value="male"> Male <br/> <input type="submit" name="submit" value="Submit"> </form> </body></html>
PHP 代码
在上面的表单中,我们要求用户提供 4 个不同的输入,让我们看看如何在 PHP 中获取字段的提交值。
<?php // getting the value of name field $name = $_POST["name"]; // getting the value of the email field $email = $_POST["email"]; // getting the value of the aboutme field $aboutme = $_POST["aboutme"]; // getting the value of the radio buttons $gender = $_POST["gender"]; ?>
很简单,对吧?是的,要访问不同类型的 HTML 表单元素的表单数据,您只需要$_POST.
但是对于黑客来说,HTML 表单是一个很好的切入点,可以通过在输入字段中输入脚本或一些恶意代码来导致 PHP 脚本中出现一些错误/问题。
为了解决这个问题,最好在 PHP 代码中加入一些验证来验证表单数据中提交的用户输入。
PHP 表单验证
现在我们将学习一些可以轻松应用于提交的表单数据的基本验证,以便在对其执行任何操作之前对其进行验证。
<?php // getting the value of name field $name = $_POST["name"]; // check if name is empty or not if(empty($name)) { echo "Name is required"; } ?>
在上面的代码中,我们正在检查用户是否在表单中输入了名称值,类似地,您可以检查所有必需的表单字段。
为了验证电子邮件地址,PHP 中有一个特殊的函数可以用来验证电子邮件地址。函数是filter_var($email, FILTER_VALIDATE_EMAIL),让我们看看它是如何工作的。
<?php // getting the value of the email field $email = $_POST["email"]; // checking if the email value is valid if(!filter_var($email, FILTER_VALIDATE_EMAIL)) { echo "Email value invalid"; } ?>
该filter_var()函数返回true一个有效的电子邮件地址,返回false一个无效的电子邮件地址。
在 PHP 中验证表单也取决于您的要求。例如,如果您的表单中没有任何必填字段,那么您就不必担心检查提交的值是否为空。
如果您有电子邮件地址字段,我们建议您验证它。
您甚至可以添加更多验证,例如<script>使用正则表达式检查恶意代码(如标签)的输入。
什么是$_SERVER["PHP_SELF"]?
有时我们可以避免使用额外的 PHP 文件来处理/处理表单数据,并且可以将 PHP 代码与 HTML 表单本身一起包含在文件中。
在这种情况下,我们将不得不再次将表单提交到同一个网页,我们可以将其$_SERVER["PHP_SELF"]用作表单操作。
<form action="<?php echo $_SERVER["PHP_SELF"]; ?>" method="POST">
这个超全局变量的作用是返回当前网页的文件名,然后作为动作脚本。
但是因为这会从 URL 返回现有的文件名,所以你必须小心一点,因为用户可能会从 URL 中注入一些不需要的代码,所以为了避免它,我们可以使用该htmlspecialchars()函数来转换字符串中的任何特殊字符(在此为 URL) case) 转换为 HTML 实体。
所以你应该使用,
<form action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]); ?>" method="POST">