Вопрос: Я вывожу некоторый список статей на странице админки для того, чтобы иметь возможность выбрать с помощью радиокнопки одну из них для удаления. Затем я удаляю статью нажатием на кнопки формы , так что данные из формы пересылаются методом POST фалу , который производит удаление в базе данных выбранной статьи. Прикол состоит в том, что когда я возвращаюсь на страницу УДАЛЕНИЯ (выбора для удаления статей), то там всё ещё отображается удалённая только что статья. Но как только нажмёшь на кнопку Refresh браузера, то всё становится на свои места. Поэтому есть идея после удаления сделать Refresh страницы из кода. Только вот как - не знаю. Кто-нибудь подскажет как решить данную проблему? Или что я не так делаю?
Спасибо. Но не получилось. Похоже, что проблема не в обновлении самой страницы браузера, а в работе с базой. Такое впечатление, что состояние переменной, читаемой из базы остаётся прежним и поэтому выводится прежний список статей. Кстати, и на других страницах тоже. Гммммм. Пока не въехал в чём вопрос... Может кто-то натолкнёт на мысль?
И что ещё интересно, так это то, что он повторно якобы удаляет новость. ТО есть позволяет опять выбрать для удаления уже удалённую статью , А когда удаляешь её, то функция ароде бы повторно пишет, что удалил. ТО есть проверка функции DROP возвращает true. Мммдддяя.. Странно. Как можно удалить из базы то, чего нет с нормальным успехом? Запутался..
Sergey89, насколько я понял, у него код удаления на той же странице, что и вывод ("страница УДАЛЕНИЯ (выбора для удаления статей)") и если так сделать, то она будет постоянно редиректить на себя. oleg67 Скорее всего у тебя процедура удаления стоит ПОСЛЕ вывода! Т.е. сначала выводятся данные, а потом ты их удаляешь, поэтому при обновлении они уже не выводятся. Решение1 (неправильное): сделать удаление ДО вывода. Решение2 (правильное): сделать удаление в отдельном файле-обработчике (например processor.php), где, после удаления, редиректить обратно на страницу вывода способом который описал Sergey89
И еще (специально для новичков) - хороший тон - приводить исходный код! Иначе мы можем гадать до бесконечности, а телепатов тут нет.
<?php include ("lock.php"); include ("bloks/bd.php"); ?> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <link href="style.css" rel="stylesheet" type="text/css"> <meta http-equiv="Content-Type" content="text/html; charset=windows-1251"> <title>Страница удаления новостей</title> </head> <body> <!- <span id="free" > </span> -> <table width="1024" border="1" align="center" class="main_border"> <? include("bloks/header.php") ?> <tr> <td bgcolor="#000000"><table width="1024" border="1"> <tr> <? include ("bloks/navigat.php")?> <td width="816" valign="top" background="img/fon-1.jpg"> <h4 class="zag"> Выберите новость для удаления </h4> <form action="drop_news.php" method="post"> <? $result = mysql_query ("SELECT id, title FROM news1"); $myrow = mysql_fetch_array ($result); do { printf ("<p class = 'main_txt'><input name='id' type='radio' value='%s'><label> %s</label></p>", $myrow['id'], $myrow['title'] ); } while ($myrow = mysql_fetch_array ($result)); ?> <p class = "main_txt"> <input name="" type="submit" value="Удалить новость"></p> </form> </td> </tr> </table></td> </tr> <? include ("bloks/footter.php")?> </table> </body> </html> _____________________________________________________________________________________________ А вот собственно процедура удаления: <?php include ("lock.php"); include ("bloks/bd.php"); if (isset($_POST['id'])) {$id = $_POST['id']; if ($id == '') {unset($id);}} ?> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <link href="style.css" rel="stylesheet" type="text/css"> <meta http-equiv="Content-Type" content="text/html; charset=windows-1251"> <title>Обработчик добавления статьи</title> </head> <body> <!- <span id="free" > </span> -> <table width="1024" border="1" align="center" class="main_border"> <? include("bloks/header.php") ?> <tr> <td bgcolor="#000000"><table width="1024" border="1"> <tr> <? include ("bloks/navigat.php")?> <td width="816" valign="top" background="img/fon-1.jpg"> <?php if (isset ($id)) { $result = mysql_query ("DELETE FROM news1 WHERE id='$id'"); if ($result == 'true') {echo "<p class = 'abzac'> Новость успешно удалена! </p>"; } else { echo "<p class = 'abzac'> Ошибка базы данных. Новость не удалена! </p>";} } else { echo "<p class = 'abzac'> Вы запустили данный скрипт без параметра id и поэтому удаление новости не возможно! (скорее всего вы не выбрали ни одной радиокнопки на предыдущем шаге.)</p>"; } ?> </td> </tr> </table></td> </tr> <? include ("bloks/footter.php")?> </table> </body> </html>
И извините пожалуйста, что я как то сразу не привёл кода. Подумал же, что дело тривиальное - в добавлении функции refresh. Просто не знал как её втулить. Теперь понимаю, что не так всё просто. Извиняюсь ещё раз. Действительно, я не прав.
oleg67, а теперь быстро отформотируй его и включи в тег PHP (пока на тебя не посыпались разьяренные возгласы старожил) Пример как это должно быть оформлено: http://php.ru/forum/viewtopic.php?t=10527
Вопрос: А как ты возвращаешься обратно на страницу выбора новостей?! Если просто жмешь кнопку "Назад" в браузере, то браузер НЕ ЗАГРУЖАЕТ страницу, он читает ее из кэша, т.е. он даже не в курсе, что она изменилась! Сделай в конце приписку типа: HTML: <a href="Страница_удаления_новостей.php">Вернутся</a> Ну или автоматизируй этот процесс: HTML: <script language="JavaScript1.1" type="text/javascript"> <!-- setInterval(history.back(1),3000); //--> </script>
Извиняюсь за задержку с ответом. Отвалилась сеть. Вот код. Эта часть кода выводит из базы статьи. Находится в файле del_news.php HTML: <h4 class="zag"> Выберите новость для удаления </h4> <form action="drop_news.php" method="post"> PHP: <? $result = mysql_query ("SELECT id, title FROM news1"); $myrow = mysql_fetch_array ($result); do { printf ("<p class = 'main_txt'><input name='id' type='radio' value='%s'><label> %s</label></p>", $myrow['id'], $myrow['title'] ); } while ($myrow = mysql_fetch_array ($result)); ?> HTML: <p class = "main_txt"> <input name="" type="submit" value="Удалить новость"></p> </form> А это часть кода удаления из базы. Находится в файле drop_news.php PHP: <?php if (isset($_POST['id'])) {$id = $_POST['id']; if ($id == '') {unset($id);}} if (isset ($id)) { $result = mysql_query ("DELETE FROM news1 WHERE id='$id'"); if ($result == 'true') {echo "<p class = 'abzac'> Новость успешно удалена! </p>"; } else { echo "<p class = 'abzac'> Ошибка базы данных. Новость не удалена! </p>";} } else { echo "<p class = 'abzac'> Вы запустили данный скрипт без параметра id и поэтому удаление новости не возможно! (скорее всего вы не выбрали ни одной радиокнопки на предыдущем шаге.)</p>"; } ?> [/b]
Я на неё не возвращаюсь, а просто повторно жму ссылку на эту страницу, прописанную в коде навигации. и подключаемую include в каждый файл страниц сайта. Просто 1) удалил 2) жму опять ссылку для загрузки php-странички для выбора статьи на удаление А она там опять и рисуется как ни в чём не бывало. Не должна бы..., блин по идее. Кстати, проверил в IE - такого бага нет.
Ещё более запутался. В Opere вот эдак, а в IE - нормально. Но хотелось бы, чтоб правильно было и там и там.
Остается последнее - опера кеширует... хотя я с таким не сталкивался Попробуй вставить в заголовок HTML: <meta HTTP-EQUIV="Cache-Control" CONTENT="no-cache">
Блин. Тут ещё на один косяк наступил и понять не могу в чём дело. Можешь помочь? Если есть время. Если да, то приведу кусок кода и объясню чё за проблема. Вкртатце - почему то не update' ит базу при редактировании статьи... Хотя проверяю все переменные есть... вобщем... жду ответа . Можешь или ну его.. ?
А предыдущий трабл решился путём установки <meta HTTP-EQUIV="Cache-Control" CONTENT="no-cache"> Спасибо тебе огромное. Блин бился бы ещё сто лет.