【发布时间】:2013-03-20 21:57:48
【问题描述】:
我正在尝试结束这个具有相同页面验证但外部处理的联系人/报价单。我已经设置了一个变量以进入表单操作,并且当表单验证时,变量/url 从同一页面更改为处理页面。但是,在填写完所有必填字段后,需要单击两次提交按钮来处理表单:将填写所有必填字段,我点击提交,页面重新加载保存的数据变量,然后当我再次点击提交,它终于通过,发送电子邮件并加载感谢页面。我在这里搜索了帖子并尝试了多种方法,但没有找到解决方案。我绝对不是 php 专家,仍然是新手,所以这可能不是完成此任务的最佳方法,但我会很感激有关如何完成此任务的任何想法。这是我所拥有的:
<?php
....
if (empty($Name) && empty($Company) && empty($Address1) && empty($City) && empty($State) && empty($Phone))
{
echo '<p class="tan">The fields marked with an * are required.</p>';
$Process = 'samepageurl';
}
/*else if (empty($Name) || is_numeric($Name))
{
echo '<p class="tan"><b>Please enter your name.</b></p>';
}*/
else if (empty($Company) || is_numeric($Company))
{
echo '<p class="tan"><b>Please enter your company name.</b></p>';
$Process = 'samepageurl';
}
else if (empty($Address1) || is_numeric($Address1))
{
echo '<p class="tan"><b>Please enter your address.</b></p>';
$Process = 'samepageurl';
}
else if (empty($City) || is_numeric($City))
{
echo '<p class="tan"><b>Please enter your city.</b></p>';
$Process = 'samepageurl';
}
else if (empty($State) || is_numeric($State))
{
echo '<p class="tan"><b>Please enter your state.</b></p>';
$Process = 'samepageurl';
}
else if (empty($Phone) || ctype_alpha($Phone))
{
echo '<p class="tan"><b>Please enter your phone number.</b></p>';
$Process = 'samepageurl';
}
else if (strlen($Phone) < 10 || strlen($Phone) > 12 || ctype_alpha($Phone) || ctype_space($Phone))
{
echo '<p class="tan"><b>Please enter a phone number with an area code.</b></p>';
$Process = 'samepageurl';
}
else if (isset($Name) && isset($Company) && isset($Address1) && isset($City) && isset($State) && isset($Phone))
{
$Process = 'processingurl';
}
?>
<form action="<?php echo $Process; ?>" method="post" class="print" >
<p><input type="hidden" name="recipient" value="responses@url.com"/>
<input type="hidden" name="subject" value="Web Site Response"/>
<input type="hidden" name="redirect" value="thankyou.html"/></p>
... form fields ...
</form>
提前谢谢你!
【问题讨论】:
-
这就是你的全部代码吗?它看起来不像你分配你的 $_POST 变量,例如
$Name = $_POST['name']; -
在我看来,您最好在客户端使用 javascript 检查这一点。现在您已经通过验证回到服务器端。如果验证失败,您还可以重定向回表单页面。但不是最好的做事方式。
-
您绝对应该像丹尼尔所说的那样进行客户端验证,但服务器端验证也很好。有关设置带有验证的非常简单的表单的更多信息,请参阅此处的问题:stackoverflow.com/questions/12158229/php-form-submit
-
我确实分配了变量——我不确定要发布多少,也不想留下这么多的代码,这很痛苦。禁用客户端验证以排除服务器端验证。我的理解是,如果用户关闭了 javascript,服务器端是故障安全的,所以我想让它正常工作。看来,当所有表单字段变量都被分配时,在使用新的变量分配链接处理到外部文件之前,表单仍在处理自己一次。谢谢你的链接,我去看看!!
-
客户端验证很方便,但服务器端验证始终是必要的。一个人可能只是在他的服务器上发起一个 POST 操作,而不是在他的页面上,并且服务器不应该相信输入是正确的。