За последние 24 часа нас посетили 17819 программистов и 1678 роботов. Сейчас ищут 805 программистов ...

Как из PHP сделать так, чтоб обновлялась страница браузера?

Тема в разделе "PHP для новичков", создана пользователем oleg67, 14 май 2008.

  1. oleg67

    oleg67 Активный пользователь

    С нами с:
    14 май 2008
    Сообщения:
    37
    Симпатии:
    0
    Адрес:
    Харьков
    Вопрос:
    Я вывожу некоторый список статей на странице админки для того, чтобы иметь возможность выбрать с помощью радиокнопки одну из них для удаления. Затем я удаляю статью нажатием на кнопки формы , так что данные из формы
    пересылаются методом POST фалу , который производит удаление в базе данных выбранной статьи. Прикол состоит в том, что когда я возвращаюсь на страницу УДАЛЕНИЯ (выбора для удаления статей), то там всё ещё отображается удалённая только что статья. Но как только нажмёшь на кнопку Refresh браузера, то всё становится на свои места.
    Поэтому есть идея после удаления сделать Refresh страницы из кода. Только вот как - не знаю.
    Кто-нибудь подскажет как решить данную проблему?
    Или что я не так делаю?
     
  2. Sergey89

    Sergey89 Активный пользователь

    С нами с:
    4 янв 2007
    Сообщения:
    4.796
    Симпатии:
    0
    PHP:
    1. header('Location: /url/to/page');
     
  3. oleg67

    oleg67 Активный пользователь

    С нами с:
    14 май 2008
    Сообщения:
    37
    Симпатии:
    0
    Адрес:
    Харьков
    Спасибо.
    Но не получилось. Похоже, что проблема не в обновлении самой страницы браузера, а в работе с базой.
    Такое впечатление, что состояние переменной, читаемой из базы остаётся прежним и поэтому выводится прежний список статей. Кстати, и на других страницах тоже.
    Гммммм. Пока не въехал в чём вопрос...
    Может кто-то натолкнёт на мысль?
     
  4. oleg67

    oleg67 Активный пользователь

    С нами с:
    14 май 2008
    Сообщения:
    37
    Симпатии:
    0
    Адрес:
    Харьков
    И что ещё интересно, так это то, что он повторно якобы удаляет новость. ТО есть позволяет опять выбрать для удаления уже удалённую статью , А когда удаляешь её, то функция ароде бы повторно пишет, что удалил.
    ТО есть проверка функции DROP возвращает true. Мммдддяя.. Странно. Как можно удалить из базы то, чего нет с нормальным успехом? :)
    Запутался..
     
  5. S.t.A.M.

    S.t.A.M. Активный пользователь

    С нами с:
    10 сен 2007
    Сообщения:
    1.041
    Симпатии:
    0
    Sergey89, насколько я понял, у него код удаления на той же странице, что и вывод ("страница УДАЛЕНИЯ (выбора для удаления статей)") и если так сделать, то она будет постоянно редиректить на себя.

    oleg67
    Скорее всего у тебя процедура удаления стоит ПОСЛЕ вывода! Т.е. сначала выводятся данные, а потом ты их удаляешь, поэтому при обновлении они уже не выводятся.
    Решение1 (неправильное): сделать удаление ДО вывода.
    Решение2 (правильное): сделать удаление в отдельном файле-обработчике (например processor.php), где, после удаления, редиректить обратно на страницу вывода способом который описал Sergey89
     
  6. S.t.A.M.

    S.t.A.M. Активный пользователь

    С нами с:
    10 сен 2007
    Сообщения:
    1.041
    Симпатии:
    0
    И еще (специально для новичков) - хороший тон - приводить исходный код! Иначе мы можем гадать до бесконечности, а телепатов тут нет.
     
  7. oleg67

    oleg67 Активный пользователь

    С нами с:
    14 май 2008
    Сообщения:
    37
    Симпатии:
    0
    Адрес:
    Харьков
    <?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>
     
  8. oleg67

    oleg67 Активный пользователь

    С нами с:
    14 май 2008
    Сообщения:
    37
    Симпатии:
    0
    Адрес:
    Харьков
    И извините пожалуйста, что я как то сразу не привёл кода. Подумал же, что дело тривиальное - в добавлении функции refresh. Просто не знал как её втулить. Теперь понимаю, что не так всё просто.
    Извиняюсь ещё раз. Действительно, я не прав.
     
  9. S.t.A.M.

    S.t.A.M. Активный пользователь

    С нами с:
    10 сен 2007
    Сообщения:
    1.041
    Симпатии:
    0
    oleg67, а теперь быстро отформотируй его и включи в тег PHP (пока на тебя не посыпались разьяренные возгласы старожил)
    Пример как это должно быть оформлено:
    http://php.ru/forum/viewtopic.php?t=10527
     
  10. oleg67

    oleg67 Активный пользователь

    С нами с:
    14 май 2008
    Сообщения:
    37
    Симпатии:
    0
    Адрес:
    Харьков
    опс... :( Блин.. Ща.. Сорри.. Уж и сам подумал... НО ...
    Стыдно..
     
  11. S.t.A.M.

    S.t.A.M. Активный пользователь

    С нами с:
    10 сен 2007
    Сообщения:
    1.041
    Симпатии:
    0
    Вопрос: А как ты возвращаешься обратно на страницу выбора новостей?!
    Если просто жмешь кнопку "Назад" в браузере, то браузер НЕ ЗАГРУЖАЕТ страницу, он читает ее из кэша, т.е. он даже не в курсе, что она изменилась!
    Сделай в конце приписку типа:
    HTML:
    1. <a href="Страница_удаления_новостей.php">Вернутся</a>
    Ну или автоматизируй этот процесс:
    HTML:
    1. <script language="JavaScript1.1" type="text/javascript">
    2. <!--
    3.     setInterval(history.back(1),3000);
    4. //-->
     
  12. oleg67

    oleg67 Активный пользователь

    С нами с:
    14 май 2008
    Сообщения:
    37
    Симпатии:
    0
    Адрес:
    Харьков
    Извиняюсь за задержку с ответом. Отвалилась сеть. Вот код.

    Эта часть кода выводит из базы статьи. Находится в файле del_news.php


    HTML:
    1.  
    2.  <h4 class="zag"> Выберите новость для удаления </h4>
    3.  
    4.   <form action="drop_news.php" method="post">
    5.  
    PHP:
    1.  
    2. <?
    3. $result = mysql_query ("SELECT id, title FROM news1");
    4. $myrow = mysql_fetch_array ($result);
    5.  
    6.  do
    7.  {
    8. printf ("<p class = 'main_txt'><input name='id' type='radio' value='%s'><label> %s</label></p>", $myrow['id'], $myrow['title'] );
    9.   }
    10.  
    11.  while ($myrow = mysql_fetch_array ($result));
    12.  
    13. ?>    
    14.  
    HTML:
    1.  
    2.  <p class = "main_txt"> <input name="" type="submit" value="Удалить новость"></p>
    3.  </form>
    4.  


    А это часть кода удаления из базы. Находится в файле drop_news.php

    PHP:
    1.  
    2.  
    3. <?php  
    4.  
    5. if (isset($_POST['id']))    {$id = $_POST['id']; if ($id == '') {unset($id);}}
    6.  
    7.  
    8.  if (isset ($id))
    9.        {
    10. $result = mysql_query ("DELETE FROM news1 WHERE id='$id'");
    11. if ($result == 'true') {echo "<p class = 'abzac'> Новость успешно удалена! </p>";
    12.         }
    13.  else { echo "<p class = 'abzac'> Ошибка базы данных. Новость не удалена! </p>";}      
    14.         }
    15.  else
    16.        {
    17.        echo "<p class = 'abzac'> Вы запустили данный скрипт без параметра id и поэтому удаление новости не возможно! (скорее всего вы не выбрали ни одной радиокнопки на предыдущем шаге.)</p>";
    18.        }
    19.            
    20.  ?>  
    21.  
    [/b]
     
  13. oleg67

    oleg67 Активный пользователь

    С нами с:
    14 май 2008
    Сообщения:
    37
    Симпатии:
    0
    Адрес:
    Харьков
    Я на неё не возвращаюсь, а просто повторно жму ссылку на эту страницу, прописанную в коде навигации. и подключаемую include в каждый файл страниц сайта.
    Просто 1) удалил
    2) жму опять ссылку для загрузки php-странички для выбора статьи на удаление
    А она там опять и рисуется как ни в чём не бывало. Не должна бы..., блин по идее.
    Кстати, проверил в IE - такого бага нет.
     
  14. oleg67

    oleg67 Активный пользователь

    С нами с:
    14 май 2008
    Сообщения:
    37
    Симпатии:
    0
    Адрес:
    Харьков
    Ещё более запутался. В Opere вот эдак, а в IE - нормально.
    Но хотелось бы, чтоб правильно было и там и там.
     
  15. S.t.A.M.

    S.t.A.M. Активный пользователь

    С нами с:
    10 сен 2007
    Сообщения:
    1.041
    Симпатии:
    0
    Остается последнее - опера кеширует... хотя я с таким не сталкивался
    Попробуй вставить в заголовок
    HTML:
    1. <meta HTTP-EQUIV="Cache-Control" CONTENT="no-cache">
     
  16. oleg67

    oleg67 Активный пользователь

    С нами с:
    14 май 2008
    Сообщения:
    37
    Симпатии:
    0
    Адрес:
    Харьков
    Понял. Ща Попробую.
    Спасибо, S.t.A.M.
     
  17. oleg67

    oleg67 Активный пользователь

    С нами с:
    14 май 2008
    Сообщения:
    37
    Симпатии:
    0
    Адрес:
    Харьков
    Блин. Тут ещё на один косяк наступил и понять не могу в чём дело. :(
    Можешь помочь? Если есть время.
    Если да, то приведу кусок кода и объясню чё за проблема. Вкртатце - почему то не update' ит базу при редактировании статьи... Хотя проверяю все переменные есть...
    вобщем... жду ответа . Можешь или ну его.. :)?
     
  18. S.t.A.M.

    S.t.A.M. Активный пользователь

    С нами с:
    10 сен 2007
    Сообщения:
    1.041
    Симпатии:
    0
    Я уже убегаю, но ты приводи код, тут люди отзывчивые! )))
     
  19. oleg67

    oleg67 Активный пользователь

    С нами с:
    14 май 2008
    Сообщения:
    37
    Симпатии:
    0
    Адрес:
    Харьков
    А предыдущий трабл решился путём установки <meta HTTP-EQUIV="Cache-Control" CONTENT="no-cache">
    Спасибо тебе огромное. Блин бился бы ещё сто лет. :)
     
  20. oleg67

    oleg67 Активный пользователь

    С нами с:
    14 май 2008
    Сообщения:
    37
    Симпатии:
    0
    Адрес:
    Харьков
    Ага, приведу. НО может быть не в этой теме?
    Как думаешь? Или пофиг?