我有一个HTML表单,它接收输入的数据并通过mail()函数发送。我也有一些验证输入的验证技术,我创建了一个数组变量$ errors来记录所有错误;例如,
如果名称留空,则$ errors [] =“名称为空”; 如果电子邮件留空,则$ errors [] =“email empty”;
依旧......
我能够使用以下技术报告错误:
print '<div id="formfeedback"><h3>Error!</h3><p>The following error(s) has occurred:<br />';
foreach ($errors as $msg) { //prints each error
print " - $msg<br />\n";
} // end of foreach
然而,我想要的是以下内容。我希望将页面重定向回用于输入信息的原始表单(我知道确切的链接位置,因此我可以使用标题()或甚至<meta=http-equiv=refresh>
将我带回表单页。
另外,在表单上,我希望能够在某个div中将表单上方的错误发布(称为div = errors)
我可以执行以下操作吗?
<div id="errors">
<?php
print 'The following error(s) has occurred:<br />';
foreach ($_REQUEST[$errors] as $msg) { //prints each error
print " - $msg<br />\n";
} // end of foreach
?>
</div>
非常感谢!
阿米特
答案 0 :(得分:1)
最简单的方法是:
// Start the session
session_start();
// Store the errors in the session
$_SESSION['errors'] = $errors;
// Redirect to correct page
header('HTTP/1.1 303 See Other');
header('Location: http://original/page');
exit;
然后,在表单页面上:
// Start the session
session_start();
// extract the errors
$errors = isset($_SESSION['errors']) ? $_SESSION['errors'] : array();
// Display the form with errors
foreach ($errors as $msg) ... ;
答案 1 :(得分:1)
我同意@Fosco。我想再解释一下 -
可能有两宗个案─ 你正在做原始的PHP 2.您正在编写CI或您自己的任何php框架。
这将有助于识别错误字段并更改样式以更好地响应用户。最后的输入数据也保持不变。
你正在做原始的PHP 在这种情况下,您可以在同一文件/页面中接收输入数据。 我稍后会做一个常见的例子。
您正在编写CI或您自己的任何php框架。 在这种情况下,您加载一个视图文件以显示表单页面,并且您可以在加载时将数据传递到查看页面/文件。
对于上述两种情况,您可以进行一些编码,如 -
/*
your input validation and verification goes here. where $error is generated too
In addition add some error status in above section,
you can do it in your $error array too. Also you store received data into $data here. index of $data should be similar as (corresponding) HTML input name.
You can do it like below
*/
$error_stat = array();
//if the input field name is "email" and email input data raises any error then
$error_stat['email'] = true;
// same for name
$error_stat['name'] = true;
// and so on
// now decide whether you will back to the form page or send the email and do other tasks
if(count($error_stat)<= 0){
// send email
// do aditional tasks
}
else{
// load the form again if its aframework or the form is in seperate file
// off course send $error,$data and $error_stat to the form page/file
}
// now here is a code segment of form page
<?php if(isset($error) && count($error)>0):?>
<div id="error-msg">
<?php
//display errors here
?>
</div>
<?php endif;?>
<form .... >
<input type="text" name="email" class="<?php echo (isset($error_stat['email'])?'error':'else'); ?>" value="<?php echo $data['email'];?>" />\
<!-- and so on ... -->
答案 2 :(得分:0)
通常我会使用相同的页面来处理输入和提交。如果数据有效,邮件将被发送,页面将通知他们(或将其重定向到其他地方)...如果数据无效,那么表单将再次出现并且错误可以显示,而不会花哨的重定向。
答案 3 :(得分:0)
确保您的会话在应用程序的顶部启动
包括这个基础课程
class FormErrors
{
var $handler;
function __construct($fname)
{
$this->handler &= isset($_SESSION[$fname]) $_SESSION[$fname] : ($_SESSION[$fname] = array());
}
public function add($name, $value)
{
$this->handler[$name] = $value;
}
public function remove($name)
{
unset($this->handler[$name]);
}
public function getErrors()
{
return $this->handler;
}
}
所以当你处理错误时,你可以去
if(isset($_POST))
{
$FormErrors = new FormErrors("registration");
if(strlen($_POST['username']) == 0)
{
$FormErrors->add('Username','Please enter a valid username');
}
//And for the rest of your checks
}
然后在你的html内侧
foreach($FormErrors ->getErrors() as $name => $error)
{
echo sprintf("<p title=\"%s\">%s</p>",$name,$error);
}
应该可行,如果你想删除所有已知的错误,
$FormErrors = new FormErrors("registration");
unset($FormErrors->handler,$FormErrors);