我正在尝试使用jquery删除目录,它会删除并保留在1a.php上,后者执行删除代码。我真正想要的是删除没有页面刷新的目录,并显示一条消息,该目录已被删除。
请告诉我这里的错误。
提前致谢 戴夫
Please find the code below
// ----------------------------------1a.php
if ($_POST['al_del']) {
$dir = $_POST['al_del'];
//preg_replace('/(\d+)/', '', $_POST['al_del']);
rmdir('$dir_path/'.$dir);
echo 'album deleted';
}
//-----------------------------------1.php where the directories are listed
<script>
$('#album_del_form').ajaxForm({
target:'#dir_del',
success: function() {
$('#dir_del').fadeOut(40000);
}
});
</script>
<div style=" position:relative; top:20px; left:0px; background-color:#BBBBBB; font-family:'Arial Rounded MT Bold'; font-size:12px;">Current Albums</div>
<div style=" position:relative; top:20px; left:4px; font-family:'Arial Rounded MT'; font-size:12px;">
<?
$album_path1 = "$dir_path/";
$cur_dir = opendir($album_path1);
chdir($album_path1);
$i_count=0;
while (($file = readdir($cur_dir)) !== false) { ?>
<? if (($file != ".") && ($file != "..") && (is_dir($file))){ $i_count=$i_count+1; ?>
<div id="dir_del">
<form name="album_del_form" id="album_del_form" method="post" action="1a.php">
<input type="image" src="images/delete.gif" name="al_dell" id="al_dell" value="<? echo $file; ?>"/><? echo $file; ?>
<input type="hidden" id="al_del" value="<? echo $file; ?>" /></form>
</div>
<? }
} ?>
<div id="dir_del"></div>
</div>
</div>
答案 0 :(得分:0)
如果dir不为空,则rmdir将失败。你需要递归删除文件。查看http://www.php.net/rmdir
上的一个示例@dave:如果表单插件加载有问题,或者ajaxForm没有被调用,或者版本不匹配,你会看到这种行为。我会在ajaxForm之后检查结果并在通话结束后发出警告并查看console / firebug。
http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js
http://jquery.malsup.com/form/jquery.form.js?2.36
答案 1 :(得分:0)
我认为你传递的文件是:
<input type="hidden" id="al_del" value="<? echo $file; ?>" />
和a1.php期待一个目录:
$dir = $_POST['al_del'];
答案 2 :(得分:0)
看到你的代码,我发现了一个错误:
<div id="dir_del">
<form name="album_del_form" id="album_del_form" method="post" action="1a.php">
<input type="image" src="images/delete.gif" name="al_dell" id="al_dell" value="<? echo $file; ?>"/><? echo $file; ?>
<input type="hidden" id="al_del" value="<? echo $file; ?>" /></form>
</div>
鉴于您在while
循环中编写此代码,将会有多个这样的元素重复出现。 id='album_del_form'
和div
与id="dir_del"
的表单不止一个。请更改您显示表单的方式。
如果我可以建议,请按照以下方式构建:
<form name="album_del_form" id="album_del_form" method="post" action="1a.php">
<?php
//...
while (($file = readdir($cur_dir)) !== false)
{
?>
<?php
if ( $file != "." && $file != ".." && is_dir($file) )
{
$i_count = $i_count + 1;
?>
<div id="dir_del_<?php echo $i_count; ?>">
<input type="image"
src="images/delete.gif"
name="al_del[]"
id="al_dell_<?php echo $i_count; ?>"
value="delete <?php echo $file; ?>"/>
<?php echo $file; ?>
</div>
<?php
}
}
?>
</form>
<div id="dir_del"></div>
在1a.php
内,使用array:
if ( isset($_POST['al_del']) && is_array($_POST['al_del']) )
{
foreach ( $_POST['al_del'] as $dir )
{
rmdir($dir_path.'/'.$dir);
echo 'album deleted';
}
}
编写具有一致缩进的代码将帮助您发现错误并快速修复它。养成习惯;)
另外,使用firebug查看页面中的错误。确保加载了jQuery和jQuery表单,并且表单是通过jQuery表单插件提交的,而不是使用普通表单提交。通过jQuery表单提交的表单不会导致页面重新加载或加载1a.php
,请求和响应将出现在Firebug控制台和网络选项卡中(如果您激活它)。
答案 3 :(得分:0)
您需要在脚本末尾添加一个返回false,以便在jquery处理后停止表单在页面上运行:
$('#album_del_form').ajaxForm({
target:'#dir_del',
success: function() {
$('#dir_del').fadeOut(40000);
};
return false;
});