2015-01-14 2 views
2

PHP와 scandir 함수를 사용하여 파일 정렬 도구를 구축하고 있습니다. 지금까지 내가 가진 것은 특정 디렉토리의 모든 파일을 인쇄하는 PHP가 포함 된 간단한 HTML 문서입니다. 또한 사용중인 PHP 스크립트에 따라 오름차순 또는 내림차순으로 파일 이름을 기반으로이 작업을 수행합니다. 이제 빌드하려고하는 것은 두 개의 라디오 버튼과 제출 버튼으로 PHP 스크립트를 변경하는 HTML 폼입니다. 목록을 오름차순 또는 내림차순으로 표시해야합니다.html 형식의 PHP scandir 제어

<?php 

$dir = "files"; 
$exclude = array(".","..","error_log","_notes"); 
if (is_dir($dir)) { 
$files = scandir($dir 
    // adding this for descending order ,SCANDIR_SORT_DESCENDING 
    ); 
foreach($files as $file){ 
    if(!in_array($file,$exclude)){ 
     echo ' 
     <li> ' . $file . ' </li>'; 
    } 
} 
} 
?> 

는 이제 질문은 다음과 같습니다 : 같은

<div class="controls"> 
    <form class="controlform"> 
     <input type="radio" name="valone" value="Milk">Ascending 
     <input type="radio" name="valtwo" value="Milk">Descending 
     <button class="sortbutton">Sort!/button><br> 
    </form> 
</div> 

... 몇 라인 나중에 HTML의 문서에서이 내 PHP 스크립트 모습입니다 : 여기 내 HTML 양식입니다 어떻게이받을 수 있나요 일? 고마워요!

// UPDATE & 최종 솔루션

당신에게 답변을 주셔서 대단히 감사합니다!

HTML

  <form class="controlform" method="get" action="index.php"> 
        <input type="radio" name="sort" value="asc">Ascending 
        <input type="radio" name="sort" value="desc">Descending 
        <button class="sortbutton">Sort!</button><br> 
      </form> 

PHP

  <?php 
      $sortFlag = SCANDIR_SORT_NONE; // set a default 
      if (!empty($_GET['sort'])) { 
       switch ($_GET['sort']) { 
        case 'asc': $sortFlag = 0; break; 
        case 'desc': $sortFlag = 1; break; 
       } 
      } 

      $dir = "files"; 
      $exclude = array(".","..","error_log","_notes"); 

      if (is_dir($dir)) { 
       $files = scandir($dir, $sortFlag); 
       foreach($files as $file){ 
        if(!in_array($file,$exclude)){ 
         echo ' 
         <li><h3>' . $file . ' </h3></li>'; 
        } 
       } 
      } 

      ?> 

감사합니다 :이 작업 솔루션입니다!

답변

1

SCANDIR_SORT_NONE, SCANDIR_SORT_DESCENDINGSCANDIR_SORT_ASCENDING 상수는 PHP가 의미있는 방식으로 사용하는 정수입니다. 양식 입력에 따라이 변수를 원하는대로 조작하고 변수에 이러한 상수를 할당 할 수 있습니다.

$sortFlag = SCANDIR_SORT_NONE; // set a default 
if (!empty($_GET['valone'])) $sortFlag = SCAN_SORT_ASCENDING; 
if (!empty($_GET['valtwo'])) $sortFlag = SCAN_SORT_DESCENDING; 
$files = scandir($dir, $sortFlag); 
// ... 

양식 :

<form class="controlform" method="get" action=""> 
    <input type="radio" name="valone" value="Milk">Ascending 
    <input type="radio" name="valtwo" value="Milk">Descending 
    <button class="sortbutton">Sort!/button><br> 
</form> 

아마 같은 name 속성을 사용하는 radio 요소를 직접 해결하려면 :

<form class="controlform" method="get" action=""> 
    <input type="radio" name="sort" value="asc">Ascending 
    <input type="radio" name="sort" value="desc">Descending 
    <button class="sortbutton">Sort!/button><br> 
</form> 

그런 다음 PHP 코드가 더 같이 할 수

$sortFlag = SCANDIR_SORT_NONE; // set a default 
if (!empty($_GET['sort'])) { 
    switch ($_GET['sort']) { 
     case 'asc': $sortFlag = SCAN_SORT_ASCENDING; break; 
     case 'desc': $sortFlag = SCAN_SORT_DESCENDING; break; 
    } 
} 
$files = scandir($dir, $sortFlag); 
// ... 
+1

음 정말 똑똑하고 우아한 감사합니다! 양식을 행동에 옮기는 가장 좋은 방법은 무엇이라고 생각하십니까? 외부 파일에 PHP를 넣고 GET을 통해 PHP 양식에 연결해야합니까? 죄송합니다, PHP를 처음 사용하는 경우 – Marc

+0

@Marc 오, 같은 파일에 남겨두고 그냥 GET을 사용할 수 있습니다. 아마 실제로 더 적절할 것입니다. 나는 내 대답을 편집 중입니다. 이렇게하면 사용자가 전달/뒤로/다시로드 버튼을 사용하면 "양식 데이터를 다시 제출 하시겠습니까?"라는 경고 메시지가 표시되지 않습니다. – sjagr

+0

빠른 답장을 보내 주셔서 감사합니다. 현재 해결책을 제시하는 업데이트 된 질문을 살펴보십시오. 왜 출력이 전혀 없는지 알 수 있습니까? 모든 것을 두 번 확인했습니다. – Marc