如何使用ajax重命名文件

时间:2016-06-10 15:10:26

标签: php ajax

对于文件管理,我使用表单重命名通过foreach循环显示的文件。

首先是php:

if(isset($_POST['rename'])) {
    if(!is_dir($_POST['old_name'])) {
       rename($_POST['old_name'], $NewFileName);
       exit;
    }
} 

形式:

<form class="sfmform" method="post" action="">
        <input type="hidden" name="old_name" value="<?php echo $dir.'/'.$file; ?>" />
        <input class="new_name" type="text" name="new_name" placeholder="only a-z, A-Z and 0-9" value="" />
        <input type="submit" class="rename" name="rename" value="Go" />      

    </form>

注意:表单是foreach循环的一部分,靠近每个文件

js(ajaxForm):

 $('.sfmform').ajaxForm({

    success: function(data) {
        status.html(data);
        $('.myFiles').load(document.URL +  ' .myFiles');

    },

});

div .myFiles包含渲染的文件,其中包含foreach循环。

会发生什么: 第一次重命名是正确的;没有硬刷新他重命名文件,它立即可见,因为加载了div .myFiles。 但第二次重命名出错了;他在php中循环并死了。 我不使用出口;在php中,他多次生成myFiles div。

当我刷新硬盘时;我可以重新命名。但是在没有经过艰苦刷新的情况下重新命名两次后,他就死了。

我做错了什么?

我还有其他形式用于创建具有相同类的目录:sfmfom,这些不是foreach循环的一部分。有了它们,我可以毫无疑问地使用它们两次。 为什么这只发生在作为foreach循环一部分的形式? 我怎样才能正常工作?

更新:foreach

/* RENDER THE FILES */
foreach ($files as $file) {
if ($file != '.' && $file != '..') { // don't show links to previous folders
    $MimeFileType = mime_content_type($dir.'/'.$file);
    $FileExtension = pathinfo($file, PATHINFO_EXTENSION);
    $ClassExtension = 'sfm_'.$FileExtension;

.......
<td>
    <!-- RENAME -->
    <form class="sfmform" method="post" action="">
        <input type="hidden" name="old_name" value="<?php echo $dir.'/'.$file; ?>" />
        <input class="new_name" type="text" name="new_name" placeholder="only a-z, A-Z and 0-9" value="" />
        <input type="submit" class="rename" name="rename" value="Go" />      

    </form>

</td>
}
}

1 个答案:

答案 0 :(得分:0)

Solution found:

The js should be this:

$(".sfmform").livequery(function() { $(this).ajaxForm({

instead of this:

$('.sfmform').ajaxForm({