2016-05-14 3 views
0

Für ein Dateiverwaltungssystem verwende ich eine foreach-Schleife für die Ausgabe aller Dateien und Ordner in Verzeichnissen. Jetzt möchte ich die Dateien und Ordner über ein Formular umbenennen. Mein Code sieht wie folgt aus:Wie man eine Datei umbenennt, wenn sie in foreach Schleife ausgegeben wird

/* 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> 

Mein Problem ist: Benennt das Umbenennen einer Datei auch alle anderen Dateien mit diesem Namen die Ordner enthält. Wie erreicht man, dass nur die richtige Datei umbenannt wird? Ich weiß, das Problem ist, dass alle Dateien über die foreeach Schleife ausgegeben

$dir.'/'.$file den Pfad zur Datei oder einen Ordner

$file wird, um den Namen der Datei oder des Ordners

+4

Dieser Code ist offen für Pfadangriffe. Sie möchten dagegen einen Schutz hinzufügen. – arkascha

+0

oke aber das war nicht meine Frage. Wie kann ich eine Datei abfangen und diese Datei nur umbenennen? –

+2

Verwenden Sie keine Schleife? – jeroen

Antwort

1

eine schmutzige Lösung hinzuzufügen gibt ein verstecktes Feld in Ihrem Formular, das den ursprünglichen Namen der Datei wie und zu bewegen, um den Zustand, wenn aus dem Schleife somthing enthält:

<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

das funktioniert wirklich! danke –

+0

@JackMaessen du bist willkommen :) –

Verwandte Themen