- ベストアンサー
PHPで同じnameで異なる値を取得する方法
- PHPのテーブルで同じname属性を持つ異なる値を配列で取得する方法について説明します。
- 例えば、for文を使用してテーブルのセルを生成し、それぞれのセルに異なる値を持つinput要素を配置する場合、name属性を同じにすることで配列形式で値を取得することができます。
- 取得した値はPHPの$_POSTまたは$_GETスーパーグローバル変数を使用して取得することが可能です。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
> PHP側で > $hoge = $_POST['number[]']; > echo $hogeとやってもうまくいきません、 1.でPHP側の方法を記載した通りなのですが、 受け取ったPHP側では配列に格納されますので、 1つ目のname="number[]" への入力値やHiddenのでvalue値を取り出すのなら $hoge = $_POST['number'][0]; です。 同様に、2つ目は $hoge = $_POST['number'][1]; という配列の位置になります。 つまり、この $_POST['number']自体が配列ということになりますので 配列数だけループさせたいなら、例えば foreach( $_POST['number'] as $key => $value ){ echo "number[$key] = $value <br />\n"; } といった感じです。
その他の回答 (3)
- superside0
- ベストアンサー率64% (461/711)
> 複数のフォームを設置して値を入力してsubmitしているのですが、 フォームデータとして送信されるのは、<form>~</form>の間に記述されたデータのみです。 なので <form method="post" action="xxx.php"> と </form> の間に <td><input type="number" name='number[]' min="0" max="30"></td> <td><input type="number" name='number[]' min="0" max="30"></td> <td><input type="number" name='number[]' min="0" max="30"></td> <td><input type="number" name='number[]' min="0" max="30"></td> がくるようなHTMLを生成しなければなりません。 逆に、 <form>~</form>の間に、なんの効果を狙っているのか不明ですが、 <input type='hidden' name='number[]'> のような、valueのないhiddenデータを送っても無意味です。
- superside0
- ベストアンサー率64% (461/711)
value値が配列に入るよというのを示す例でしたから ユーザ入力するなら この場合なら <input type="number" name="number[]" min="0" max="30" /> <input type="number" name="number[]" min="0" max="30" /> <input type="number" name="number[]" min="0" max="30" /> ですね
補足
ご返信ありがとうございます。 例えば <input type="number" name="number[]" min="0" max="30" /> <input type="number" name="number[]" min="0" max="30" /> があるとしてそこで選択した値を送信する際に <form method="post" action="xxx.php"> <input type = 'submit' value = 'xxx' name = 'out'> <input type='hidden' name = 'number[]'> </form> このようにサブミットボタンが押された時に値をPHP側で受け取りたいのですが、例えばPHP側で $hoge = $_POST['number[]']; echo $hogeとやってもうまくいきません、何か違う方法があるのでしょうか?よろしくお願いします。
- superside0
- ベストアンサー率64% (461/711)
inputタグのnameを "number[]"のように配列にすれば GET/POSTデータが配列となります。 例 ※HTML <input type="number" name="number[]" value="10"> <input type="number" name="number[]" value="20"> <input type="number" name="number[]" value="30"> ↓ ※PHP側 $_POST['number'][0] → 10 $_POST['number'][1] → 20 $_POST['number'][2] → 30 配列の位置を指定したいなら <input type="number" name="number[0]" value="10"> <input type="number" name="number[1]" value="20"> <input type="number" name="number[2]" value="30"> です。
補足
実はこのvalueが可変になってほしいのです。ただ、その方法がわからなくて汗 現在はfor文で複数の<input type="number" name="number[]">が出来ている状態でユーザー側がvalueを設定できるようにといいますか汗 それをPHP側で取得したいのです。
補足
なるほど、そういう意味なのですね、読解力がなかったです汗 また、そのように記述することもとても勉強になります しかし今現在 <td><input type="number" name='number[]' min="0" max="30"></td> <td><input type="number" name='number[]' min="0" max="30"></td> <td><input type="number" name='number[]' min="0" max="30"></td> <td><input type="number" name='number[]' min="0" max="30"></td> と複数のフォームを設置して値を入力してsubmitしているのですが、 <form method="post" action="xxx.php"> <input type = 'submit' value = '出力' name = 'output'> <input type='hidden' name='number[]'> </form> PHP側で foreach( $_POST['number'] as $key => $value ){ echo "number[$key] = $value <br />\n"; } とすると 出力結果 number[0] = とでてしまいます。