jQuery,PHP删除目录不起作用

时间:2010-01-24 07:22:52

标签: php jquery ajax

我正在尝试使用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>

4 个答案:

答案 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'divid="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:

访问`al_dell
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;
});