我一直收到来自我表单的空白提交,我知道使用javascript验证(“必需”验证)并不总是有效,因为spambots可以关闭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 width="420" border="0" align="center" cellpadding="0" cellspacing="5">
<tr>
<td><table width="100%" 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 width="32%" valign="top"><div align="left"><strong>Date Submitted</strong>
</div></td>
<td width="68%" 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');
?>
答案 0 :(得分:4)
正如你所提到的,是的,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.
}
这将打印“您的数据正常!”如果用户输入没有任何问题,否则它将打印遇到的所有错误的列表。这可能是
- 用户名不够长。
- 其他事情不对。
一次只收到一个错误会给用户带来糟糕的体验,因为您最终可能需要提交5次表单,因为每次修复一件事都会出现新的错误。
答案 1 :(得分:1)
如果您对多个表单使用相同的页面,最好的方法是添加隐藏的输入:
<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()
等方法的类,但这应该是适合您的好地方。
答案 2 :(得分: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;
让你记住![item]表示“item is false”,!isset([item])表示“变量不存在,[item] =='”表示该项存在,这是一个空字符串。这些都是不同的东西。