我知道之前可能会问这个问题,但我想展示我的代码,我想知道是做一个简单的事情还是使代码复杂化?此外答案说使用try
和catch
,但我采用程序方法,所以我想知道我是否正确?
我做了什么,例如联系表格
<?php
if(isset($_POST['contact'])) {
$throw_error = array();
//First Block Is Validation
if($_POST['first_name'] == '' || $_POST['last_name'] == '') {
$throw_error['field_blank'] = 'Fields Cannot Be Blank';
} elseif(strlen($_POST['first_name']) < 3) {
$throw_error['char_len'] = 'First Name Cannot Be Less Than 3 Characters';
}
//Second Block Is Process If No Errors Are Found
if(empty($throw_error)) {
$first_name = $_POST['first_name'];
//Don't worry about the sanitizing part, am doing it
//Process the form ahead and then redirect using header()
}
} elseif(!empty($throw_error)) { //Third Block To Throw Error If Any Errors Found
if(isset($throw_error['field_blank'])) {
echo $throw_error['field_blank'];
} elseif(isset($throw_error['char_len'])) {
echo $throw_error['char_len'];
}
}
?>
<form>
<input type="text" name="first_name" />
<input type="text" name="last_name" />
<input type="submit" value="Submit" name="contact" />
</form>
答案 0 :(得分:1)
尝试/抓住你在这里很棒。它消除了throw_error
数组所需的全部内容,并大大减少了代码。
try{
$first_name = '';
if(isset($_POST['contact'])) {
if($_POST['first_name'] == '' || $_POST['last_name'] == '') {
throw new Exception('Fields Cannot Be Blank');
} elseif(strlen($_POST['first_name']) < 3) {
throw new Exception('First Name Cannot Be Less Than 3 Characters');
}
$first_name = $_POST['first_name'];
}
}catch(Exception $e){
echo $e->getMessage();
}
如果您希望将数组传递给此catch语句,我找到的最简单方法是serialize
数组,然后unserialize
完成。这将允许您一次打印所有错误:
try{
$first_name = '';
if(isset($_POST['contact'])) {
if($_POST['first_name'] == '' || $_POST['last_name'] == '') {
$throw_error[] = 'Fields Cannot Be Blank';
}
if(strlen($_POST['first_name']) < 3) {
$throw_error[] = 'First Name Cannot Be Less Than 3 Characters';
}
if(isset($throw_error)){
throw new Exception(serialize($throw_error));
}
$first_name = $_POST['first_name'];
}
}catch(Exception $e){
$errors = unserialize($e->getMessage());
foreach($errors as $error){
echo $error.'<br>';
}
}
答案 1 :(得分:1)
我还建议使用Try / Catch。您仍然可以在程序块中使用它。
如果你已经死定了它,这段代码看起来会像你想要它做的那样,但它过度设计了。由于用户可能有 field_blank 或 char_len 错误,因此您只需要一个字符串错误变量。
$error = NULL;
if($_POST['first_name'] == '' || $_POST['last_name'] == '') {
$error = 'Fields Cannot Be Blank';
} elseif(strlen($_POST['first_name']) < 3) {
$error = 'First Name Cannot Be Less Than 3 Characters';
}
...
if(!empty($error)) {
echo $error;
}
如果您需要捕获并显示多个非排他性错误,您可以使用示例代码中引用的数组,只是迭代值而不是创建一个巨大的if / elseif块。
} elseif(!empty($throw_error)) { //Third Block To Throw Error If Any Errors Found
foreach($throw_error as $key => $message) {
echo $message.'<br>';
}
}