почему мой сайт вставляет две записи, когда код запускается только один раз! - PullRequest
1 голос
/ 06 апреля 2011

Проще говоря, я пытаюсь создать собственный регистратор для посетителей php-сайта с mysql. При этом я обнаружил, что вставляю две записи для каждой загрузки страницы.

Я уже исключил случайное выполнение кода дважды.

Я разместил запрос на каждой странице, предполагая, что он будет работать безупречно. Поняв, что это приводит к двум записям, я запутался и удалил запрос с других страниц, оставив его только на странице индекса.

Используя PHP $ _SERVER ['HTTP_REFERER'] и $ _SERVER ['PHP_SELF'], я вставил значения в журнал. Чтобы увидеть, где я был заранее и где я был в настоящее время.

Итак, допустим, я был на странице создания и щелкнул ссылку на «домашнюю» страницу с именем index.php. Записи в базе данных сказали бы, что referer был «create.php», а текущая страница была «index.php». Тем не менее, будет вставлена ​​вторая запись, в которой указанным реферером будет «index.php», а текущей страницей будет «index.php»

Я проверил, что произойдет, если щелкнуть ссылку на страницу без регистратора, поэтому я щелкнул, чтобы перейти на страницу «Создать». Я проверил базу данных и там была другая запись, , но по иронии судьбы только одна запись была вставлена ​​на этот раз . Это было странно, потому что на странице создания нет кода для входа посетителя, и он вставлял только одну запись. Тем не менее, он говорил, что ссылка была на «create.php», а текущая страница была index.php. Что является обратным от того, что должно быть.

Проведя дополнительные исследования, я решил посмотреть, как живут заголовки. Поэтому я проверил с помощью Firefox и IE, где я понял, что заголовки получают запрашиваемую мной страницу, а также всегда получают корневую страницу. Например, запрос create.php возвращает ..

GET /create.php HTTP / 1.1
GET / style / HTTP / 1.1
GET / HTTP / 1.1

Я понимаю первый GET, для запрашиваемой страницы я понимаю второй GET для внешней таблицы стилей. Последнее, что смущает меня, хотя, кажется, подтверждает, почему я получаю дубликат записи.

Поскольку на странице create.php нет журнала посещений, первой записи в журнале нет, но как только он загружает корневую страницу, создается запись для create.php, являющегося реферером, и текущая страница является страница index.php, потому что она загружает корневую страницу.

Так как на странице index.php есть журнал посещений, когда я перехожу из 'create.php' к 'index.php', первый GET создает запись в 'create.php', который является реферером и текущим страница является index.php, но вторая запись говорит, что index.php - это ссылка и текущая страница.

Так что я почти уверен, что именно по этой причине я получаю вторую запись.

Может кто-нибудь сказать мне, почему он загружает корневую страницу при каждом запросе?

Я использую xampp для Mac OS X локально, и я понимаю, что это может быть значок по умолчанию. Тем не менее, я только что удалил значок, и это все еще происходит, даже если значок не отображается.

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

1 Ответ

4 голосов
/ 06 апреля 2011

Запрос "GET /" автоматически вытягивает index.php.

Возможно, где-то на странице есть недопустимый URL-адрес SRC изображения, или сценарий SRC, или ссылка HREF. Они могут вызывать регулярные запросы к серверу в фоновом режиме, не осознавая этого. Просмотрите все ваши HTML-коды для URL-адресов и убедитесь, что они все действительные файлы на стороне сервера. Также может быть перенаправление на стороне сервера для неизвестных файлов обратно на домашнюю страницу.

Это или у вас есть некоторый JavaScript (возможно, реклама?), Который выполняет запрос ajax.

Нам понадобится полный источник, чтобы действительно отследить это.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...