2016-05-14 14 views
0

ファイル管理システムでは、ディレクトリ内のすべてのファイルとフォルダを出力するためにforeachループを使用します。 これで、フォームを使ってファイルとフォルダの名前を変更します。 私のコードは次のようになります。foreachループで出力されたファイルの名前を変更する方法

/* RENDER THE FILES */ 
foreach ($files as $file) { 
..... 
<td> 

     <?php 
     // FILENAME 
     if(is_dir($dir.'/'.$file)) { 


     echo '<div class="sfmfolder">'.$file.'</div><br />';           
     } 
     else {   
     echo '<div class="sfmfile">'.$file.'</div>';       
     } 

     ?> 

    </td> 
    <td> 
    <?php 
     // RENAME 
     if($_POST['renamefile']) { 

     if(is_dir($dir.'/'.$file)){ 
      rename($dir.'/'.$file, $dir.'/'.$_POST['rename']); 
     } 
     else { 
      rename($dir.'/'.$file,  $dir.'/'.$_POST['rename'].'.'.$FileExtension); 
     } 

    } 
    ?> 
    <form method="post" action=""> 

     <input type="text" name="rename" /> 
     <input type="submit" name="renamefile" value="go" /> 

    </form> 
    </td> 

私の問題は、次のとおりです。ファイルの名前を変更すると、フォルダなどにもその名前を持つ他のすべてのファイルの名前を変更します。 正しいファイルのみの名前が変更されるようにする方法はありますか? 私は、問題は、ファイルまたはフォルダ

+4

このコードを:ファイルのorginal名前が含まれており、同様にループ気にいら外の場合は条件を移動するには、フォームに隠しフィールドパスを攻撃するために広く開かれています。あなたはそれに対して保護を加えたいと思う。 – arkascha

+0

okeしかし、それは私の質問ではありませんでした。どのように私は1つのファイルをキャッチし、特定のファイルの名前を変更することができますか? –

+2

ループを使用しないでください。 – jeroen

答えて

1

汚いソリューションの名前を追加することですされforeeachループ

$dir.'/'.$fileを介して出力されるすべてのファイルは、ファイルやフォルダ

$fileへのパスを与えることを知っています

<form method="post" action=""> 
    <input type="text" name="rename" /> 
    <input type="hidden" name="orginalfilename" value="<?php echo $file; ?>" /> 
    <input type="submit" name="renamefile" value="go" /> 
</form> 

<?php 
    // RENAME 
    if($_POST['renamefile'] && $_POST['orginalfilename']) { 
    $file = $_POST['orginalfilename']; 
    if(is_dir($dir.'/'.$file)){ 
     rename($dir.'/'.$file, $dir.'/'.$_POST['rename']); 
    } 
    else { 
     rename($dir.'/'.$file,  $dir.'/'.$_POST['rename'].'.'.$FileExtension); 
    } 

} 
?> 
+0

これは本当に機能します!ありがとう –

+0

@JackMaessenあなたは歓迎です:) –

関連する問題