Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум MySQL

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Удаление выделенных строк - 3
 
 автор: codexomega   (31.08.2005 в 22:24)   письмо автору
 
 

Добрый день.
Прошу прощения за повтор темы. Просто не нашёл ответа на свой вопрос в предыдущих.
У меня на странице список записей, который выводится в таблице, и слева от каждой записи стоит по чекбоксу.
Если мне надо что нибудь удалить, я ставлю галочки и жму на кнопку Стереть.

Вот отрывок кода:


// delete records
if(isset($_POST['deletelist'])) {
    $deletelist = $_POST['deletelist'];
    $deletestr = implode(",",$deletelist);
    mysql_query("DELETE FROM bookmarks WHERE Bookmark_ID IN ($deletestr)");
}




function deleteRecord(button){
  // show confirmation message
  var msg = confirm("Are you sure you want to delete selected record(s)?");
  // if users accepts, delete selected records
  if(msg == true){
    button.disabled = true;
    document.forms.frm_bookmarks.submit();
  }
}




while ( $list = mysql_fetch_array( $sql_total_records ) ) { 
  // alter cell colors
  $bgc = ( $bgc==='tdLight' ? 'tdDark' : 'tdLight' );
?>
  <tr>
    <td align="center"  class="<?php print($bgc);?>" width="10%">
      <input type="checkbox"   name="deletelist[<?php echo $list['Bookmark_ID']; ?>]"  id="deletelist" value="<?php echo $list['Bookmark_ID']; ?>" />
    </td>
...

<?php //end of while ?>



Проблема в том, что код действует со второго раза, из за $_POST.
Список кандидатов для уничтожения виден только тогда, когда форма была отправлена.
Как сделать так чтобы он был виден уже при загрузке страницы?
Спасибо.

   
 
 автор: cheops   (31.08.2005 в 23:56)   письмо автору
 
   для: codexomega   (31.08.2005 в 22:24)
 

А в смысле со второго раза? Как организовано приложение - HTML-форма и её обработчик разнесены в отдельные файлы или находятся в одном файле?

В середине темы http://www.softtime.ru/forum/read.php?id_forum=1&id_theme=427 приводится каркас похожего приложения.

   
 
 автор: codexomega   (01.09.2005 в 00:28)   письмо автору
 
   для: cheops   (31.08.2005 в 23:56)
 

Всё находится в одном файле.
Открываю страницу.
Таблица заполняется данными из БД.
Отмечаю галочками те строки в таблицe которые хочу удалить.
Кликаю по кнопке Удалить.
Происходит перезагрузка страницы,данные которые должны были быть удаленны, остаются в списке.
Жму на кнопку Удалить ещё раз.
Происходит перезагрузка страницы.
Отмеченные данные удаляются.
------------------------------------------------
Каждая коробка с галочкой содержит ID соответствующего элемента.
При отправке формы посредством POST, отмеченные ID записываются в массив Array.
Потом происходит их удалении с помощью команды SQL.
Только вот я никак не могу понять, почему у меня срабатывает запрос только со 2-го раза.

   
 
 автор: cheops   (01.09.2005 в 12:54)   письмо автору
 
   для: codexomega   (01.09.2005 в 00:28)
 

Прикрепите пожалуйста файл с кодом к сообщению - здесь нужно смотреть весь файл.

   
 
 автор: codexomega   (01.09.2005 в 17:04)   письмо автору
 
   для: cheops   (01.09.2005 в 12:54)
 

Вот файл.

   
 
 автор: cheops   (01.09.2005 в 18:48)   письмо автору
 
   для: codexomega   (01.09.2005 в 17:04)
 

Правильно ли я понял: у вас SELECT выполняется раньше чем DELETE, поэтому даже после того, как выбрана операция удаления, SELECT срабатывает раньше и выбирает ещё не удалённые данные, а затем срабатывает DELETE, который их удаляет? Поэтому изменения проявляются только после перезагрузки страницы?

   
 
 автор: codexomega   (01.09.2005 в 19:19)   письмо автору
 
   для: cheops   (01.09.2005 в 18:48)
 

Действительно, для экономии места я решил загнать Delete в Select.
Хоть они и в разных формах находились, но использовали одно подключение к БД.
Теперь я их разъеденил. И всё работает с первого раза. Но, надо еще чтобы страница обновлялась сразу же после удаления записей, иначе они остаются в таблице, пока я вручную не сделаю Refresh, в браузере.
Не знаю, можно ли это сделать средствами PHP, или же придется что нибудь придумывать с JavaScript?

   
 
 автор: cheops   (01.09.2005 в 19:25)   письмо автору
 
   для: codexomega   (01.09.2005 в 19:19)
 

Обычно все изменеия проводят в самом начале и автоматически проводят редирект либо средствами JS, либо при помощи конструкции
<?php
    
echo "<HTML><HEAD>
            <META HTTP-EQUIV='Refresh' CONTENT='0; URL=index.php'>
            </HEAD></HTML>"
;
?>

Либо отсылая HTTP-заголовок Location при помощи функции header. Это позволяет обновить данные и сбросить POST-буффер.

   
 
 автор: codexomega   (01.09.2005 в 19:40)   письмо автору
 
   для: cheops   (01.09.2005 в 19:25)
 

Огромное спасибо!!!
Всё работает отлично.

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования