「夫を成功」へ導く妻の秘訣 座談会

こんにちは。
MySQLのデータと連動してフォームでラジオボタンの入ったプログラムを書いているのですが、どうも期待したように動作させることができません。よろしくお願いします。

MySQLから検索してきたデータを一覧形式で表示し、各行に3つの選択枝を持ったラジオボタン群をつけたい。イメージとしては以下の通りです。

DATA 1 | あ | ●和食 ○中華 ○洋食
DATA 2 | い | ●和食 ○中華 ○洋食
DATA 3 | う | ○和食 ○中華 ●洋食
[更新ボタン]

更新ボタン1つなので、各行は 1つの<FORM></FORM>の中に入っています。各自のラジオボタンを name="syokuji1", "syokuji2"などと指定して動的に生成すれば受ける方のPHPでは $_POST["syokuji1"]などで取り出せるのですが、MySQLからのデータ数は一定ではないので、ループ等でデータを取り出せずに困っています。

希望はラジオボタンの値を syokuji[0], [1], [2]みたいな配列で取ってくることです。別に配列にこだわりませんが、ループ処理でデータを取り出せたらと考えています。

name="syoukuji[]"も試してみましたが、この場合全ラインで1つの選択しかできなくなってしまいました。

DATA 1 | あ | ○和食 ○中華 ○洋食
DATA 2 | い | ○和食 ○中華 ○洋食
DATA 3 | う | ○和食 ○中華 ●洋食
[更新ボタン]

ソースを貼ろうかと思いましたが、とりあえずは仕様の方から質問させていただきました。 よろしくお願いします。

このQ&Aに関連する最新のQ&A

A 回答 (2件)

タイトルと質問内容がずれている気がするので、あっているかどうか分かりませんが書いてみます。



例えば

<form method="POST>
<input type="radio" name="syokuji1" value="和食">和食
<input type="radio" name="syokuji1" value="中華">中華
<input type="radio" name="syokuji1" value="洋食">洋食
<input type="radio" name="syokuji2" value="和食">和食
<input type="radio" name="syokuji2" value="中華">中華
<input type="radio" name="syokuji2" value="洋食">洋食
<input type="submit" value="更新">
</form>

という感じでラジオボタンのグループを作成。
syokuji1では和食を選択、syokuji2では中華を選択し、更新ボタンを押せば

$_POST["syokuji1"] = "和食"
$_POST["syokuji2"] = "中華"

と、POSTを受け取る側では取り出すことができますが、これではダメなのでしょうか?
このsyokuji1~syokuji幾つか分からない数が続いていた場合に、このデータを取り出す方法が分からないのでしょうか?

このような場合は、foreachを利用します。
foreach($_POST as $key => $val){
echo "KEY = $key $val<br>";
}

参考URL:http://php.benscom.com/manual/ja/control-structu …
    • good
    • 0
この回答へのお礼

質問がわかりにくくてスイマセンでした。

>このsyokuji1~syokuji幾つか分からない数が続いていた場合に、このデータを取り出す方法が分からないのでしょうか?

そうです。この foreachを全然思いつきませんでした。(何度か使ったことはあるのですが)

おかげで先に進めそうですありがとうございました。

お礼日時:2008/03/25 01:59

<input type="radio" name="syokuji[1]" value="和食">和食


<input type="radio" name="syokuji[1]" value="中華">中華
<input type="radio" name="syokuji[1]" value="洋食">洋食
<input type="radio" name="syokuji[2]" value="和食">和食
<input type="radio" name="syokuji[2]" value="中華">中華
<input type="radio" name="syokuji[2]" value="洋食">洋食

というようにすればPHP側で配列でうけられますよね
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。

質問するポイントがどうやってPOSTから取り出すかの方だったのに
ヘンな質問をしてしましました。 すいませんでした。

お礼日時:2008/03/25 02:00

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

QボタンをクリックでPHP文を実行

ボタンをクリックしたときのみPHP文を実行したいのですが・・・

