| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > PHP: Общие вопросы > Переход по якорю |
| Автор: Лиходей 25.5.2008, 12:47 |
| Здравствуйте уважаемые! Такой вопрос. Нужно программно загрузить страничку, но не сначала, а с нужного места. Например после статьи человек оставил комментарий и после нажатия на кнопку "Добавить", комментарий добавляется в конец странички (после других комментариев), страничка обновляется и чтобы его увидеть нужно прокрутить страницу вниз. Хотелось бы так - добавил комментарий - сразу увидел результат. Как поставить якорь, и перейти на него по ссылке, я и сам знаю. Но по ссылке нужно щелкать мышью. Схема документа такая: ------------------ статья проверка была ли нажата кнопка и заполнены поля если да дабавление данных в базу считывание из базы комментариев и отображение их форма "добавить комментарий" // желаемое место перехода при // новом коменте ------------------- все на одной странице. Спасибо всем кто откликнется. Gorychev на форуме Добавить отзыв для Gorychev Пожаловаться на это сообщение Редактировать/Удалить сообщение |
| Автор: Feldmarschall 25.5.2008, 12:48 |
| Веерная рассылка вопросов по форумам, хе-хе? http://php.net/header в Location подставляешь свой урл с якорем. |
| Автор: Лиходей 25.5.2008, 14:33 | ||||
| Да так то оно так ..... Вообщем разобрался. В самом верху index.php еще до
написал проверку если кнопка "Добавить" нажата и поля заполнены, то - переход
Спасибо добрым людям и тебе Feldmarschall (GC0mmander если не ошибаюсь). Благодарю... |
| Автор: Feldmarschall 25.5.2008, 14:36 |
| Странно. а раньше у тебя этой проверки не было? То есть, скрипт вообще ничего не делал после нажатия н а кнопку? Удивительно... Только урл должен быть полный. он вообще всегда дожен быть полный, но в случае с якорем я сталкивался с тем, что он не срабатывал |
| Автор: Лиходей 25.5.2008, 15:04 |
| Такую проверку в данном случае приходится проводить дважды: 1. При занесении данных в базу 2. Вверху страницы чтоб узнать была ли нажата кнопка, если да - переход на последний комент, нет - статья с начала. |
| Автор: Feldmarschall 25.5.2008, 15:18 |
| ммм... не понял. А это не одно и то же? Ты же сам пишешь, что это тебе нужно при добавлении. то есть, проверки достаточно одной. А раньше у тебя после добавления данных в базу локейшена не было? И тебя ни разу не беспокоила надпись "Невозможно отобразить страницу"? Почему бы тебе не сделать проверку только в одном месте - в начале страницы? |
| Автор: Лиходей 25.5.2008, 15:42 |
| Попробую... "Невозможно отобразить страницу" - таково небыло. |
| Автор: Feldmarschall 25.5.2008, 15:51 |
| ты методом POST добавляешь данные? и ни разу не нажимал после добавления F5? или не возвращался на эту страницу с других? вообще-то, это хрестоматийный случай, сним сталкиваются все. и решение тоже хрестоматийное: - если форма изменяет данные на сервере, то она делается методом POST - если форма была методом POST, то после её обработки делается перенаправление методом GET |
| Автор: Лиходей 25.5.2008, 16:54 | ||||||||
| Опишу подробней, еще одна проблема возникла: есть 2 статьи(файлы filter.php b bde.php) для каждой нужно проделывать одинаковые действия (вывести, комментировать..) Глобальная переменная $f_load - идентифицирует статью которая текущая, для подключения нужной таблицы БД. index.php ---------------
Data.php //меню ----------------
add.php --------------
Работает если в index.php (5я строка) явно указать параметр action, если глобальной переменной например так
ошибку не выдает, но переход работает всегда только для первой страницы (статья filter.php выводится по умолчанию), если коментирую эту статью все отлично с переходом (header("location: index.php?action=$f_load#add_com")), если вторую переход происходит тоже на первую статью. Насколько я понял $f_load = "". Какимто образом нужно знать в начале сценария какую статью коментировали. С базами проблем нет. |
| Автор: Лиходей 25.5.2008, 17:46 |
| Недопонял .. У меня $f_load может иметь три значения $f_load = ""; // значит не статья $f_load = "filter" и $f_load = "bde" А если в файл имя статейки? |
| Автор: Feldmarschall 25.5.2008, 18:28 |
| и какая разница? |
| Автор: Лиходей 25.5.2008, 18:42 | ||
Такое ощущение что $f_load нет в фрагменте
А с файла я смогу считать и здесь |
| Автор: Feldmarschall 25.5.2008, 19:16 |
| а почему ты пишешь $_POST['sub'], $_POST['name'], а не $sub, $name? Добавлено через 24 секунды вообще, в хорошей программе не должно быть повторяющихся кусков кода. |
| Автор: Лиходей 25.5.2008, 19:43 |
| Исправил хотя великой разницы не вижу... Вычитал в коком то справочнике как нужно проверять была ли отправлена форма.... А насчет кода, потом отшлифую, главное добиться стабильной работы. |
| Автор: Feldmarschall 25.5.2008, 19:45 |
| о боже. Да не надо было исправлять $_POST['sub'] на $sub!!! Надо было исправить $f_load на $_GET['f_load']! ню-ню |
| Автор: Fortop 25.5.2008, 20:05 |
| Только на $_GET['action'] Но это у него есть в другом модуле Вопрос в другом, я не заметил ссылок где формируется тот самый action='' |