• 締切済み

cgi-libを使って変数値渡しをしたいのですが

cgi間の変数渡しの質問をしたのですが、うまくいかなかったので、調べてみると、 cgi-lib.pl'を使うことで簡単に値を渡せるということが分かりました。 ですが、 use lib '/home/www'; require 'cgi-lib.pl';# cgi-lib.plを呼び出す $test=1000; # 変数値渡し? form_input_post.cgi?name=$test; &ReadParse(*in); として、$testの値をform_input_post.cgiに渡そうとしたのですが。 コンパイルエラーが出てしまいました。 Can't modify constant item in scalar assignment at form_input_post.cgi line 49, near "$test;" syntax error at form_input_post.cgi line 49, near "$test;" form_input_post.cgi had compilation errors. というエラーです。 初歩的なミスな気がしますが原因がわからないので教えて頂きたいです。 よろしくお願いします。

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

みんなの回答

回答No.2

前の質問の流れを見ての推測ですが、 HTMLの<form>って何ですか?ではないでしょうか? もしそうなら、CGI、Perlの前に、HTML(とくにform関連)はどういうものかというのを勉強したほうがいいんじゃないかと思います。 (ブラウザの処理)formを送信 -> (サーバー(CGI,perl)の処理)HTMLを出力 -> (ブラウザの処理)<form action="form_input_post.cgi">を送信 -> (サーバー(CGI,perl)の処理) form_input_post.cgiを実行 という流れになると思います。 >前質問 <meta>でrefreshしてるようですが、送信した内容が表示されないというのはそれじゃないですか? -------------- 以下、全くの余談。 /.J に聞け: プログラミングに関する質問はどこに寄せれば良い? http://developers.slashdot.jp/story/12/04/26/0132206/ 中程の回答 >Re:回答者の無意味な質問返しが超大嫌い。 それを承知で、こういう回答の仕方をしていますので、悪しからずご了承ください。

kmwrod
質問者

お礼

返信ありがとうございます。 まだ、htmlもあまりよくわかっていない状態で、cgiを組むことになってしまっているので、こんなプログラムになっています。 頑張ります・・・

kmwrod
質問者

補足

><meta>でrefreshしてるようですが、送信した内容が表示されないというのはそれじゃないですか? refreshを消してみましたがダメでした。

  • kmee
  • ベストアンサー率55% (1857/3366)
回答No.1

そりゃ出るでしょ。 ブラウザでのURLと、CGIでの実際の動作がごっちゃになってます。 form_input_post.cgi がCGIのプログラムだとして Perlのスクリプトにプログラムを直接書いても実行できません。 これは、Perlスクリプト中に ls だの cat だの書くのと同じことです。 パラメータを"?name=$test;"みたいには渡せません。CGIには、サーバーがこれを解釈してGETまたはPOSTの仕様に合せた方法で渡します。(GET方式なら環境変数QUERY_STRINGに入れるとか) http://okwave.jp/qa/q7439086.html の続きですよね? 送信側は正しいですか?たとえば#3のコードを使って、ブラウザで表示させて、そのソースを確認したら <input type="hidden" name="key0" value="$array1[0]の内容"> という感じになってますか? <input type="hidden" name="key0" value=""> とかなってないですか? CONTENT_LENGTH が0なら、そもそものデータが送られてない、ってことになります。 文字列相当の値になってますか? getにしたらどうですか? 自作ルーチンではなく、cgi-lib.plで読むようにしたらどうですか?

kmwrod
質問者

お礼

返信ありがとうございます。 返信内容を参考に、もう少し勉強してみます。

