2011-08-26 5 views
0

저는 새로운 프로그래머이며 기본 등록 양식에 대한 유효성 검사를 일부 시도합니다. 제출할 때 동일한 페이지로 다시 사용자를 보내는 기본 등록 양식을 작성했습니다. 또한 사용자 클래스를 만들고 몇 가지 기본 유효성 검사 함수를 만들었습니다. 그러나 함수에는 오류 메시지가 내장되어 있습니다. 분명히 등록 양식 상단에 기능을 넣으므로 오류가 있으면 등록 양식에 오류가 게시됩니다. 그러나 오류 메시지가 보이지 않는 방법에 대한 제어권이 없으며 클래스 외부의 오류 메시지를 에코하는 데 더 좋은 방법이 있는지 알고 싶습니다. 그래서 CSS의 일부 유형 또는 다른 방법을 더 잘 제어 할 수 있습니다. 그들은 본다. 나는 그것이 의미가 있기를 바랍니다. 또한 오류가있을 때 사용자는 빈 등록 양식으로 다시 전송됩니다. 텍스트 상자에 유효한 정보를 유지하고 잘못된 정보를 다시 작성하는 방법을 파악하려고했습니다. 다음은 내가 수행 한 유효성 확인의 기본 예제입니다. 나는 기본을 알고 있지만 프로그래밍에 익숙하지 않다.유효성을 검사 할 때 오류 메시지를 표시하는 가장 좋은 방법

function validate_password($password) 
{ 
    $valid = TRUE; 
    if ($password == '') 
    { 
     echo "<p> Please enter a value for the password </p>"; 
      $valid = FALSE; 
    } 
    elseif($_POST['pwd'] !== $_POST['pwd2']) 
     { 
      echo "The passwords do not match please try again"; 
      $valid = FALSE; 
     } 
return $valid; 
} 
+0

: 같은 사용자가 무언가에 의해 오류를 표시하려면 오류가있을 때만 같은 페이지. 그렇지 않다면 홈 페이지로 보냅니다. –

답변

2

즉시 에코를하지 말고, 나중에 사용하기 위해 저장한다. 클래스 내부에 있다고 언급 했으므로 클래스 속성을 사용하여 오류 메시지를 보관할 수 있습니다.

클래스 YourClass { public $ error;

function validate_password($password) 
{ 
    $valid = TRUE; 
    if ($password == '') 
    { 
     // Set the error message 
     $this->error = "Please enter a value for the password"; 
      $valid = FALSE; 
    } 
    // etc... 
} 

}

나중에 당신이 필요로 할 때, 당신은 수있는 HTML 출력이 :

if (!empty($yourclass->error)) { 
    echo "<p class='errmsg'>{$yourclass->error}</p>\n"; 
} 

당신은 그럼 그냥 CSS 클래스 errmsg이 필요하고 당신이 좋아 어떻게 스타일을 지정할 수 있습니다 :

이제는 효과가 있다면 0123으로 만들 수 있습니다. 배열로 344,935,클래스 속성과는에 여러 메시지를 밀어 :

프리젠 테이션 코드에서
// In the class, initialize it as an array 
$this->error = array(); 


// Use the [] notation to append messages to the array. 
$this->error[] = "Another error message..." 
$this->error[] = "And yet another error message..." 

, 메시지 출력 루프를 사용

// Output a big stack of error messages... 
foreach ($yourclass->error as $err) { 
     echo "<p class='errmsg'>$err</p>\n"; 
} 
+0

감사합니다. 나는 이것을 몇 시간 동안 알아 내려고 애 썼습니다. –

+0

@Mike Z 도움이 도움이됩니다. 그리고 방금 오류 메시지의 배열을 유지하는 것에 대해 추가 한 비트를 확인하십시오. –

0

나는 일반적으로 클래스와 함께 할 그들의 오류는 무엇입니까 오류에 대한 변수가 있어야합니다. 그래서 같은 :

class User 
{ 
    private $_ValidationErrors = array(); 

    function validate_password($password) 
    { 
     $this->_ValidationErrors = array(); 
     $valid = TRUE; 
     if ($password == '') 
     { 
      $this->_ValidationErrors[] = "Please enter a value for the password"; 
       $valid = FALSE; 
     } 
     elseif($_POST['pwd'] !== $_POST['pwd2']) 
     { 
      $this->_ValidationErrors[] = "The passwords do not match please try again"; 
      $valid = FALSE; 
     } 
     return $valid; 
    } 

    function ValidationErrors() 
    { 
     if (count($this->_ValidationErrors) == 0) 
      return FALSE; 
     return $this->_ValidationErrors; 
    } 
} 

그런 다음 사용 :

$user = new User(); 
if (!$user->validate_password('somepass')) 
    echo implode('<BR>',$user->ValidationErrors()); 

편집 : 나는에 사용자를 다시 보냅니다 말을 의미

<?php 
if (isset($_POST["submit"])) 
{ 
    $user = new User(); 
    $passwordErrors = (!$user->validate_password($_POST["pass1"]))?$user->ValidationErrors():array(); 
} 
?> 
<form action="<?php echo $_SERVER["php_self"]; ?>" method="post"> 
    <input type="text" name="pass1" value="<?php echo htmlspecialchars($_POST["pass1"]); ?>" /><BR/> 
    <?php 
     echo ((isset($passwordErrors) && count($passwordErrors) == 0)?"":implode("<BR/>", $passwordErrors)); 
    ?> 
    <input type="submit" name="submit" value="Register" /> 
</form> 
+0

지금 유효하지 않은 상자에 오류가 특별히 나타나게하는 방법이 있습니까? –

+0

위의 편집과 비슷한 것을 시도해보십시오 : – Ben

관련 문제