PHP: Как проверить, содержат ли строка запроса или POST Вар тот же var дважды

Это может звучать странным, но в моем приложении PHP я должен проверить, было ли то же имя переменной объявлено несколько раз в строке запроса или переменных POST, и возвращает ошибочное значение, если это верно. Если мое приложение не возвращает ошибку в этом случае, оно приводит проверку соответствия к сбою.

При доступе к Вару с помощью $ _GET, $ _POST, и т.д., PHP только возвращает последнее значение, данное для каждого имени переменной. Я не могу найти способ сказать, появилась ли какая-либо переменная несколько раз.

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

Пример

Мое приложение, как предполагается, возвращает ошибку для этой строки запроса:

verb=ListIdentifiers&metadataPrefix=oai_dc&metadataPrefix=oai_dc

Обратите внимание, что "metadataPrefix" определяется дважды.

Мое приложение не должно возвращать ошибку для этой строки запроса:

verb=ListIdentifiers&metadataPrefix=oai_dc
5
задан thomasrutter 9 April 2010 в 06:24
поделиться

5 ответов

Запросы POST

$input = file_get_contents('php://input');

(Или $ HTTP_RAW_POST_DATA ( docs ))

Запросы GET

$input = $_SERVER['QUERY_STRING'];

Обработка
разнесены ('&', $ input) и поддерживать массив ключей - $ foundKeys (часть каждого элемента из explode () перед символом = ). Если вы нажмете клавишу, уже определенную в $ foundKeys , выдайте ошибку.

10
ответ дан 13 December 2019 в 19:24
поделиться

Если вы ожидаете, что несколько значений, переменная должна быть заключена в квадратные скобки в конце. Таким образом вы получите массив для этой переменной. Если установлено несколько значений, в массиве будет несколько записей.

<input type="checkbox" name="my_var[]" value="a">
<input type="checkbox" name="my_var[]" value="b">

$ _ POST ['my_var'] будет массивом с 'a' или 'b', с обоими или ни с одним, в зависимости от используемых флажков.

-1
ответ дан 13 December 2019 в 19:24
поделиться

Для получения данных см. $ _ SERVER ['QUERY_STRING'] . Но для данных POST вам нужно будет прочитать необработанные данные POST из потока php: // input .

Примерно так:

// GET data:
$raw = $_SERVER['QUERY_STRING'];

// Or for POST data:
$raw = file_get_contents("php://input");

if (substr_count('&'.$raw, '&metadataPrefix=') > 1) 
    die('Error');
print_r($raw); //post vars
2
ответ дан 13 December 2019 в 19:24
поделиться

Не совсем надежный, но это может сработать

$occurrences = substr_count($_SERVER['QUERY_STRING'], 'metadataPrefix=');
0
ответ дан 13 December 2019 в 19:24
поделиться

PHP $_POST всегда будет устанавливать только одно значение для переменной, если имя переменной запроса не заканчивается на [].

Если у вас нет контроля над отправляемыми переменными, вы можете попробовать использовать $_SERVER['RAW_HTTP_POST_DATA'] для получения исходных данных POST запроса до разбора, затем вы можете использовать функцию parse_str() для разбора этой строки.

Только будьте внимательны, возможно, в конфигурации PHP отключена установка значения RAW_HTTP_POST_DATA. В этом случае вы не сможете ничего сделать для решения вашей проблемы.

0
ответ дан 13 December 2019 в 19:24
поделиться
Другие вопросы по тегам:

Похожие вопросы: