質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
for

for文は、様々なプログラミング言語で使われている制御構造です。for文に定義している条件から外れるまで、for文内の命令文を繰り返し実行します。

foreach

foreachは、List・Collection・Arrayといったデータ構造の各要素に対して繰り返し処理を実行するために扱われる、制御構造の構文です。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Q&A

解決済

3回答

1429閲覧

PHPでformから受け取ったデータの繰り返し処理の効率的なコードの書き方について

lonlonyee

総合スコア7

for

for文は、様々なプログラミング言語で使われている制御構造です。for文に定義している条件から外れるまで、for文内の命令文を繰り返し実行します。

foreach

foreachは、List・Collection・Arrayといったデータ構造の各要素に対して繰り返し処理を実行するために扱われる、制御構造の構文です。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

0グッド

0クリップ

投稿2020/05/21 12:04

PHPの勉強を始めました。
データの受け取りとその後のPHP処理について質問があります。
index.phpでつくったラジオボタンの選択データをsent.phpへ送信
sent.phpで受けっとたデータを変数に入れて処理する流れで書いてます。
ラジオボタンはAかBのどちらかを選択してもらいます。

index.php コード <form action="sent.php" method="post"> <table class="table-content"> <tbody> <tr> <td><p>質問1</p></td> <td><label><input type="radio" name="group0" value="A" checked="checked">A.</label></td> <td><label><input type="radio" name="group0" value="B">B.</label></td> </tr> <tr> <td><p>質問2</p></td> <td><label><input type="radio" name="group1" value="A" checked="checked">A.</label></td> <td><label><input type="radio" name="group1" value="B">B.</label></td> </tr> <tr> <td><p>質問3</p></td> <td><label><input type="radio" name="group2" value="A" checked="checked" >A.</label></td> <td><label><input type="radio" name="group2" value="B">B.</label></td> </tr> <tr> <td><p>質問4</p></td> <td><label><input type="radio" name="group3" value="A" checked="checked">A.</label></td> <td><label><input type="radio" name="group3" value="B">B.</label></td> </tr> <tr> <td><p>質問5</p></td> <td><label><input type="radio" name="group4" value="A" checked="checked">A.</label></td> <td><label><input type="radio" name="group4">B.</label></td> </tr> <tr> <td><p>質問6</p></td> <td><label><input type="radio" name="group5" value="A" checked="checked">A.</label></td> <td><label><input type="radio" name="group5" value="B">B.</label></td> </tr> <tr> <td><p>質問7</p></td> <td><label><input type="radio" name="group6" value="A" checked="checked">A.</label></td> <td><label><input type="radio" name="group6" value="B">B.</label></td> </tr> <tr> <td><p>質問8</p></td> <td><label><input type="radio" name="group7" value="A" checked="checked">A.</label></td> <td><label><input type="radio" name="group7" value="B">B.</label></td> </tr> <tr> <td><p>質問9</p></td> <td><label><input type="radio" name="group8" value="A" checked="checked">A.</label></td> <td><label><input type="radio" name="group8" value="B">B.</label></td> </tr> </tbody> </table> <div class="type-button"> <input class="sin-button" type="submit" value=""> </div> </form>

上記のラジオボタン9つのデータをsent.phpで受け取り、"A"という選択が"B"より多いか少ないかを調べたいです。
受けっとた情報がvalue属性"A"であれば変数$aの値が足され、最終的に$aがいくつかでAとBのどちらが多いか比べることをしたいです。
このとき、
①下記のコードで正しく作動するのでしょうか?(if文条件も不安です)
②下記のsent.phpでのコードが$group0〜$group8まで処理が繰り返しになるので、for文または配列とforeachを使用して効率的なコードが書けるのであれば教えていただきたいです。
for文だと$iで繰り返しを書くことがありますが、$groupについている0〜8の数字の分繰り返すならどのように作れば良いのでしょうか?

sent.php コード <?php $a = 0; $group0 = $_POST['group0']; if($group0 == "A"){ $a ++; } //これを9回繰り返し? ?>

データの受け方等は調べて出てくるのですが、このような類のコードを効率よくまたはもっとシンプルにするのならどのように考えてらっしゃるのかを知りたいです。
勉強不足ですみません。
大変恐縮ですがよろしくお願いします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

hentaiman

2020/05/21 12:11

どの質問の回答かは判定不要でAかBかさえわかればいいということですか
m.ts10806

2020/05/21 19:39

