2011-08-08 2 views
1

私は各ファイルのIDを取得しようとしているが、隠れた入力でそれらをすべて削除している、私は知らない。もし私が間違っていたら、あなたのアプローチはもっと良い方法だろうか?私のコードは、最初のファイルを削除するためのDBのIDで、そのフォルダ最良の方法は、dbのIDを取得し、ディレクトリ内のファイルを削除するには?

のファイルは、これは私のコードです:

<?php 

    include '../Model/File.php'; 

    $path = "uploadedfiles/"; 
    $directory = dir($path); 
    $types = array('jpg', 'jpeg', 'txt', 'gif', 'png', 'doc', 'docx', 'pdf', 'xlsx', 'pptx'); 
    $identifier = ""; 

    $objFile = new File(); 

    $result= $objFile->listFiles(); 

    foreach ($result as $array){ 
     $identifier = $array['name_file']; 

     echo "<input type=\"hidden\" id=\"id_file\" value=\"".$array['id_file']."\">"; 
     echo $array['name_file'] . "<a id=\"". urlencode($identifier)."\" href=\"#\ class=\"delete\" >Delete</a><br/>"; 
    } 

?> 

それは出力:

  1. ファイル1 [deletelink]
  2. FILE2 [deletelink]
  3. FILE3 [deletelink]
  4. FILE4 [deletelink]

ますprint_r($結果)

アレイ([0] =>アレイ([id_archivo] => 41 [0] => 41 [nombre_archivo] => 1294861647_-desktop.png [1] => 1294861647_-desktop.png [fecha] => 2011-08-08 15:10:09 [2] => 2011-08-08 15:10:09)[1] =>配列( [0] => 42 [0] => 42 [nombre_archivo] => Dragon_Ball_Simpsons.jpg [1] => Dragon_Ball_Simpsons.jpg [fecha] => 2011-08-08 15:11:49 [2] => 2011-08-08 15:11:49)[2] =>配列( [id_archivo] => 43 [0] => 43 [nombre_archivo] => VATOS.jpg [1] => VATOS.jpg [fecha] => 2011-08-08 16:30:00 [2] => 2011-08-08 16:30:00) )

+0

あなたは何をしているのかわかりませんが、 '$ directory'は使わないでください – Shoe

+0

'ファイルのID'とは何ですか? iノード番号?フルパス?ちょうどファイル名ですか?ここでは、生のファイルシステムへのアクセスを扱っているので、悪意のあるユーザーは '/ etc/passwd'のように何かをしてシステムを嫌うことはできません。 –

+0

私はすでに答えを編集していますそれは良いと書かれています –

答えて

2

まず何か..もし何らかのパラメータが配列なら、それを$ resultsと呼ぶとより論理的になり、$ resultとなります。任意の関数やここにバッファを追加するには、特別な理由がない場合は、単にecho '<input name="' . $somearray['name'] . '">';

ができるかどうか。また、なぜecho "<input name=\"" . $somearray['name'] . "\">";$identifier = $array['name_file'];を、そしてあなたの問題はあるかもしれない、あなたはunset();$identifierを終了していないこと。

foreach ($result as $array){ 
    $identifier = $array['name_file']; 
    echo '<input type="hidden" id="id_file" value="' . $array['id_file']. '\">'; 
    echo $array['name_file'] . '<a id="' . urlencode($identifier) . '\" href="#" class="delete" >Delete</a><br/>'; 
    unset($identifier); 
} 

新しいエントリがロードされるときに自動的に生成foreach「$配列」は、設定解除されますので、しかし$identifierはしません。だから私の最初の推測では、これでしょう。そのため、次のエントリの値をリセットするにはunset()が必要です。

は、しかし、はるかに容易完全に$識別子を削除するには、次のようになります。

foreach ($result as $array){ 
    echo '<input type="hidden" id="id_file" value="' . $array['id_file']. '\">'; 
    echo $array['name_file'] . '<a id="' . urlencode($array['name_file']) . '\" href="#" class="delete" >Delete</a><br/>'; 
} 

私が選ぶだろうが、これは基本的に問題を解決する必要があり、あなたのコード内の他のいくつかのポイントがあります。あなたのコメントに基づいて

EDIT

、私はこれらのスクリプトを作成しました。 基本的に無料でプログラミングしています:) ご理解いただけるように、カスタムdbクラスなどを自分で追加する必要があります。しかし、彼らは単純な配列であるように見えます。そして、これはトリックを行う必要があります:私はこの.. $ディレクトリ= DIR($パス)のために何らかの理由を見つけるカント

include '../Model/File.php'; 
$objFile = new File(); 
$files_array = $objFile->listFiles(); 

