• ベストアンサー

cgi上のhtmlをrubyのifで条件分岐

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

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

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

  • ベストアンサー
  • notnot
  • ベストアンサー率47% (4848/10262)
回答No.2

No1です。 登録画面の方は出来ているのなら、新規登録ボタンの部分はJavaScriptがいいんじゃないでしょうか。 <html> <head><title>実験</title></head> <script> function regist(){ document.getElementById("regist").setAttribute("style","display: block"); document.getElementById("new").setAttribute("style","display: none"); } </script> <body> <input id="new" type="button" value="新規登録" onclick="regist()"> <div id="regist" style="display: none"> <form action="test.cgi" method="post"> Username: <input type="text" name="login"><br> Password: <input type="password" name="password"><br> <input type="submit" value="login"> </form> </div> </body></html>

Raiki77
質問者

お礼

ありがとうござまいす。とても参考になります。 感謝します。

その他の回答 (1)

  • notnot
  • ベストアンサー率47% (4848/10262)
回答No.1

とりあえず出来てるところまで書いてください。

Raiki77
質問者

補足

返信ありがとうございます。何しろ素人なもので、調べながら作っていますが上手くいきません。 txtファイルにidとpasswordを書き込んで管理するログインフォームを参考書をみながら作りましたが、それだけの機能なので、簡易な新規登録の画面を作りたいとおもい、投稿するに至りました。 アバウトな順序はなんとなくイメージがつくのですが、書き方などで苦戦しております。もし、ヒント又は、解決の糸口をお持ちでしたら、よろしくお願いいたします。 test.cgi ----------------------------------------------- #! /usr/bin/ruby puts <<HTML Content-type: text/html <html> <head><title>実験</title></head> <body> <form> <input type="button" value="新規登録"> </form> HTML if (ボタンを押したなら) then puts <<HTML <form action="test.cgi" method="post"> Username: <input type="text" name="login"><br> Password: <input type="password" name="password"><br> <input type="submit" value="login"> </form> HTML if (ボタンをおしたなら) then フォームに入力した内容idとpasswrdを テキストファイルへ書き込み。 puts "登録完了" else end else end puts "</body></html>" ------------------------------------------------ txtファイルには :で区切ってidとpasswordを書きこんでいくようにしようと思います。 例↓ hideki:noooo home:99999 king:000001

