会话是不必要的。你的基本计划应该是:
- 从 $_POST() 获取变量
- 验证表单值。
- 使用通过验证的值创建一个数组。
- 重定向到表单时使用数组填充值。
在开始使用 CodeIgniter 之前,我曾经使用if
语句来验证和生成如下错误消息:
if ( ! empty($_POST['email'])){
if ($this->verifyInput($_POST['email'], 6)){
$fill['email'] = $_POST['email'];//$fill is the array of values that passed validation
} else $tally++;//$tally keeps a running count of the total number of erors
}
我进行了一个函数调用,$this->verifyInput
它接受字段值和要执行的验证类型——在本例中为 6,表示电子邮件。这是我的验证功能:
function verifyInput($input, $type){
if ($type == 0) $pattern = '/^1$/';//just the number 1
elseif ($type == 1) $pattern = '/^[0-9]+$/';//just integers
elseif ($type == 2) $pattern = '/^[A-Za-zÁ-Úá-úàÀÜü]+$/';//just letters
elseif ($type == 3) $pattern = '/^[0-9A-Za-zÁ-Úá-úàÀÜü]+$/';//integers & letters
elseif ($type == 4) $pattern = '/^[A-Za-zÁ-Úá-ú0-9àÀÜü\s()\/\'":\*,.;\-!?&#$@]{1,1500}$/';//text
elseif ($type == 5) $pattern = '/^[A-Za-zÁ-Úá-úàÀÜü0-9\']+[A-Za-zÁ-Úá-úàÀÜü0-9 \'\-\.]+$/';//name
elseif ($type == 6) $pattern = '/^.+@[^\.].*\.[a-z]{2,}$/';//e-mail
elseif ($type == 7) $pattern = '/^((\(0?[1-9][0-9]\))|(0?[1-9][0-9]))?[ -.]?([1-9][0-9]{3})[ -.]?([0-9]{4})$/';//brazilian phone
if (preg_match($pattern, $input) == 1) return true;
else return false;
}
验证完成后,我使用$fill
数组为每个字段预填充表单:
<input class="field" type="text" name="email" value = "<?php echo $fill['email']; ?>"/>
您还应该确保$fill
使用空值启动,例如$fill['email']='';
或检查以确保在填充输入标签之前设置了值:
<input class="field" type="text" name="email" value = "<?php if(isset($fill['email'])) echo $fill['email']; ?>"/>
这些只是一般指导方针,您可以根据自己的需要进行调整,但我发现这是一种方便的处理方式。