- 締切済み
【フォーム】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がよいのかもあわせ、記述方法などをご教授いただけませんでしょうか? どうかよろしくお願いいたします
- みんなの回答 (3)
- 専門家の回答
みんなの回答
- hige_mario
- ベストアンサー率51% (18/35)
質問趣旨にあってるかわかりませんが、僕個人の意見を。 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サイトや商品マスターなどでは、利用者への告知が不要なものは隠ぺいしたほうがよい事が多いのでこの辺もご一考を。
>> 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
こういう時に役立つのがデータベースです。 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
お礼
回答ありがとうございます PDOというのがうまく動いていないのか、サンプルを動かしてみると「このWEBサイトは表示できません」と出てしまいます。 また、MySQLのテーブルにはidとproduct_id,product_class_idとうフィールドにそれぞれの数値が入っていればいいんですよね? 丁寧に書いていただいたのに関わらずうまく出来ずにすみません 引き続きのご指南お願いいたします