Модераторы: skyboy, MoLeX, Aliance, ksnk

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Переход по якорю, после добавления коммента перейти к нему 
:(
    Опции темы
Лиходей
Дата 25.5.2008, 12:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 66
Регистрация: 25.5.2008

Репутация: нет
Всего: нет



Здравствуйте уважаемые!
Такой вопрос. Нужно программно загрузить страничку, но не сначала, а с нужного места.
Например после статьи человек оставил комментарий и после нажатия на кнопку "Добавить", комментарий добавляется в конец странички (после других комментариев), страничка обновляется и чтобы его увидеть нужно прокрутить страницу вниз. Хотелось бы так - добавил комментарий - сразу увидел результат.
Как поставить якорь, и перейти на него по ссылке, я и сам знаю. Но по ссылке нужно щелкать мышью.
Схема документа такая:
------------------
статья

проверка была ли нажата кнопка и заполнены поля
если да дабавление данных в базу

считывание из базы комментариев и отображение их

форма "добавить комментарий" // желаемое место перехода при
// новом коменте

-------------------
все на одной странице.
Спасибо всем кто откликнется.
Gorychev на форуме Добавить отзыв для Gorychev Пожаловаться на это сообщение    Редактировать/Удалить сообщение
PM MAIL   Вверх
Feldmarschall
Дата 25.5.2008, 12:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок
****


Профиль
Группа: Участник
Сообщений: 2641
Регистрация: 11.12.2007

Репутация: 22
Всего: 32



Веерная рассылка вопросов по форумам, хе-хе?

http://php.net/header
в Location подставляешь свой урл с якорем.
PM   Вверх
Лиходей
Дата 25.5.2008, 14:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 66
Регистрация: 25.5.2008

Репутация: нет
Всего: нет



Да так то оно так .....
Вообщем разобрался.
В самом верху index.php еще до
Код

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>....
 
написал проверку если кнопка "Добавить" нажата и поля заполнены, то - переход 
Код

<? if(isset($_POST['sub'])&& isset($_POST['name']) && isset($_POST['message'])
   && trim($_POST['message'] !='') && trim($_POST['name'] !=''))

     {
      header("location: index.php#add_com");
     }
     
 ?>

Спасибо добрым людям и тебе Feldmarschall  (GC0mmander если не ошибаюсь). Благодарю... smile   

PM MAIL   Вверх
Feldmarschall
Дата 25.5.2008, 14:36 (ссылка) |    (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок
****


Профиль
Группа: Участник
Сообщений: 2641
Регистрация: 11.12.2007

Репутация: 22
Всего: 32



Странно. а раньше у тебя этой проверки не было? То есть, скрипт вообще ничего не делал после нажатия н а кнопку? Удивительно...

Только урл должен быть полный. он вообще всегда дожен быть полный, но в случае с якорем я сталкивался с тем, что он не срабатывал 

Это сообщение отредактировал(а) Feldmarschall - 25.5.2008, 14:38
PM   Вверх
Лиходей
Дата 25.5.2008, 15:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 66
Регистрация: 25.5.2008

Репутация: нет
Всего: нет



Такую проверку в данном случае приходится проводить дважды:
1. При занесении данных в базу
2. Вверху страницы чтоб узнать была ли нажата кнопка, если да - переход на последний комент, нет - статья с начала.
PM MAIL   Вверх
Feldmarschall
Дата 25.5.2008, 15:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок
****


Профиль
Группа: Участник
Сообщений: 2641
Регистрация: 11.12.2007

Репутация: 22
Всего: 32



ммм... не понял. А это не одно и то же?
Ты же сам пишешь, что это тебе нужно при добавлении. то есть, проверки достаточно одной.
А раньше у тебя после добавления данных в базу локейшена не было? И тебя ни разу не беспокоила надпись "Невозможно отобразить страницу"?

Почему бы тебе не сделать проверку только в одном месте - в начале страницы?
PM   Вверх
Лиходей
Дата 25.5.2008, 15:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 66
Регистрация: 25.5.2008

Репутация: нет
Всего: нет



Попробую... "Невозможно отобразить страницу" - таково небыло.
PM MAIL   Вверх
Feldmarschall
Дата 25.5.2008, 15:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок
****


Профиль
Группа: Участник
Сообщений: 2641
Регистрация: 11.12.2007

Репутация: 22
Всего: 32



ты методом POST добавляешь данные? и ни разу не нажимал после добавления F5? или не возвращался на эту страницу с других?

вообще-то, это хрестоматийный случай, сним сталкиваются все. и решение тоже хрестоматийное:
- если форма изменяет данные на сервере, то она делается методом POST
- если форма была методом POST, то после её обработки делается перенаправление методом GET
PM   Вверх
Лиходей
  Дата 25.5.2008, 16:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 66
Регистрация: 25.5.2008

Репутация: нет
Всего: нет



Опишу подробней, еще одна проблема возникла:
есть 2 статьи(файлы filter.php b bde.php)  для каждой нужно проделывать одинаковые действия (вывести, комментировать..)
Глобальная переменная  $f_load - идентифицирует статью которая текущая, для подключения нужной таблицы БД.
index.php
---------------

Код

<?
   if(isset($_POST['sub'])&& isset($_POST['name']) && isset($_POST['message'])
   && trim($_POST['message'] !='') && trim($_POST['name'] !=''))
     {
      header("location: index.php?action=bde#add_com");  // в таком виде работает 
//      header("location: index.php?action=$f_load#add_com"); // а в таком бок     
}
 
 ?>
<?php require_once("shapka.php"); ?>   //шапка
<? $f_load = "";?>
<table width="100%" border="0" cellpadding="2" cellspacing="2">

<tr>
  <td width="80%" align="left" valign="top"><?php require_once("data.php"); ?></td>   // content статей  
  <td align="left" valign="top" style="padding-left:30px;"><?php require_once("menu.php"); ?></td>  // меню
</tr>

</table>

<?
if ($f_load != "")   // значит статья
 {require_once("add.php");}  //добавляет\отображает комментарии + выводит форму
?>
</div>
</body>
</html>


Data.php  //меню
----------------
Код

<?php
global $f_load; $s = ".php";

switch($_GET['action']) //получаем значение переменной action
{
   case "filter" :
      require_once("filter.php"); // выводим статью о Фильтрация
      $f_load = "filter";
   break;
   case "bde" :
      require_once("bde.php"); // выводим статью о BDE
      $f_load = "bde";
   break;
    case "contacts" :
      require_once("contacts.php"); // выводим данные Контакты
      $f_load = "";
   break;
   default :
   { $f_load = "";
     require_once("filter.php");
   }
   if ($_GET['action'] == "") $f_load = "filter";
   break;
}
?>


add.php
--------------
Код

<?
     global $f_load;

     $bdloc='localhost';
     $bdusver='root';
     $bdpass='';
     $bdname='coment';
     $bdcnx=@mysql_connect( $bdloc,$bdusver,$bdpass);
     if (!$bdcnx)
      {
         echo 'Сервер базы данных не доступен';
         exit();
      }
     if (!mysql_select_db($bdname,$bdcnx))
      {
         echo 'не удалось соедениться с базой данных';
         exit();
      }
       mysql_query("set character_set_connection=cp1251");
       mysql_query("set names cp1251");


   if(isset($_POST['sub'])&& isset($_POST['name']) && isset($_POST['message'])
   && trim($_POST['message'] !='') && trim($_POST['name'] !=''))

    {
     $date = date('Y-m-d H:i');
/*     INSERT INTO table1 SET datetime_filed = NOW();*/
     /*удаление опасных дескрипторов*/
     $name = strip_tags($name);
     $message = strip_tags($message);
  /*Добавление данных*/
     $query = "INSERT INTO $f_load (name, mess, date) VALUES('$name', '$message', '$date')";
     $result = mysql_query($query) or die ("Error: " .mysql_error());
     }

     /*Отображение данных*/
/*     $query = "select name, mess, date_format(date,'%e.%m.%y %h:%i') as date1 FROM $f_load";*/
/*     $query = "SELECT * FROM $f_load";*/
     $query = "select name, mess, DATE_FORMAT(date,'%d-%m-%Y %H:%i') as date_ from $f_load";
     $result = mysql_query($query) or die ("Error: " .mysql_error());

     echo"<table width=\"100%\" border=\"0\" cellpadding=\"1\" cellspacing=\"2\"  >";
     while ($row = mysql_fetch_array ($result))
     {
       echo "<tr><td colspan=\"2\" HEIGHT=\"30\">  </td></tr>";
       echo "<tr><td width=\"70%\" >";
       echo "<p class=\"coment\" id=\"name\">",$row['name'],"</p>";
       echo "</td> <td align=\"center\">", "<p class=\"coment\" id=\"date\">",$row['date_'],"</p>", "</td></tr>";
       echo "<tr><td align=\"left\" valign=\"middle\" colspan=\"1\">";
       echo "<p class=\"coment\" id=\"mess\">",$row['mess'],"</p>","</td></tr>";

     }
     echo "</table>";

?>

<br>
<b id="add_com">Добавить комментарий:</b><hr>
<table id="add_com1" width=80% cellpadding=3 cellspacing=3>
<form method="post">
<tr>
  <Td>Ваше имя: <input type=text name="name" size=20 ></td>
</tr>

<tr>
  <Td colspan=2>Текст комментария: <br>
  <textarea cols=55 rows=10 name="message"></textarea>
  </TD>
</tr>
<tr><td colspan=2><input type=submit name="sub" value=" Добавить комментарий! "></td></tr>
<input type=hidden name=a value=1>
</form>
</table>


Работает если в index.php (5я строка) явно указать параметр action, если глобальной переменной например так
 
Код

header("location: index.php?action=$f_load#add_com"); 

ошибку не выдает, но переход работает всегда только для первой страницы (статья filter.php выводится по умолчанию), если коментирую эту статью все отлично с переходом (header("location: index.php?action=$f_load#add_com")), если вторую переход происходит тоже на первую статью.  Насколько я понял $f_load = "". Какимто образом нужно знать в начале сценария какую статью коментировали.  С базами проблем нет. 
PM MAIL   Вверх
Fortop
Дата 25.5.2008, 17:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2200
Регистрация: 13.11.2007
Где: Донецк

Репутация: 20
Всего: 42



Лиходей, 
Цитата(Лиходей @  25.5.2008,  16:54 Найти цитируемый пост)
Какимто образом нужно знать в начале сценария какую статью коментировали.  С базами проблем нет

Передавай нужный параметр в урл

Код

header("Location: index.php?mode=filter&action=$f_load#add_com");
или
header("Location: index.php?mode=bde&action=$f_load#add_com");



--------------------
Мир это Я.
Живее всех живых.
PM MAIL   Вверх
Лиходей
Дата 25.5.2008, 17:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 66
Регистрация: 25.5.2008

Репутация: нет
Всего: нет



Недопонял ..
У меня $f_load может иметь три значения 
$f_load = ""; // значит не статья 
$f_load = "filter"  и  $f_load = "bde"
А если в файл имя статейки? 
PM MAIL   Вверх
Feldmarschall
Дата 25.5.2008, 18:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок
****


Профиль
Группа: Участник
Сообщений: 2641
Регистрация: 11.12.2007

Репутация: 22
Всего: 32



и какая разница?
PM   Вверх
Лиходей
Дата 25.5.2008, 18:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 66
Регистрация: 25.5.2008

Репутация: нет
Всего: нет



Такое ощущение что $f_load нет в фрагменте
Код


<?
   if (isset($f_load))  echo "Yes";  // проверяю -  никогда не выводится
   if(isset($_POST['sub'])&& isset($_POST['name']) && isset($_POST['message'])
   && trim($_POST['message'] !='') && trim($_POST['name'] !=''))

     {
       header("location: index.php?action=$f_load#add_com");
     }
 ?>

А с файла я смогу считать и здесь
PM MAIL   Вверх
Feldmarschall
Дата 25.5.2008, 19:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок
****


Профиль
Группа: Участник
Сообщений: 2641
Регистрация: 11.12.2007

Репутация: 22
Всего: 32



а почему ты пишешь $_POST['sub'], $_POST['name'], а не $sub, $name?

Добавлено через 24 секунды
вообще, в хорошей программе не должно быть повторяющихся кусков кода.
PM   Вверх
Лиходей
Дата 25.5.2008, 19:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 66
Регистрация: 25.5.2008

Репутация: нет
Всего: нет



Исправил хотя великой разницы не вижу... Вычитал в коком то справочнике как нужно проверять  была ли отправлена форма....
А насчет кода, потом отшлифую, главное добиться стабильной работы. 
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "PHP"
Aliance
IZ@TOP
skyboy
SamDark
MoLeX

Новичкам:

  • PHP редакторы собираются и обсуждаются здесь
  • Электронные книги по PHP, документацию можно найти здесь
  • Интерпретатор PHP, полную документацию можно скачать на PHP.NET

Важно:

  • Не брезгуйте пользоваться тегами [code=php]КОД[/code] для повышения читабельности текста/кода.
  • Перед созданием новой темы воспользуйтесь поиском и загляните в FAQ
  • Действия модераторов можно обсудить здесь

Внимание:

  • Темы "ищу скрипт", "подскажите скрипт" и т.п. будут переноситься в форум "Web-технологии"
  • Темы с именами: "Срочно", "помогите", "не знаю как делать" будут УДАЛЯТЬСЯ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0550 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.