プロが教える店舗&オフィスのセキュリティ対策術

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.
というエラーです。

初歩的なミスな気がしますが原因がわからないので教えて頂きたいです。
よろしくお願いします。

A 回答 (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/013 …
中程の回答
>Re:回答者の無意味な質問返しが超大嫌い。
それを承知で、こういう回答の仕方をしていますので、悪しからずご了承ください。

この回答への補足

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

refreshを消してみましたがダメでした。

補足日時:2012/04/30 14:38
    • good
    • 0
この回答へのお礼

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

頑張ります・・・

お礼日時:2012/04/30 10:20

そりゃ出るでしょ。


ブラウザでのURLと、CGIでの実際の動作がごっちゃになってます。

form_input_post.cgi がCGIのプログラムだとして

Perlのスクリプトにプログラムを直接書いても実行できません。
これは、Perlスクリプト中に ls だの cat だの書くのと同じことです。

パラメータを"?name=$test;"みたいには渡せません。CGIには、サーバーがこれを解釈してGETまたはPOSTの仕様に合せた方法で渡します。(GET方式なら環境変数QUERY_STRINGに入れるとか)



http://oshiete.goo.ne.jp/qa/7439086.html
の続きですよね?

送信側は正しいですか?たとえば#3のコードを使って、ブラウザで表示させて、そのソースを確認したら
<input type="hidden" name="key0" value="$array1[0]の内容">
という感じになってますか?
<input type="hidden" name="key0" value="">
とかなってないですか?

CONTENT_LENGTH が0なら、そもそものデータが送られてない、ってことになります。
文字列相当の値になってますか?

getにしたらどうですか?

自作ルーチンではなく、cgi-lib.plで読むようにしたらどうですか?
    • good
    • 0
この回答へのお礼

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

お礼日時:2012/04/30 10:19

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!