• ベストアンサー

RubyでCGIからの入力値を数値として扱いたい

ウェブのフォームから数値を入力し、 それを受け取って、cgiの中で演算したいのですが、うまくいきません。 input = CGI.new birth = input["birth"] #西暦1982年を入力 print -(birth - 1927)%9+1 #この演算をしたいのですが、できません。

  • Ruby
  • 回答数1
  • ありがとう数2

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

  • ベストアンサー
  • mtaka2
  • ベストアンサー率73% (867/1179)
回答No.1

フォームからの入力データは、たとえ数字だけで構成されていても、データ型は「文字列」です。 文字列から数値に変換するには to_i を使います。 print -(birth.to_i - 1927)%9+1

関連するQ&A

  • 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

  • CGIスクリプト中のフォーム入力の可否について…

    CGIスクリプト中で、HTMLを表示するときに、 『print文』や『ヒアドキュメント』を使用するのですが、ただ単に文字を表示させることはできます。 ところが、入力フォームを表示させようとするとエラーになってしまいます。 言語はperlです。 print "<html>"; print "<HEAD><TITLE>ID PASS</TITLE></HEAD>"; print "<body>一致したよ"; print "<form method="get" action="kakikomi.cgi">"; print "<input type="hidden" name="kakusuid" value="$ide">"; print "<input type="hidden" name="kakusupassw" value="$passw">"; print "<input type="submit" value="toukou">"; print "</form>"; print "</body>"; print "</HTML>"; エラーの種類は二種類出てきます。 一つは、構文エラーで、 もう一つは『使用できない文字があります』 の二つです。 後者のエラーは、スクリプト中の"toukou"を"投稿"としたら出てしまいます。しかし、スクリプト前半の『一致したよ』という日本語はしっかり認識されているのに…です。 前者のエラーは、"投稿"を"toukou"とすると出てきます。 しかし、どこが間違っているのか、全く理解できません。 もしかしたら、CGIスクリプトの中では入力フォームは使えないのではないかと思っています。 上記のスクリプトの前後は省略していますが、フォーム入力に関する何行かをコメント扱いしたら、しっかり動いてくれるのです。しかも、『一致したよ』という日本語も表示してくれます。 尚、スクリプト中の変数は、すべて省略部分にて定義してあります。 どなたか、このスクリプトの間違いを教えてくださいませんでしょうか? 尚、上記スクリプトはエディタからのコピペですので、変な改行がありますが、原文は一つのprint文につき一回の改行です。 よろしくお願いします。

    • ベストアンサー
    • CGI
  • cgiログデータ入力

    下記のようなものを作成しました。 if ($FORM{'WORD'} eq 'フォーム'){ &form; } elsif($FORM{'WORD'} eq '確認'){ &kakunin; } elsif($FORM{'WORD'} eq '入力'){ &nyuuryoku; } sub kakunin{ print "<FORM METHOD=POST ACTION=top_nyuuryoku1.cgi>\n"; print "<TABLE CLASS=TABLE2 CELLSPACING=0 CELLPADDING=2>\n"; print "<TR><TD WIDTH=80 CLASS=TD1>社員番号</TD><TD CLASS=TD2>$FORM{'BANGOU'}<INPUT TYPE=HIDDEN NAME=BANGOU VALUE=$FORM{'BANGOU'}></TD></TR>\n"; print "<TR><TD WIDTH=80 VALIGN=TOP CLASS=TD1>本文</TD><TD CLASS=TD2>$FORM{'NAKAMI'}</TD><INPUT TYPE=HIDDEN NAME=NAKAMI VALUE=$FORM{'NAKAMI'}></TR>\n"; print "</TABLE>\n"; print "<BR>と入力されました。これでよければボタンを押してください。<BR><BR>\n"; print "<INPUT TYPE=HIDDEN NAME=WORD VALUE=入力>\n"; print "  <INPUT TYPE=SUBMIT CLASS=BUTTON VALUE=入力>\n"; print "</FORM>\n"; } sub nyuuryoku{ print "入力しました。<BR>\n"; print "<A HREF='top.cgi'>戻る</A>\n"; open (FILE,">>top.log"); flock(FILE,2); @FILES = "$buffer\n"; print FILE @FILES; flock(FILE,8); close(FILE); } ※多少省略あり。 ※$bufferはこれの前のページから受け取ったもの。 kakuninのところの$FORM{'NAKAMI'}ではちゃんと半角スペースや改行が認識されていますが、nyuuryokuになるとだめです。 一体何が原因なのでしょうか?

    • ベストアンサー
    • CGI
  • CGIで入力した内容をHTML内に表示

    いつもお世話になっています。 メールフォームで事前に「aaa.cgi」というページで入力した内容を「bbb.html」内に表示したいと思っています。 具体的には「aaa.cgi」の中に「name」というフォームがあり、この値をそのままbbb.html内に「●●さん」として表示したいです。 $in{'name'}などとして引き継げるのはCGI→CGIですよね? HTMLに$in{'name'}と記述しても空欄になってしまうためご質問させて頂きました。 bbb.htmlをcgiで書き直してaaa.cgiの値を受け取った後、Printなどで出力する方法しかないでしょうか? よろしくお願い致します。

    • ベストアンサー
    • HTML
  • ルビープログラムのフォーム入力について

    Rubyプログラムを勉強中です。 簡単な掲示板から始めているのですが、実行させるとうまく動きません。 なにかヒントになるものがあれば教えて下さい。 参考サイト http://jp.rubyist.net/magazine/?0012-CGIProgrammingForRubyBeginners-3 エラーの症状 上記サイトの「CGI クラスを使ってフォームデータを取得する」項目で実際にhtmlフォームへ半角英数で入力すると値を返してくれます。 下記は値を返した時のページのソース <html><head></head><body>1<br></body></html> しかし全角入力でフォームへ入力するとするとHTML値を返してくれません。 下記は値を返した時のページのソース <html><head></head><body> 参考サイトのデータをそのまま実行させているのですが、何か原因はわかりますでしょうか? Rubyプログラムの中身は下記のとおりです。 #!/usr/local/bin/rubyrequire "cgi"print "Content-Type: text/html\n\n" print "<html><head></head><body>" c = CGI.newtext = c["t"] print textprint "<br>" print "</body></html>" もしわかれば教えて下さい。よろしくお願いします。

    • ベストアンサー
    • Ruby
  • CGIのボタンの処理について

    CGIのフォームにチェックボックスがあってボタンを押すとある処理をさせたいのですが、 <form action="○○.cgi" method="post"> を使って新たなCGIを呼び出さずにフォームのCGIで処理をし、結果を反映させたいのです。もし方法をご存知の方がいましたら教えて欲しいのでよろしくお願いします。 <-------cgiソースの一部----------> print "<input type=\"checkbox\" name=\"re_$n\" value=\"$userdata[$i]\">"; print "<input type=\"button\" value=\"処理\">"; ボタンを押した時に処理をしてすぐさまリロードして同じページに結果を反映させたい!

    • ベストアンサー
    • CGI
  • cgi上のhtmlをrubyのifで条件分岐

    rubyでcgiをつくっています。 htmlのinputとruybの絡めかたがわかりません教えてください。 まず下記のようにボタンを設置して、 <form> <input type="button" value="新規登録"> </form>  ↑ ボタンを押したら、LoginとIDの登録フォームがでてきて、 それ以外なら変化なし のようなものをつくりたいのですが、どのようにifで書けばよいのかが分かりませんでした。教えてくださいよろしくお願いします。

    • ベストアンサー
    • Ruby
  • cgiのカスタマイズが上手く行きません

    http://www.rescue.ne.jp/ のサイトにあります 「簡易データベース」http://www.rescue.ne.jp/cgi/database/ のカスタマイズが上手く行きません。 登録の項目を「名前」「星座」「血液型」に絞り登録をし、 「星座」「血液型」の項目選択で両方が一致した人の 「名前」を検索結果に出そうと思っています。 「改造箇所 index.html・・・フォームのカスタマイズ regist.html・・・フォームのカスタマイズ regist.cgi・・・#入力チェック部分、{'EMAIL'}の削除(未使用のため) search.cgi・・・      ($d,$NAME,$BLOOD,$BIRTH) = split(/\,/,$data);      とし、それぞれ $data = $data2 = $BASE[$num]; &jcode'convert(*data,'euc');      ($d,$NAME,$BLOOD,$BIRTH) = split(/\,/,$data); # 血液型 if ($FORM{'BLOOD'} ne 'all') { if ($BLOOD eq $FORM{'BLOOD'}) { ; } else { next; } } # 誕生日 if ($FORM{'BIRTH'} ne 'all') { if ($BIRTH eq $FORM{'BIRTH'}) { ; } else { next; } } と改造。と、最小限のカスタマイズをしたつもりですが、どうしても ●ご指定の条件では見当たりませんでした. となり、検索に引っかかりません。 データ自体はcsvedit.cgiで確認しても、登録はされているようです。 原因、お分かりになりますでしょうか? 何卒!何卒!よろしくお願いいたします。

    • ベストアンサー
    • CGI
  • textboxの数値入力について

    VB.net2003を買って1週間、以前にはVBの経験がない本当に初心者です。 textboxで数値を入力させて ボタンをクリックしたのちに その数値を読み込んで四則演算等に使いたいのですが、どうすればよいのでしょうか?

  • 数値の入力について

    C言語です。 #include <stdio.h> #include <stdlib.h> unsigned long input(void); void main(void){ while(1){ printf("%d\n",input()); } } unsigned long input(void){ unsigned long input; do{ printf("入力(1~4294967294 exit=0>"); scanf("%lu",&input); if(input==0) exit(0); while (getchar() != '\n') {} }while ( ( input < 1 )||( 4294967294 < input ) ); return input; } 以上をコンパイルし、実行すると不具合が起こります。 (1)範囲外の数値を入力しても繰り返しされない。 (2)文字を入力しても繰り返しされない。 どうすれば改善されますか? 定義域一杯に使うのはよくないことなのでしょうか? 環境はWindows XP、Borland C++ 5.5.1です。 あと、このコンパイラではlong long型は使用できないのでしょうか? よろしくお願いします。

専門家に質問してみよう