2010-12-30 4 views
6

완전한 PHP 초보자는 거의 모든 이전 작품이 ASP.NET에 포함되었습니다. 저는 PHP 프로젝트를 진행하고 있습니다. 처음 발견 한 것은 포스트 백에서 값을 유지하는 것입니다.PHP - 포스트 백에서 양식 값을 유지하는 모범 사례

가장 간단하면서도 사실적인 예를 보려면 10 개의 드롭 다운이 있습니다. 그것들은 아직 데이터 수집조차되지 않았습니다. 그것이 저의 다음 단계이기 때문입니다. 간단한 드롭 다운입니다.

전체 페이지가 태그에 포함되어 있습니다. 각 드롭 다운에 대한 onclick() 이벤트는 부식 된 드롭 다운의 숨겨진 요소를 채우는 자바 스크립트 함수를 호출합니다. 드롭 다운 값은 선택된 값입니다. 그런 다음 페이지를 다시로드 할 때 숨겨진 값이 비어 있지 않으면 선택한 옵션 = 내 숨김 옵션을 설정합니다.

이 기능은 단일 포스트 백에 유용합니다. 그러나 다른 드롭 다운이 변경되면 원래의 1 드롭 다운 값은 부식 된 숨겨진 값으로 인해 값이 손실되므로 값이 손실됩니다.

이것은 쿼리 스트링이나 세션 또는 다른 생각을 사용하는 방법을 보여줍니다.

누군가 내 상황에서 어떤 옵션이 가장 적합한 지 올바른 방향으로 알려줄 수 있습니까? 저는 PHP 초보자입니다. 그러나 제 스킬 레벨에 꽤 강렬한 것들을해야 할 필요가 있습니다. 그래서 유연하고 다소 사용하기 쉬운 것이 필요합니다.

감사합니다.

----- 편집 -----

내 질문 :에 조금 더 설명

내가 제출되는 페이지/양식을 참조하고 '다시 게시'라고

. 컨트롤이 서버로 다시 전달되고 HTML/PHP 코드가 다시 실행됩니다.

드롭 다운의 경우 "선택한 값"또는 "선택된 인덱스"를 유지하기 위해 숨겨진 변수를 사용하는 이유는 페이지를 제출할 때 이전 선택으로 드롭 다운을 다시 그릴 수 있기 때문입니다 , 대신에 첫 번째 인덱스를 기본값으로 사용합니다. $ _POST [] 명령을 사용할 때 이름으로 드롭 다운을 검색 할 수 없지만 숨겨진 값을 이름으로 검색 할 수 있습니다. 이것이 드롭 다운 변경 이벤트에서 드롭 다운의 선택된 값을 부식 된 숨겨진 것으로 설정하는 자바 스크립트를 호출하는 이유입니다.

-------- 다시 편집 -------- 괜찮아, 내가 단계 wayyy 다시 데리고 전체적인 목표를 설명 할 필요가 참조하십시오 :) 나는 매우되지 않는 것에 대해 사과드립니다. 처음부터 명확하게.

최종 디자인은 사용자가 회사 내 부서를 선택하여 데이터를 볼 수있는 페이지입니다. 해당 부서가 선택되면 (드롭 다운에서) 색상, 크기, 공급 업체, 스타일, 날짜, 상점 번호 등의 특정 데이터 선택 드롭 다운을 표시합니다.이 시점에서 판매 데이터를 표시합니다. 선택한 부서. 모든 색상, 크기 등을 선택하면 새로운 기준을 충족하도록 영업 데이터 결과를 업데이트합니다.

--------- 편집 ---------- 제공 할 수 없습니다. 내 예제에 대한 외부 액세스, 여기에 explination과 sceenshot입니다. 아래 이미지에서 사용자는 Department 드롭 다운을 확장하여 부서를 선택합니다. 이 시점에서 아래 판매 데이터는 해당 부서에 따라 새로 고쳐집니다. 그런 다음 사용자가 저장과 같은 "그룹화"옵션을 선택하면 페이지/데이터가 새로 고쳐져 상점별로 그룹화 된 데이터가 표시됩니다. 그런 다음 예제에서 검정색과 같은 색상을 선택할 수 있으며 데이터는 상점별로 그룹화 된 선택한 부서 및 색상에 대한 판매량을 표시합니다.그러나이 모든 작업을 수행하기 위해

