PHP: sorgu dizesi veya POST değişkenler iki kez aynı VAR içerip içermediğini kontrol etmek için nasıl

5 Cevap php

Bu garip gelebilir, ama benim PHP uygulamalarında ben aynı değişken adı sorgu dizesi veya POST değişkenleri birden fazla kez ilan edilmiştir olmadığını kontrol edin ve bu durumda eğer bir hata değeri döndürmek gerekir. Benim uygulama, bu durumda bir hata dönmezse, o bir uygunluk denetimi başarısız olur.

Vb $ _GET, $ _POST, kullanırken değişkenler erişirken, PHP sadece her bir değişken adı verilen son değeri döndürür. Ben herhangi bir değişken birden fazla çıktı olmadığını anlatmak için bir yol bulamıyorum.

POST vücutta sorgu dizesi veya değişkenleri birden fazla kez aynı değişken adı içeriyordu ben sadece ne olursa olsun değerler, bulmak gerekir.

Example

Benim uygulama bu sorgu dizesi için bir hata dönmek gerekiyordu:

verb=ListIdentifiers&metadataPrefix=oai_dc&metadataPrefix=oai_dc

"MetadataPrefix" İki kez tanımlanmış unutmayın.

Benim uygulama bu sorgu dizesi için bir hatayı vermemelidir:

verb=ListIdentifiers&metadataPrefix=oai_dc

5 Cevap

POST Requests

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

(Ya da $HTTP_RAW_POST_DATA (docs))

GET Requests

$input = $_SERVER['QUERY_STRING'];

Processing
explode('&', $input) and maintain an array - $foundKeys - of keys (the part of each item from explode() before the = character). If you hit a key already defined in $foundKeys, throw the error.

Istek değişken adı [] ile biten sürece PHP $ _POST hep değişken başına yalnızca bir değer koyacaktır.

Eğer gönderilen değişkenler üzerinde hiçbir kontrole sahip olursa, o zaman bu dizeyi ayrıştırmak için parse_str () işlevini kullanabilirsiniz, önce çözümlü özgün POST isteği verileri almak için $ _SERVER ['RAW_HTTP_POST_DATA'] kullanarak deneyebilirsiniz.

Sadece PHP yapılandırma RAW_HTTP_POST_DATA değer ayarı devre dışı bırakmış olabilir dikkatli olun. Bu durumda, sorunu çözmek için bir şey yapamaz.

Tamamen kusursuz ama bu iş olabilir değil

$occurrences = substr_count($_SERVER['QUERY_STRING'], 'metadataPrefix=');

Eğer sonunda köşeli parantez ile değişken adında birden çok değer bekliyoruz. Eğer bu değişken için bir dizi olsun bu şekilde. Birden çok değer belirlenmişse, dizi çoklu girişe sahip olacaktır.

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

$ _POST ['My_var'] 'a' veya 'b', her ikisi, ya da kullanılan onay kutularını bağlı hiçbiri biriyle bir dizi olacak.