Мод-перезапись внезапно меняет переменную PHP - PullRequest
0 голосов
/ 21 февраля 2012

Я сейчас занимаюсь разработкой веб-сайта, на котором будет отображаться ряд продуктов. Эти продукты я изначально получаю из внешнего XML-файла и сохраняю их в базе данных, а затем беру их из базы данных для отображения на веб-сайте (от XML до базы данных - это автоматизированный процесс cronjob).

Это все работает нормально, но решил дать некоторую справочную информацию.

Для этого сайта я использую следующие rewriteRules

RewriteRule ^([^/\.]+)/([^/\.]+)/([^/\.]+)/([^/\.]+)$ index.php?page=product&cat=$1$cat2=$2&cat3=$3&xid=$4 [L]
RewriteRule ^([^/\.]+)/([^/\.]+)/([^/\.]+)$ index.php?page=product&cat=$1&cat2=$2&xid=$3 [L]
RewriteRule ^([^/\.]+)/([^/\.]+)$ index.php?page=product&cat=$1&xid=$2 [L]

Это почти во всех случаях работает, но есть один случай, когда одному конкретному продукту показано значение xid. Мне потребовалось некоторое время, чтобы выяснить это из-за RewriteRules. Я могу убедиться, что это не из-за чего-то другого, потому что, когда я «пропускаю» rewriteRules и иду туда обычным способом, он просто отлично работает.

Я хочу, чтобы эти люди могли перейти к .com/Ladies/1 или .com/Ladies/pants/4 или .com/Ladies/Pants/Shorts/2, например. Однако теперь приходит часть странностей.

Когда я создаю сессию, как

$_SESSION["pid"] = $mysqli->real_escape_string($_GET["xid"]); 

, тогда $_SESSION["pid"] изменится на это новое значение. Если, однако, я создаю

$_SESSION["sql"] = "SELECT * FROM somthing WHERE id = " . $mysqli->real_escape_string($_GET["xid"]);

Тогда он изменится с "SELECT * FROM something WHERE id = 1" на "SELECT * FROM something WHERE id = 0810890000116".

Всякий раз, когда я использую $_GET["xid"], независимо от того, находится он в середине строки или нет, он изменит его.

Это происходит как при выполнении AJAX-файла php script, так и при возврате на домашнюю страницу и echo $_SESSION["pid"].

Числа - это номер EAN этого продукта ОДНАКО !! этого номера EAN нет даже в моей собственной базе данных. Я почти уверен в этом, потому что я проверил и проверил, это даже не в описании или что-то еще. Вот почему я знаю, что этот продукт неисправен.

У кого-нибудь есть опыт с этим типом проблемы?

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

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