ALEN не горячись. Знаю я про HTTP_REFERER и про REQUEST_URI и говорю тебе ёще раз, я такой вариант не считаю решением, и ничего тут красивого нет, это тоже самое как если в машине мост отвалился а я возьму и на неё сверху битонную плиту поставлю, она прижмёт мост и так ездить можно.
Хочеш можеш на своих сайтах так делать.
Вместо того чтобы доказывать свою правоту, лучше бы помог, переделать функцию джаваскрипта, так чтобы она при нажатии на ячейку таблицы переход делала по ссылке, а при клике по ссылке внутри этой ячейки переход эта функция не делала, и переход осуществлялся как обычно средствами браузера.
Хотя ненадо я уже разобрался. Средствами jQuery я это сделал. Теперь при нажатии на ссилку в нутри ячейки осуществляется один запрос, и дополнительный переход из джава скрипта не происходит, соответсвенно в таблицу записывается одна строка, как надо.
Спасибо всем за помощь, и подсказки в правильном направлении.
Чем тебе не нравится способ организации твоей задачи моим примером??
Спасибо, за подсказку, но этот метод не подходит.
1. Он не решает основной проблемы, два запроса всёравно будут отправлятся.
2. Увеличит нагрузку на сервер в следствии частого перенапрвления на самого себя.
3. Допустим отправился первый запрос, сработало условие что реф. ссылка с текущей не равны, сделал запись, перенаправился на самого себя. В это время приходит другой запрос который не знает о существовании первого и сценарий повторяется. В результате вместо двух запросов сервер обработает четыре.
Как бы мне намного лучше получается исправить свой джава скрипт чтобы по-нормальному отправлялся один запрос.
Повтавил в конце ссылки после параметров #. Теперь при нажатии на ту ссылку на которй мы уже находимся не происходит обновление страницы - это конечно полезно, пожалуй так и оставлю. Но основной проблемы это не решило, при нажатии на другой пункт меню всёравно происходит два запроса.
Думаю тут как то надо по другому организовать джаваскрипт.
Проверил на тёх компютерах, всюду такой же результат с фаерфоксом.
Champion пишет:
На firefox можно поставить firebug и посмотреть, почему он шлет 2 запроса. Вообще не должно такого быть.
Да согласен что не может быть, но есть
Фаербаг у меня установлен и пользуюсь им часто, но как-то не обратил внимания на вкладку "Сеть" где явно видно что при клике по ссылке браузер посылает такие запросы:
URL | Статус | Домен | Размер | Время GET index.php?параметры | Aborted | mydomen.com | ? | 15ms
GET index.php?параметры | 200OK | mydomen.com | 8,4 KB | 250ms
Дальше загрузка джаваскриптов
Загрузка стилей
Загрузка картинок
Вы правы, он действительно посылает два запроса первый из которых почему-то Aborted, но обращение к странице произошло и как результат запись в базу произошла. Но почему фаерфокс это делает именно при клике мышкой по ссылке? Пробовал на нескольких других случайных сайтах, такого двойного запроса нет.
На моих двух других сайтах такого тоже не наблюдается.
Дальше начинаю соглашатся с ALEN что действительно причина получается в моём коде.
Но как узнать почему именно происходит этот первый запрос?
У меня подозрение на три причины:
1. HTML-код
2. Джава скрипты
3. Заголовки Last-Modified и Expires, возможно их надо использовать? (они у меня вообще не передаются)
(Добавление)
УРА!
Методом исключения нашёл причину. Виновата оказалась одна функция джаваскрипта. Дело в том что у меня пункты меню выводятся в ячейках таблицы внутри которой ссылка на опредилённую страницу, на каждую ячейку повешано событие onClick с вызовом функции и передачей ей в качестве параметра ссылки для перехода. Это сделано для того чтобы пользователь не заморачивался прицеливаясь именно на ссылку а мог кликнув по ячейке перейти по нужной ссылке. Так вот получается что если кликать по ссылке то срабатывает два перехода одновременно один по джаваскрипту другой по клику на ссылку, поскольку ссылка находится внутри ячейки, и клик поссылке так же считается кликом по ячейке.
Даже если добавить проверку на время, то где гарантия что другой пользователь в ту же секунду не нажмёт на тот же пункт ? (Добавление)
пункты меню оформлены в виде обычной ссылки <a href=""></a>
Всем привет!
На одном из сайтов (написан на PHP) возникла необходимость вести статистику кликов по пунктам меню. Но есть одна проблема. Только в браузере Firefox и только при клике мышкой по пукте меню в таблицу записывается не одна строка а две одинаковые. В Опере и IE всё нормально - всталяется одна строка. Если в Firefox скопировать ссылку на пункт меню, вставить в адресную строку и нажать enter то вставляется одна строка.
Для дополнительной информации в таблицу добавил ещё одно поле и туда записываю микросекунды когда происходит запрос к базе. При дублировании строк в этом поле записывается время с разницей примерно 0,3-0,5 сек , тоисть происходит именно два отдельных запроса INSERT.
Может кто-то уже встречался с такой проблемой ?
Вот фрагмент кода из вашего файла, с вырезаным ненужным в даном случае кодом. <?php
//$arr = file('music/links.txt');
$arr=range(0,99);//допустим файл имеет 100 строк, и создаётся масив с ключами от 0 до 99
$count = count ($arr);
$last='';
for ($j=$count-1; $j>=$count-11; $j--)
$last .= $arr[$j].'<br>';
Просто выводит: = file('music/links.txt'); = count (); for (=-1; >=-11; --) echo .'
';
Что-то я такого не встречал, похоже причина далеко не в самом цикле, навеное придется или выложить весь код скрипта или лучше прикрепить сюда полный файл.
Ну да, при вашей реализации так и будет. Вы в цикле перебираете строки и каждый раз переменной $last присваиваете значение следующей строки, а потом выводите переменную $last, значение которой строка, которая последня присутствовала в цикле.
Вам же duk написал: echo $arr[$j].'<br>';
а если вам надо запомнить последнеё значение из цикла то сделайте так: echo $last = $arr[$j].'<br>';