PHP 表单必填项
PHP 表单 - 处理必填字段
Section titled “PHP 表单 - 处理必填字段”本章演示如何使用 PHP 在 HTML 表单中强制要求输入特定字段,并显示用户友好的错误消息。
PHP - 识别必填字段
Section titled “PHP - 识别必填字段”在许多 Web 表单中,某些信息是必不可少的。例如,用户注册通常需要姓名和电子邮件,而结账表单需要地址详情。我们将这些字段标记为“必填”。
我们来定义一个示例表单的验证规则:
| 字段 | 验证规则 |
|---|---|
| 姓名 | 必填。必须只包含字母和空格。 |
| 电子邮件 | 必填。必须包含有效的电子邮件地址格式。 |
| 网址 | 可选。如果提供,必须是有效的 URL。 |
| 评论 | 可选。多行文本输入。 |
| 性别 | 必填。必须选择一个选项。 |
在之前的示例中,所有字段可能都是可选的。现在,我们将确保必填字段(“姓名”、“电子邮件”、“性别”)不会被空提交。
为了管理这一点,我们将引入变量来保存潜在的错误消息(例如 $nameErr、$emailErr、$genderErr)。在表单提交时,我们将检查每个对应的 $_POST 值。PHP 的 empty() 函数在这里很有用。如果必填字段为空,我们存储一个错误消息。否则,我们在使用输入之前使用辅助函数(如 sanitizeInput)对其进行净化处理。
注意使用 === "POST" 进行更严格的比较,以及使用 filter_var() 进行内置的电子邮件和 URL 验证,对于这些常见任务来说,这通常比自定义正则表达式更可靠。
PHP - 在表单中显示错误消息
Section titled “PHP - 在表单中显示错误消息”现在,我们来修改 HTML 表单,以便在相应字段旁边显示这些错误消息。我们在 <span> 标签中使用简单的 PHP echo 语句(通常使用 CSS 设置样式以显示为红色)。htmlspecialchars($_SERVER["PHP_SELF"]) 确保表单安全地提交到同一页面,防止跨站脚本 (XSS) 漏洞。
<!DOCTYPE html><html><head><style>.error {color: #FF0000;}</style></head><body>
<h2>PHP Form Validation Example</h2><p><span class="error">* required field</span></p><form method="post" action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>">
Name: <input type="text" name="name" value="<?php echo htmlspecialchars($name);?>"> <span class="error">* <?php echo $nameErr;?></span> <br><br>
E-mail: <input type="text" name="email" value="<?php echo htmlspecialchars($email);?>"> <span class="error">* <?php echo $emailErr;?></span> <br><br>
Website: <input type="text" name="website" value="<?php echo htmlspecialchars($website);?>"> <span class="error"><?php echo $websiteErr;?></span> <br><br>
Comment: <textarea name="comment" rows="5" cols="40"><?php echo htmlspecialchars($comment);?></textarea> <br><br>
Gender: <input type="radio" name="gender" <?php if (isset($gender) && $gender=="female") echo "checked";?> value="female">Female <input type="radio" name="gender" <?php if (isset($gender) && $gender=="male") echo "checked";?> value="male">Male <input type="radio" name="gender" <?php if (isset($gender) && $gender=="other") echo "checked";?> value="other">Other <span class="error">* <?php echo $genderErr;?></span> <br><br>
<input type="submit" name="submit" value="Submit">
</form>
<?php// Optional: Display submitted data after successful validationif ($_SERVER["REQUEST_METHOD"] === "POST" && empty($nameErr) && empty($emailErr) && empty($genderErr) && empty($websiteErr)) { echo "<h2>Your Input:</h2>"; echo "Name: " . $name . "<br>"; echo "Email: " . $email . "<br>"; echo "Website: " . $website . "<br>"; echo "Comment: " . $comment . "<br>"; echo "Gender: " . $gender;}?>
</body></html>表单中的关键改进:
- 在输入字段中添加了
value="<?php echo htmlspecialchars($variable);?>",以便用提交的数据重新填充表单(粘滞表单),从而改善用户体验。 - 在将用户数据回显到表单时使用
htmlspecialchars(),以防止 XSS。 - 改进了单选按钮的处理,以在提交后正确显示选定的选项。
- 添加了一个部分,仅在没有验证错误时显示提交的数据。
下一步涉及完善验证逻辑。例如,使用正则表达式 (preg_match()) 确保“姓名”字段确实只包含字母和空格,或者使用 filter_var() 检查“网址”(如果提供)是否具有有效的 URL 结构。