【问题标题】:how to rename file with ajax如何用ajax重命名文件
【发布时间】:2016-06-10 15:10:25
【问题描述】:

对于文件管理,我使用表单来重命名通过 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>
}
}

【问题讨论】:

  • 等到有人开始向您的脚本提交old_name=/etc/passwd 和其他有趣的路径!
  • php 中有什么循环?正如@jszobody 所说:这段代码非常危险 - 您允许用户指定 ANY 文件/路径,他们知道您的服务器上的名称。这使您几乎可以窃取机器上的所有文件。
  • @jszobody 我知道操纵旧名称的问题。但这在其他地方受到保护!但这不是我的问题……
  • 就个人而言,我建议您更新数据库中的链接,而不是移动文件系统上的实际文件。但是,您最可能需要刷新的问题是 jQuery 操作未绑定到动态加载的表单。请参阅stackoverflow.com/questions/3467894/… 了解有关此内容的一些见解
  • 已找到解决方案!这个:$(".sfmform").livequery(function() { $(this).ajaxForm({ 而不是这个:$('.sfmform').ajaxForm({ 解决了这个问题!谢谢@史蒂夫

标签: php ajax


【解决方案1】:

找到解决方案:

js应该是这样的:

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

而不是这个:

$('.sfmform').ajaxForm({

【讨论】:

    猜你喜欢
    • 2016-05-22
    • 2020-03-23
    • 1970-01-01
    • 1970-01-01
    • 2017-10-06
    • 1970-01-01
    • 1970-01-01
    • 2010-09-26
    • 2014-01-15
    相关资源
    最近更新 更多