0

我正在尝试使用 PHP 实现错误检查系统(字符太少、空白输入等......)。

现在,如果我留下空白标题,则会捕获错误,但不会显示消息。这是实际检查输入的第一部分(仅显示事件标题)

Class check_errors{

function create_event_errors($event_title){
    global $submit_error;
    if($event_title == ""){
        $field = "event_title";
        $submit_error->setError($field,"Title cannot be blank");
    }
    elseif(strlen($event_title) < 5){
        $field = "event_title";
        $submit_error->setError($field,"Title must be longer than 5 characters");
    }
    elseif(strlen($event_title) > 75){
        $field = "title";
        $submit_error->generalError($field,"Title must be less than 40 characters");
    }
}

因此,在同一页面上,这是 display_errors 类

Class display_errors{
var $values = array();  //Holds submitted form field values
var $errors = array();  //Holds submitted form error messages

function setValue($field, $value){
     $this->values[$field] = $value;
  }

function setError($field, $errmsg){
    $this->errors[$field] = $errmsg; //if I echo this, the error message displays
    $this->num_errors = count($this->errors); //if I echo this, the # of errors displays
}

function value($field){
  if(array_key_exists($field,$this->values)){
     return htmlspecialchars(stripslashes($this->values[$field]));
  }else{
     return "";
  }
}   

 function error($field){    
     if(array_key_exists($field,$this->errors)){
        return $this->errors[$field];
     }else{
       return "";
     }
  }
}

现在讨论这个问题。当我尝试检查是否检测到错误时,它没有找到任何东西

$check_errors->create_event_errors($event_title); //submit the input to be checked

echo $display_errors->num_errors; //this does not display the # of errors. It does when I echo from within the function in the class though

if($display_errors->num_errors == 0){
   //submit event
}
4

2 回答 2

4

不要使用var,不要使用global和定义所有属性。还要考虑@harke 的指针以获得更好的代码设计。

class check_errors
{
    protected $errors;

    function __construct(display_errors $errors) {
        $this->errors = $errors;
    }

    function create_event_errors($event_title){
        if($event_title == ""){
            $field = "event_title";
            $this->errors->setError($field,"Title cannot be blank");
        }
        elseif(strlen($event_title) < 5){
            $field = "event_title";
            $this->errors->setError($field,"Title must be longer than 5 characters");
        }
        elseif(strlen($event_title) > 75){
            $field = "title";
            $this->errors->generalError($field,"Title must be less than 40 characters");
        }
    }
}

class display_errors
{
    protected $values = array();  //Holds submitted form field values
    protected $errors = array();  //Holds submitted form error messages
    public $num_errors = 0;

    function setValue($field, $value){
        $this->values[$field] = $value;
    }

    function setError($field, $errmsg){
        $this->errors[$field] = $errmsg; //if I echo this, the error message displays
        $this->num_errors = count($this->errors); //if I echo this, the # of errors displays
    }

    function value($field){
        if(array_key_exists($field,$this->values)){
            return htmlspecialchars(stripslashes($this->values[$field]));
        }else{
            return "";
        }
    }   

    function error($field){    
        if(array_key_exists($field,$this->errors)){
            return $this->errors[$field];
        }else{
            return "";
        }
    }
}

运行代码

$display_errors = new display_errors();
$check_errors = new check_errors($display_errors);

$check_errors->create_event_errors($event_title); //submit the input to be checked

echo $display_errors->num_errors;

if($display_errors->num_errors == 0){
    //submit event
}
于 2012-12-27T23:32:21.273 回答
1

不知道这是否会给您带来任何麻烦:

$field == "title";

这个陈述和写作一样有用;

true or false;

你的意思可能是:

$field = "title";

(单等号)


只是给你一些指示:

  • 创建验证器类(参见:Interfaces Docs)。
  • 为错误集合创建一个类。
  • 为验证和错误消息的复杂定义创建一个类。
  • 允许堆叠多个最后一个,以便能够将许多验证的集合视为一个(参见:复合模式)。

完成后,您可以独立验证并决定如何处理结果。编写代码也更容易,因为你不能引入这么多的错误,即使你这样做了,这些也更容易修复。

还要保持具体的字段名独立于验证。

于 2012-12-27T23:12:50.913 回答