Вощем, проблема такая: есть два файла profile.php и edit.php. Profile.php отображает страницу личных данных пользователя (данные берутся из базы). Пользователь меняет что-то. Cкрипт edit.php делает изменение в базе и переадресует на страницу profile.php. Profile.php берет новые данные из базы, но из-за кеширования на странице все остается без изменений. Если нажать "Обновить", то будут видны новые данные. Но так дело не пойдет. На форуме есть уже такая тема - там написано, то нужно сделать для запрета кеширования - вставить в начало документа(кот. нельзя кешировать) такие строки: Header("Expires: Mon, 26 Jul 1997 05:00:00 GMT"); Header("Cache-Control: no-cache, must-revalidate"); Header("Pragma: no-cache"); Header("Last-Modified: ".gmdate("D, d M Y H:i:s")."GMT"); или же тоже самое на HTML в тегах <META> Но ни то ни другое не помогает. Все равно приходится нажимать "Обновить". Еще видел такие варианты заголовков: Header("Expires: 0"); Header("Cache-Control: no-store, no-cache, must-revalidate"); Header("Cache-Control: must-revalidate, post-check=0, pre-check=0"); И везде пишут, что не будет кешировать, но у меня не работает НИКАКОЙ вариант. HELP PLEASE!!!!
Благодарен за такое пристальное внимание, НО. Еще раз повторюсь. При нажатии "Обновить" все изменения видны на странице. Если и это не убеждает вас в неверности вашего высказывания, то тогда могу еще вот что сказать - в PHPMyAdmin в соответствующей таблице все изменения видны... Так что это тут не причем, а кеширование как раз причем
Не. Не берет. Я тоже знаю, в чем дело. Кеширование тут непричем... А вот мух от котлет надо отделять.
Этот кусок берет и показывает: Код (Text): $mytname = $_GET['tn']; $myid = $_GET['nid']; $myname = $_GET['nname']; $myname = UrlDecode($myname); $mymail = $_GET['nmail']; $mr2 = mysql_query("SELECT * FROM `$mytname` WHERE f_id = \"$myid\" and f_name = \"$myname\" and f_email = \"$mymail\""); $f2 = mysql_fetch_array($mr2); $www = str_replace("http://", "", "$f2[f_www]"); echo "<tr><td>Наименование:</td><td> </td><td><input type='text' name='name' value=\"$f2[f_name]\" size='50' maxlength='50'></td></tr>"; echo "<tr><td>Город:</td><td> </td><td><input type='text' name='city' value=\"$f2[f_city]\" size='50' maxlength='50'></td></tr>"; echo "<tr><td>Адрес:</td><td> </td><td><input type='text' name='address' value=\"$f2[f_address]\" size='50' maxlength='50'></td></tr>"; echo "<tr><td>Код - Телефон:</td><td> </td><td><input type='text' name='phone' value=\"$f2[f_phone]\" size='50' maxlength='50'></td></tr>"; echo "<tr><td>Факс:</td><td> </td><td><input type='text' name='fax' value=\"$f2[f_fax]\" size='50' maxlength='50'></td></tr>"; echo "<tr><td>Адрес в интернете:</td><td> </td><td><input type='text' value='http://' size='5' readonly><input type='text' name='www' value=\"$www\" size='42' maxlength='50'></td></tr>"; echo "<tr><td>Информация:</td><td> </td><td><TEXTAREA name='info' cols='37' rows='5' wrap='virtual'>$f2[f_info]</TEXTAREA></td></tr>"; echo "<input type='hidden' name='hid' value=\"$f2[f_id]\">"; echo "<input type='hidden' name='htname' value=\"$mytname\">"; Этот изменяет: Код (Text): $empty[0] = "Нет данных"; $empty[1] = "Нет информации"; $http = "http://"; $tablename = $_POST['htname']; $myid = $_POST['hid']; /* Эти поля никогда не будут пустыми */ $toparse_name = HtmlSpecialChars($_POST['name']); $toparse_city = HtmlSpecialChars($_POST['city']); $toparse_phone = HtmlSpecialChars($_POST['phone']); /* Эти поля могут быть пустыми */ if ($_POST['address'] == "") { $toparse_address = $empty[0]; } else { $toparse_address = HtmlSpecialChars($_POST['address']); } if ($_POST['fax'] == "") { $toparse_fax = $empty[0]; } else { $toparse_fax = HtmlSpecialChars($_POST['fax']); } if ($_POST['www'] == "") { $toparse_www = $empty[0]; } else { $toparse_www = HtmlSpecialChars($http.$_POST['www']); } if ($_POST['info'] == "") { $toparse_info = $empty[1]; } else { $toparse_info = HtmlSpecialChars($_POST['info']); } $lock = mysql_query("LOCK TABLES `$tablename` WRITE"); $q = mysql_query("UPDATE `$tablename` SET f_name = \"$toparse_name\", f_city = \"$toparse_city\", f_address = \"$toparse_address\", f_phone = \"$toparse_phone\", f_fax = \"$toparse_fax\", f_www = \"$toparse_www\", f_info = \"$toparse_info\" WHERE f_id = \"$myid\""); $lock = mysql_query("UNLOCK TABLES");
Пользователь попал на страницу, содержащую верхний кусок(называется profile.html). Если нажал кнопку формы "применить", то выполняется нижний кусок. Вот это еще для верхнего куска: Код (Text): echo "<input type='hidden' name='hmail' value=\"$f2[f_email]\">"; А это для нижнего куска: Код (Text): $mymail = $_POST['hmail']; В нижнем куске переадресация подразумевалась: Код (Text): $toparse_name = UrlEncode($toparse_name); $adr = "http://".getenv("SERVER_NAME")."/profile.html?nid=$myid&nname=$toparse_name&nmail=$mymail&tn=$tablename"; echo "<SCRIPT>document.location.href='$adr'</SCRIPT>";
Ну о чем и мы. Если ты ему сначала ПОКАЗАЛ (исполнился верхний кусок) профиль, а потом ОБНОВИЛ(исполнился нижний кусок), естественно, что изменения он увидит уже после рефреша.
Верхний кусок исполняется первый раз. Юзер нажал кнопку применить. Выполнился нижний скрипт, это значит: 1. что изменения в базе сделаны; 2. пользователь переадресован снова на профиль(значит верхний кусок выполнился еще раз), в начале которого данные (новые они или старые) берутся из базы. Так? По-мойму - так. Вобщем, как тогда нужно сделать чтобы, отображались новые данные?
Ответа в чем дело так и не последовало. Доказать что это НЕ из-за кэширования страниц браузером тоже никто не доказал. Решение никто не подсказал ну и не надо, сам додумался: +1 строчка кода и теперь у меня все работает. Кому надо - в личке скажу как. P.S. И причина все-таки в НЁМ.
heee, давай в общую. Не верю что это кэширование. Если ты насильно обновляешь страницу это не решение, а костыли. Где-то в алгоритме у тебя нарушена последовательность: видимо ты отображаешь данные, а потом их изменяешь. Вероятнее всего тебе уже об этом говорили (нет времени прочитать топик целиком). Внимательно разложи на блоки, даже построй на бумаге блок-схему. И ты найдешь где косяк
Была такая тупая идея - насильно обновить. Но дальше идеи это никуда не пошло. А пошло то, что когда выполнился скрипт изменения данных (нижний кусок), то он переадресует на страницу profile.html не с такими параметрами Код (Text): $adr = "http://".getenv("SERVER_NAME")."/profile.html?nid=$myid&nname=$toparse_name&nmail=$mymail&tn=$tablename"; а с добавлением, например, time() в URL, т.е. как бы перекидывая пользователя всегда на новую страницу. В этом то и штука - так работает, а без дополнительного параметра(который как бы говорит браузеру, что такой страницы еще не было) в URL работает только после обновления. Так что, как было в начале поста мое мнение, что все проблемы из-за кэша, так оно и осталось. Разве это не подтверждение ^^?
heee, да ну не так ты понимаешь кеширование. Вот, например, была у тебя картинка на страничке в качестве бекраунда или файлик со стилями подключается, но легче на картинке будет показать. Так вот. Картинку ты изменяешь, но имя файла с картинкой остается неизменным. Вот тогда-то и могут появиться косяки. А так, браузер показывает те и только те данные которые ты ему сервером выкидываешь. И если ты выкидываешь "Вася", а тебя появляется "Петя", то это значит ты где-то промазал. Верно я размышляю, великие гуру?
Я попрежнему убежден в своей правоте т.к., например, ради эксперимента брал простейший скрипт, выводящий время (ЧЧ:ММ:СС), запустил один раз - нормально, запустил другой раз - и как ты думаешь что там было? Было время, которое показалось при первом запуске...
Код (Text): <?php echo rand(1,10); ?> У тебя выдает постоянно то же число? О_о. Ну тогда можешь застрелиться Не хотел нагрубить, просто жить дальше нет смысла.
heee, мало того что руки карявые, так еще и слепой. Считаешь, что все правильно сделал и тебе тут херню советуют, - уёбуй нахер, а не ори "я тут самый правильный а вы все нихера не понимаете". Ппц, от куда такие самородки приходят.
У тебя параноя?? Не могу помочь. Я и не говорил ничего подобного. Протри зрачки. Ты походу и правда тупой, я же сказал - не одного совета не было, и это правда.