我正在尝试结束此联系/报价表单,该表单具有相同的页面验证但外部处理。我已经设置了一个变量以进入表单操作,并且当表单验证时,变量/ url从同一页面更改为处理页面。但是,在填写完所有必填字段后,只需双击提交按钮即可处理表单:所有必填字段都将填写,我点击提交,页面重新加载保存的数据变量然后当我点击提交agin,它终于通过,发送电子邮件并加载thankyou页面。我在这里搜索了帖子并尝试了多种方法,但没有找到解决方案。我绝对不是一个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>
提前谢谢!
答案 0 :(得分:0)
首先检查缺失的变量,然后提取并验证变量,然后根据它们提供内容。
<?php
function verifyPostContains(&$req) {
global $_POST;
$missing = array();
foreach($req as $var => $_) {
if(!isset($_POST[$var])) {
$missing[] = $var;
}
}
return $missing;
}
$requirements = array('name'=>'','city'=>'','state'=>'',...);
$missing = verifyPostContains($requirements);
if(count($missing)>0) {
$content = formErrorReport($missing);
sendHeaders();
echo $content;
exit();
}
// extract, making sure to sanitize
$name = sanitize($_POST["name"]);
...
$errorHtml = array();
// validate by reference. Effectively call testName($name).
if(failsValidation($name, "testName")) {
$errorHtml [] = generateError(NAME_ERROR, $name);
} else { $requirements["name"] = $name; }
if(failsValidation($city, "testCity")) {
$errorHtml [] = generateError(CITY_ERROR, $city);
} else { $requirements["city"] = $name; }
...
if(count($errorHTML)>0) {
generateErrorPage($requirements, $missing, $errorHTML);
} else { processForm($requirements); }
?>
此代码假定您具有执行需要执行的各种操作的函数,并且具有一些用于生成错误HTML的字符串常量。
作为新手,您可能需要谷歌一些教程,解释在服务器上使用PHP进行表单处理,以及在客户端使用JavaScript。如果您找到一个教程,为您提供在测试数据时回声错误的代码,例如您的代码,请继续。这不是一个好的教程。如果您发现一个在发现一个错误后停止,请继续前进。如果你找到一个告诉你确保JavaScript中的值是正确的,然后说“我们已经在客户端验证了这一点,所以我们直接在PHP中使用这些值”,也继续前进。寻找解释的教程:
(如果教程解释说实际上不需要POST请求作为响应生成页面内容,除了指示POST调用是否被接受或拒绝的标题之外,还有奖励点。)