2013-08-22 2 views
0

У меня есть поле ввода, содержащее имя файла, и при нажатии кнопки «Отправить» оно меняет имя файла.переименовать файлы в директории, нажав кнопку

Если в каталоге больше 1 файла, и я меняю входные файлы, меняющие имя первого файла.

Независимо от того, сколько файлов находится в каталоге, оно только изменяет имя первого файла.

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"; 
} 

Я смотрел онлайн и не могу найти сценарий, который делает то, что мне нужно.

Я хочу, чтобы иметь возможность изменить имя второго файла, когда я нажимаю submit на второй форме файла, а затем третий/четвертый и так далее.

<?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 Solution с 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. Если вы ее визуализируете, вы можете поместить значение $ num (incremental counter) в b utton fields.Когда одна из кнопок нажата, отправляется только форма формы и от значения кнопки представленной формы (получите значение $ num), вы можете знать, для какого файла должно быть выполнено переименование файла. Проверьте, что ($ i == $ num) истинно внутри цикла while, а затем только переименовывать файл. Предполагается, что новые файлы не добавляются или удаляются в эту папку между рендерингом и переименованием – rakeshjain

Смежные вопросы