2017-02-19 8 views
2

PHPで$_POSTで作成された配列について読んでいます。私は、以下の入力を伴うフォームを提出すると、$_POST = array('IDNo', 'Name', 'Date', 'State')を含む配列になることを知っています。 私は、IDNo, Name, Date, Stateの複数のインスタンスが同時に送信されることに着目しています。

提出されたデータを処理して消毒することはできますが、マルチ行配列にする方法がわかりません。

<form method="post" action="test.php"> 
    <input type="hidden" name="IDNo" /> 
    <input type="text" name="Name" /> 
    <input type="text" name="Date" /> 
    <input type="radio" name="State1" /> 

    <input type="hidden" name="IDNo" /> 
    <input type="text" name="Name" /> 
    <input type="text" name="Date" /> 
    <input type="radio" name="State2" /> 

    <input type="hidden" name="IDNo" /> 
    <input type="text" name="Name" /> 
    <input type="text" name="Date" /> 
    <input type="radio" name="State3" /> 

    <input type="submit" value="Test Me" /> 
</form> 

無線入力には、各行に固有の名前が付いています。これは、ページに実装されているjQueryに関連しています。私はIDNo[]Name[]などが$ _POST配列内に配列を作成するのに使用されていますが、ラジオでの独自の入力名はこれと一緒に動作しません。

IDNoや行番号を各入力名に追加する方が良いでしょうか、それとも私が見たことのない別の方法がありますか?

おそらくState1state[1]に変更し、HTML内でIDNo, Name, DateID[1], Name[1], Date[1]に変更します。
私にとって重要なのは、安全でないものを作成せずに正しく行うことです。

+0

良い質問です$ _POST'データを簡単に取り出せますが、ラジオ入力がチェックされていないと、データには表示されず、ループが間違っています。 数字を使用する方が効果的です。 '$ _POST'をループし、' array_keys'と 'strpos'で既存の入力をチェックします。 – AymDev

+0

答えをありがとう。あなたはラジオ入力について言及しましたが、私はPHPの引数の一部として使用する予定の値がない入力がいくつかあります。 – denski

+0

空の入力タイプのテキストは空になりますが、 – AymDev

答えて

4

これを実行する方法はたくさんあります。 一つは次のようになります。

<?php $states = array(1,2,3); ?> 
<form method="post" action="test.php"> 
    <?php foreach ($states as $state) : ?> 
     <input type="hidden" name="<?php echo 'state['.$state.']'; ?>[IDNo]" /> 
     <input type="hidden" name="<?php echo 'state['.$state.']'; ?>[Name]" /> 
     <input type="hidden" name="<?php echo 'state['.$state.']'; ?>[Date]" /> 
     <input type="hidden" name="<?php echo 'state['.$state.']'; ?>" /> 
    <?php endforeach; ?> 
    <input type="submit" value="Test Me" /> 
</form> 

はあなたがより多くの情報を保持するために$statesアレイを拡張することができます$_POST['state'][1]['Name']

のようなコードを使用することによって、これらの値にアクセスすることができます。

+0

が送信されます。したがって、本質的に '$ _POST ['State'] [1] ['Name']'は名前を持つサブ配列を持つstateという数値配列です。 – denski

+0

気にしない場合は2つの質問があります。 1.入力を正しくサニタイズすると、 ''などを安全に使用できますか? 2. MySQLからの実際の固有ID番号を「州」番号として使用することに関するセキュリティ上の懸念はありますか? – denski

+0

いいえ。セキュリティレベルはレコードID番号に依存しません。情報をデータベースに送信する前に、その情報を使って何をするか。 – RST

0

それは私が `をループできるようにするには、配列のメソッドを使用します〜私はHTTPパケットを送信するためのフォームを使用している場合、それが唯一のラジオのために別の名前属性を使用することができると思う