Переменные в URL не будут работать, если не проводить локальное тестирование - PullRequest
1 голос
/ 17 ноября 2010

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

Навигация работает следующим образом:

<a href="index.php?p=add">Add</a>

Затем страница проверяет, существует ли $p и работает ли она, он показывает соответствующий контент.По какой-то причине мой контент не появляется, когда я нажимаю на ссылки.Я включил отчеты об ошибках и добавил это (строка 39)

echo $p;

в документ.Теперь я получаю эту ошибку: Notice: Undefined variable: p in /home/silver/public_html/admin/index.php on line 39, но только при тестировании в Интернете, и она работает нормально, когда я тестирую ее локально.

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

ОБНОВЛЕНИЕ: Спасибо за все ответы, но я не совсем понимаю, как вы используете ваши предложения, так как я привык делать то, что нужноЯ был.

В данный момент я делаю это, чтобы проверить, что переменная $p равна

<?php if(!isset($p)) { // DEFAULT PAGE VIEWED AT INDEX.PHP ?>

, и использую это для ссылки на страницу:

<a href="index.php?p=add">Add New Item</a>

Ответы [ 4 ]

3 голосов
/ 17 ноября 2010

Вы полагаетесь на register_globals, устаревшую и устаревшую функцию PHP.Эта функция автоматически переводит переменные GET, POST, COOKIE, SERVER и т. Д. И вставляет их в глобальную область видимости.Это означает, что file.php?p=blah приведет к $p == 'blah'.Это плохая идея для многих различных областей видимости и безопасности, изложенных в руководстве по PHP .

Используйте суперглобальные (например, $_GET, $_POST,$_SERVER).


В ответ на ваш обновленный вопрос ваш код

<?php if(!isset($p)) { // DEFAULT PAGE VIEWED AT INDEX.PHP ?>

должен стать

<?php if(!isset($_GET['p'])) { // DEFAULT PAGE VIEWED AT INDEX.PHP ?>
1 голос
/ 17 ноября 2010

Вы полагаетесь на старую и очень плохую «функцию» PHP под названием register_globals , которая загружает переменные непосредственно из GET.Вам нужно сделать $p = $_GET['p'], если вы хотите установить $p через HTTP GET.

1 голос
/ 17 ноября 2010

Возможно, потому что «register_globals» включен в вашей системе разработки и выключен в вашей действующей системе.Установите его на OFF на вашем устройстве и используйте $ _GET ['p']

1 голос
/ 17 ноября 2010

$p не устанавливается автоматически из параметра в URL. Вам необходимо присоединить $p к значению, полученному из URL, сначала используя код $p = $_GET['p'];.

Но будьте утомлены, вам нужно санировать этот параметр GET и / или создать белый список, чтобы убедиться, что это допустимый параметр.

...