2012-03-11 4 views
0

내 페이지 중 하나의 드롭 다운 상자에 서버 측 유효성 검사를 일부 추가했으며 페이지가 더 이상 작동하지 않을 때 추가했습니다. 내가 추가 한 코드는 다음과 같습니다.코드가 ob_start()에서만 작동하는 이유는 혼란 스럽습니다.

$show_form = true;   
if (isset($_POST['submit'])) { 
    //All of the server side validations 
     $validator = new FormValidator(); 
    $validator->addValidation("hospital_name","dontselect=000","No facility was chosen"); 

    if ($validator->ValidateForm()) { 
    // All the variables from the submission form 
    $userid = $_SESSION['user_id']; 
    $hosp = $_POST['hospital_name']; 
    header('Location: ../site_hospital' . $hosp . '/hospital_submitform.php?usr=' . $userid . '&&hosp=' . $hosp); 
    exit; 
    $show_form = false; 
    } else { 
    echo "<B style='color:red;'>The following errors occurred:</B>"; 
    $error_hash = $validator->GetErrors(); 
    foreach ($error_hash as $inpname => $inp_err) { 
     echo "<p style='color:red;'>$inp_err</p>\n"; 
    } 
}}   
if (true == $show_form) { 

순전히 기회를 통해 ob_start(); 페이지의 시작 부분에 디버깅의 일부로 갑자기 내 코드가 제대로 작동하지만 왜 그럴 수 있는지 알지 못하고 커뮤니티가 교육 된 추측을 왜 버릴 수 있는지 기대하고있었습니다. 코드가 작동을 멈추었을 때 위의 헤더 명령을 실행하지 않으면 ob_start()를 추가했을 때 페이지가 새로 고침되고 위치가 변경되지 않습니다. 페이지의 맨 위에는 계획대로 페이지가 리디렉션됩니다. 따라서 전반적인 질문은 페이지가 ob_start없이 header 명령을 사용하여 직접 지시하지 않는 이유입니까? 확신 할 수있는 세부 사항과 코드가 확실한 답을 얻기 위해 필요하지만, 누군가가 이전에이 문제를 겪었거나 교육받은 추측을 통해 내 자신의 답변으로 인도 할 수 있기를 바랍니다. 어떤 통찰력에도 감사드립니다.

+0

[PHP가 이미 보낸 헤더] (URL : http://stackoverflow.com/questions/8028957/headers-already-sent-by-php) – mario

답변

2

출력 스트림에 글을 쓰고 헤더가 제대로 작동하지 않기 때문입니다. 일단 다른 출력을 버퍼링하기 시작하면 헤더 조작에 장애가 발생합니다.

+0

빠른 응답 감사합니다. 나는 어떤 범죄자에 대해서도 코드를 살펴보고 나에게 어떤 것도 튀어 나오지 않는다. 나와 다른 사람이이 게시물을 읽는 "출력 스트림에 쓰기"의 예를 들어 주시겠습니까? 그것은 단순히 진술을 되풀이하는 것입니까? –

+0

말하기 어렵고, 여는 전에 공백이 될 수 있습니다. dldnh

+0

도움을 주셔서 감사합니다. 내가 여기서 알아낼 수 있는지 알게 될거야. ob_start()를 패치로 사용하지 않을 때까지 문제가 해결 될 때까지 조언을 해 줄 수 있습니까? 어떤 잠재적 함정이라도? –

관련 문제