jQuery, PHP удаление каталога не работает - PullRequest
0 голосов
/ 24 января 2010

Я пытаюсь удалить каталоги с помощью jquery, он удаляет и остается на 1a.php, который выполняет код для удаления. Что я хочу, так это удаление каталога без обновления страницы и отображение сообщения, что каталог был удален.

Пожалуйста, дайте мне знать, что я здесь делаю неправильно.

Спасибо заранее Dave

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 голосов
/ 25 января 2010

Вам нужно добавить возвращаемое значение false в конце вашего скрипта, чтобы не запускать форму на самой странице после ее обработки jquery:

$('#album_del_form').ajaxForm({
    target:'#dir_del',
    success: function() {
    $('#dir_del').fadeOut(40000);
    };
    return false;
});
0 голосов
/ 24 января 2010

Я думаю, вы передаете файл:

<input type="hidden" id="al_del" value="<? echo $file; ?>" />

и a1.php ожидает каталог:

$dir = $_POST['al_del'];
0 голосов
/ 24 января 2010

Увидев твой код, я заметил ошибку:

<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, получить доступ к 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 и на вкладке сети (если вы ее активируете).

0 голосов
/ 24 января 2010

если каталог не пуст, 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...