$ _GET как параметры в функциях PHP

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

В соответствии с тем, что дает ответы, это плохая практика. Каким образом я должен это делать?

function page($title,$msg){ $title = $_GET['title']; $msg = $_GET['msg']; echo '<h1>'.$title.'</h1>'; echo '<p>'; switch($msg){ case 1: echo 'dwasdwadawdwadwa'; break; case 2: echo 'wasdadwadwdad'; break; default: echo 'wadasdasd'; break; } echo '</p>'; } 

ps: не стесняйтесь указывать на что-либо еще, что вы видите не так.

Я нашел это, но мне это действительно не помогает.

Ответ на связанный с вами вопрос предполагает, что функции не должны полагаться на внешние (например, глобальные) переменные. $_GET и $_POST (среди прочих) являются «суперглабильными», языковой функцией PHP, которая делает их доступными в любой области. Это означает, что они могут быть неожиданно изменены из любого места в ваших сценариях.

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

Например, вместо:

 function add_user() { $user = $_GET['user']; // ... } add_user(); 

Вы будете использовать:

 function add_user($user) { // ... } add_user($_GET['user']); 

В вашей ситуации вы хотите:

 function page($title, $msg){ echo '<h1>'.$title.'</h1>'; echo '<p>'; switch($msg){ case 1: echo 'dwasdwadawdwadwa'; break; case 2: echo 'wasdadwadwdad'; break; default: echo 'wadasdasd'; break; } echo '</p>'; } 

Затем, когда вы вызываете page вы называете ее:

 page($_GET['title'], $_GET['msg']); 

Хотя вы не обязательно используете вход $ _GET для чего-то, что требует соображений безопасности (в данном случае), плохой практикой является не очистка значений от URL-адреса.

Необходимо не только проверять наличие вредоносного ввода (особенно если вы используете вход для запроса базы данных), но вы должны проверить, что ожидаемые целочисленные значения действительно являются целыми числами, а требуемые строки не пусты.

Кроме того, ваша функция page($title, $msg) принимает $title и $msg и устанавливает их, даже если они не передаются по ссылке .

  1. Если вы хотите изменить входные параметры, передайте их по ссылке.

  2. Если вам нужно использовать входные параметры, не перезаписывайте их немедленно.

  3. Если вам не нужны параметры ввода и используйте только значения из $_GET локально для вашей функции, объявите page() без каких-либо аргументов.

Зачем вам нужно использовать GET ? вы можете получить доступ ко всем тем же свойствам, если используете POST, который также более безопасен

Не уверен, что я понимаю ваш вопрос, но вот какой-то код, который я использую для обработки своих вызовов ajax с помощью:

 $mc = new MyClass(); echo $mc->{$_GET["operation"]}($_GET); 

Это означает, что «операция» относится к имени вашего метода внутри MyClass, и мне не нужно добавлять новый оператор switch для каждого метода. Теперь я могу просто добавить функцию «addRecord ($ args)» в MyClass, и мой вызов ajax будет выглядеть так:

 ajax_users.php?operation=addRecord&name=testuser&dob=1980-01-01 

ваша функция php получает аргументы в массиве, поэтому внутри функции addRecord() вы должны обращаться к переменным типа $args['name'] и $args['dob'] , и он не имеет значения, сколько параметров вы должны пройти на ваш метод.

Убедитесь, что вы используете подготовленные инструкции здесь или надлежащее экранирование, чтобы предотвратить инъекции sql.