CGI-BBS > 基礎 > その他 > 入力フォームのデータをWEB上の表に表示させたい


カレッヂ
カレッヂ


質問者 極超初心者  投稿日 2/3(月) 17:38:45
毎度毎度、失礼致します。

表になっているある商品の発注フォームで、チェックボックスにチェックした部分のデータを確認画面用に表として表示させたいと思ってます。
商品は60点ほどあり、htmlファイルからのチェックを読み($product{'$i'}=onでチェックが入っています)、デコード後、以下のコードよりCGIから確認画面をHTMLを表示させようと思いますが、うまくいきません。

print "Content-type: text/html\n\n";
print "<html><head><title>データの確認</title></head><body>\n";
print "<table width=600 border=0><tr align=center valign=middle>\n";
print "<td><div align=center>\n";
print "<table width=500 border=0 cellpadding=1 cellspacing=0>\n";
print "<tr align=center>\n";
print "<td>品番</font></td>\n";
print "<td>商品名</font></td>\n";
print "<td>数量</font></td>\n";
print "<td>税抜金額</font></td></tr><form method=POST>\n";

for( $i = 0; $i < 60; $i++ ) {
if($product{'$i'} eq 'on') {
chomp ($product{'$i'});
print "<tr><td><div align=center><font color=#000000>REAL ACTION HEROES $product{'no$1'}<input type=hidden name=no value=$product{'no$i'}></font></div></td>\n";
print "<td>$product{'fig$i'}<input type=hidden name=fig value=$product{'fig$i'}></td>\n";
print "<td>$product{'num$i'}個<input type=hidden name=num value=$product{'num$i'}></td>\n";
print "<td>$product{'cost$i'}<input type=hidden name=cost value=$product{'cost$i'}></td>\n";
print "</tr>\n";
} }

print "<tr height=30><td colspan=4>よろしければ”OK”を押してください</td></tr>\n";
print "<tr><td colspan=4><br></td></tr>\n";
print "<center><input type=hidden name=c1 value=OK><input type=submit value=OK></center></td></tr>\n";
print "</form>\n";
print "</table></div>\n";
print "</body></html>\n";
exit;

毎度毎度で誠に申し訳ございませんが、アドバイスいただけないでしょうか?
宜しくお願い致します。

プロバイダ参照:
サーバのOS:UNIXサーバ
パソコンのOS:WinNT系
エディタ:TeraTerm
FTPソフト:FFFTP
サーバ移転:していない
改造:(未選択)
CGI習熟度:beginner

回答者 しあわせのツボ  [削除]  投稿日 2/3(月) 18:43:42
「うまくいきません」では、どのような状況なのかがわかりません。
「変数名がそのまま表示されてしまいます」とか
「OKのボタンを押しても反応がありません」とか、
できるだけ具体的に書いてください。
質問者 極超初心者  [削除]  投稿日 2/4(火) 10:24:39
しあわせのツボさん、いつも素早いご回答ありがとうございます。
また、詳しく記述しておらず、大変失礼しました。お詫び致します。

うまくいかなかったと言うのは、表のヘッダ部分は表示できるのですが、それ以下のデータの部分が表示できないということです。
for( $i = 0; $i < 60; $i++ )からprint "</tr>\n"; } }に問題があると思うのですが、いかがでしょうか?

再度で大変申し訳ございませんが、アドバイスいただけないでしょうか?

宜しくお願い致します。
回答者 しあわせのツボ  [削除]  投稿日 2/4(火) 14:09:12
「表示されない」も、表ごと出ないのかデータだけ出ないのかで違うのですが、
まあ見当はつきましたので。

$product{'no$1'} だと、%product中の「no$1」というキーを探しに行きます。
それは希望の動作ではないでしょう(そして$1は$iのtypoですね)。
この場合は$iを変数展開したいので、$product{"no$i"} と
シングルクォートでなくダブルクォートで括りましょう。
質問者 極超初心者  [削除]  投稿日 2/4(火) 17:16:47
しあわせのツボさん、またまた早急にご回答いただきまして、誠にありがとうございます。
相変わらずの説明不十分で、ご迷惑をおかけします。大変申し訳ございません。

$product{'no$i'}の部分のシングルクォーテションを、ダブルクォーテーションとのご指摘通り変更してみましたが、表示エラー(ページを表示できません)が出てしまいました。
以前、print以降の""の中に、更にダブルクォーテーションを入れると表示エラーが起こっておりましたので、そのせいだと思われます。
この場合、いかがすればよろしいでしょうか?

しつこく何度も質問してしまって、誠に申し訳ございませんが、アドバイスいただけないでしょうか

宜しくお願い致します。
回答者 しあわせのツボ  [削除]  投稿日 2/4(火) 18:33:29
あー、なるほど。えーと。
$product{'no' . $1} とか
print "<td>" . $product{"no$i"} . "</td>\n";とか
まわりくどく書かないといけませんね。

でも、この場合はヒアドキュメントを使うのがいいでしょう。
print <<"EOF";
この中に自由に記入
何行でも可
EOF
のように記述すると、"を気にする必要もなく、変数も使えて
しかもいちいちprintを書かなくて済みます。
この例だと、21あるprintを3つにまとめられますね。


余談ですが、chomp ($product{'$i'}); は不要です。
質問者 極超初心者  [削除]  投稿日 2/5(水) 09:45:56
しあわせのツボさん。何度もありがとうございます。
なんとか自分の希望する通りに行きました。
前回、ヒアドキュメントを使ったらネットスケープで正常に表示できなかった(それは単純な文法ミスでしたが)ので、ちょっと使うのを避けておりましたが、この場合ですと有効なんですね。
アドバイス、深く感謝致します。

また何かありましたら質問させていただきたいと思いますので、ご迷惑をおかけして申し訳ございませんが、宜しくお願い致します。

このページは終了したので返信(回答)は書きこめません
 


Web裏技