<input type="button" onClink="<?php~?>">
でいけるかと思ったのですが、
ページ表示時に<?php~?>が実行されてしまい、うまくいきませんでした。

onClink="window.open(test.php)"
という方法以外でお願いします。

Aベストアンサー

AjaxはもともとJavaScriptの機能である非同期通信をつかったもので。Ajaxという言語があるわけではありません

Ajaxを利用するのであれば、JavaScriptのXMLHttpRequestを使って非同期通信できるような実装をしなくてはなりません
簡単にサンプルコードで書けるほど単純なものでもありません

一般的なサーバーサイドスクリプトの動作として、
ボタンを押す->サーバーへリクエストする->サーバーが処理する->クライアントに何かしらの結果を返す(出力する)です
つまり、PHP等のサーバーサイドスクリプトは、遷移させることが大前提で動作します

ですから、ボタンを押してその場でJavaScriptと同じようにPHPが動くなんてことはありえません。
ボタンを押したらサーバーにリクエストする という動作ならば可能です。

つまり
質問で言われているような
onClink="window.open(test.php)"

<form name="f1" action="test.php" method="post">
<input type="submit" name="submit" value="submit" />
</form>
等のような形になります

こういった一般的な方法だと いちいち画面が切り替わったようになってしまうのを嫌って Ajaxでコレと同じことを、画面を切り替えずに行っているだけに過ぎません

AjaxはもともとJavaScriptの機能である非同期通信をつかったもので。Ajaxという言語があるわけではありません

Ajaxを利用するのであれば、JavaScriptのXMLHttpRequestを使って非同期通信できるような実装をしなくてはなりません
簡単にサンプルコードで書けるほど単純なものでもありません

一般的なサーバーサイドスクリプトの動作として、
ボタンを押す->サーバーへリクエストする->サーバーが処理する->クライアントに何かしらの結果を返す(出力する)です
つまり、PHP等のサーバーサイドスクリプトは、...続きを読む

Qphp ラジオボタンのデータの渡し方

phpで自動販売機プログラムを作成しています。
ラジオボタンを使い120円または150円の飲み物を選択できるようにし、購入を押すとおつりを計算するものです。

これがhtml側のプログラムです。
<FORM ACTION="result.php" METHOD="POST">
<INPUT TYPE="RADIO" NAME="Juice" VALUE="nedan1" CHECKED>120円のジュースを購入します。お金を<INPUT TYPE="TEXT" NAME="money1" SIZE="5">円入れます。<BR>
<INPUT TYPE="RADIO" NAME="Juice" VALUE="nedan2">150円のジュースを購入します。お金を<INPUT TYPE="TEXT" NAME="money2" SIZE="5">円入れます。<BR>

<INPUT TYPE="SUBMIT" VALUE="購入">

