みんなの「教えて(疑問・質問)」にみんなで「答える」Q&Aコミュニティ

こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

締切り済みの質問

【フォーム】PHPで確認画面をだした後にボタンを

ほぼ初心者のものです
下記のようなフォームをつくりました

<form action="regist.php" method="post">
<input type="radio" name="08241" value="A11"/>
<input type="radio" name="08241" value="B11"/>
<input type="radio" name="08241" value="C11"/>
<input type="radio" name="08241" value="D11"/>
<input type="radio" name="08241" value="E11"/>
<input type="radio" name="08241" value="F11"/>
<input type="submit" value="登録する" />

そしてこれらを確認するためにregist.phpを作成し

<table width="250" border="1">
<tr>
<td width="250">選択したもの</td>
</tr>
<tr>
<td><?php echo $_POST["08241"] ?></td>
</tr>
<tr>
<td>●●●</td>

と記載し、選んだものを表示できるようにしました

ここからが皆様にお力を借りたいところなのですが
フォームから「A11」が選択されて確認画面に「A11」と表示されたとき
●●●のところに下記のような情報を含んだボタンを表示させたいんです

<form name="a11" action="/products/detail.php" method="post" >
<input type="hidden" name="mode" value="cart" />
<input type="hidden" name="product_id" value="137" />
<input type="hidden" name="product_class_id" value="634" />
<input type="hidden" name="quantity" value="1" /><br />
<input type="submit" value="決定する" onClick="alert('選択しました')" />
</form>

このボタン情報はA11~F11まであって、product_idやproduct_class_idは
それぞれ異なっています

どこかに一覧を作成しておいて form nameで一致したものを表示させるといった
やり方なのかなとは思うのですが、その方法がわかりません

PHPを使えばいいのかJavascriptがよいのかもあわせ、記述方法などをご教授いただけませんでしょうか?

どうかよろしくお願いいたします

投稿日時 - 2013-06-26 17:16:36

QNo.8150806

すぐに回答ほしいです

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(3)

ANo.3

質問趣旨にあってるかわかりませんが、僕個人の意見を。

JavaScriptでの構築も可能でしょうが、ネットワークコストが増えるし隠ぺいもできず、メリットが無いので僕は採用しません。

で、下記を想定してみました。

-------------------
name,product_id,product_class_id
A11,137,634
B11,001,001
C11,002,002
D11,003,003
E11004,004
F11005,005
-------------------

もし上記程度のレコード数ならSQLを使わず上記内容を書いたテキストファイルを作ります。これをfile文で読み込むと行単位の配列ができるので、続けてforeach文とexplode文を使い連想配列を作ります。

$lines = file('上記のファイルを指定');
$list = array();
foreach($lines as $line){
$temp = explode(",", $line);
$list[$temp[0]] = $temp;
}
var_dump($list);

な感じでできた配列を利用しhtmlへ反映します。

この管理なら早くコーディングもできるし、テキストファイルの修正でレコード管理も可能です。EXCELからの出力と連携をとることもできるでしょう。

しかし、レコード数やカラム数が膨大になると、この管理では不十分になってきます。
その場合ここまでの回答者さんと同じようにSQLの利用が必要です。

当然規模や保守性などを考慮して利用するSQLを選択したり、SQLの入れ替えなどを考慮してPDO(異なるSQLの差を吸収してくれるコネクト)を利用するなどを検討します。
製作の作業コストもかなり増えることになります。

それと、別な内容ですが。

<input type="hidden" name="product_id" value="137" />
<input type="hidden" name="product_class_id" value="634" />

など、html上にhidden項目を置いていますが、PHP上で処理できるため、不要にできるかもしれませんね。ECサイトや商品マスターなどでは、利用者への告知が不要なものは隠ぺいしたほうがよい事が多いのでこの辺もご一考を。

投稿日時 - 2013-07-03 02:43:18

ANo.2

>> PDOというのがうまく動いていないのか、サンプルを動かしてみると「このWEBサイトは表示できません」と出てしまいます。



PHPのバージョンが5.2以下である故にクロージャが使えずにParseError吐いてる可能性があります。33~35行目の記述です。
スクリプトの最初に

ini_set('display_errors', '1');
error_reporting(E_ALL);

を実行するとエラー表示されるようになると思います。
クロージャを使わずに直接関数定義したり、また1つ1つhtmlspecialcharsを自力で適用すると回避できます。

可能ならばPHP5.4.1以降をご利用いただきたいところですが・・・
PHP5.4.0以前にはセキュリティ面でいろいろ問題があったので、それらのバージョンの利用は推奨されません。
つい先日PHP5.5.0もリリースされましたね。


>> MySQLのテーブルにはidとproduct_id,product_class_idというフィールドにそれぞれの数値が入っていればいいんですよね?

そういうことですね。
コードはVARCHAR、TEXTなどの文字列型を想定していますが、このSQL文の実行にあたっては特にデータベース側で暗黙の型変換が行われても問題はないです。
http://www.tokumaru.org/d/20090924.html

もしフィールドの型が文字列型以外であり、パフォーマンス面が気になるようでしたら、executeメソッドに配列を渡すのではなく、あらかじめbindValueメソッドで1つ1つ型を指定してバインドするようにしてください。
http://php.net/manual/ja/pdostatement.execute.php
http://php.net/manual/ja/pdostatement.bindvalue.php

投稿日時 - 2013-06-26 21:55:22

ANo.1

こういう時に役立つのがデータベースです。
MySQLかSQLiteがオススメ。

MySQL…万能。
SQLite…ユーザーの概念が無い。小規模なサイトのちょっとしたデータ管理に向いている。

MySQL
http://dev.mysql.com/downloads/

SQLite
http://www.sqlite.org/

PDO
http://www.php.net/manual/ja/book.pdo.php
http://www.phpbook.jp/tutorial/pdo/

MySQLとPDOを用いたサンプル(既にテーブルが作成済みとして)
http://ideone.com/Uf8pem

投稿日時 - 2013-06-26 18:45:33

お礼

回答ありがとうございます
PDOというのがうまく動いていないのか、サンプルを動かしてみると「このWEBサイトは表示できません」と出てしまいます。
また、MySQLのテーブルにはidとproduct_id,product_class_idとうフィールドにそれぞれの数値が入っていればいいんですよね?

丁寧に書いていただいたのに関わらずうまく出来ずにすみません
引き続きのご指南お願いいたします

投稿日時 - 2013-06-26 19:19:29

あなたにオススメの質問