는 페이지가 자동 포스트 백에 대한 네이티브 방법은 없습니다

alt text

+1

흥미로운 주제입니다. 그러나 [포스트 백] (http://en.wikipedia.org/wiki/Postback)의 의미를 설명해야합니다. 이것은 ASP 용어로, PHP에서 알 수없는 토지입니다. 또한 드롭 다운을 다시 표시해야하는 경우 또는 숨겨진 양식 필드를 통해 값을 전달하는 경우 충분한 정보를 추가하십시오. – mario

+0

왜 선택 값을 저장하는 별도의 숨겨진 필드가 있습니까? select는 자체의 값을 저장합니다. 나는 매우 혼란 스럽다. 우리는 몇 가지 코드를 볼 수 있고 당신이 달성하고자하는 것을 설명 할 수 있습니까? – dqhendricks

+0

실제 예제에 대한 링크를 제공 할 수 있습니까? 정확한 프로세스를 이해할 수 있습니까 – RobertPitt

답변

4

... 부서, 색상, 그룹화 드롭 다운 선택마다 새로 고침/게시물을 유지하기 위해 필요 , 당신과 같이는 $ _POST 배열에서 데이터를 에코 할 수 있습니다

<input name="id" value="<?php isset($_POST['id']) ? (int)$_POST['id'] : "" ?>" /> 

이 작업을 수행하는 또 다른 방법은 동적으로 당신을 위해 귀하의 의견 등을 작성하는 양식 도우미를 만든 다음에 포스트 배열을 확인 열쇠, e 예 :

class FormHelper 
{ 
    public function input($name,$type = "text",$default_value = "",$postback = false) 
    { 
     return '<input name="' . $name . '" type="' . $type . 'value="' . $this->_postback($name,$default_value) . '" />'; 
    } 

    //More Methods 


    private function _postback($key,$default = "") 
    { 
     return isset($_REQUEST[$key]) ? htmlentities($_REQUEST[$key]) : $default; 
    } 
} 

그런 다음 이전 값을 포함해야하는 wheather를 지정하는 양식을 추가 할 수 있습니다.

당신과 같이 양식을 만들 것입니다 :

<form> 
    <?php echo FormHelper::getInstance()->input("id","text","Enter Id",true); ?> 
</form> 

이 Obviusly 싱글 방법 getInstance()

당신을 도울 수있는 일부 링크를 생성.


PHP/CSS Form validation

  • PHP Form ValidationForm validation using PHP
    1. 하여 업데이트 이후 나는 당신도 귀하의 게시물이 이해하기 어려운 생각 무엇을 의미하는지 알 수 있습니다.

      메신저 권리는 다음을 수행하십시오 :

      • 는 사용자가 사용자가 클릭
        • 가 보내기 제출하면 양식
        • 을 작성하자 페이지
        • 에 양식을보기 데이터를 Ajax를 통해 서버로 전송
        • 사용자가 제공 한 정보 처리
        • 새 양식을 생성하거나 위에서 다음 올바른 경우
        • 새로 하나

      생성과 오래된 양식을 대체하는 기존의 양식을 제거 페이지로 파이프 아래로 다시 양식을 보내기

    2. 오류가있는 옛 양식을 재생 이것은 PHP에 대한 특정 기능이 아니지만 주로 자바 스크립트를 기반으로합니다

      위의 작업을 수행하는 가장 좋은 방법은 애플리케이션이 템플릿 기반인지 확인하는 것입니다. 따라서 초기 페이지로드시

      과 같은 양식을로드해야합니다.
      <html> 
          <!-- Head, Meta, Etc--> 
          <body> 
           <?php $this->template->load("templates/forms/specific_form.php"); ?> 
          </body> 
      </html> 
      

      이것은 일반적으로 페이지가로드되는 방식이며, 클릭하면 아약스를 통해 양식을 제출하려는 경우 이에 대한 jQuery가 통합됩니다.

      양식과 같이 될 것이다 :

      <form rel="__postback" ... > 
      </form> 
      

      그리고 jQuery를 내 당신이 할 것을 다음

      $(document).ready(function(){ 
          $("form[rel*=__postback]").each(function(){ 
           var Form = $(this); 
      
           //Send the form with ajax, bin the __PostbackComplete() 
           function __PostbackComplete(server_data) 
           { 
            //Overwite the form using jQuery LIVE!!!! 
           } 
          }); 
      }); 
      

      PHP 내에서이 템플릿에서 양식 데이터 및 담당자 프로세스를 분석하는 것 섹션.

      희망이 도움이됩니다.

  • +0

    방금 ​​더 자세한 내용으로 내 원래 게시물을 업데이 트, 이것이 내 목표를 더 잘 설명하는 데 도움이되기를 바랍니다. 도와 주셔서 감사합니다. – Adam

    0

    나는 당신의 질문이 맞다, 나는 문제점이 실제로 당신의 javascript 해결책에다는 것을 생각한다.

    왜 선택한 필드 만 보내시겠습니까? 여러 형태가 있습니까? 내 말은, 모든 드롭 다운이 하나의 양식에만있는 경우, 입력이 변경되면 완전한 양식을 보내야합니다. 예, 이전 드롭 다운 값을 다시 보냅니다. 그러나이 값은 $ _POST로 그 값을 얻는 방법입니다.

    +0

    따라서 여러 개의 숨겨진 객체가 부식 응답 드롭 다운 값을 포함하는 대신. 내 양식의 모든 HTML을 포함하는 숨겨진 하나의 객체가 있어야합니까? my가 submit/reload 될 때 $ _POST []를 사용하여이를 분석하여 드롭 다운의 선택된 값을 검색 할 수 있습니까? 그렇다면 예제를 보여 주시겠습니까? 고마워요 :) – Adam

    +0

    당신의 HTML과 자바 스크립트 물건을 좀 더 쉽게 표시 할 수 있다면. 그리고 내가 말한 것은 게시 된 데이터를 항상 처리하고 출력을 내고 모든 옵션을 확인하고 @RobertPitt와 같은 솔루션을 사용하는 것입니다. – Dave

    0

    올바른 값이 미리 채워진 상태에서 양식 필드를 다시 출력하면됩니다. 양식을 제출하면

    <select name="department"> 
        <option value="s">Sales</option> 
        <option value="m">Marketing</option> 
    </select> 
    

    , 값이 $ _POST [ "부서"]로 PHP로 사용할 수 있습니다 : 예를 들어

    는이 같은 드롭 다운 싶은 말은. 이제 올바른 부서를 선택하고 양식을 다시 출력하려고합니다.

    당신은 (이것은 단지 빠른 스케치입니다)이 같은 함수가 필요합니다

    function outputSelect($name, $values, $currentValue) { 
        echo '<select name="'.htmlspecialchars($name).'">'; 
        foreach ($values as $value => $text) { 
        if ($value === $currentValue) { 
         echo '<option value="'.htmlspecialchars($value).'" selected>'.htmlspecialchars($text).'</option>'; 
        } else { 
         echo '<option value="'.htmlspecialchars($value).'">'.htmlspecialchars($text).'</option>'; 
        } 
        } 
        echo '</select>'; 
    } 
    

    당신이 메뉴를 표시 할 때 호출 것입니다.일반적으로이 HTML 템플릿 내에서입니다 :

    <?php outputSelect("department", array("s" => "Sales", "m" => "Marketing"), $_POST["department"]) ?> 
    

    당신은 결국, 당신은 재사용 가능한 함수 라이브러리하게 될 겁니다 .. 텍스트 필드, 숨겨진 필드, 라디오 버튼 등 유사한 기능을해야합니다 양식 필드를 출력하는 데 사용됩니다.

    위와 마찬가지로 HTML 태그의 속성이나 내용 주위에 htmlspecialchars를 사용하는 것을 잊지 마십시오. 이것은 XSS 공격을 막기 위해 사용자가 입력 한 데이터를 표시 할 때 특히 중요하지만 데이터 원본에 관계없이 수행해야합니다.

    관련 문제