HTMLのFORMからCGIを呼び出すとエラー

このQ&Aのポイント
  • HTMLにショッピングカートを設置しています。リンクからCGIプログラムを呼び出すと問題なく動作するが、formから呼び出すと動作しない。
  • ブラウザーによって振る舞いが異なり、Firefoxでは「接続がリセットされました」、IEでは「IEではこのページは表示できません」と表示される。
  • FORMの呼び出し行を1行削除するとエラーにならないが、削除するとデータが変更されなくなる。自宅サーバー環境でCGIが動作する方法を教えてください。
回答を見る
  • ベストアンサー

HTMLのFORMからCGIを呼び出すとエラー

HTMLにショッピングカートを設置しています。HTTPDを起動して自宅サーバー環境でテストしたところ、全て正常に稼動しています。ところが同じソースを実際のサーバーにアップしたところ、リンクからCGIプログラムを呼び出すと問題なく動作するのですが、formから呼び出すと動作しません。 動作しないとはブラウザーによって振る舞いが違うのですが、たとえばFirefoxでは「接続がリセットされました」、IEでは「IEではこのページは表示できません」などとなります。FORMの呼び出し行を1行削除するとエラーにならない事までは確認したのですが、削除してしまうとそもそもデータが変更されなくなります。何をどう書き換えれば自宅サーバー環境と同じようにCGIが動作するのか、アドバイスをお願いします。 1:エラーとなるFORMの書き方 <form name="form1" method="post" action="../../cgi-bin/cart/shop.cgi"> <input name="action" type="hidden" id="action" value="in_goods"> -中略ー <input name="kazu" type="hidden" id="kazu" value="1"> <input name="imageField" type="image" src="../../images/kartbtm.gif" border="0"> </form> 2:エラーとならないFORMの書き方 下記の1行をはずす。 <input name="action" type="hidden" id="action" value="in_goods"> ただし、この場合カートに商品を入れてもデータベースが更新されない。 ローカルの環境ではカートに商品を入れてから買い物が終了しメールを送信するところまで全て正常に動作しております。 よろしくお願いします。

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

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

  • ベストアンサー
  • ralf124c
  • ベストアンサー率52% (232/446)
回答No.1

提示されている情報が「状況」のみで「環境」に関する情報ものがないので誰も原因の推測はおろか検証もできないとおもいます。 ECのソフト、リモートサーバ環境(ローカルは提示されていますが)、サーバ側のエラー情報、などです。 とくに、サーバ側のエラーログはレンタルサーバでもCGIが動作するところなら記録されていると思うのですがいかがでしょうか。 提示されているのはブラウザのエラーで、サーバからテキストでエラーメッセージを受信しているのでHTTPヘッダ情報として解釈できずにブラウザ独自のエラーを出しているだけではないでしょうか? なんとなく、DB周りの設定ミスっぽい気がします。 ローカル側のDBにアクセスしようとして失敗しているのでは?

sacuarian
質問者

お礼

自己解決しました。外部サブルーチンに間違ったパスが残っていたのが原因でした。大変お騒がせしました。ありがとうございました。

sacuarian
質問者

補足

おっしゃるとおりだと思います。自分自身、どのように質問してよいか迷いながら、困って書き込みしてしまいました。言葉足らずの質問に返信頂いて、大変申し訳なく思っております。 以下、あらためてわかる範囲で追記いたします。 ECソフトは特に使っておりません。HTMLから、Perlで書いたCGIを呼び出しております。リモートサーバーですが、Perl V5.8、MySQLV5.0.51a、共有SSL を使用しております。 サーバ側のエラーログは確認しましたが、残念ながら記録されてないとのことでした。 エラーの状況ですが、HTMLのFormからcgiを呼び出すと、エラーが表示されるときにURLが http://127.0.0.1/...と表示されるので、私も読み込もうとしているDBか何かが間違っているのではないかと考えています。 ソースの置かれたディレクトリですが、HTMLは通常のサイトにおいてあるのですが、ここからCGIをSSL環境で実行させるために、HTML内で共用SSLの絶対パスでCGIを呼び出して実行させています。CGIが使用するデータファイルもCGIと同じ共用SSLの環境においてあります。 カートの中身を確認するためのCGIリンクでエラーが発生せず、商品をカートに入れるFormからのCGI呼び出しでエラーが発生すると言う事は、やはりデータファイルの処理で失敗している可能性が高いと考えましたが、今のところ呼び出し箇所について問題は見つけられておりません。 様々な商品ページから商品をカートに入れるため、カートのCGIから戻るときにはJavaScript:history.back() を使っています。

