0

ファイル名を含む入力フィールドがあり、送信をクリックするとファイル名が変更されます。

ディレクトリに複数のファイルがあり、2 番目のファイル入力を変更すると、最初のファイル名が変更されます。

ディレクトリにいくつのファイルがあっても、最初のファイル名のみが変更されます。

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

オンラインで調べたところ、必要な処理を実行するスクリプトが見つかりません。

2 番目のファイル フォームで [送信] をクリックし、次に 3 番目/4 番目などのようにクリックしたときに、2 番目のファイル名を変更できるようにしたいと考えています。

    <?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);
    }
    ?>
4

1 に答える 1

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

Javascript による Ajax ソリューション

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

?>

Jquery による Ajax ソリューション

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

?>
于 2013-08-22T13:40:38.623 に答える