2016-08-03 21 views
1

私は私が入力のこのタイプを取得する可能性があります例えば、ポストデータの変数名に問題があります。CodeIgniterのPOSTデータは、名前

理論的には、配列の要素名と間違って何もありません
<input type="number" name="amount[BKP1P+NC10A]" /> 

と私はいないとき私は$this->input->post()を使用していますか、または直接私が$_POSTから直接データにアクセスするときでさえ、配列要素名が削除され、代わりに列挙型配列が取得されます。例えば

(CodeIgniterのなし)通常のポストに私が手:

array(1) { 
    ["amount"]=> 
    array(1) { 
    ["BKP1P+NC10A"]=> 
    string(2) "12" 
    } 
} 

CodeIgniterの中で私はこれを取得しながら:起こっていただきました

array(1) { 
    ["amount"]=> 
    array(1) { 
    [0]=> 
    string(2) "12" 
    } 
} 

誰も教えてもらえますし、どのように私は得ることができます列挙型配列ではなく実際の名前ですか?

おかげ&よろしく

+0

なぜスイート・ヘックでは、入力配列名が 'BKP1P + NC10A'である必要がありますか?私は証拠はありませんが、CodeIgniter ' - > post()'はおそらくいくつかの潜在的なセキュリティ上の脆弱性や多分開発者の正気のためにいくつかの特殊文字を削除すると強く疑っています。 – Goose

+0

そのコードの種類は部品番号であり、はい、要素として使用できます。 codeigniterでは - > post()だけでなく$ _POSTでも同じように動作し、列挙型の配列を得る – Combinu

+0

これはCodeIgniterの要素として使用されていない可能性があります。これは文書化されていない可能性が高いので、CodeIgniterのシステムコードを確認して修正する必要がありますが、この配列要素の名前が予期しない動作をしている場合は、+記号が原因です。データを格納するためにデータキーを使用するのは普通ではありません。 1つのフィールドを使用して2つの作業を行う代わりに、汎用キー名を持つフィールドと、部品番号のある非表示フィールドの2つのフィールドが必要です。 – Goose

答えて

2

@Gooseが指摘したように、問題は、CodeIgniterののコアからであると私はコア入力クラスを再訪として、私が含まれている機能の_clean_input_keysを見つけたようだ:

preg_match('/^[a-z0-9:_\/|-]+$/i', $str); 

あなたが見ることができるように+と。許可されていないので、私はそれを次のように変更しました:

preg_match('/^[a-z0-9\+\.:_\/|-]+$/i', $str); 

これは誰にでも役立ちます。

+0

あなた自身の答えを受け入れることもできます。 – coderodour

+0

2日以内に – Combinu

+0

アレイキーを一般的なものに変更することを強くお勧めします。部品番号を下に通す必要がある場合は、キーではなく値として渡してください。それ以外の場合はすぐに次の問題にぶつかります。 – Goose

関連する問題