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";

(単一の等号)


あなたにいくつかの指針を与えるためだけに:

  • バリデータークラスを作成します(「インターフェイスドキュメント」を参照)。
  • エラー収集用に1つのクラスを作成します。
  • 検証とエラーメッセージの複雑な定義のために1つのクラスを作成します。
  • 多くの検証のコレクションを1つとして扱うことができるように、最後の複数をスタックできるようにします(「複合パターン」を参照)。

これが完了すると、結果を個別に検証および決定できます。また、それほど多くのエラーを発生させることはできず、発生したとしても修正が容易であるため、コードの記述が容易になります。

また、具体的なフィールド名を検証から独立させてください。

于 2012-12-27T23:12:50.913 に答える