関連するQ&A

  • 複数FORMの一括実行について

    通常であれば同一サイト内に下記のソース(フォーム)が入るのですが、 これを改良しサイト上で希望の送信先をチェックボックスで選択し一回の操作で複数のcgiを実行したく思います。 良いcgiがあれば教えてください。 又は改造ができるcgi、修正方法を分かりましたらお教え願います。 サイトA <form action="https://aaa.cgi" method="post"> <input type="hidden" name="名前" value="name"> <input type="hidden" name="メール" value="mail"> <input name="Submit" type="submit" value="送信"> </form> サイトB <form action="https://bbb.cgi" method="post"> <input type="hidden" name="名前" value="name"> <input type="hidden" name="メール" value="mail"> <input name="Submit" type="submit" value="送信"> </form> サイトC <form action="https://ccc.cgi" method="post"> <input type="hidden" name="名前" value="name"> <input type="hidden" name="メール" value="mail"> <input name="Submit" type="submit" value="送信"> </form>

    • 締切済み
    • CGI
  • CGIの組み方が解りません

    会社のHP制作しているのですが、 見積もりフォーム作ろうと思っています。 <FORM action=http://●●●.jp/●●●cgi method=POST >←良く解りません <INPUT type="hidden" name="mailto" value="●●●@●●●.jp"> <INPUT type="hidden" name="subject" value="見積もり依頼"> <INPUT type="hidden" name="location" value="formend.html"> どこかのサイトを拝見してこのような感じで行ったのですが、 最初のform actionが良く解りません。 そもそもCGIをどのようにつくり設置するのか根本的なことが良く解りません。 何処か解り易く説明しているcgiの組み方、メールフォームの作り方などがあれば教えてください。

  • ラジオボタンでうまくするには・・・・

    初めまして。 現在下記のプルダウン形式で、一つの価格が同じなので問題なく動くのですが <FORM action="cart/sys/cart.cgi" method="post"> <INPUT type=hidden value=005 name=num> <INPUT type=hidden value=●●● name=name> <INPUT type=hidden value=2000 name=tan> <SELECT name=sur> <OPTION value="" selected>購入数量</OPTION> <OPTION value=1>1</OPTION> <OPTION value=2>2</OPTION> <OPTION value=3>3</OPTION> <OPTION value=4>4</OPTION> <OPTION value=5>5</SELECT> <INPUT type=submit value=カートに入れる> </FORM><BR> <FORM action="・・・/cart.cgi" method="post"> <INPUT type=hidden value=005 name=num> <INPUT type=hidden value=●●● name=name> <INPUT type=hidden value=2000 name=tan> </FORM> 同じ商品で1・2・3・4・5のそれぞれに単価が変わる設定をしたいのですが、うまくいく方法が見つからないです。 ラジオボタン形式で作ってみたものの・・・・ <FORM action="・・・/cart.cgi" method="post"> <INPUT type=hidden value=005 name=num> <INPUT type=hidden value=●●● name=name> <INPUT type=submit value=カートに入れる> </FORM> <FORM> <INPUT type="radio" name="name1" value="2000">1袋<BR> <INPUT type="radio" name="name1" value="3900">2袋<BR> <INPUT type="radio" name="name1" value="5800">3袋<BR> <INPUT type="radio" name="name1" value="7500">4袋<BR> <INPUT type="radio" name="name1" value="8500">5袋</FORM> としてみましたがうまくいきません。 なにか方法ございましたら、ご教授いただければと思います。

    • ベストアンサー
    • HTML
  • 同一ページで複数のformを扱う場合

    同一のページ内にhiddenでIDを振った削除ボタンを用意しクリックされたIDを取得するにはどのようにすれば良いでしょうか? <form action="/test.php" name="1" method="post"> <input type="hidden" name="id" value="1" /> <input type="submit" name="delete" value="削除"> </form> -- 省略 <form action="/test.php" name="10" method="post"> <input type="hidden" name="id" value="10" /> <input type="submit" name="delete" value="削除"> </form> formにnameを振ってみても最後のIDがPOSTされてしまいます。

    • 締切済み
    • PHP
  • 送信先CGIの選択

    <form method="post" action="file.cgi"> <input type="hidden" name="password" value="xxx"> <input type="hidden" name="action" value="zzz"> <input type="text" name="name" size="50" value=""> </form> この場合、送信先CGIがfile.cgiに固定されていますが、action="送信先"をリストボックス等を使って複数選択できるようにしたいと考えています。可能でしょうか?

    • ベストアンサー
    • Perl
  • 別formのhidden項目を自form値として送信したい

    同ページ内に <form name="form1" action="aa"> <input type="text" value="123"> <!-- hidden項目は無い場合もある --> <input type="hidden" name="form1_1" value="xxx"> <input type="hidden" name="form1_2" value="yyy"> <input type="submit"> </form> <form name="form2" action="bb"> <input type="text" value="456"> <input type="hidden" name="form2_1" value="www"> <input type="hidden" name="form2_2" value="zzz"> <input type="submit"> </form> といった感じのformタグをおいています。 そこで、form2を送信する時に、form1のhiddenのみform2のformValueとして送信したいのですが、どんな風に飛ばしたらよいのでしょうか? というより、from2を飛ばすときに、他のformのhidden項目があったら自formの値として送信することってできるんでしょうか? javascriptでできるんでしょうか? 素人質問ですいませんが、何か足がかりになるようなものをご教授いただければと思います。

  • フォームよりCGIへ複数の値をPOSTしたい…。

    はじめまして。 現在、ショッピングカートのCGIを利用するためにHTMLを調整しています。 【単一商品の場合】 <FORM action="cgi-bin/cart/cart.cgi" method="POST"><INPUT type="hidden" name="shouhinnumber" value="0001"><INPUT type="hidden" name="shouhinmei" value="高級シャンプー"><INPUT type="hidden" name="kakaku" value="3000"> あとはセレクトフォームで数を選択して送信すれば正常に料金計算されるのですが、これが、内容量によって料金が異なる場合、どのようにHTMLを組めばよろしいのでしょうか。 ラジオボタンでそれぞれの行にINPUTを入れたが、先頭のINPUTしか認識せず、フォーム文を複数作るとマージンが空き、複数選択が可能になってしまう。 なお、CGIをいじるのは危険なので、HTML内でどうにかしたい・・・。 つまり・・・ 高級シャンプーの 260mlが1800円 500mlが3000円 というように単一商品名で代金が異なるものを1つのフォーム内でCGIへ送信できないでしょうか。 よろしくお願いいたします。

    • ベストアンサー
    • HTML
  • ローカル環境でのCGI

    社内アンケートとして、 CGIをもちいた、アンケートを制作しております。 <FORM ACTION="http://hogehoge.local/cgi-bin/aaa.cgi" METHOD="POST" onSubmit="return form_check(this)" name=""> なまえ:<INPUT TYPE="radio" NAME="name" VALUE="OK"> ~~~~~~ ~~~~~~ <INPUT TYPE="hidden" NAME="number" VALUE=""> <INPUT TYPE="submit" NAME="answer" VALUE="送信する"> <INPUT TYPE="reset" NAME="reset" VALUE="リセット"> </FORM> </form> でhoge.cgiを動かしたいと思っております。 サーバーへアップし、cgi-bin配下でパーミッションを設定した場合はきちんと動きます。 当たり前ですが、ローカル上では動かなかったです。 社内ネットワーク上 \\hogehoge\cgi-bin\aaa.cgi ⇒ http://hogehoge.local/cgi-bin/aaa.cgi 【動かず】 hogehogeというディレクトリのcgi-binディレクトリのaaa.cgiを修正しますと そのままcgiが動くようにしたいのです。 htmlはもちろんのこと動きます。 サーバーアップ http://hogehoge.local/cgi-bin/aaa.cgi 【動作確認OK】 という状態で困っております。

    • 締切済み
    • CGI
  • リンク先のcgiが開かない

    お世話になります。 既存のcgiを改造しているのですが、リンク先のcgiが開かず、何のエラーもなく、元のページが再表示されてしまっています。何が原因なのでしょうか? ソース自体は改造前と見比べてみても(パラメータを追加した以外)なんら変わりはありません。 <FORM METHOD=POST ACTION="t02.cgi"> <INPUT TYPE=HIDDEN NAME=A VALUE="123"> <INPUT TYPE=HIDDEN NAME=MODE VALUE="111"> <INPUT TYPE=HIDDEN NAME=BU VALUE="DD"> <TD COLSPAN=6>&nbsp;&nbsp;<INPUT TYPE=SUBMIT VALUE="ダウンロード"></TD> </FORM> 上記のようなテキストをperlで組み立ててスキンにはめ込んで作っています。 よろしくお願いします。

    • 締切済み
    • CGI
  • 一つのページで二つのFormを別々に使いたい

    <body> <form name="fm1"> <input type="hidden" value="1" id="page"> <input type="button" value="送信する" onClick="execute()"> </form> <form name="fm2"> <input type="hidden" value="2" id="page"> <input type="button" value="送信する" onClick="execute()"> </form> <div id="container">content</div> </body> </html> 上記のように同じ関数execute()を実行するのですが、受け渡す値がvalue="1" と value="2"と別々になっています。 素人考えではフォームfm1とfm2とは別々の値(1or2)を渡すと思ったのですが、どちらのボタンを押してもvalue="1"の結果となります。 二つのフォームを別々に動作させるにはどのようにすればよいでしょうか。

専門家に質問してみよう