CGI初心者です。
自分で掲示板を作ってみようとして書いてみたんですが、送信した時にhiddenで数値を持たせようとするんですが、受け取れません。なにか宣言や、処理が必要なのでしょうか。
ちなみに、
<input type = hidden name = mode value = "write">
・・・

if(FORM{'mode'} ep 'write'){
・・・
という感じにしています。

A 回答 (4件)

>サブミット後はプログラムの初めからまた読み直すんではないんでしょうか?



フォームの処理とサブミット後の処理はスクリプトを分けることも可能なので確認しました。
それではフォームからの値の取り出し部分を見たいのですが、ReadParse後の処理を補足欄に記載して頂けますか?
    • good
    • 0
この回答へのお礼

度々すいません。
>それではフォームからの値の取り出し部分を見たいのですが、ReadParse後の処理を補足欄に記載して頂けますか?
と回答をもらい、記載しようとしてまとめていたところ、"ReadParse後の処理"と言うところで(私はReadParseがどういう処理をすくかが良く分からなかったので自分でデコードを書いていたんですが、デコードにエラーチェックを連動してつけていたため、最初のフォームの表示で何もデータが無いとエラーが出てしまうので、送信した後からデコードをするようにしていました。)ハッとなって、デコードを先に持ってきたらきちんと動いてくれました。
本当に初歩的なミスですいません。大変親身になって答えていただいて助かりました。ありがとうございました。

お礼日時:2001/08/22 11:29

hiddenではない変数が$FORM{'**'}という形で受け取れているのであれば、


hiddenでも同様に受け取れると思います。

確認して欲しいのが、
submitボタンを設置している<form>と</form>の間に
<input type = hidden name = mode value = "write">
を書いていますでしょうか?

ちなみに$FORM{'mode'}をプリントしてみたら値は何も入ってなかったですか?

if(FORM{'mode'} ep 'write'){

"$"がぬけているのもありますが、"eq"であるはずのところが"ep"になっていますよ。
それが原因の可能性もありますので注意してくださいな。
    • good
    • 0
この回答へのお礼

丁寧な回答ありがとうございます。
"$"や"eq"のところは、スクリプトの方ではきちんとなってました。
("$"はスクリプトを書いていてもしょっちゅう抜けてエラーを出してます(笑))
"<input type = hidden name = mode value = "write"> "の方も、正しい場所に置いてありました。

お礼日時:2001/08/22 11:35

>$FORM{'mode'}という呼び出しが悪いんでしょうか?



$FORM{'mode'}は合っています。(但し質問文の方は「$」が抜けてますね)
スクリプト全体が見えないので何とも言えないのですが、hiddenで指定した項目はフォームのサブミット後に参照可能となりますので、上記の参照はサブミット後に呼び出される処理の中で行われなければなりません。
まずはこの辺りからチェックしてみてください。

この回答への補足

丁寧な回答ありがとうございます。
サブミット後に呼び出される処理の後と書いてありますが、サブミット後はプログラムの初めからまた読み直すんではないんでしょうか?
私はそのつもりで書いているのですが・・・。

補足日時:2001/08/21 19:17
    • good
    • 0

<input type="hidden" name="mode" value="write">



という風に書き換えてみてください。
(空白にも注意!)

この回答への補足

回答ありがとうございます。やってみましたが、相変わらず動きません。
$FORM{'mode'}という呼び出しが悪いんでしょうか?
hiddenを使うと何処に数値が返ってくるのか良く分からないんで、出来たら教えて欲しいんですが。

補足日時:2001/08/21 17:44
    • good
    • 0

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

このQ&Aと関連する良く見られている質問

Q$ENV{'REMOTE_HOST'}について

CGIにて$ENV{'REMOTE_HOST'}を取得したところ
スパム投稿なのですが、$ENV{'REMOTE_HOST'}が
IPアドレスの値である142.54.182.186が入っていました。
普通はkd182249232116.au-net.ne.jp
などという形になると思うのですが
142.54.182.186
となっていることが通常ありえるのでしょうか?
リモートホストを取得し、IPアドレスの形式であった場合、
この投稿者を弾いてしまっても問題ありませんか?

Aベストアンサー

IPアドレスが入っているか、ホスト名が得られるかは、Apacheの設定によります。
ホスト名を得る設定になっていてもDNSの逆引きがその時たまたま失敗すると、IPアドレスのまま設定されます。
なので、「ホスト名が入っていたら儲けもの」くらいの感覚で扱うのがよいかと。

Q$ENV{'QUERY_STRING'}以外で引数を取得するには?

CGI上で$ENV{'QUERY_STRING'}を使用しないで引数を取得するにはどうしたらいいのでしょうか?

hoge.cgi?XXXX の XXXX を取得したいのですがある理由によって$ENV{'QUERY_STRING'}が使用できません。

よろしくお願いいたします。

Aベストアンサー

hoge.cgi?xxxx ではなく、
hoge.cgi/xxxx という表記のURIが許されるなら、
$ENV{'PATH_INFO'}を使う方法があります。

QCGI name= が同じではダメってでたんですが・・・

ダウンロードCGIにて、設置してHTMLの文法テストをしたら
「name= が同じでは、CGI側ではそれらを区別できません。」
ってなったんですけど、動作は正常にするようなのですが、
調べても知識がないせいかどうしたら良いかちょっとわかりません・・・
hidden だから関係ない?と初心者考えですが、文法テストは正しいし
でも不具合が心配なので、誰か教えて下さい <(_ _)>

<input type="hidden" name="sw_aress" value="">
<input type="checkbox" name="sw_aress" value="1">レス数
<input type="hidden" name="sw_ref" value="">
<input type="checkbox" name="sw_ref" value="1">回数

Aベストアンサー

長文になってしまいました。m(_ _)m

該当のサイトの解説文を読みました。
http://openlab.ring.gr.jp/k16/htmllint/explain.html
> 165
> TYPE=TEXTなどのように、VALUE属性の値が固定的でないものに対して、同じ名前の要素がひとつのFORM内で複数存在すると、CGI側ではそれらを区別できません。

「TYPE=TEXTなどのように」となっていますね。
ですが、CGIはこれらを区別できますので、解説文が間違っているようです。
もちろん、区別しないように作ったり、言語仕様として区別しない物(PHP)もありますが、
HTMLの解説として「できない」と限定して書くことではないと思います。
テキストフィールドの場合にのみ区別しない、という作り方をするのは、
「全て区別しないか全て区別する」よりもはるかに難しいですし、場合によっては不可能です。

> VALUE属性の値が固定的な、TYPE=RADIO/CHECKBOX/SUBMIT/RESET/BUTTON/IMAGEとHIDDENについては警告されません。

このように書かれていますので、hiddenやcheckboxで警告がでるようなら、このチェッカーのバグと思われます。
「hiddenとcheckboxの両方で使っている場合」については言及されていませんので、あながちバグとも言い切れませんが。


質問とは関係ないことですが、
> SUBMITにNAMEがない場合は無効 (If the NAME attribute is not present, this element does not contribute a form field.) だとされています。
調べたところ、HTML2.0でこの定義がされているようですが、HTML4.01やXHTMLではこの定義はありません。
特定のHTML/XHTMLのバージョンだけの内容を、全てのバージョンに適用してしまっているようです。
(このサイトは、こういう不具合や語弊のある書き方が多いです。)

なお、ボタンとしては機能しますが、valueを送信しなくなります。(文法とは関係ありませんが)

さらにHTML2.0の文法書を読んでみると、
http://www.w3.org/MarkUp/html-spec/html-spec_8.html
「does not contribute a form field」の意味は「無効」ではなく、
HTML4.01と同じ、「サーバーに値を送信しない」の意味で使われていると思います。

> RESETの項目の例より
When you are finished, you may submit this request:
<input type=submit><br>
You may clear the form and start over at any time: <input type=reset>

via: contribute
http://dic.yahoo.co.jp/dsearch?p=contribute&stype=1&dtype=1


> CGIの部分も間違っているのか不安なのです・・・難しいですね。
CGIを使用していても、ブラウザが見ているのはそこから出力されたHTMLですので、扱い方法は同じです。

HTMLの文法としては、全く問題はありません。
オリジナルのスクリプトでsw_refやsw_aressを何度も使われているなら、
むしろ複数あることで正常に動作する物と思われます。

長文になってしまいました。m(_ _)m

該当のサイトの解説文を読みました。
http://openlab.ring.gr.jp/k16/htmllint/explain.html
> 165
> TYPE=TEXTなどのように、VALUE属性の値が固定的でないものに対して、同じ名前の要素がひとつのFORM内で複数存在すると、CGI側ではそれらを区別できません。

「TYPE=TEXTなどのように」となっていますね。
ですが、CGIはこれらを区別できますので、解説文が間違っているようです。
もちろん、区別しないように作ったり、言語仕様として区別しない物(PHP)もありま...続きを読む

QQUERY_STRINGSで'#'文字を受け取るには

次から次へと質問ばかりでスミマセン・・・

GETメソッド前提で、QUERY_STRINGでデータを受けるようなCGIを作っています。

ところが、普通の文字の受け渡しは何の問題も無いのに、途中に'#'が入ると、
そこから後ろが消えてしまっています。

'#'も含めて、全部受け取る方法って無いでしょうか・・?
よろしくお願いします。m--m

Aベストアンサー

# という文字は、ページ内リンクの位置を示すために使われています。これはブラウザがページを表示する時に使うだけのものなので、サーバーには送信されません。

ですので、# という文字をサーバーに送りたかったら、他の記号などと同じくエスケープしなければなりません。# の文字コードは 0x23 ですから、# の代わりに %23 と書いて下さい。

Qレンタルサーバーで を吐き出そうとしたのですが、禁止なのですか

CGIの勉強をしているものです。

激安サーバーを借りて自作CGIを置いてみました。
HelloWorld的なCGIのレスポンスが返ってくることまでは確認できました。
実験したのはPythonですが、言語は関係ないと考えています。
サーバーはたぶん Linux + apache だと思うのですが、レンタルサーバー会社が情報を公開していないっぽくて、今のところハッキリ分りません。
(perl・RUBY・Python 2.3.4に対応!と謳っているサーバーです)


【現象】
実験的に、
<base href="http://XXX.co.jp">
のようなレスポンスを返すようにしてみたところ、この行の出力部分以降が無視されてしまいました。
(XXX.co.jpの部分は、実際には有効なドメインです)
試しに単なるHTMLファイル内に
<base href="http://XXX.co.jp">
を書いてみたら、その部分だけ、除去された形のHTMLが返ってきました。


【質問】
質問点は次の2点です。

1.レンタルサーバーではこのようなことはあたりまえなのでしょうか。
2.もしサーバー側の制限であれば、そのような制限のないレンタルサーバーはないでしょうか。


【蛇足】
勉強のために Python で組んでみたのですが、漫然と勉強をしていても上達しないので、なにか実用的で簡単なものを作ろうと思い、<base ... > 機能を使った自作CGIを作ってみました。
が、結果的に制限されているのであれば、多少高くても、使えるところを探して乗り換えたいと考えているような状況です。

※当該サーバー管理会社に質問すべきかもしれませんが、激安サーバーのため、技術的な質問は一切受け付けないとのことで、こちらでご存知のかたらいらっしゃればと思い、質問させていただきました。

CGIの勉強をしているものです。

激安サーバーを借りて自作CGIを置いてみました。
HelloWorld的なCGIのレスポンスが返ってくることまでは確認できました。
実験したのはPythonですが、言語は関係ないと考えています。
サーバーはたぶん Linux + apache だと思うのですが、レンタルサーバー会社が情報を公開していないっぽくて、今のところハッキリ分りません。
(perl・RUBY・Python 2.3.4に対応!と謳っているサーバーです)


【現象】
実験的に、
<base href="http://XXX.co.jp">
のようなレスポン...続きを読む

Aベストアンサー

Version 1.5.3
・BASEタグが利用できない携帯電話対策としてBASEタグを利用しないモードを追加
http://www.yumemaboroshi.net/cgi236/

base タグが使えない条件があるなんて知りませんでした。


このカテゴリの人気Q&Aランキング

おすすめ情報