PHP выполняет два запроса на запрос при использовании правила перезаписи - PullRequest
2 голосов
/ 15 февраля 2011

Я заметил, что PHP вставлял одни и те же данные дважды, даже с помощью простого запроса, ниже мой индексный файл:

<?php
require("constants.php"); //contains database settings
$database = new PDO("$type:host=$host;dbname=$name", $user, $pass); 
$query = $database->prepare('INSERT into test (test) VALUES (?)');
$query->execute(array(rand()));
echo $database->lastInsertId();

В таблице test есть столбец автоинкремента id иВарчарская колонна test.Я использую WAMP для запуска PHP и mysql.

Каждый запрос к странице вставляет две записи с разными значениями (из вызова rand()).Отображается только первый идентификатор вставки.Это поведение одинаково для Chrome, Firefox и IE.

Это вызвано правилом перезаписи:

RewriteEngine on
RewriteRule .* index.php

Я предполагаю, что есть файл, такой как robots.txt или favicon.icoзапрашивается прозрачно.

Ответы [ 2 ]

2 голосов
/ 15 февраля 2011

Есть ли у вас какие-либо правила переписывания / ошибочных документов, которые можно перенаправить на index.php? Может ли это быть страница / браузер, пытающийся загрузить другой ресурс (favicon и т. Д.), Перенаправленный на индекс?

1 голос
/ 15 февраля 2011

Вы должны использовать токен формы / nonce , чтобы предотвратить это и ответные атаки.

http://www.phpro.org/tutorials/Preventing-Multiple-Submits.html

...