if文を入れるとcgiが動かない?【Ruby】
- Rubyのプログラムにif文を追加すると、cgiが動かない現象が発生しています。
- 正常に動作するプログラムに、name1に文字列が入っていた場合に動作する処理を追加すると、ブラウザが白紙になります。
- エラーメッセージは表示されず、間違いがどこにあるか教えてほしいです。
- ベストアンサー
if文を入れるとcgiが動きません。【Ruby】
下記のプログラムは正常動作します。 #部、name1に文字列が入っていたら動作するプログラムを 追加すると、ブラウザが白紙になります。エラーなしです。 間違いを教えてください。このファイルはhoge.cgiです。 #!/usr/bin/ruby print "Content-type: text/html\n\n" require "cgi-lib" input = CGI.new #if name1 #print "name is ", name1 #end print <<-"EOB" <form method="POST" action="./hoge.cgi"> name<input type="text" name="name1" size="10"> <input type="submit" value="send"> </form> </body> </html> EOB
- apache6
- お礼率41% (79/190)
- その他(プログラミング・開発)
- 回答数3
- ありがとう数3
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
フォームからのデータを取得したいのでしたら以下のようにすれば動くと思います。 input = CGI.new name1 = input['name1'] ←これを追加 if name1 動作確認はしていませんが多分大丈夫だと思います。
その他の回答 (2)
- kiro0000
- ベストアンサー率48% (15/31)
参考URLをのせるのを忘れてました。 動かないようでしたら参考にしてみて下さい。
- kiro0000
- ベストアンサー率48% (15/31)
name1の定義がないからではないでしょうか? 「#if name1」の前に「name1 = ""」とか適当に何か代入して試してください。
補足
早速やってみました。 action="./hoge.cgiで再読込する際、 name1に入っている文字列が""になってしまいます。 name is は表示されるようになりました。 name1=nilとすることによってtextボックスは 表示されるようになりました。この場合、 何を入力してもprint文は実行されません。
関連するQ&A
- Rubyでファイル転送
Rubyでファイル転送のcgiを作成してみましたが動作しません。 実行後は選択したファイル(aa.jpg等)が作成されますが、 容量がゼロです。(FTPで確認) Apacheエラー------ undefined local variable or method `input'for main:Object(NameError) 変数nameはファイル名であり、c:\等は含まれていません。 ruby1.8.2------ #!/usr/bin/ruby -Ku print "Content-type: text/html\n\n" require "cgi" require 'net/ftp' input = CGI.new.params; cgi = CGI.new $name = input["name"][0] if input["name"][0] open("/home/movies/#{$name}","w") do |fh| fh.binmode fh.write imput['name'][0].read end end html------ <form action="***" method="get" enctype="multipart/form-data"> <input type="file" name="name" size="30"> <input type="submit" name="regist" value="選択"></form>
- ベストアンサー
- その他(プログラミング・開発)
- perlがうごきません
htmlファイルには <html> <form action="form2.cgi" method="get"> 食品名1<input type="text"name="form1"> <br> 食品名2<input type="text"name="form2"> <input type="submit"value="送信"> </form> </html> cgiファイルには #! /usr/bin/perl require "cgi-lib.pl"; &ReadParse(); print "Content-type:text/html\n"; print "\n"; print "<html>\n"; print "<head>\n"; print "<title>フォーム</title>\n"; print "</head>\n"; print "<body>\n"; print "おいしい$in{'form1'}\n"; print "まずい$in{'form2'}\n"; print "</body>\n"; print "</html>\n"; exit; cgi-lib.plはサーバーにいれております。 どうしてうごかないのでしょうか。 perlの場所も正確です。
- ベストアンサー
- Perl
- if 文についての質問です。
下記ようなプログラムで、HTML 上のフィールド (AAA)が(100) で (BBB)が(200) の場合 (300) を (変数の$answer) に格納し、実行結果を Sendmail で送信する為、新しく生成された HTML 上のフィールド (CCC) に表示したいのですが、どこが間違っているのでしょうか?お手数ですがどなたか記述上、間違っている箇所をお教え頂けると有難いです。 ---------------------------------------------------------------- #!/usr/local/bin/perl #!/usr/local/bin/perl require "cgi-lib.pl"; &ReadParse(); print "Content-type: text/html\n\n"; print <<HTML_DOCUMENT; if ($in{'AAA'} eq "100" and $in{'BBB'} eq "200") { $answer = '300'; } <html> <head> <title>Web Design [ Estimate - Order ]</title> </head> <body> <form action="test_sendmail.cgi" method="post"> <input name="AAA" type="checkbox" id="AAA" value="100"> <input name="BBB" type="checkbox" id="BBB" value="200"> <input name="CCC" type="text" id="CCC" value="$answer" size="10"> </form> </body> </html> HTML_DOCUMENT
- 締切済み
- Perl
- Perlがサーバー上でうごきません
htmlファイルには <html> <form action="form2.cgi" method="get"> 食品名1<input type="text"name="form1"> <br> 食品名2<input type="text"name="form2"> <input type="submit"value="送信"> </form> </html> cgiファイルには #! /usr/bin/perl require "cgi-lib.pl"; &ReadParse(); print "Content-type:text/html\n"; print "\n"; print "<html>\n"; print "<head>\n"; print "<title>フォーム</title>\n"; print "</head>\n"; print "<body>\n"; print "おいしい$in{'form1'}\n; print "まずい$in{'form2'}\n; print "</body>\n"; print "</html>\n"; exit; cgi-lib.plはサーバーにいれております。 どうしてうごかないのでしょうか。
- ベストアンサー
- Perl
- RubyでCGIが動きません。
RubyでCGIを作ってApacheを使ってアプリの練習をしようとしていますが、CGIのお置き場所かApacheの設定かCGIの書き方が悪いのかIEで動かすとCGIの内容を中途半端に実行して下記のようになってしまいます。 #!/ruby/bin/ruby -Ks print "Content-type: text/html\n\n" print "" print "" print "" print "" print "こんにちは、Ruby!" print "" CGIのソースは #!/ruby/bin/ruby -Ks print "Content-type: text/html\n\n" print "<html><head>" print "<meta http-equiv=\"Content-Type\" content=\"text/html; charset=Shift_JIS\">" print "<title>RubyでCGI</title></head>" print "<body>" print "こんにちは、Ruby!" print "</body></html>" 一番簡単なプログラムだと思うのですが、どこがいけないのでしょうか。ちなみにOSはVISTAです。 ちょっと気になるのはApacheMonitorServerが動かないこともあります。タイトルにはErrorと出ますが、メッセージでは「この操作を正しく終了しました」と出ます。 ちなみにApacheは動いてます。LocalHostで確認できました。 どなたかどうすれば良いのか教えて頂けないでしょうか。 よろしくお願いします。結構長い時間悩んでいます。
- 締切済み
- CGI
- CGIでフォームからの入力内容を表示されない。
初歩的な質問ですみません。 自宅サーバを使っています。 ■ActivePerl 5.8.8 Build 822 ■httpd142p ------------------------------ ■httpd142p ┗■cgi-bin ┣■cgi-lib.pl ┣■test.cgi ┗■test.html ------------------------------- CGIは動作します。 一行目のパスもあっています。 --------------------------- 【test.cgi】 #!C:/perl/bin/perl #require './cgi-lib.pl'; #&ReadParse(*MYDATA) print "Content-type: text/html\n\n"; print "<HTML>\n"; print "<TITLE>RESULT</TITLE>\n"; print "<BODY>\n"; print "氏名 = $MYDATA{'simei'}\n\n"; print "住所 = $MYDATA{'jyusyo'}\n"; print "</BODY>\n"; print "</HTML>\n"; exit; -------------------------------- 【test.html】 <HTML> <HEAD> <TITLE>TEST</TITLE> </HEAD> <BODY> <P> <FORM ACTION="test.cgi" METHOD="POST"> 氏名:<INPUT TYPE="text" NAME="simei"> 住所:<INPUT TYPE="text" NAME="jyusyo"> <INPUT TYPE="submit" VALUE="送信"> <INPUT TYPE="reset" VALUE="リセット"> </P> </FORM> </BODY> </HTML> ---------------------------------- ■実行結果 氏名 = 住所 = ---------------------------------- どなたかご教授ください。
- ベストアンサー
- 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
- Ruby CGI HTTPヘッダ
Rubyで、 CGIがクライアント(ブラウザ等)から受けたHttpリクエストヘッダとその値を全て取得して表示したいです。(どのようなヘッダが付与されても) 以下を例に教えてください。 #!/usr/bin/ruby require 'cgi' cgi = CGI.new puts "Content-Type:text/html\n\n" puts "<html>\n" puts "<body>\n" #ここにどのように書いたら良いですか? puts "</body></html>\n"
- ベストアンサー
- その他(プログラミング・開発)
- チェックボックスについて(ruby)
cgiのプログラムでチェックボックスについてわからないことがあります。 今書いてある、プログラムだとすべての値を受け取ってしまいます。 選択されたものだけ表示させるようにさせたいと思っています。そのプログラムfor文で書いているのですが、どのように書いたらよいのでしょうか? 教えてください、お願いします! <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=EUC-JP"> <title>プロフィール入力ページ</title> </head> <body> プロフィールを入力してください。<br> <form method="GET" action="http://profile2.cgi"> 名前: <input type="text" name="name"> <br> <br> 性別: <input type="radio" name="sex" value="男性">男 <input type="radio" name="sex" value="女性">女 <input type="radio" name="sex" value="その他">その他 <br> <br> 趣味: <input type="checkbox" name="hobby" value="映画">映画 <input type="checkbox" name="hobby" value="音楽">音楽 <input type="checkbox" name="hobby" value="スポーツ">スポーツ <input type="checkbox" name="hobby" value="料理">料理 <input type="checkbox" name="hobby" value="その他">その他 <br> <br> <br> <input type="submit" value="送信"> </form> </body> </html> #!/usr/local/bin/ruby print "Content-type: text/html; charset=euc-jp\n\n" $KCODE = "e" require "cgi" cgi = CGI.new namae = cgi["name"] sei = cgi["sex"] syumi = cgi.params["hobby"] ary = ["映画, ", "音楽, ", "スポーツ, ", "料理, ", "その他 "] str = ary[0] + " " + ary[1] + " " + ary[2] + " " + ary[3] + " " + ary[4] + " " syumi = "" for x in str syumi = syumi + x end print <<EOS <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=EUC-JP"> <title>プロフィールの確認</title> </head> <body> 名前: #{namae} <br> <br> 性別: #{sei} <br> <br> 趣味: #{syumi} </body> </html> EOS 動作環境はruby 1.8.7 (2010-01-10 patchlevel 249) [i686-linux]になります。
- ベストアンサー
- CGI
- 任意文字の消去
Rubyで一行チャットを作っておるのですが、 どうしてもリロードする毎にnilが画面に出てしまいます。 どうすれば、消えるのか教えてもらいませんか? cgiのコード #!/usr/local/bin/ruby print "Content-type: text/html\n\n" #html入力フォーム print <<EOF; <html> <body> <h4>チャットだお(´・ω・`)</h4> <form method="POST"> nameフォーム<input type="text" name="senddata2" size="20"><br> 本文フォーム<input type="text" name="senddata" size="80"> <input type="submit" value="送信"> </form> EOF #data.logを表示 log = "" FILENAME = "data.log" fh = open(FILENAME) fh.each{|l| log += l } fh.close print <<EOF; #{log} EOF #data.logに書き込み&リロード require "cgi-lib" input = CGI.new senddata2 = input["senddata2"] senddata = input["senddata"] fh = open(FILENAME, "a") fh.print senddata2 fh.print "> "+senddata+"<br>" fh.close print <<EOF; <meta http-equiv="refresh" content="0"> </body> </html> EOF 動かしているURL http://shu.hippy.jp/test.cgi
- ベストアンサー
- Ruby
お礼
無事、動作することを確認いたしました。 ありがとうございました。