関連するQ&A

  • CGI.pmとcgi-lib.plの差異について・・・

    formで送信したデータをCGI.pmで受け取った場合と、 cgi-lib.plで受け取った場合に差異があるのでしょうか? cgi-lib.pl内で「\0」を組み込む処理があるのが気になります。

    • ベストアンサー
    • CGI
  • cgi.pmとcgi-lib.pl

    こんばんは。 cgi-lib.plを引用したCGIが動かないので、cgi.pmでためしにやろうと思っています。 そこでひとつ調べてもわからないのですが、cgi-lib.plのReadParseでは%inにフォームで送信したデータが全て入るのに対し、cgi.pmではいったいどこに全てのデータが格納されているのでしょうか?要素ごとに取り出す方法は調べることができましたが、配列ごとまとまって入っているところがわかりません。 ご存知のかた教えてください。よろしくお願いします。

  • perl cgiの局所変数について

    現在perlを使ってcgiのプログラムを組んでいるのですが、初歩的なことがよくわかっておらず、難儀しております。 調べてみたのですが中々理解できず困っているので助けてほしいです。 全てを書くと長くなってしまうので端折って書かせていただきます。 現在、局所変数のエラーで詰まっております。 送信プログラムのGETを使用していたのですが、セキュリティ的に危険ということがわかりまして、 POSTを使うように変更しました。 しかし、エラーが発生し、進まなくなってしまいました。 use strictを記述した後にエラーが発生し、原因を調べたところ、大域変数の使用を禁止してしまうという効果があることがわかりました。 検索して調べて出てきた対策として、全ての変数を定義して、myを記述すれば解決できるとあったので、myを記述してみたところ、エラーが発生してしまいました。 Can't declare null operation in my at ****.cgi line 38, near "tr/+/ /;" Execution of /virtual/www/****.cgi aborted due to compilation errors. というエラーが取れないです。 @array2 =~ tr/+/ /; という記述に問題があるらしいということしかわからないのですが、よくわかりません。 すみませんが、教えて頂きたいです。

    • ベストアンサー
    • CGI
  • cgi-lib.plのReadParse関数

    あるパールからcgi-libを呼び出して、ReadParse関数を使おうとするとInternal Server Errorがでてしまいます。 パールの中身は #!/usr/local/bin/perl require 'cgi-lib.pl'; require 'jcode.pl'; &ReadParse(*in); です。 そこで3行目と5行目の行頭に#をつけて飛ばすとパールは正常に動きます。 これってcgi-lib.plのReadParse関数がいけないんでしょうか? ダウンロードしたまま何も変更していないのに..... ちなみにサーバーのパールのバージョンは5.004のようです。

    • ベストアンサー
    • CGI
  • 変数の代入

    http://oshiete1.goo.ne.jp/kotaeru.php3?q=620304 の続きなのです。変数の取得の仕方はわかったのですが、 require '../lib/cgi-lib.pl'; &ReadParse(*in); $year=$in{'year'}; $month=$in{'month'}; のように値を .html からひらってきているような場合、値が0(なし)になってしまうと思うのですが、こういった場合、どういう方法をとるのでしょうか?

    • ベストアンサー
    • 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
  • javascriptからCGIへの値渡し

    cookieは利用しない方向で考えています。 HTML上のdocument.form01.のsubmitが押下されたら一度手入力されたデータ(userinput)を加工し、 別のフォームform02.valueに格納してtest.cgiにPOSTで投げる動作を期待しています。 下記だとページ遷移無しで一時的な格納まで確認しましたが CGIへの送信が機能していないようです。 どの様にすべきでしょうか? [html] <script type="text/javascript"> <!-- function onSubmit() { document.form02.sendform.value = '\"' + document.form01.userinput.value + '\"'; document.form02.submit(); } --> </script> <body> <form name="form02" method="POST" action="test.cgi"> <input type="hidden" name="sendform" value=""> </form> <form method="POST" action="" name="form01"> <input type="text" name="userinput"> <input type="submit" value"送信" onclick="return onSubmit();"> </form> </body> </html>

  • cgi-lib.plのShort read~というエラーについて

    perlで画像掲示板の作っています。今まで特に問題なかったのですが、突然投稿する際に、「Short Read:1370,got 0」というエラーが表示されるようになってしまいました。 cgi-lib.plをrequireしているので、その部分を読んではみたのですが、どういったエラーなのかがわかりません。 cgi-lib.plの解説ページなどもみたのですが、cgi-lib.plがどういったものかということを説明するものばかりでエラーについては探しても見つからなかったのでこちらに投稿しました。 このエラーがどういったもので、どのように対処すればよいかご存知の方がいらっしゃいましたら、ご回答をよろしくお願いします。

    • ベストアンサー
    • CGI
  • CGIでsoft were errorが出ます。。。

    CGIフォームを設置して試しに送信ボタンを押してみると、柿のエラーが出ます。 Software error: Can't modify subtraction (-) in scalar assignment at form.cgi line 38, near ");" Execution of form.cgi aborted due to compilation errors. 同じパターンのフォームを同じ階層上に置いてあり、そちらは上手く動作します。 今回のフォームは、多少項目をいじったため、CGIの方もそれにあわせて修正したのですが、どこがどう間違ってるのかわかりません。 アドバイスお願いいたします。 また、line 38, near というのは、CGIの中の38行目付近という意味でしょうか? その場合、38というのは、どこからどう数えればよいのでしょうか?

  • htmlからcgiに変数を配列にして渡すとき

    フォームにて、質問1,2,3…と入力してもらい、 1を答えないで2を答えるとか、 2を答えないで3を答えるとかを排除したいので、 変数を配列にして受け取りたいのです。 とりあえず今のところはこうなってます。↓ #htmlファイル# <INPUT type="text" size="30" name="situmon[1]"> <INPUT type="text" size="30" name="situmon[2]"> ... としてcgiに持っていき、 #cgiファイル# for($i=1; $i<=4; $i++){ if($form{'situmon[$i]'} eq "" && $form{'situmon[$i+1]'} ne ""){ &error; #→エラーメッセージサブルーチン exit; } } のようにして受け取ろうとしてるのですが、うまくいきません。 上のようにhtmlではどう書くべきか、cgiではどう受け取るべきかを教えてくだされば嬉しいです。

    • ベストアンサー
    • CGI

専門家に質問してみよう