2014-08-06 2 views
0

"buildform"이라는 클래스에 의해 대부분 생성 된 양식이 있습니다. 이제 폼의 모든 부분이 그 위치에서 유효성을 검사합니다. 이는 다음과 같습니다PHP : 유효성 검사 (클래스) 후 양식 숨기기

echo $frm->create_input("customer_nr", "Customer Nr.", "text:empty:int"); 

여기에 세 번째 속성은 조건이다 (여기 : 텍스트 필드,하지 빈 만의 정수)입니다. "create_input"함수는 양식 제출시 폼 필드를 직접 확인하는 몇 가지 함수를 호출합니다. 나는 여러 가지 이유로이 방법을 수행 : 만 양식을 작성하고 유효성을 검사 할 때 대신 한 번만 속성을 말할 필요가 오류

  • 있을 때

    • 내가 직접 빨간색으로 양식을 색상 수 있습니다.

    이것은 정말 편안하고 지금까지는 매우 쉬운 양식을 만들었습니다.

    다음 사용자에 대한 유효성 검사 오류는 다음과 같이 클래스 변수에 저장됩니다

    형태의 끝에서
    function add_err($n_errmsg) { 
        $this->errmsgs[] = $n_errmsg; 
        return; 
    } 
    

    나는이 같은 오류를 보여

    if(isset($_POST["sbm"])) { 
        $ret_err = $frm->ret_err(); 
        if(!empty($ret_err)) { 
         echo $ret_err; 
        } 
        else { 
         // send success mail 
        } 
    } 
    

    을이 모든 어떤 문제없이 작동합니다. 양식을 제출할 때 양식을 숨길 생각이 들었습니다. 하지만 폼이로드되기 전에 오류가 없는지 확인해야합니다.

    나는 오류가 생성되므로이 현재 불가능합니다

    else { 
        $hideform = true; 
        // send success mail 
    } 
    

    처럼 뭔가 싶어하면서 "생성"양식 필드. 오류를 맨 위로 이동하면 유효성 검사가 나중에 수행되기 때문에 오류가 항상 "비어 있습니다"...

    어떻게 해결할 수 있습니까? 양식을로드하기 전에 유효성을 검사해야합니까, 아니면 다른 방법이 있습니까?

    감사합니다. 최고 감사합니다. 토비

  • +2

    전자 메일을 보내면 리디렉션 사용자가 해당 양식이없는 방문 페이지로 이동하십시오. 또는 세션 메시지가있는 동일한 페이지로 리디렉션하여 해당 양식 위에 표시 할 수 있습니다. – machineaddict

    +0

    클래스의'create_input' 메쏘드를 보여 주시겠습니까 (아니면 작고/pastebin이 아닌 경우 전체 클래스를 표시 할 수 있습니까). 난 간단한 리팩터링이 필요하지만, 코드를 볼 필요가 – Steve

    +0

    모두 그것은 양식 필드를 만들고 유효성 검사 함수를 호출 않습니다 : http://paste.ofcode.org/35ucC4QFUJPWDtikWgfa9xX뿐만 아니라 유효성 검사 기능이 필요합니까? – Toby

    답변

    1

    좋습니다. 잘 해결할 방법이 있습니다. 당신이 함께 갈로

    은 기본적으로 폼의 HTML을 반향됩니다

    echo $frm->create_input(...); 
    echo $frm->create_input(...); 
    

    당신이 대신 할 수있는 것은 문자열로 HTML을 저장할 수 있습니다 : 같은 라인을 따라

    $formhtml = ''; 
    $formhtml .= $frm->create_input(...); 
    $formhtml .= $frm->create_input(...); 
    
    if($frm->ret_error()){ 
        echo $formhtml; 
        //other logic 
    }else{ 
        //send mail 
    } 
    

    , 당신은 할 수 양식 클래스를 변경하여 내부적으로 수행하고 표시 방법을 추가하십시오.

    private $html = ''; 
    function create_input(...){ 
        //retrun $ret; 
        $this->html .= $ret; 
    function show(){ 
        echo $this->html; 
    } 
    
    
    $frm->create_input(...); 
    $frm->create_input(...); 
    
    if($frm->ret_error()){ 
        $frm->show(); 
        //other logic 
    }else{ 
        //send mail 
    } 
    
    +0

    예! var에 폼을 저장하는 것은 내가 검색 한 것이다 : D ob_start(); 및 ob_get_clean(); 성공과 함께! 고맙습니다! 나는 show() 함수를 전혀 사용하지 않았습니다 ... 그게 무엇이겠습니까? ... – Toby