我有一个构建处理类的表单,我已经开发它来处理页面上的任何和所有表单处理。
当我在页面上有多个表单时遇到问题我正在使用类的实例构建每个表单:
$form2 = new newForm('submitform2', 'post.contact.php', '100%');
$form2->setHandler('#canWe');
$form2->html('<div class="half">');
$form2->addText('name', 'Name:');
$form2->html('</div>');
$form2->html('<div class="halfNoMarg">');
$form2->addEmail('email_address', 'E-Mail Address:');
$form2->html('</div>');
$form2->html('<div class="half">');
$form2->addUrl('website', 'Website URL:');
$form2->html('</div>');
$form2->html('<div class="halfNoMarg">');
$form2->addText('phone', 'Phone Number:');
$form2->html('</div>');
$form2->addTextArea('about_business', 'Tell Us About Your Business:');
$form2->addSubmitButton('Find Out Now!');
$form2->getPost();
$form2->outputForm();
和
$form = new newForm('submitform', 'post.contact.php', '100%');
$form->addText('name', 'Name:');
$form->addEmail('email_address', 'E-Mail Address:');
$form->addUrl('website', 'Website URL:');
$form->addText('phone', 'Phone Number:');
$form->addTextArea('about_business', 'Tell Us About Your Business:');
$form->addSubmitButton('Find Out Now!');
$form->getPost();
$form->outputForm();
当类处理表单并为缺少的字段等发出错误时,每个表单都会显示错误,而不仅仅是正在处理的表单对象。
基本上输出会影响类的每个实例,而不仅仅是正在处理的实例。
我可以包含类文件,如果有人需要帮助(它的650行,所以不想包含在帖子中)。
提前感谢您提供的任何帮助。
- M
在后期功能中添加编辑
//获取帖子数据,如果帖子通过了预检,则返回一个清理过的信息数组 公共函数getPost() {
//if post tests all passed then lets create the array of elements and load the processing file.
if ($this->checkPost() === true) {
$cleanedPost = $this->cleanPost;
//get the post processing file
if (file_exists($this->processFile)) {
require_once($this->processFile);
//$this->postMessage($this->successMessage, 'confirm');
} else {
$this->postMessage('Processing File Not Found:<em>' . $this->processFile . '</em>', 'error');
}
return $this->cleanPost;
} else {
return false;
}
}
//将表单输出到屏幕 public function outputForm() { // echo spl_object_hash($ this);
if($this->handler !== null){
$this->handler = 'action="'.$this->handler.'"';
}
$return = '<form id="' . $this->formName . '" method="' . $this->method . '"'. $this->handler .' enctype="multipart/form-data" style="width:' . $this->width . '" >';
if(!empty($this->message)){
$return .= '<div class="errorMessage">' . $this->message . '</div>';
}
$return .= $this->output;
$return .= '</form>';
echo $return;
}
更多帖子处理代码
//在我们处理之前检查帖子 公共函数checkPost() {
//go through the entire post and process information as needed
if (!empty($_POST)) {
foreach ($this->postCheck AS $postVar => $item) {
if (is_array($item)) {
//addItemTo cleanPost
if(isset($_POST[$postVar])){
$this->addToCleanedPost($postVar, $_POST[$postVar]);
}else{
$this->cleanPost[$postVar] = null;
}
switch ($item['type']) {
//validate emails
case 'email':
//check valid email
if (isset($this->cleanPost[$postVar]) && !$this->validEmail($this->cleanPost[$postVar])) {
$this->postMessage('Email Address is invalid');
}
break;
//validate and verify password
case 'password':
if ($item['verify'] === true) {
//validate password against other
if (!$this->verifyPassword($this->cleanPost['password'], $this->cleanPost['password2'])) {
$this->postMessage('Passwords do not match');
}
} else {
if (empty($this->cleanPost[$postVar]) && $item['req'] === 1) {
$this->postMessage($postVar . ': Please enter a password');
}
}
break;
//validate checkboxes
case 'checkbox':
if ($item['req'] === 1 && $this->validateCheckBox($postVar) === 0) {
$this->postMessage($postVar . ' must be checked');
} else {
$this->cleanPost[$postVar] = $this->validateCheckBox($postVar);
}
break;
//handle url
case 'url':
//first we need to handle making the url format properly
if(isset($this->cleanPost[$postVar])){
$url = $this->validUrl($this->cleanPost[$postVar]);
//now we do the final checking of the url and make sure it is a valid url before we move forwards
if ($item['req'] === 1 && $url === null) {
$this->postMessage($postVar . ' must be a valid URL');
}else{
$this->cleanPost[$postVar] = $url;
}
}
break;
//handle text and text areas
case 'text':
case 'textarea':
if (isset($_POST[$postVar])) {
//check for a bypass on the min required characters
if (isset($item['bypass']) && $item['bypass'] === true || $this->minBypass === true) {
$bypassMinCheck = true;
} else {
$bypassMinCheck = false;
}
//process the item
if ($item['req'] === 1 && $bypassMinCheck === false && strlen($this->cleanPost[$postVar]) < 2) {
$this->postMessage($postVar . ' is too short');
} else {
if (!empty($this->cleanPost[$postVar]) && $bypassMinCheck === false) {
if (strlen($_POST[$postVar]) < 2) {
$this->postMessage($postVar . ' is too short');
}
}
}
}
break;
//handle other inputs
default:
if (empty($_POST[$postVar]) && $item['req'] === 1) {
$this->postMessage($postVar . ' cannot be left empty');
}
break;
}
}
}
} else {
return false;
}
//return the success or failure of the prepost test
if (empty($this->message)) {
return true;
} else {
return false;
}
}