2013-05-13 2 views
1

사용자가 제출 버튼을 클릭하면 드롭 다운 메뉴를 메뉴의 "빈"옵션으로 재설정 할 수 있습니까? PHP와 HTML로 설정된 MVC와 concrete5 라이브러리를 사용하고 있습니다. 사전에 감사드립니다!사용자가 제출 버튼을 클릭하면 드롭 박스가 자동으로 첫 번째 값으로 재설정 PHP

컨트롤러 코드 : 여기에 지금까지 무엇을 가지고

public function authorize() { 
    $selectHost = array('' => ''); 
    foreach ($this->host->getHostInfo() as $row) { 
     if (isset($row['HARDWARE_id'])) { 
      $selectHost[$row['id']] = $row['host']; 
     } 
    } 
    $this->set('selectHost',$selectHost); 
    $postCheck=array(array('param' => 'host', 
          'check' => '^[0-9]{1,50}$', 
          'error_msg' => 'Invalid Host ID'), 
    ); 
    $post = scrub($_POST,$postCheck); 
    if (isset($post['host'])) { 
     $this->host->authorize($post['host']); 
     $this->set('test', "<p> The host has successfully been authorized.</p>"); 
    } 
    else{ 
     $this->set('failed', "<p>Invalid Host ID</p>"); 
    } 
} 

보기 코드 :

<form method="post" enctype="multipart/form-data" action="<?=$this->action('authorize')?>"> 
<?php 
    $form = Loader::helper('form'); 
    print $form->label('host', 'Host: '); 
    print $form->select('host', $selectHost); 
?> 
<?php 
    print $form->submit('Submit','Submit'); 
    echo $test; 
    echo $failed; 
?> 
</form> 

답변

0

나는 꽤 긍정적이다. e는 POST 된 값을 취하여 기본값으로 사용하려는 C5의 요구를 무시할 수있는 방법이 아닙니다. TWR에서 제안한대로 값을 지정하십시오. (일반적으로 페이지가 POST되고 오류가 발생하면 POST의 내용을 표시하고 싶기 때문에 데이터베이스에서 값을 표시하지 않으므로 일반적으로 좋은 방법입니다.

매우 쉽게 양식 도우미를 재정의 할 수 있습니다.

그러나 성공적인 제출 (오류 발생 후 리디렉션하지 말고 게시 된 값이 유용 할 것입니다) 후 페이지로 리디렉션하는 것이 좋습니다. 다른 페이지로 리다이렉트하거나, 이상적으로 확인 메시지로 리디렉션 할 수 있습니다. 리디렉션 사용에 대한 예제는 https://github.com/concrete5/concrete5/blob/master/web/concrete/core/controllers/single_pages/dashboard/blocks/stacks.php#L23을 참조하십시오.

이 방법이 문제의 모범 사례이지만 현재 코드를 사용하여 누군가가 새로 고침을하면 데이터를 다시 채우고 호스트를 다시 인증하기 때문에 문제가 발생하는 것이 좋습니다.

+0

제임스 감사합니다, 나는 그것에 대해 조사해야 할 것입니다. 나는 새로 고침 옵션을 결코 고려하지 않았다. 확인 메시지가있는 리디렉션이 가장 좋을 것 같습니다. – user2232926

0

내가 당신을하는 (자바 스크립트) onsubmit 조치 폼 태그를 확장 할 수 있다고 생각 다시 놓기.

+0

나는 운없이이 시도했습니다) "> – user2232926

0

양식 제출이므로보기에서 "드롭 상자"/ select의 값을 변경하기 만하면됩니다. 제출 후에는 새로운 페이지로드가 발생합니다. 그래서, 모든 경우에 기본 값 및보기에 $selectHost

아닌 현재 값을 표시 할 수 있습니다,이

print $form->select('host', $selectHost);

print $form->select('host', $selectHost, null);

로 변경

에 따르면 http://www.concrete5.org/documentation/developers/forms/standard-widgets

+0

그 TWRCole과 행운이 없습니다. 이 오류 메시지가 나타납니다. 경고 : 잘못된 인수가 /var/web/support.mbi.ohio-state.edu/concrete5.4.1.1/concrete/helpers/form.php 온라인 368에있는 foreach()에 대해 제공되었습니다. 드롭 메뉴에는 그 이후 값이 없습니다. – user2232926

+0

"concrete5"를 사용하고 있다고 언급 할 가치가 있습니다. 내 대답을 수정하겠습니다. –

+0

좋아, 나도 행운과 함께 그것을 시도. 제출 된 버튼을 클릭하면 선택한 옵션이 메뉴에 남아 있습니다. 나는 많은 운이없이 concrete5 사이트의 모든 문서를 읽었습니다. 응답 주셔서 감사합니다. 아프는 검색을 계속하고 내가 해결책을 찾으면 나는 게시 할 것이다. 감사! – user2232926

0

Concrete5 폼 ​​헬퍼가 원하는대로 동작하지 않는 문제가 발생하면 그냥 사용하지 말고 대신 일반 HTML 폼 입력을 사용하십시오. <양식 방법 = "게시물"에 enctype = "다중/폼 데이터"행동 = " 행동 ('인증')?>"onsubmit = "반환 권한 부여 (:

<form method="post" enctype="multipart/form-data" action="<?=$this->action('authorize')?>"> 
<label for="host">Host: </label> 
<select id="host" name="host"> 
<?php foreach ($selectHost as $value => $text): ?> 
    <option value="<?php echo htmlentities($value); ?>"><?php echo htmlentities($text); ?></option> 
<?php endforeach; ?> 
</select> 

<input type="submit" value="Submit" /> 
<?php 
    echo $test; 
    echo $failed; 
?> 
</form>