2013-08-22 82 views
0

我有一個包含文件名的輸入字段,當單擊提交時它會更改文件名。在dir上重命名文件按鈕單擊

如果目錄中有多個文件,並且我更改了第二個文件輸入,它將更改第一個文件名。

無論目錄中有多少文件,它只會更改第一個文件名。

if (isset($_POST['submit'])) { 
rename ($file_path.$file, $file_path.$_POST['new_name']); 
header("Location: /php rename/"); 
exit(); 
echo "name changed"; 
} 
else { 
    echo "name was not changed"; 
} 

我看了網上,找不到一個腳本,做我需要它做。

我希望能夠更改第二個文件的名稱,當我點擊提交第二個文件窗體,然後第三/第四等等。

<?php 
    if ($handle = opendir('./uploaded/')) { 
    while (false !== ($file = readdir($handle))) { 
     if ($file != "." && $file != "..") { 
      echo' 
    <a id="file-link" href="./uploaded/'.$file.'" target="_blank">'.$file.'</a> 

<form method="post"> 
    <input type="text" name="new_name" value="'.$file.'"> 
    <input type="submit" id="submit" name="submit" value="submit"> 
</form>  
    '; 

    $file_path = "./uploaded/"; 

       if (isset($_POST['submit'])) { 

        rename ($file_path.$file, $file_path.$_POST['new_name']); 
        header("Location: /php rename/"); 
        exit(); 
        echo "name changed"; 
       } 
       else { 
         echo "name was not changed"; 
        } 


       } 

      } 
    closedir($handle); 
    } 
    ?> 
+0

在哪裏'$ file_path'和'$ file'從何而來,顯然後者包含在目錄中的第一個文件的文件名,如果這是被改變 – NDM

+0

你是唯一一個需要一個循環來確保您對所有符合條件的文件執行操作。 – DevlshOne

+0

($ file = readdir($ handle)和$ file_path只是一個帶有文件路徑的變量 – sam

回答

1

我想你想重命名目錄中的所有文件,點擊一個按鈕。 $ handle已經是目錄的句柄,$ file_path包含目錄的路徑。另外假定新文件名字段的所有輸入字段的名稱都是new_name []。您需要遍歷好像目錄中的每個文件,並像下面將其重命名:

if (isset($_POST['submit'])) { 
$i = 0; 
while($file = readdir($handle)) { 
    rename ($file_path.$file, $file_path.$_POST['new_name'][$i]); 
    $i++; 
} 
header("Location: /php rename/"); 
exit(); 
echo "name changed"; 
} 
else { 
echo "name was not changed"; 
} 

Ajax解決方案使用Javascript

test.php的

<html> 
<head> 
    <script> 
    function changename(id,dirpath){ 
    new_name = document.getElementById(id + "_new_name").value; 
    old_name = document.getElementById(id + "_old_name").value; 

    old_file_path= dirpath + old_name; 
    new_file_path = dirpath + new_name; 
    var xmlhttp; 
    if (window.XMLHttpRequest) 
    {// code for IE7+, Firefox, Chrome, Opera, Safari 
     xmlhttp=new XMLHttpRequest(); 
    } 
    else 
    {// code for IE6, IE5 
     xmlhttp=new ActiveXObject("Microsoft.XMLHTTP"); 
    } 
    xmlhttp.onreadystatechange=function() 
    { 
     if (xmlhttp.readyState==4 && xmlhttp.status==200) 
     { 
     document.getElementById("response").innerHTML=xmlhttp.responseText; 
    document.getElementById(id + "_old_name").value=new_name; 
     } 
    } 
    xmlhttp.open("GET","change_name.php?old_name="+old_file_path+"&new_name="+new_file_path,true); 
    xmlhttp.send(); 
    } 
</script> 
</head> 
<body> 
<?php 
    $dirpath="testdir/"; 
    $handle = opendir($dirpath); 
    print '<div id="response"></div>'; 
    print "<table>"; 
    $i=0; 
    while($file = readdir($handle)) { 
    if($file!="." && $file!="..") { 
    $parameters = $i . ",'" . $dirpath . "'"; 
print "<tr><td><input type='text' id='{$i}_new_name' value='{$file}' /></td><input type='hidden' id='{$i}_old_name' value='{$file}' /></td><td><input type='button' name='change' value='Change Name' onclick=\"changename({$parameters});\" /></td></tr>"; 
$i++; 
    } 
    } 
    print "</table>"; 
?> 
</body> 
</html> 



change_name.php 

<?php 
if(isset($_GET['old_name']) && isset($_GET['new_name'])) { 
$old_name = $_GET['old_name']; 
$new_name = $_GET['new_name']; 

if(file_exists($old_name)) { 
    rename($old_name,$new_name); 
    echo "file renamed from ($old_name) to ($new_name)"; 
} 
else { 
    echo "file does not exist"; 
} 
} 

?> 

Ajax解決方案與jQuery

測試.php

<html> 
<head> 
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js"></script> 
<script> 
$(document).ready(function() { 
    $(".change_class").click(function() { 
     dirpath = "testdir/"; 

     id = $(this).attr('id'); 
     console.log(id); 
     new_name = $("#"+id+"_new_name").val(); 
     old_name = $("#"+id+"_old_name").val(); 
     console.log(new_name + " " + old_name); 

     old_file_path= dirpath + old_name; 
     new_file_path = dirpath + new_name; 

     $.ajax(
       { 
       url:"change_name.php?old_name="+old_file_path+"&new_name="+new_file_path, 
       success:function(data) { 
          $("#response").text(data); 
          $("#"+id+"_old_name").val(new_name); 
         } 
       } 
      ); 

    }); 
}); 
</script> 
</head> 
<body> 
<?php 
$dirpath="testdir/"; 
$handle = opendir($dirpath); 
print '<div id="response"></div>'; 
print "<table>"; 
$i=0; 
while($file = readdir($handle)) { 
if($file!="." && $file!="..") { 
    print "<tr><td><input type='text' id='{$i}_new_name' value='{$file}' /></td><input type='hidden' id='{$i}_old_name' value='{$file}' /></td><td><input type='button' name='change' class='change_class' value='Change Name' id='{$i}' /></td></tr>"; 
    $i++; 
} 
} 
print "</table>"; 
?> 
</body> 
</html> 

change_name.php

<?php 
if(isset($_GET['old_name']) && isset($_GET['new_name'])) { 
    $old_name = $_GET['old_name']; 
    $new_name = $_GET['new_name']; 

    if(file_exists($old_name)) { 
     rename($old_name,$new_name); 
     echo "file renamed from ($old_name) to ($new_name)"; 
    } 
    else { 
     echo "file does not exist"; 
    } 
} 

?> 
+0

我想重命名單個文件。每個文件都有一個輸入框,它旁邊有一個提交按鈕,這個文件被包裝在一個表格中 – sam

+0

如果你只想重命名按鈕被點擊的文件,這就是你需要採取的方法 – rakeshjain

+0

一種方法:將所有文件名和新文件名都放在一個表單中,而不是將所有文件名和新文件名放在一個表單中,而是在以html形式呈現時爲每個文件創建一個表單。在呈現它時,可以在b中放入$ num(遞增計數器)值utton字段的值。當單擊其中一個按鈕時,只提交表單並從提交的表單按鈕的值(獲取$ num值),您可以知道重命名文件的位置。檢查if i == $ num)在while循環內是真實的,然後只重命名該文件。假定在渲染和重命名之間沒有新文件被添加或刪除到該文件夾​​ – rakeshjain