関連するQ&A

  • Rubyでの条件分岐について

    登録フォームについての質問です。 ログイン用フォームのhome.cgi と、それにリンクするユーザー登録用フォームのregistration.cgi があり、今回質問するのはユーザー登録用のregistration.cgiの方です。そしてユーザーIDとPasswordはdata.txtに書き込んでいます。書き込み自体は成功するのですが、それ以外のところで問題がでている状態です。条件分岐がうまくいきません。 下記のように書いた時におこる問題点等について教えていただきたいと思います。 (1)IDとPassword のinput に値が空の時に、ボタンを押しても、登録完了しました と表示されてしまうので、この様な場合は、"もういちど確認してください" などの警告文を出したいです。 (2)IDとPassword の文字数に制限を入れたいのですが、分かりませんでした。 双方とも4文字以上8文字以下にしたいです。それ以外の場合は、条件分岐で、"文字数を確認してください"などの警告文を出したいです。 -------- < ここから registration.cgi >-------------------- #!/usr/bin/ruby require "cgi" cgi = CGI.new puts <<HTML Content-Type: text/html <html> <head> <title>練習問題</title> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> </head> <body> <h1>練習(1)</h1> 登録フォーム <form action="registration.cgi" method="post"> ユーザーID:<input type="text" name="login" ><br> パスワード:<input type="text" name="password"><br> <input type="submit" value="submit"> </form> HTML if cgi.params["login"][0] then f = open("data.txt","a") f.puts"%s:%s" %[cgi.params["login"][0],cgi.params["password"][0]] f.close puts "登録完了しました" else end puts <<HTML <br> <a href="./home.cgi">戻る</a> HTML -------- < ここまで >--------------------

    • ベストアンサー
    • Ruby
  • 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内での条件分岐について教えてください。 買い物カートCGIの中で下記のラジオボタンの選択において入力フォームを表示・非表示に切り替える質問をしたばかりですが、 <input type="radio" value="1" onclick="func1()" name="gift" checked />1ヶ所 <input type="radio" value="2" onclick="func2()" name="gift" />3ヶ所 <input type="radio" value="3" onclick="func3()" name="gift" />5ヶ所 今度は入力後の確認画面にて上記で選択された内容によって。。。 value1の場合は1ヶ所分の発送先住所、value2の場合は3ヶ所分の発送先住所・・・ と言った感じで表示をさせたいのですが、条件分岐に関してどのようにしたら良いのか分からず質問をさせて頂きます。 require "cgi-lib.pl"; ReadParse(*input_data); if ($input_data{'gift'} eq "1") {  ※value1で入力した1件分の発送先住所 } elsif ($input_data{'gift'} eq "2") {  ※value2で入力した3件分の発送先住所 } else {  ※value3で入力した5件分の発送先住所 } とか、試してみましたがだめでした(泣 CGI(Perl)に関しては初心者的で少々初心者レベルで触る程度の技術レベルです(汗 どうしたら良いのか教えてください。 思い当たる点は、そもそも条件式の中にある"gift"はどこかで指示を出さないとCGIの中で認識されていないのでは?とも思っています。 実際に上記の例でカートの確認ページを表示すると、 if ( eq "1") { } else ( eq "2") { } else { } と表示されるので素人ながらそう思いました。 質問がへたですが宜しくお願いします。

  • onclickで複数のボタンで対応したCGIにデータを送りたいのですが。

    下記のような感じで、 1.画像追加ボタンを押すと別ページ(b.cgi)に飛んで登録が終わったらまたこちらに戻ってきて、登録が押されるとそのまま登録処理(a.cgi)になる。 2.画像追加がされていなくても登録が押されるとそのまま登録処理をする。 (1.2.ともform内の情報はhiddenですべて送ります。) こんな動きをさせたいのですが、参考サイトなどをみてもこういう動作をしているところがなくて丸3日悩んでいます。 onclick=submit の記述とJavascriptの書き方が問題だとは思うのですが煮詰まってしまいました。 皆様には初歩的な質問かもしれませんがどうぞよろしくお願いします。 <form method="post" enctype="multipart/form-data"> <input type="text" name="Title" value="" size="140"> <input type="text" name="Body1" value="" size="140" style="ime-mode: active;"> <input type="button" value="画像追加" onclick="submit(document.gazouform)"> <input type="button" value="登録" onclick="submit(document.tourokuform)"> <form action="a.cgi" method="post" enctype="multipart/form-data" id="tourokuform"> </form> <form action="b.cgi" method="post" enctype="multipart/form-data" id="gazouform"> </form>

  • WWW::Mechanizeについて教えてください

    WWW::Mechanizeついて 質問させて頂きます。 他でも質問しておりますが、回答が無かったためマルチですがご了承ください。 WWW::Mechanizeを使ってログインしようとしてるのですが、うまく行きません。 <form action="login.cgi" name="form1" method="post"> <input id=id name='id' type='text' /> <input id=pass name='pass' type='text' /> <input type="submit" name="submit" value="LOGIN" /> 上記のフォームでは正常に取得できます。 しかし、ログインチェックをJavascriptからPHPに渡ってるページでの ログインがうまく行きません。 ソース //入力チェック /*login_checkたとえです*/ function LOGIN(){ $( "userid" ).className = ""; $( "userpassword" ).className = ""; if( login_check( "id" ) ){ if( login_check( "pass" ) ){ document.form1.action = "login.php"; document.form1.Btn_Type.value = "login"; document.form1.submit(); }else{ $( "pass" ).className = "error"; } }else{ $( "id" ).className = "error"; } } <form action="login.php" name="form1" method="post"> <input id=id name='id' type='text' /> <input id=pass name='pass' type='text' /> <input type="button" name="loginbtn" value="LOGIN" onclick='JavaScript:LOGIN();'/> 上記のフォームにログインしようと下記のようにしました。 my $loginUrl = 'http://hoge.jp/login.php'; my $mech = WWW::Mechanize->new(cookie_jar => $cookie_jar); $mech->agent_alias('Windows IE 6'); $mech->get($loginUrl); $mech->form_name('form1'); $mech->field( id => "test" ); $mech->field( pass => "test" ); $mech->click_button( value => 'Login' ); print $mech->content(); これで実行するとエラーがでます。 Can't call method "header" on an undefined value at /usr/lib/perl5/site_perl/5.8.8/WWW/Mechanize.pm line 2471. $mech->click_button( value => 'Login' ); 上記のclick_buttonでvalueを指定するとエラーになります。 WWW::MechanizeはJavascriptは実行できないのでしょうか? お知恵をお貸しいただけませんでしょうか。 説明不足かもしれませんがお願い致します。

    • ベストアンサー
    • Perl
  • 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の組み方が解りません

    会社のHP制作しているのですが、 見積もりフォーム作ろうと思っています。 <FORM action=http://●●●.jp/●●●cgi method=POST >←良く解りません <INPUT type="hidden" name="mailto" value="●●●@●●●.jp"> <INPUT type="hidden" name="subject" value="見積もり依頼"> <INPUT type="hidden" name="location" value="formend.html"> どこかのサイトを拝見してこのような感じで行ったのですが、 最初のform actionが良く解りません。 そもそもCGIをどのようにつくり設置するのか根本的なことが良く解りません。 何処か解り易く説明しているcgiの組み方、メールフォームの作り方などがあれば教えてください。

  • enterキーでのtab移動

    質問させて頂きます。 下記の様にenterキーを押してtab移動しようと考えています。 <form name="form"> <input type="text" id="id1" onkeypress="if(code == 13)document.form.item('id2').focus();"> <input type="text" id="id2" onkeypress="if(code == 13)document.form.item('id3').focus();"> <input type="button" id="id3" value="ボタン"> </form> ここで、textフォームからボタンへ移動する場合、自動的にボタンが押されてしまいます。 (エンターキーでの移動のため) ボタンが押されないような方法はあるでしょうか。アドバイスお願い致します。

  • javaで name=id[?] を指定する方法とは?

    ショップ運営で、商品一覧から+-ボタンでそれぞれ数の増減をさせるよう、ほかのサイトを参考にして下記のようにjavascriptで記述してみました。 このうち、商品2と3はボタンが機能したのですが、商品1は数の増減ができません。 おそらく要素名に(name=id[1])と[]で囲っているからだと思うのですが、この[]を取らないまま、ボタンを機能させる方法はありますでしょうか? よろしくお願いします。 <FORM> 商品1:<INPUT type=text name=id[1] value=3 size=4> <INPUT type=button value="+" onClick="plus(this.form.id[1])"> <INPUT type=button value="-" onClick="minus(this.form.id[1])"> <BR> 商品2:<INPUT type=text name=id2 value=3 size=4> <INPUT type=button value="+" onClick="plus(this.form.id2)"> <INPUT type=button value="-" onClick="minus(this.form.id2)"> <BR> 商品3:<INPUT type=text name=id3 value=3 size=4> <INPUT type=button value="+" onClick="plus(this.form.id3)"> <INPUT type=button value="-" onClick="minus(this.form.id3)"> </FORM> <SCRIPT language="JavaScript"> <!-- function plus(chk){chk.value++; if (chk.value==6) {chk.value=5} } function minus(chk){chk.value--; if (chk.value==0) {chk.value=1} } // --> </SCRIPT>

  • if構文

    初心者でif構文がよくわからず質問させてください。 下記のようなボタンをつくり、 <form action="#"> <input type="button" value="うさぎ" id="txt" onclick="aGetElementById()" /> <input type="button" value="とり" id="txt" onclick=b"GetElementById()" /> </form> ボタンをクリックして、 <div><span id="box"></span>が大好きです。</div> のspanの中にvalue名(うさぎ・とり)を表示させ、『「value名」が大好きです。』と表示させたいのです。 Javascriptを下記のように書いてみたのですが、テキスト表示の切り替えがうまくいきません。 <script> <!-- function aGetElementById(){ var text=document.getElementById("txt"); var box=document.getElementById("box"); box.innerHTML=txt.value; } function bGetElementById(){ var text=document.getElementById("txt"); var box=document.getElementById("box"); box.innerHTML=txt.value; } --> </script> どうかおしえてください。 よろしくお願いします。

専門家に質問してみよう