>①下記のコードで正しく作動するのでしょうか?(if文条件も不安です) 動かしてないということでしょうか。まず動かさないとそもそも問題が起きる前ということになります。
lonlonyee

2020/05/21 22:19

はい、どの質問の回答かは判定不要です。AかBどちらが多いかを把握したいです。
hentaiman

2020/05/21 22:44

それならチェックボックス自体が今の半分で済むみますね。チェックがあればA、無ければBみたいな設問にすれば良い あとはコード書いてくれてる2名の書き方を参考にどうぞ
lonlonyee

2020/05/22 07:05

なるほど、そのようにすれば確かに半分になりますね! ありがとうございます!
guest

回答3

0

ベストアンサー

目的によって最適解は多少変わってくるでしょうが
phpとして扱いやすくする場合は

HTML

1<tr> 2 <td><p>質問1</p></td> 3 <td><label><input type="radio" name="group[0]" value="A" checked="checked">A.</label></td> 4 <td><label><input type="radio" name="group[0]" value="B">B.</label></td> 5</tr> 6<tr> 7 <td><p>質問2</p></td> 8 <td><label><input type="radio" name="group[1]" value="A" checked="checked">A.</label></td> 9  <td><label><input type="radio" name="group[1]" value="B">B.</label></td> 10</tr>

としていって
sent.php側で

php

1$group=$_POST[’group’];

で配列として取得できますので、
foreachなどでループしてやれば
処理をまとめてできるようになります。

投稿2020/05/21 13:13

akkman

総合スコア254

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

lonlonyee

2020/05/21 13:37

ご回答ありがとうございます! なるほど、nameをそのように配列の型にしていくのですね! やってみようと思います!
m.ts10806

2020/05/21 19:41

質問に提示のHTML限定なら$_POST自体をforeachしても大丈夫そうに思います。value=Aだけ見ればいいですから。
lonlonyee

2020/05/22 08:05

受け取ったら変数に代入することばかり考えていました、$_POST自体をforeachもやってみます。
guest

0

PHP

1<?PHP 2$group=filter_input(INPUT_POST,"group",FILTER_DEFAULT,FILTER_REQUIRE_ARRAY); 3print_r($group); 4?> 5<style> 6dl{display:flex;} 7dl,dt,dd{margin:0px;} 8</style> 9<form method="post"> 10<dl> 11<dt>質問1</dt> 12<dd><label><input type="radio" name="group[0]" value="A" checked="checked">A.</label></dd> 13<dd><label><input type="radio" name="group[0]" value="B">B.</label></dd> 14</dl> 15<dl> 16<dt>質問2</dt> 17<dd><label><input type="radio" name="group[1]" value="A" checked="checked">A.</label></dd> 18<dd><label><input type="radio" name="group[1]" value="B">B.</label></dd> 19</dl> 20<dl> 21<dt>質問3</dt> 22<dd><label><input type="radio" name="group[2]" value="A" checked="checked">A.</label></dd> 23<dd><label><input type="radio" name="group[2]" value="B">B.</label></dd> 24</dl> 25<input class="sin-button" type="submit" value="send"> 26</form>

投稿2020/05/21 14:37

yambejp

総合スコア116724

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

yambejp

2020/05/21 14:39

filter_inputはマストで利用してください もう少しスキルがあがればバリデートもできます
lonlonyee

2020/05/21 22:38 編集

yambejpさん ご回答ありがとうございます。 filter_inputですね。ありがとうございます。 いくつか方法があるみたいなのでこの方法でもやってみます! 勉強不足で大変恐縮ですが、formにactionを入れずに同じページのPHPで処理するということで よろしいのでしょうか?
yambejp

2020/05/22 00:09

> formにactionを入れずに同じページのPHPで処理 あくまでもサンプルなので1ページで確認できるようにしているだけです 送り元と先を分けるのであればactionを指定してください
lonlonyee

2020/05/22 07:06

ご丁寧に教えていただきありがとうございます! 確認し、実行してみます。
guest

0

POST データ自体に意味がないなら、フロント側で加工してみては?

JavaScript でカウントして、その結果だけを php に POST するのが良い気がします。

投稿2020/05/21 19:30

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

lonlonyee

2020/05/21 22:38 編集

te2jiさん ご回答ありがとうございます。 いかんせんほとんどコードを書けないので勉強させていただきます!phpの学習ということでPHPのことばかり考えていました。 JavaScriptも使う方法も試してみます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問