2017-11-01 25 views
0

CSVファイルをローカルフォルダに保存しました。そして私はフロントエンドのリストの形でローカルフォルダ内のファイルの名前を動的に表示しています。PHP - 複数のCSVファイルテーブルを一度に1つずつローカルフォルダに保存します

ファイル名のリスト

$path = "uploads/"; 
$files = scandir($path); 
foreach($files as $file) { 
    if ($file[0] != '.') $nothidden[] = $file; 
} 

for ($x=0;$x<count($nothidden);$x++){ 
    ?><li class="active"><a><?php ${'file'.$x} = $nothidden[$x]; echo $nothidden[$x]; ?></a></li><br/> 
    <?php 
} 

私は静的に一度に表形式1でcsvファイルを表示することができています。

CSVファイルテーブル

$value = 'file.csv'; 
$target='uploads/'.basename($value); 
echo "<table id='toggle-vis'>\n\n"; 
    $f = fopen($target, "r"); 
    while (($line = fgetcsv($f)) !== false) { 
     echo "<tr>"; 
     foreach ($line as $cell) { 
       echo "<td>" . htmlspecialchars($cell) . "</td>"; 
     } 
     echo "</tr>\n"; 
    } 
    fclose($f); 
    echo "\n</table>" 

私が何をしたいです表示することで表示されたリスト内のファイルの特定の名前をクリックしたときに、ローカルディレクトリからcsvファイルのテーブルです。リストの他のファイル名をクリックすると、前のテーブルが削除され、クリックされたファイルのデータがテーブルに入力されます。 助けてください?

+0

あなたはそれをCSV形式の権利の内容を一覧表示しますcsvファイルをクリックすると言って意味 – RamRaider

+0

ファイルを読み取り、CSVファイルからデータを返す、要求を処理するための要求とPHPを送信するために、AJAXを使用する必要があります –

+0

@RamRaiderあなたはそれをどうやって正確に説明することができますか、私はそれでいくつかのコードを試しましたが、最終的には固まっていました。 –

答えて

0

これは非常に迅速に書かれた例である - それはテストとして私のために動作しますが、あなたの最終的なニーズや環境に合わせて、適切な編集を行うために慎重にそれを見てする必要があります。

ajax関数は、リスト内のaがクリックされたときに呼び出されます。コードはeventを見てevent.targetを使用して、ainnerHTMLを傍受します。これは、パラメータとして(ajax経由で)phpスクリプトに送信されるファイル名です。 PHPスクリプトは、メソッドがPOSTであることをチェックし、POST配列にファイル名があることを確認します。OKであれば、そのファイルを処理してcsvデータを返します。これは、ユーザがあなたのシステムで使用されている実際のファイルパスを知らないように、完全なファイルパスではなくファイル名だけが送られるように編集することができます!

<?php 
     if($_SERVER['REQUEST_METHOD']=='POST' && !empty($_POST['filename'])){ 

      $filename=filter_input(INPUT_POST, 'filename', FILTER_SANITIZE_STRING); 

      if($filename && realpath($filename)){ 
       ob_clean(); 

       $hndl=fopen($filename, 'r'); 
       $html=array(); 

       $html[]="<table id='toggle-vis'>"; 
       while (($line = fgetcsv($hndl)) !== false){ 
        $html[]="<tr>"; 
        foreach($line as $cell)$html[]="<td>$cell</td>"; 
        $html[]="</tr>"; 
       } 
       $html[]="</table>"; 

       fclose($hndl); 

       header('Content-Type: text/html'); 
       exit(implode(PHP_EOL, $html)); 
      } 
     } 
?> 
<!doctype html> 
<html> 
    <head> 
     <title>csv manipulations</title> 
     <script> 
      /* 
       basic ajax function 
      */ 
      function ajax(m,u,p,c,o){ 
       /* 
        Method,Url,Params,Callback,Options 
       */ 
       var xhr=new XMLHttpRequest(); 
       xhr.onreadystatechange=function(){ 
        if(xhr.readyState==4 && xhr.status==200)c.call(this, xhr.response, o, xhr.getAllResponseHeaders()); 
       }; 

       var params=[]; 
       for(var n in p)params.push(n+'='+p[ n ]); 

       switch(m.toLowerCase()){ 
        case 'post': p=params.join('&'); break; 
        case 'get': u+='?'+params.join('&'); p=null; break; 
       } 

       xhr.open(m.toUpperCase(), u, true); 
       xhr.setRequestHeader('Content-Type','application/x-www-form-urlencoded'); 
       xhr.send(p); 
      } 

      /* 
       event handler assigned to each `a` within the list (li.active > a) 
      */ 
      function getcsvdata(e){ 
       try{ 
        e.preventDefault(); 

        var method='post'; 
        var url=location.href; 
        var params={ 
         filename:e.target.innerHTML 
        }; 
        var callback=csvcallback; 
        var options={}; 

        ajax.call(this, method, url, params, callback, options); 

       }catch(err){ 
        console.warn(err); 
       } 
      } 

      /* 
       ajax callback to process the response from the php script at the top 
      */ 
      function csvcallback(data){ 
       try{ 

        var table=document.getElementById('toggle-vis'); 
        if(table){ 
         var parent=table.parentNode; 
         parent.removeChild(table); 

         parent.insertAdjacentHTML('beforeend',data); 
        } 
       }catch(err){ 
        console.warn(err); 
       } 
      } 


      /* 
       Bind event handlers to each `a` in list 
      */ 
      document.addEventListener('DOMContentLoaded',function(){ 
       var col=Array.prototype.slice.call(document.querySelectorAll('li.active > a')); 
       col.forEach(function(e){ 
        e.addEventListener('click',getcsvdata,false); 
       }); 
      }, false); 
     </script> 
    </head> 
    <body> 
     <h1>CSV Files</h1> 
     <ul id='list'> 
     <?php 

      /* edit to suit */ 
      $dir='c:/temp2/csvfiles'; 


      $col=glob($dir . '/*.csv'); 
      if(!empty($col)){ 
       foreach($col as $file){ 
        echo "<li class='active'><a href='#'>$file</a></li>"; 
       } 
      } 
     ?> 
     </ul> 
     <table id='toggle-vis'> 
      <tr> 
       <td>csv data to appear here when links clicked</td> 
      </tr> 
     </table> 
    </body> 
</html> 
+0

あなた、私の先生はフーディーニです。ありがとうございました ! –

0

コードの一部があなたに役立つ場合があります。

​​
+0

ありがとう、それは大きな助けになるでしょう。 –

関連する問題