2014-02-24 2 views
-2

포럼에서 유사한 질문을 보았지만 나에게 도움이되는 내용을 찾을 수 없습니다.필드 옆에 PHP 폼 오류가 표시됩니다.

양식 항목의 유효성을 검사하는 유효성 검사 클래스가 있습니다. 그러나 그것은 그것들을 탁자 위에 표시합니다. 양식의 맨 위에 오히려 필드 옆에 어떻게 이것을 표시 할 수 있습니까?

Registration.php

if(Input::exists()){ 
     $validate = new Validate(); 
     $validation = $validate->check($_POST, array(
      'fullName' => array(
       'required' => true, 
       'min' => 4, 
       'max' => 20 
      ), 
      'username' => array(
       'required' => true, 
       'min' => 4, 
       'max' => 20, 
       'unique' => 'user' 
      ), 
      'email' => array(
       'required' => true, 
       'unique' => 'user' 
      ), 
      'password' => array(
       'required' => true, 
       'min' => 6 
      ), 
      'password_again' => array(
       'required' => true, 
       'matches' => 'password' 
      ) 
     )); 

     if($validation->passed()){ 
      // Register User 

      echo('Passed'); 

     } else { 
      // Output Errors 

      foreach($validation->errors() as $error){ 

       echo $error, '</br>'; 
      } 
     } 
    } 

?> 
<div class="registration"> 
    <h3> Register with WebA<font style="color: #c14a44;">ww</font>ards </h3> 
    <p> Spare us few little seconds, and you'll be glad you did. </p> 
    <form method="post" action=""> 
     <input type="text" id="fullName" value="<?php echo escape(Input::get('fullName')); ?>" name="fullName" placeholder="Your Full name"> 
     <input type="text" id="username" value="<?php echo escape(Input::get('username')); ?>" name="username" placeholder="Choose Username" autocomplete="off"> 
     <input type="email" id="email" value="<?php echo escape(Input::get('email')); ?>" name="email" placeholder="Email address"> 
     <input type="password" id="password" name="password" placeholder="Password"> 
     <input type="password" id="password_again" name="password_again" placeholder="Comfirm password"> 
     <input id="gobutton" type="submit" value="Register"> 

    </form> 

Validate.php

public function check($source, $items = array()){ 

      foreach($items as $item => $rules){ 
       foreach($rules as $rule => $rule_value){ 

        $value = trim($source[$item]); 
        $item = escape($item); 

        // if rule is required and value is empty add error 
        if($rule === 'required' && empty($value)){ 
         $this->addError("{$item} is required"); 
        } else if(!empty($value)) { 
         // DEFINE THE RULES FOR VALIDATION MIN, MAX 
         // USE SWITCH STATEMENT TO SWITCH BETWEEN THE RULES AND CHECK IF VALID 
         // Case for each of the rules defined on the form 
         switch($rule){ 

          case 'min': 

           if(strlen($value) < $rule_value){ 
            $this->addError("{$item} must be a minimum of {$rule_value} characters."); 
           } 

          break; 

          case 'max': 

           if(strlen($value) > $rule_value){ 
            $this->addError("{$item} must be a maximum of {$rule_value} characters."); 
           } 

          break; 

          case 'matches': 

           if($value != $source[$rule_value]){ 
            $this->addError("{$rule_value} must match {$item}"); 
           } 

          break; 

          case 'unique': 

           $check = $this->_db->get($rule_value, array($item, '=', $value)); 

           if($check->count()){ 

            $this->addError("{$item} already exists."); 

           } 

          break; 

         } 
        } 
       } 
      } 

      if(empty($this->_errors)){ 
       $this->_passed = true; 
      } 

      return $this; 
     } 

답변

0

이러한 오류를 원하는 위치에 놓는 코드를 작성합니다.

<?php 

$errors = array(); 

if (!$something) { 
    $errors['field'] = 'Message'; 
} 

?> 

<? if (isset($errors['field'])) : ?> 
    <p class="error"><?php echo $errors['field']; ?></p> 
<?php endif; ?> 
<input type="text" name="field" ...> 
+0

if ($ validation-> passed()) { // 사용자 등록 echo ('Passed'); } 다른 { // 출력 오류 의 foreach ($ 검증 -> 오류() $ 오류 등) { 는 '
'$ 오류를 에코; } } 그 다음 이걸 제거해야합니까? – Tauciokas

+0

예. 페이지 상단에 오류를 출력하지 않으려면 페이지 상단에 오류를 출력하지 마십시오. 모든 유효성 검사가 여전히 발생하지만 출력은 원하는 위치로 이동해야합니다. – deceze

0

I합니다 (addError 방법이 포함되어 있지 않습니다) 말할 수없는 코드의 자세한 내용을 보지 않고 있지만 검증 클래스 아무튼 응답의 필드와 오류를 연결하는 쉬운 방법이있는 것처럼 보입니다 (단 하나의 문자열 임). 이렇게하려면 약간의 작업이 필요합니다. 필드의 이름이되는 키와 인쇄 할 오류 메시지 인 값을 사용하여 연관 배열로 오류를 반환하고 올바른 필드에 대해서는 비워 두는 것이 좋습니다. 그런 다음 등록 파일에서 문제의 필드를 쉽게 참조 할 수 있습니다.

0

당신은 당신이 필드를 출력하는 동안 오류를 반복하는 분야와 관련된 오류를 확인하고, 대신 폼 위의 모든 오류를 메아리의, 입력을 출력 한 후이를 인쇄 할 수 있습니다.

각 필드에 둘 이상의 유효성 검사 오류가 있어야하는 경우 errors 배열은 다차원이어야합니다. 각 필드 이름에 대한 항목이있는 배열이 있어야합니다.

이렇게하려면 필드가 배열이어야합니다. 이 (안된) 같은 것을 할 수

이 방법 : 각 필드에 대한 오류 항목이 배열 인

foreach ($field as $f) { 
echo "<input type='{$f->type}' id='{$f->name}' value='{$f->value}' name='{$f->name}' placeholder='{$f->description}'>"; 
if (in_array($f->name, $errors)) { 
echo "<span class='errors'>{$errors[$f->name]}</span>"; 
} 
} 

경우 오류를 울리는 전에 반복해야합니다.

관련 문제