まず、いくつかのノートを...。

ここでタイプは何ですか?あなたのスクリプトはアップロードを処理しないようです.. $ types = array( 'jpg'、 'jpeg'、 'txt'、 'gif'、 'png'、 'doc'、 'docx'、 'pdf'、 ' xlsx '、' pptx ');

なぜここにありますか?提供されたコードの上に他の変数がある場合は、unset($ identifier); $ identifier = "";

上記の例の配列があるので、この部分をコメントアウトしました。 $ objFile = new File(); $ result = $ objFile-> listFiles();

ライブ例:私はファイルを持っていないことをhttp://kopli.pri.ee/stackoverflow/6986586.php

注..ですから、例えば、一般的な表が表示され、また、jQueryの効果されている方法です。

メインファイル

<html> 
<head> 
    <title>Kalle rocks!</title> 
    <script src="//ajax.googleapis.com/ajax/libs/jquery/1.5.1/jquery.js"></script> 
    <style> 
     table {width: 600px; margin: 0px auto;} 
     th, td {padding: 5px;} 
     th {border-bottom: 1px solid black;} 
     .tfoot {background: #EAEAEA;} 
     .delete {background: #FFCECE; color: black; cursor: pointer; text-align: center;} 
    </style> 
</head> 
<body> 
<?php 

// Where the files sit 
$path = 'uploadedfiles/'; 

// Example array 
$files_array[] = array(
    'id_archivo' => 41, 
    'nombre_archivo' => '1294861647_-desktop.png', 
    'fecha' => '2011-08-08 15:10:09' 
); 
$files_array[] = array(
    'id_archivo' => 42, 
    'nombre_archivo' => 'Dragon_Ball_Simpsons.jpg', 
    'fecha' => '2011-08-08 15:11:49 ' 
); 
$files_array[] = array(
    'id_archivo' => 43, 
    'nombre_archivo' => 'VATOS.jpg ', 
    'fecha' => '2011-08-08 16:30:00' 
); 

// Start the table  
echo '<table cellpadding="0" cellspacing="0" border="0"> 
<thead> 
<tr> 
    <th>ID</th> 
    <th>Name</th> 
    <th>Date</th> 
    <th>Delete</th> 
</tr> 
</thead> 
<tbody>'; 

// Run the foreach loop 
$files_displayed = 0; 
foreach ($files_array as $fileid => $file){ 
    $files_displayed++; 
    echo '<tr id="fileid_' . $fileid . '"> 
     <td>' . $fileid . '</td> 
     <td>' . $file['nombre_archivo'] . '</td> 
     <td>' . $file['fecha'] . '</td> 
     <td class="delete"><span>[X]</span></td> 
    </tr>'; 
} 

// End the table and display totals 
echo '</body> 
<tfoot> 
<tr> 
    <td colspan="4" class="tfoot">Currently displaying ' . $files_displayed . ' files total</td> 
</tr> 
</tfoot> 
</table>'; 

?> 
<script> 
$('.delete').click(function() { 
    var file_row = $(this).parent('tr'); 
    var fileid = file_row.attr('id').replace('fileid_', ''); 
    $.ajax({ 
     type: 'get', 
     url: 'ajax_file_delete.php', 
     data: 'action=delete&fileid=' + fileid, 
     beforeSend: function() { 
     }, 
     success: function() { 
      file_row.fadeOut('slow'); 
     } 
    }); 
}); 
</script> 
</body> 
</html> 

アヤックスは、私はあなたが$directory少なくとも一つを使うべきだと思うこれらの事で私の正直な意見で(ajax_file_delete.php)

<?php 

$path = 'uploadedfiles/'; 

// In theory, your include '../Model/File.php'; and $result= $objFile->listFiles(); should be included here, so the array would be imported 

$files_array[] = array(
    'id_archivo' => 41, 
    'nombre_archivo' => '1294861647_-desktop.png', 
    'fecha' => '2011-08-08 15:10:09' 
); 
$files_array[] = array(
    'id_archivo' => 42, 
    'nombre_archivo' => 'Dragon_Ball_Simpsons.jpg', 
    'fecha' => '2011-08-08 15:11:49 ' 
); 
$files_array[] = array(
    'id_archivo' => 43, 
    'nombre_archivo' => 'VATOS.jpg ', 
    'fecha' => '2011-08-08 16:30:00' 
); 

if ($_GET['delete']) { 
    unlink($path . $files_array[$_GET['fileid']]['nombre_archivo']); 
    // also, you can add here some mysql related stuff to delete the file from the db 
} 

?> 
関連する問題