php $ _SERVER , чтобы включить строку запроса

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

На моем сайте есть таблица с номерами идентификационных номеров (например: 10001, 10003, 10004, … 53401 и т. Д.). Эти числа также являются связями. Все ссылки указывают на одну страницу («mypage.php»), а ссылочный номер идентификатора (10004) становится строкой запроса к этому URL:

<td><?php echo '<a href="mypage.php?query_ecr=', urlencode($num), '">'; ?><?php echo $num; ?></a></td> 

На моем «header.php», который находится на каждой странице сайта, есть кнопка в меню, которая откроет форму ниже для входа пользователя в систему.

 <form action='login/process.php' method='post'> <label for='name'>Username:</label> <input type='text' id='userid' name='user_name'/> <label for='password'>Password:</label> <input type='password' name='password' id='userpassword'/> <input type='submit' value='Log In' /> <input type='hidden' name='login' value='1'> <input type='hidden' value='".$_SERVER['PHP_SELF']."' name='redirurl'/> </form> 

Обратите внимание на «скрытый ввод» с именем = «redirurl». Я хочу захватить текущую страницу, на которой пользователь включен. У меня уже есть сценарий входа в систему, который проверяет имя пользователя и пароль и перенаправляет их на нужную им страницу.

 //login/process.php ...blah blah blah other stuff... global $database,$session; $this->user_status=$database->CheckUserPass($_POST['user_name'],$_POST['password']); $url = $_POST['redirurl']; if($this->user_status==1) { $session->StartSession($_POST['user_name'],$_POST['password']); header("Location: ".$url); } else { ...blah blah blah..... } 

Моя проблема в том, что если GUEST нажимает на ссылку (например: 10004), они берутся на URL:

 http://www.XXXXXX.XXXX/mypage.php?query_ecr='10004' 

Однако на этой странице значение «redirurl»:

 http://www.XXXXXX.XXXX/mypage.php 

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

Как включить строку запроса в: $ _SERVER ['PHP_SELF']?

Вы можете использовать:

 $_SERVER['REQUEST_URI'] 

получить все после имен доменных имен, строк запросов и т. д. Затем вы можете использовать другие переменные $ _SERVER для добавления домена, или это должно быть хорошо использовать без имени домена, если вы не меняете хосты.

Как насчет:

 echo $_SERVER['PHP_SELF'] . '?' . $_SERVER['QUERY_STRING']; 

Обратите внимание, что вы, вероятно, захотите дезинфицировать этот вывод следующим образом:

 $url = $_SERVER['PHP_SELF'] . '?' . $_SERVER['QUERY_STRING']; echo htmlspecialchars($url, ENT_QUOTES, 'utf-8'); 

для защиты от XSS.

Строка запроса доступна в $_SERVER['QUERY_STRING'] . Просто соедините их (не забывайте вопросительный знак), и все будет в порядке. 🙂