フォームの1項目目落ち問題 | ショッピングカート CGI修正の方法は?

このQ&Aのポイント
  • 現在、ショッピングカートのCGIをカスタマイズしており、商品をカートに入れると注文者情報入力ページに移動しますが、情報確認ページに表示される情報の一行目が表示されません。
  • CGIのプログラムを確認したところ、フォームから送られたデータを表示している部分が原因ではないかと考えています。
  • しかし、具体的な修正方法についてはわからず、初心者で困っています。アドバイスをいただけると助かります。
回答を見る
  • ベストアンサー

フォームの内容が1項目目だけ落ちます

ショッピングカート CGIをカスタマイズしていますが、なにぶん自分で書く事ができずに見よう見まねねでソースをいじっているために行き詰まりました。。。 現状、商品をカゴに入れるボタンを押すと、注文者情報を入れるページに移動します。 情報入力ページにて入力して、確認画面へ のボタンを押すと、確認画面へ移行しますが、 情報確認ページに表示される情報の一行目だけが表示されません。 例えば、 氏名、〒、住所、電話・・・を入力して → 確認画面へボタン 確認画面では、 〒、住所、電話・・・しか表示されません。 ただ、一緒にhidden属性の項目もあり、そちらには一行目からのデータが書き出されており、 次に「メール送信」のボタンを押せばデータはすべて記載された形で送られます。 cgi プログラム 下記の部分でフォームから送られたデータを表示していると思うのですが、どこが悪いのか検討もつきません。 $Count_n = @DATA_N; foreach $n_data ( 1 .. $Count_n - 3 ) { if ( $DATA_N[$n_data] eq 'tax2' || $DATA_N[$n_data] eq 'sougoukei' || $DATA_N[$n_data] eq 'cookie' || $DATA_N[$n_data] eq 'syoukei' || $DATA_N[$n_data] eq 'soryo' ) { next; } $data_name = $data_name2 = $DATA_N[$n_data]; $data_name2 =~ s/^_//g; $data_name2 =~ s/pay/支払方法/g; if ( $DATA_N[$n_data] eq 'pay' ) { $DATA_V[$n_data] =~ s/-(\d+)//g; } print "<dt>$data_name2</dt>\n" ; if ( $data_name =~ /^_/ ) { if ( $DATA_V[$n_data] eq '' ) { print "<dd>必須項目未入力</dd>\n" ; push ( @Hissu,$DATA_N[$n_data] ); } else { print "<dd>$DATA_V[$n_data]</dd>\n" ; } } else { print "<dd>$DATA_V[$n_data]</dd>\n" ; } } print "</dl>\n" ; foreach $num_2 ( 0 .. $Count_n - 6 ) { if ( $DATA_N[$num_2] eq 'cookie' ) { next; } if ( $DATA_N[$num_2] eq 'pay' ) { next; } $DATA_N[$num_2] =~ s/^_//g; print "<input type=\"hidden\" name=\"$DATA_N[$num_2]\" value=\"$DATA_V[$num_2]\">\n"; } print "<input type=\"hidden\" name=\"syoukei\" value=\"\\$v_goukei\">\n"; print "<input type=\"hidden\" name=\"tax2\" value=\"\\$v_tax2\">\n"; if ( $v_soryo ne '' ) { print "<input type=\"hidden\" name=\"soryo\" value=\"$v_soryo\">\n"; } if ( $pay_name ne '' ) { print "<input type=\"hidden\" name=\"pay_tesuryo\" value=\"\\$pay_daikin\">\n"; } print "<input type=\"hidden\" name=\"sougoukei\" value=\"\\$v_sougoukei\">\n"; print "<input type=\"hidden\" name=\"pay\" value=\"$pay_name2\">\n"; print "<input type=\"hidden\" name=\"mode\" value=\"sendmail\">\n" ; 初心者の為、万策尽きた感じです。どなたか宜しくお願い致します。

  • CGI
  • 回答数1
  • ありがとう数2

質問者が選んだベストアンサー

  • ベストアンサー
回答No.1

foreachを1からはじめてるからじゃなくてですか?

takeaway2000
質問者

お礼

ありがとうございました! 1から始まっているからでした。。 0にしたら、一行目から表示されるようになりました。 大変助かりました。 ありがとうございます。

関連するQ&A

  • ファイヤーフォックスでフォームが文字化けがします。

    お世話になります。 自分で作ったサイトですが、 入力フォームの氏名を書き込んで、それをクッキーに保存して、それを呼び出すと、入力した名前が文字化けしてしまいます。 自分で作ったといっても、無料配布のCGIです。 これはファイヤーフォックスの問題でしょうか? 私の環境は、Windows8.1 です。 ちなみに、その部分の内容は、次の通りです。 print "<FORM METHOD=\"POST\" ACTION=\"./bbs.cgi\" ENCTYPE=\"multipart/form-data\">\n"; print "<input type=\"hidden\" name=\"mode\" value=\"modify\">\n"; print "<input type=hidden name=\"no\" value=\"$main_no\">\n"; }else{ print "<FORM METHOD=\"POST\" NAME=\"F1mode\" ACTION=\"./bbs.cgi\" ENCTYPE=\"multipart/form-data\" onSubmit=\"return chuuikakunin()\">\n"; print "<input type=\"hidden\" name=\"mode\" value=\"add\">\n"; } 正直なところ詳しいことはよく分かりませんが、 onSubmit=\"return chuuikakunin()\" ↑これは、JavaScriptを使って名前の入力が無いとアラートで知らせるためのものだと思われます。 よろしくお願い致します。

  • 配列の中身がイコールならばとしたいです。

    こんばんわ。ホームページのフォームを使って色を三色選んでもらい、それに対して貴方はこんな方ですね、としたいのですが、 好きな色3色選んでください。 <form method="post" action="hoge.cgi">  <input type="checkbox" name="q1" value="赤">赤  <input type="checkbox" name="q1" value="青">青  <input type="checkbox" name="q1" value="黄">黄色  <input type="checkbox" name="q1" value="紫">紫  <input type="checkbox" name="q1" value="黒">黒  <input type="checkbox" name="q1" value="白">白  <input type="checkbox" name="q1" value="ピンク">ピンク  <input type="checkbox" name="q1" value="緑">緑 <br> <br> <input type="submit" value="結果を見る!!"> <input type="reset" value="取消"></form> とフォームから3つ選んでもらい、送信します。 そして、perlで記述したCGIで、 ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime(time); read(STDIN,$buffer,$ENV{'CONTENT_LENGTH'}); $buffer .= $ENV{'QUERY_STRING'}; @pairs = split(/&/,$buffer); foreach $pair (@pairs) { ($name,$value) = split(/=/,$pair); $out{$name} = $value; $value =~ tr/+/ /; $value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C",hex($1))/eg; if ($name eq "q1") { push (@check1,$value); } } print "Content-Type: text/html; charset=Shift_JIS\n\n"; print "<html>\n"; print "<head><title>$title</title></head>\n"; print "<body>\n"; #配列の数個を数える。3個以外はプログラムを中止。 $num = $#check1; if ($num ne 2){ print "3個選んでね。"; exit; } #もし配列の中身が次の3つだったら、"貴方は素敵ですね"と答える。 if (@check1 eq "黄","紫","黒"){ print "貴方は素敵ですね。";} #elsif (){;} else { print "ごめんね。データがないよ。";} print "</body>\n"; print "</html>\n"; exit; と、したのですが、どの色を選んでも、貴方は素敵ですね。としか、表示されません。赤と紫と黒を選んでも、同じです。配列を eq としている時点でどうかと思いますが、選んだ3つがイコールの場合、貴方は素敵ですねと表示されるようにしたいです。自分でも調べていますが、よろしかったら是非お教えください。 でわ。

    • ベストアンサー
    • CGI
  • CGI初心者です

    sub html でフォームに入力してもらい、 sub kekka で入力情報を確認し、 sub shori でテキストファイルに登録。 というプログラムを考えているのですが、 フォームから入力されたデータが入った変数$in{'name'} が、sub shori に移ると消えてしまいます。 いろいろ試行錯誤したのですが分かりませんでしたので 教えていただけたらと思います。 以下がサンプルのソースです。 #!/perl/bin/perl require './jcode.pl'; require './cgi-lib.pl'; &ReadParse; if($in{'action'} eq "set"){&kekka;} elsif($in{'action'} eq "sss"){&shori;} else{&html;} sub html{ print "Content-Type: text/html\n\n"; print <<EOM <html>\n <body>\n <h1>CGIテスト1</h1>\n <form ACTION="./sample.cgi" METHOD="POST">\n <INPUT type=hidden name=action value="set">\n 名前<br><input type=text name="name" size="30" MAXLENGTH="30"><br>\n <input TYPE="submit" value="確認"><INPUT type="reset" value="リセット">\n </form>\n </body>\n </html>\n EOM } sub kekka{ print "Content-Type: text/html\n\n"; print <<EOM <html>\n <body>\n <h1>CGIテスト2</h1>\n <form ACTION="./sample.cgi" METHOD="POST">\n <INPUT type=hidden name=action value="sss">\n name = $in{'name'} <input TYPE="submit" value="登録">\n </form>\n </body>\n </html>\n EOM } sub shori{ print "Content-Type: text/html\n\n"; print <<EOM <html>\n <body>\n <h1>CGIテスト3</h1>\n <form ACTION="./sample.cgi" METHOD="POST">\n name = $in{'name'} </form>\n </body>\n </html>\n EOM }

    • ベストアンサー
    • Perl
  • POST からの受け渡しができません・・・

    教えてくださいm(__)m <FORM action="<? echo $PHP_SELF; ?>" method="POST"> :(ここにはif文がはいっています。) : print "お名前:<BR>\n"; print "<input type=\"text\" name=\"handle\" size=\"16\" maxlength=\"30\" value=\"<? echo ($handle); ?>\"><br><br>\n"; print "性別:<BR>\n"; for (reset ($sex_tbl); $key = key ($sex_tbl); next ($sex_tbl)) { echo (" <OPTION value=\"" . $key . "\""); if ($key == $sex) echo (" SELECTED"); echo (">" . $sex_tbl[$key] . "\n"); } print "PRポイント:<BR>\n"; print "<input type=\"text\" name=\"pr\" size=\"16\" maxlength=\"30\" value=\"<? echo ($pr); ?>\"><br><br>\n"; print "<CENTER><input type=\"submit\" value=\"次の人!\"></CENTER><br>\n"; print "<input type=\"hidden\" name=\"page\" value=\"kekkapage\">\n"; print "<input type=\"hidden\" name=\"handle\" value=\"" . $_POST['handle'] . "\">\n"; print "<input type=\"hidden\" name=\"sex\" value=\"" . $_POST['sex'] . "\">\n"; print "<input type=\"hidden\" name=\"pr\" value=\"" . $_POST['pr'] . "\">\n";←80 </FORM> : : ↑なのですが、 「・・・on line 80」エラー表示になりうまくいきません。 の部分が原因と表示にはなっているのですが…。 助けてください。 宜しくお願いしますm(__)m

    • ベストアンサー
    • PHP
  • フォームのレイアウト

    以下のようなフォームを作成しましたが、検索ボタンの下が妙に余っているのです。 これを上側と同じようにくっつけたいのですが、どうしたらよいでしょうか? よろしくお願いします。  <table border="1" width="200" border="0" cellspacing="0" cellpadding="2"> <tr><td> <div align="center" valign="middle"> <form method="get" action="url" target="_blank"> <input name="sitem" type="text" id="inputbox" size="20"><BR> <input name="Submit" type="submit" id="inputsubm" value="検索"> <input type="hidden" name="sv" value="6"> <input type="hidden" name="sid" value="12345"> <input type="hidden" name="su" value="bbb"> <input type="hidden" name="sn" value="aaa"> <input type="hidden" name="v" value="3"> </form></div> </td></tr></table>

    • ベストアンサー
    • HTML
  • スケジュール・カレンダーを携帯から

    無料配布されているスケジュール・カレンダーのCGIを使い、スケジュール表をUPさせましたが、パソコンから見るといいのですが、 携帯から見ると、 ・先月や来月に移るのに、フォームのイメージタグを使い、GIFファイルをつかい、(hiddenで)今月の月であったり、年であったりの情報を送っています。 しかし、これを携帯でみると、「LAST」アイコンではなく、テキスト入力欄になっていて、先月や来月へ移ることができません。 どうしてなのかが、わからないです。 たぶん、このあたりを変えるといいのだろうと思うのですが、どうしたらいいのかわかりません。 ーーーーーーーーーーーーーーーーーーーーーーーーーー sub dsp { print "<table width=",$calw-40," cellspacing=2 cellpadding=0><tr><td width=100><font size=\"+1\"><b>$logyear年</b></font></td>\n"; $mon = $logmon - 1; if ($mon < 1) {$mon = 12; $year = $logyear - 1;} else {$year = $logyear;} if (2002 < $year) { print "<td align=right><form action=\"$script\" method=\"POST\">\n"; print "<input type=\"hidden\" name=\"mode\" value=\"$mode\">\n"; print "<input type=\"hidden\" name=\"pass\" value=\"$inpass\">\n"; print "<input type=\"hidden\" name=\"year\" value=\"$year\">\n"; print "<input type=\"hidden\" name=\"mon\" value=\"$mon\">\n"; print "<input type=\"image\" src=\"$last_icon\"></td></form>\n"; } print "<td width=100 align=center><font size=\"+2\"><b>$logmon月</b></font></td>\n"; $mon = $logmon + 1; if (12 < $mon) {$mon = 1; $year = $logyear + 1;} else {$year = $logyear;} print "<td><form action=\"$script\" method=\"POST\">\n"; print "<input type=hidden name=mode value=\"$mode\">\n"; print "<input type=hidden name=pass value=\"$inpass\">\n"; print "<input type=hidden name=year value=\"$year\">\n"; print "<input type=hidden name=mon value=\"$mon\">\n"; print "<input type=image src=\"$next_icon\"></td></form><td width=100></td></tr></table>\n"; } ーーーーーーーーーーーーーーーーーーーーーーーーーー お願いします。

    • ベストアンサー
    • CGI
  • チェックボックスがundefinedと表示します

    下記のように入力すると、チェックボックスがundefinedと表示されてしまいます。 どのように変更すればよいのでしょうか? 教えてください <script type="text/javascript"> <!-- function CheckForm() { //****************送信内容の取得**************** var data = new Array(); var namesArray = new Array( 'Name', 'Sex', 'Age', 'Address' , 'Tel', 'Email'); var f = document.forms[0]; for (var i in namesArray) { var n = namesArray[i]; if (n == 'Sex') { data[n] = ''; for (var j = 0; j < f[n].length; j++) { if (f[n][j].checked) { data[n] = f[n][j].value; break; } } } else { data[n] = f[n].value; } } //****************名前のチェック**************** if (data.Name.length == 0) { alert('名前が入力されていません。'); f.Name.focus(); return false; } //***********確認ダイアログによる確認*********** return confirm('下記の内容で送信して' + 'よろしいですか?\n\n' + '選んでください:\t\t' + data.Course1 + '\n' + data.Course2 + '\n' + data.Course3 + '\n' + '名前:\t\t' + data.Name + '\n' + '性別:\t\t' + data.Sex + '\n' + '年齢:\t\t' + data.Age + '\n' + '住所:\t\t' + data.Address + '\n' + '電話番号:\t' + data.Tel + '\n' + 'E-Mailアドレス:\t' + data.Email); } //--> </script> <form action="/kantan-cgi/formmail.pl?id=*********" method="post" onSubmit="return CheckForm();"> <dl> <dt><span class="mainBp">【選んでください】</span></dt> <dd><input type="checkbox" name="Course1" value="コース1" />コース1 <input type="checkbox" name="Course2" value="コース2" />コース2 <input type="checkbox" name="Course3" value="コース3" />コース3</dd> <dt>名前(必須)</dt> <dd><input type="text" name="Name" /></dd> <dt>性別</dt> <dd> <input type="radio" name="Sex" value="男性" />男 <input type="radio" name="Sex" value="女性" />女 </dd> <dt>年齢</dt> <dd><input type="text" name="Age" size="2" /></dd> <dt>住所</dt> <dd><input type="text" name="Address" size="70" /></dd> <dt>電話番号</dt> <dd><input type="text" name="Tel" /></dd> <dt>E-Mailアドレス</dt> <dd><input type="text" name="Email" size="50" /></dd> </dl> <input type="submit" value="送信" /> </form>

  • 「option」をソートしたい!

    お世話になります。 調べてもわからないので、丸投げです。ごめんなさい。 このCGIのアイコン選択の「option」をソートで名前順にしたいのですが、 お分かりになるでしょうか? どうぞ、宜しくお願いします。 print "<tr><td><b>アイコン</b></td><td>\n"; if ($UZa_icn) { push(@icn_img,"$myicon"); push(@icn_nam,"管理者専用"); } print "<select name=gicon>\n"; foreach(0 .. $#icn_img) { if ($gicon eq "$icn_img[$_]") { print "<option value=\"$icn_img[$_]\" selected>$icn_nam[$_]\n"; } else { print "<option value=\"$icn_img[$_]\">$icn_nam[$_]\n"; } } print "</select>$ic_tog</td></tr>\n"; } else {print"<input type=hidden name=gicon value=\"$gicon\">";} print <<"EOM"; <tr><td><b>URL</b></td><td><input type=text name=ul size="$ltx_wth" value="http://$gurl" class="text"> </td></tr> <tr><td>&nbsp;</td><td> <input type=hidden name=ps value="$F{'ps'}"> <input type=hidden name=no value="$F{'no'}"> <input type=hidden name=dl value="$F{'dl'}"> <input type=hidden name=mode value="kakikae"> <input type=submit value="修正する" class="button"> </form></td></tr> </table></td></tr></table></div><br><br>

    • ベストアンサー
    • CGI
  • HTML側データの摘出方法

    フォームメールを作っているのですがHTML側のデータが希望通りに摘出出来ません。 【C G I 側 一部】 push(@DATA_N,$name); push(@DATA_V,$value); foreach (0..$count-1) { if ($DATA_V[$_] =~ /\n/) { &jis("$DATA_N[$_] =\n$DATA_V[$_]\n"); print OUT "$msg\n"; } else { &jis("$DATA_N[$_] =$DATA_V[$_]"); print OUT "$msg\n"; } } 【HTML側】 <BODY> <h1>WEBFORM用サンプルフォーム</h1> <FORM method="POST" action="webform.cgi"> <INPUT type="hidden" name="location" value="http://abc.com/123.htm"> <INPUT type="hidden" name="subject" value="フォームメール"> 質問:<INPUT size="50" type="text" name="質問"><BR> 名前:<INPUT size="50" type="text" name="Yourname"><BR> メール:<INPUT size="50" type="text" name="Email"><BR> <BR> <INPUT TYPE="submit" VALUE="確認"> <INPUT TYPE="reset" VALUE="リセット"> <p> <input type="checkbox" name="c_copy" value="on" checked> 送信内容のコピーを表示<br> <input type="checkbox" name="no_check" value="on"> 内容確認画面を出さないで送信する </FORM> </BODY> 上記の設定で【質問】【名前】【メール】の項目と値が全て送られて来るのですが、送られてくる順番を【名前】が先頭であとはHTML側の順番通りにしたいと思います。 以下のように行が何番目かを指定すれば結果は得られるのですが複数のHTMLに対応させる為【名前】項目が何番目に来るかが指定出来ません。 foreach (1) { if ($DATA_V[$_] =~ /\n/) { &jis("$DATA_N[$_] =\n$DATA_V[$_]\n"); print OUT "$msg\n"; } else { &jis("$DATA_N[$_] =$DATA_V[$_]"); print OUT "$msg\n"; } } そこでHTML側 名前:<INPUT size="50" type="text" name="Yourname"> のname="Yourname"部分を使って指定出来ないかとあれこれ試してみますがうまくいきません。 有識者の方々のご指導いただければ幸いです。何卒宜しくお願いします。

    • 締切済み
    • CGI
  • チェックボックス(CGI)のズレをなくすにはどうすればよいでしょうか?

    現在メールフォームを勉強中です。チェックボックスの項目を1つだけ設定していますが、チェックを外せば下の項目が上に一段ズレて送信されてきます。 チェックが外されていてもその項目だけ“空白”もしくは“チェックなし”とかに出来ますでしょうか?お手数ですが、ご教授ください。 【html側】 <form method="POST" action="mail.cgi"> <input type="text" name="01"> <input name="checkbox" type="checkbox" value="on"> <input type="text" name="02"> <input type="text" name="03"> <input type="submit" value="確認画面"> </form> 【cgi側】 $form0 = "01"; $form1 = "チェック"; $form2 = "02"; $form2 = "03"; if($form0 eq ""){ $form_input0 = ""; } else { $form_input0 = "<p class=\"text\">$form0 = $VALUE_DATE[0]</p>";} if($form1 eq ""){ $form_input1 = ""; } else { $form_input1 = "<p class=\"text\">$form1 = $VALUE_DATE[1]</p>";} if($form2 eq ""){ $form_input2 = ""; } else { $form_input2 = "<p class=\"text\">$form2 = $VALUE_DATE[2]</p>";} if($form3 eq ""){ $form_input3 = ""; } else { $form_input3 = "<p class=\"text\">$form3 = $VALUE_DATE[3]</p>";} <FORM method="post" action="mail.cgi"> <INPUT type="hidden" name="$form0" value="$VALUE_DATE[0]"> <INPUT type="hidden" name="$form1" value="$VALUE_DATE[1]"> <INPUT type="hidden" name="$form2" value="$VALUE_DATE[2]"> <INPUT type="hidden" name="$form3" value="$VALUE_DATE[3]"> <INPUT type="submit" value="この内容で送信する"></FORM> $mbody .= "\n"; $mbody .= "フォームより以下の内容が送信されました。\n"; $mbody .= "\n"; $mbody .= "=============================================================\n"; $mbody .= "\n"; $mbody .= "・$form0:$VALUE_DATE[0]\n"; $mbody .= "\n"; $mbody .= "・$form1:$VALUE_DATE[1]\n"; $mbody .= "\n"; $mbody .= "・$form2:$VALUE_DATE[2]\n"; $mbody .= "\n"; $mbody .= "・$form3:$VALUE_DATE[3]\n"; $mbody .= "=============================================================\n"; $mbody .= "\n"; ソースは文字制限の関係で省略しています。解りにくいですが、宜しくお願いします。

    • 締切済み
    • CGI