验证 php 表单 - 如何在表单上显示错误消息
Posted
技术标签:
【中文标题】验证 php 表单 - 如何在表单上显示错误消息【英文标题】:Validating php form - How to show error message on the form 【发布时间】:2012-02-15 20:48:11 【问题描述】:我一直收到来自我的表单的空白提交,我知道使用 javascript 进行验证(“必需”验证)并不总是有效的,因为垃圾邮件机器人可以关闭 javascript。 所以我一直在寻找使用 php 验证我的 php 表单的方法。
所以经过一番研究......我发现这会奏效:
if (!$_POST['name'] )
die('Please fill in your name');
不过,在我点击提交按钮后,这条消息“请填写您的姓名”会显示在不同的页面上。现在理想情况下,我希望该消息显示在表单所在的页面上,尽管我正在努力寻找一种方法来做到这一点。 (请原谅我对php的了解不足)。
我需要 Ajax 吗? 我假设我需要在我希望显示错误消息的表单页面上添加一个 div?我将如何要求 php 在表单页面上显示错误消息? IE:我需要在我的 php 进程表单中放入什么(连同上面的代码?)。
如果您需要我发布/添加更多详细信息,请询问,我们将非常感谢您的帮助!
================================================ ======================== 更新
这是我的php进程表单:
<?
session_start();
include("verification_image.class.php");
$image = new verification_image();
if (($image->validate_code($_POST['validate']) ? "true" : "false") == "false")
header('Location: http://www.domain.com/fail.htm');
exit;
if (!$_POST['rgerger'] )
die('You did not complete all of the required fields');
if(!empty($_POST['email'])) die('Stop Spamming');
$to = "email@address.co.za";
$from = $_POST['ervberster'];
$subject = "I Want to Advertise";
$sBodyNew = '<style type="text/css">
<!--
.style
font-family: Arial;
font-size: 12px;
color: #4D241E;
body
background-image: url();
background-color: #F1EAE4;
.style1 font-size: 14px
-->
</style>
<p> </p>
<table border="0" align="center" cellpadding="0" cellspacing="5">
<tr>
<td><table border="0" cellpadding="8" cellspacing="0" bgcolor="#E7D3AF"
class="style">
<tr>
<td colspan="2" valign="top"><div align="center"><strong><span class="style1">I
Want to Advertise on AccommodationMozambique.co.za</span><br>
.................................................</strong><br>
</div></td>
</tr>
<tr>
<td valign="top"><div align="left"><strong>Date Submitted</strong>
</div></td>
<td valign="top">'. date("F j, Y, g:i a") .'</td>
</tr>
<tr>
<td valign="top"><div align="left"><strong>Name</strong></div></td>
<td valign="top">'.$_POST['name'].'</td>
</tr>
<tr>
<td valign="top"><div align="left"><strong>Email</strong></div></td>
<td valign="top">'.$_POST['ervberster'].'</td>
</tr>
<tr>
<td valign="top"><div align="left"><strong>Telephone</strong></div></td>
<td valign="top">'.$_POST['werergrggef'].'</td>
</tr>
<tr>
<td valign="top"><div align="left"><strong>Name of Lodge</strong></div></td>
<td valign="top">'.$_POST['hneyjyttyh'].'</td>
</tr>
<tr>
<td valign="top"><div align="left"><strong>Town / City</strong></div></td>
<td valign="top">'.$_POST['gedghethth'].'</td>
</tr>
<tr>
<td valign="top"><div align="left"><strong>Enquiry</strong></div></td>
<td valign="top">'.$_POST['rervberer323'].'</td>
</tr>
</table></td>
</tr>
</table>
';
$headers = "From: $from\r\n";
$headers .= "Content-type: text/html\r\n";
$success = mail($to, $subject, $sBodyNew, $headers);
header('Location: http://www.domain.com/success.htm');
?>
【问题讨论】:
你不用死。如果你犯了一个错误,你不会死,所以你的网站也不会死。 【参考方案1】:这取决于您提交表单的方式。假设您要提交页面本身,然后在页面顶部添加如下内容:
<?php
$warnings = "";
if (isset($_POST)) //if post variables have been sent then we validate
if (!isset($_POST['name']) || trim($_POST['name'])=='') //if the variable isn't set or if it's empty
$warnings .= "<p>You must provide a name</p>";
?>
然后,在页面的 html 中,您希望在其中显示警告,您将添加:
<?php
echo $warning;
?>
另外,请注意我的验证语法: if (!isset($_POST['name']))... 这将返回 true 没有变量 $_POST['name'],而 if(!$_POST['name]) 只会在您设置 $_POST['name'] = false 时返回 true;
请记住,![item] 表示“项目为假”,!isset([item]) 表示“变量不存在,[item]=='' 表示项目存在, 并且它是一个空字符串。这些都是不同的东西。
【讨论】:
【参考方案2】:正如您所提到的,是的,JavaScript 可以被关闭——不仅仅是垃圾邮件机器人,任何人都可以。 JavaScript 是一种客户端语言,因此验证发生在客户端。将安全性建立在希望你的客户做你想做的事上是不好的。永远不要相信用户输入。
话虽如此,您在 PHP 验证方面走在了正确的道路上,除非执行 die()
会导致您的页面在您打印表单之前停止执行。一种常见的方法是做这样的事情
$errors = array();
if (strlen($_POST['name']) < 5)
$errors[] = "Username not long enough.";
if (usernameAvailable($_POST['name']))
$errors[] = "Username already taken.";
if (otherValidationRule())
$errors[] = "Something else isn't right.";
if (sizeof($errors) > 0)
foreach($errors as $error)
printf("<li>%s</li>", $error);
else
print "Your data is OK!";
// Do whatever you want with the data.
如果用户输入没有问题,这将打印 "Your data is OK!",否则它将打印遇到的所有错误的列表。可能是这样的
用户名不够长。 还有什么不对劲的地方。
一次只得到一个错误会带来糟糕的用户体验,因为您最终可能不得不提交 5 次表单,因为每次修复一个问题时,都会出现一个新错误。
【讨论】:
解释清楚,谢谢!请在我上面的帖子中查看我的更新。我已经添加了我的过程 php 表单。当我的表单被提交时,你可以看到它进入了我的 success.htm 页面。现在根据您上面的代码,我假设我需要告诉 else print "Your data is OK!"; 去那个 success.htm 页面?? 我假设您想先对数据做一些事情,比如将其插入数据库或类似的东西。之后,您可以使用header()
将用户重定向到success.htm
,就像您在代码中所做的那样。
我不会说我会将任何信息插入数据库。除非我理解不正确,否则我只想按照上面的流程表格将表格发送给收件人。所以我的问题是,我还需要根据上面的代码在 ELSE 语句中添加任何内容吗?
为什么要验证用户数据?您需要用户数据做什么?
我想验证用户数据,因为我收到了很多垃圾邮件机器人发送的空提交。因此,如果我在字段不能留空的情况下进行了 php 验证,那么这将阻止进一步的空表单提交(因为目前 javascript 并没有阻止这一点)。【参考方案3】:
如果您将同一页面用于多个表单,最好的方法是添加隐藏输入:
<input type='hidden' name='action' value='sendMail' />
比 PHP 中的:
if( isset( $_POST['action']))
switch( $_POST['action']))
case 'sendMail':
$msg = check_my_mail_form();
if( $msg !== null)
echo "Failed to send...";
function check_my_mail_form()
if( !isset( ...)
return 'Please fill name';
return null;
当然,您应该使用不同且稍微复杂一点的面向对象设计(例如具有validate()
和getError()
方法的类),但这应该是您开始的好地方。
【讨论】:
以上是关于验证 php 表单 - 如何在表单上显示错误消息的主要内容,如果未能解决你的问题,请参考以下文章