Я сейчас занимаюсь разработкой веб-сайта, на котором будет отображаться ряд продуктов. Эти продукты я изначально получаю из внешнего 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 нет даже в моей собственной базе данных. Я почти уверен в этом, потому что я проверил и проверил, это даже не в описании или что-то еще. Вот почему я знаю, что этот продукт неисправен.
У кого-нибудь есть опыт с этим типом проблемы?
У меня нет опыта работы с правилами переписывания, но все же эта проблема кажется мне довольно странной. Это заставляет меня поверить, что фактическое расположение в памяти сервера изменяется, иначе я не вижу способа изменить значение, пока оно использовалось в середине строки. Я уже пытался переименовать его, и это не исправляет.