对于文件管理,我使用表单重命名通过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>
}
}
答案 0 :(得分:0)
Solution found:
The js should be this:
$(".sfmform").livequery(function() { $(this).ajaxForm({
instead of this:
$('.sfmform').ajaxForm({