これをphp側のプログラムで処理するさいラジオボタンでデータを渡したいのですがやり方がわかりません。
この場合120円の飲み物のおつり計算をしたいのです。
if($_POST['Juice'] = '$nedan1'){(想像)
$sonyu = $_POST['money1'];
こちらでは150円のほうの計算を。
elseif($_POST['Juice'] = '$nedan2'){
$sonyu = $_POST['money2'];
このif文とテキストの渡し方の部分がこれでは動かないのでどなたかご教授ください。

環境はPHPDEV423を使っています。(Apache、Mysql)

phpで自動販売機プログラムを作成しています。
ラジオボタンを使い120円または150円の飲み物を選択できるようにし、購入を押すとおつりを計算するものです。

これがhtml側のプログラムです。
<FORM ACTION="result.php" METHOD="POST">
<INPUT TYPE="RADIO" NAME="Juice" VALUE="nedan1" CHECKED>120円のジュースを購入します。お金を<INPUT TYPE="TEXT" NAME="money1" SIZE="5">円入れます。<BR>
<INPUT TYPE="RADIO" NAME="Juice" VALUE="nedan2">150円のジュースを購入します。お金を<INPUT TYPE="TEXT"...続きを読む

Aベストアンサー

if($_POST['Juice'] = '$nedan1'){(想像)

ラジオボタンは、1つのみ選択ですから $_POST['Juice'] の中に
nedan1かnedan2 という値のどちらかが入ってきます
ですから
比較するのであれば
if($_POST['Juice'] === 'nedan1'){
こうなります

あともうひとつ
実際の自動販売機には、お金を入れるところは1つしかありません。
しかしあなたの質問文に書いているソースを現実に当てはめると、商品毎にコイン投入口があることになります
money1 と money2です
コイン投入口が商品毎に存在する自販機を作るのであれば良いのですが・・・


いちおー私なりに、あなたが理解できるのではないかな?というソースを貼り付けておきますが、
かなりいい加減で、無作法なソースなのでこのままコピーしたりしても意味ないですよ
あくまでもヒントとしてのソースです
この例の場合、同一値段の商品が増えたときに対応できません(わざとです)


---------html
<form action="result.php" method="post">
<input type="radio"name="juice" value="120" />120円のジュースを購入します。 <br />
<input type="radio"name="juice" value="150" />150円のジュースを購入します。 <br />
お金を<inputtype="text" name="money1" size="5" />円入れます。<br />
<input type="submit" value="購入" />
</form>

---------result.php
//陳列している商品の値段と商品名
$price["juice1"]=120;
$price["juice2"]=150;

//POSTされた値を取得します
$juice = $_POST["juice"];
$money1 = $_POST["money1"];

//$money1 がお金かどうかを調べる
if( false === is_int($money1) ){
exit("お金を入れてください");
}

//選択されたジュースがいくらなのかを比較
if ( $price["juice1"] == $juice){
$change = $money1 - $price["juice1"] ;
}elseif( $price["juice2"] == $juice){
$change = $money1 - $price["juice2"];
}

if ( 0 > $change ){
print "お金が足りません";
}else{
print "おつりは".$change."円です";
}

if($_POST['Juice'] = '$nedan1'){(想像)

ラジオボタンは、1つのみ選択ですから $_POST['Juice'] の中に
nedan1かnedan2 という値のどちらかが入ってきます
ですから
比較するのであれば
if($_POST['Juice'] === 'nedan1'){
こうなります

あともうひとつ
実際の自動販売機には、お金を入れるところは1つしかありません。
しかしあなたの質問文に書いているソースを現実に当てはめると、商品毎にコイン投入口があることになります
money1 と money2です
コイン投入口が商品毎に存在する自販機を作...続きを読む

QSELECT結果から動的にコンボボックスを作りたい

SELECT結果から動的にコンボボックスを作りたい

SELECT結果を元に、コンボボックスを作りたいと思っています。
テーブル「bunsyo_tbl」から、3行の結果を受け取った時、
3回だけ回るループの中で動的にhtmlを作成し、コンボの行数を増やす、
といった事を実現させたいのですが、ループ内でhtmlを作成する部分が上手く行きません。
ご教授頂きたく質問いたします。

当方の環境はOSはWinXP SP3、
?Apache 2.0.63
?PHP 5.2.6
?Mysql 5.0.51b
です。

テーブル「bunsyo_tbl」の内容は
bunsyo_id | bunsyo_name | maker
2345 | 鋼材購入明細 | 1
3322 | 耐圧試験結果 | 1
3442 | 腐食箇所リスト| 1

PHPとhtmlのソースは最後に書きます。(長いので)
目的は、PHP変数$temphtml の中身を、
<option value="2345">鋼材購入明細 </option>
<option value="3322">耐圧試験結果 </option>
<option value="3442">腐食箇所リスト</option>
と、して、html文の中で<? $temphtml ?>で呼びコンボの行数を増やす事です。

WAMPに触れ2週間が経つ初心者です。
本質問前に十分に調べ、確認したつもりではいますが、
的外れな質問や、意味の通らない文章になっていましたらすいません。
よろしくお願いします。


--------------------

<?php
(接続部省略)
require_once("connect_db.php");

// select実行
$sql = "SELECT bunsyo_id,bunsyo_name FROM bunsyo_tbl WHERE maker = 1" ;
$result = executeQuery($sql);

//結果セットの行数を取得する。
$rows = mysql_num_rows($result);

//コンボボックスの不定部分のhtml作成
if($rows2){
while($row = mysql_fetch_array($result)) {
print($row['bunsyo_id']);
print($row['bunsyo_name']);

$temphtml .= "<option value=" .$row["bunsyo_id"]. ">" .$row["bunsyo_name"]. "</option>";
print($temphtml);
}
$msg = $rows."件のデータがあります。";
}else{
$msg = "レコード0件";
}
?>

<!--コンボボックス作成。初期は空白選択-->
<select name="doc_comb" size="1">
<option value="" selected="selected"></option>
    <? $temphtml ?>
</select>

SELECT結果から動的にコンボボックスを作りたい

SELECT結果を元に、コンボボックスを作りたいと思っています。
テーブル「bunsyo_tbl」から、3行の結果を受け取った時、
3回だけ回るループの中で動的にhtmlを作成し、コンボの行数を増やす、
といった事を実現させたいのですが、ループ内でhtmlを作成する部分が上手く行きません。
ご教授頂きたく質問いたします。

当方の環境はOSはWinXP SP3、
?Apache 2.0.63
?PHP 5.2.6
?Mysql 5.0.51b
です。

テーブル「bunsyo_tbl」の内容は
bunsyo_id | bunsyo_name | mak...続きを読む

Aベストアンサー

直接関係ないけど気になったこと
○executeQuery ←自作関数ですかね? 関数内でmysql_queryを呼び出す?

○$resultのエラーチェックをしていない

○print($row['bunsyo_id']);を含む3か所のprint文、デバッグ用ですかね?
個人的には、デバッグ用の場合print_r または、var_dump、のどちらかを使用します。
理由は、リリース時の削除忘れ防止。
printやechoは、通常の出力としてもよく利用されるため、最終的に検索して単純に削除するわけにはいかないから。
print_r、var_dumpは事実上デバッグ出力専用の為、リリース時に検索して見つかったら何も考えずに削除しても問題ない為。

○<? $temphtml ?> ←ショートタグ有効なんですね?
個人的には、ショートタグ使わず <?PHP $temphtml ?>とします。
たまたま使用しているレンタルサーバがデフォルトではショートタグを使用できなかったためでもありますが、他サーバーに乗り換えた際等にでも、確実に動作する方を選んでおくとトラブルが少ないと思ったので。

最後に
print($temphtml);等のデバッグコードの出力結果を教えて貰えませんか?

直接関係ないけど気になったこと
○executeQuery ←自作関数ですかね? 関数内でmysql_queryを呼び出す?

○$resultのエラーチェックをしていない

○print($row['bunsyo_id']);を含む3か所のprint文、デバッグ用ですかね?
個人的には、デバッグ用の場合print_r または、var_dump、のどちらかを使用します。
理由は、リリース時の削除忘れ防止。
printやechoは、通常の出力としてもよく利用されるため、最終的に検索して単純に削除するわけにはいかないから。
print_r、var_dumpは事実上デバッグ出力専用の為、リリ...続きを読む

Q動的にラジオボタンを増やす方法

ユーザーのPOSTで動的にラジオボタンを増やす方法はどのようなやり方がありますでしょうか?

Aベストアンサー

>POSTで動的にラジオボタンを増やす方法

phpスクリプトでinput要素(type属性=radio)を出力しているのであれば、POST内容をチェックして追加するだけだと思います。それ以上は「どういうPOSTデータでどのように増やしたいのか」を提示してください。

どんどん増やせるような仕様だと(増やしたものを記録するために)セッション変数を使うなどの工夫がいるとは思いますが・・・


人気Q&Aランキング