• 締切済み

なんで?

プルタウンメニューに書いてある内容を選び実行したら 文字がでるというプログラムを前に質問したときのソースコードを参考に作りましたがその文字が表示されません。 記述エラーなしでちゃんと動作します。 でも文字が表示されません。 ソースコードはこれです。 #!/usr/local/bin/perl print "Content-Type: text/html\n\n"; print <<WC; <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS"> </head> <body bgcolor=#ffffff> <select name=\"menu\"> <option value=\"1\">こんにちは</option> <option value=\"2\">●●ですか?</option> <option value=\"3\">ゲーム好きですか?</option> </select> <input type=\"submit\"> </body> </html> WC if ($FORM{'1'}){ print "こんにちは\n"; } elsif($FORM{'2'}){ print "いいえ違います。\n"; } elsif($FORM{'3'}){ print "いいえキライです。\n"; } exit(0); 何が間違っているのでしょうか?

  • wc13
  • お礼率67% (74/110)
  • Perl
  • 回答数3
  • ありがとう数2

みんなの回答

  • maura
  • ベストアンサー率46% (48/104)
回答No.3

#!/usr/local/bin/perl use strict; 2行目に上記のコードを追加するとエラーがでます。 まずこのエラーが出ないようにするのが先決でしょうね。

  • W_H
  • ベストアンサー率47% (21/44)
回答No.2

まず構造に突っ込みどころがあるようにも思われます。 CGIの場合、全て実行した上で結果をパソコンに返します。なので、if文は実行されません。っと言うより、実行されても何一つ結果がありません。 なので、if文を始めに書き、データがある場合とない場合のページ分けをしないと、永遠にページは変わりません。 それよりも致命的なのが、フォームデータの受け取りです。 まず、<form>がないので、データを送れないというのも欠陥ですが、<selest>はデータを送るフォームです。 <select>は『名前しか設定できない』ものですから、値を設定できません。 じゃぁ、値は?っと思うでしょうが、それは<option>の中にあります。 <selest>にはname="menu"(名前)の設定項目がありますし、<option>にはvalue="1"(値)の設定項目しかないですよね? それは、<select>は単体で値を遅れないし、<option>は単体で値に名前を与えることができないからです。フォームとは、名前と値がなければ意味の無いものですから、これは二つでセットなんですね。 つまり、受け取ったフォームの、$FORM{'menu'}の中に、1とか2とか3とかが入ります。$FORM{'1'}は、存在すらありません。 早い話、if文の中身が違います。 ($FORM{'menu'}==1)などとするべきでしょう。 ちなみに、選択項目が二つで、値が0と1などという真と偽と判定されるようなものなら、($FORM{'menu'})でも、間違いではありません。 一応変数の中身で真偽の判定はしてくれます。(今回の値は全て真ですが。)

  • sakusaker7
  • ベストアンサー率62% (800/1280)
回答No.1

これCGIですよね。 どこがというより根本的にCGIの動作をわかっていないように思えます。 </html>まで送ったところでブラウザはその先はレンダリングしませんよ? 新たに描画しなおさせたいのなら、JavaScriptを使うなりして ブラウザ側からアクション起こさないとダメです。 これまでの質問の傾向から判断するに、適当な入門書を 読むことをお勧めします。

関連するQ&A

  • 何が違うのかサッパリ

    このまえ、スクリプトのソースで上手くいかなかったので 聞いたのですが違うようです。 何が違うのか全然わかりません。 #!/usr/local/bin/perl print "Content-Type: text/html\n\n"; print <<WC; <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS"> </head> <body bgcolor=#ffffff> <select name=\"menu\"> <option value=\"1\">こんにちは</option> <option value=\"2\">●●ですか?</option> <option value=\"3\">ゲーム好きですか?</option> </select> <input type=\"submit\"> WC if (わかりません){ print "こんにちは\n"; } elsif(わかりません){ print "いいえ違います。\n"; } elsif(わかりません){ print "いいえキライです。\n"; } else { print "質問してね。\n"; } print <<WC; </body></html> WC exit(0); 条件分岐にどう記述すればいいかわかりません。( ちゃんと調べました。どんなキーワドにしてもでません。 (もしこの質問がわかるような解説サイトがあれば教えてください) データや関数など扱えます。Perlの基礎は勉強しています。 何が“どう”違うのかやどう記述すればよいのか教えてください。

    • ベストアンサー
    • Perl
  • HTML文のOptionボタン値の抽出

    出力イメージ通りに出力したいのですが、Perl の print 構文が正しくない ようで思った通りに出力してくれません。 どなたか教えて頂けないでしょうか? ■ [検索]ボタンをクリックした後の出力イメージ ■ Hello 平成18年 bye ■ メニューのHTML文 ■ <HTML> <HEAD></HEAD> <BODY> <FORM action="select.pl" NETHOD="POST"> <SELECT name="combo1"> <OPTION value="8">平成17年</OPTION> <OPTION value="9" selected>平成18年</OPTION> </SELECT> <INPUT type="SUBMIT" name="SUBMIT" value="検索"> </FORM> </BODY> </HTML> ■ select.pl ■ #!C:/Perl/bin/perl use CGI; print "Content-type: text/html\n\n"; print "<html><body>\n"; print "Hello<BR>\n"; print $form->param('combo1') . "<BR>\n"; ← ここの構文が不明 print "bye<BR>\n"; print "</body></html>\n";

  • コーディングについて

    http://www.aimix.jp/cgi/accformkioku.html 上のサイトを参考にログイン画面を作っていまして、 この例の場合のようにセレクトする値が3つ、4つならこの書き方でもよいと思うのですが、 セレクトする値が10個、15個…となればソースが長くなり、とても見づらいものとなってしまいます。もうちょっとスマートな 書き方はあるのでしょうか?(一部略してあります) print "Content-type: text/html\n\n"; print "<html>\n"; print "<head>\n"; print "<meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\">\n"; print "<title></title>\n"; print "</head>\n"; print "<body>\n"; &analysis; &auth; sub analysis{ if ($ENV{'REQUEST_METHOD'} eq 'POST') { read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'}); } else { $buffer = $ENV{'QUERY_STRING'}; } @pairs = split(/&/, $buffer); foreach $pair (@pairs) { ($name, $value) = split(/=/, $pair); $value =~ tr/+/ /; $value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg; $value =~ s/\r//g; $FORM{$name} = $value; } $pass1 = $FORM{'user_name'}; return; sub login{ if($pass1 eq '1'){ $check1 ="selected"; } elsif($pass1 eq '2'){ $check2 ="selected"; } else{ $check3 ="selected"; } print <<HEADER; <center> <caption><h1>ログイン</h1></cption> <table border="5" bgcolor="cfcfcf" width="300" height="150"> <tr> <td align="center" valign="center"> <form name="form" method="post" action="./xxx.cgi"> ユーザー名: <select name="user_name"> <option value="1" $check1>A</option> <option value="2" $check2>B</option> <option value="3" $check3>C</option> </select> <br><br> パスワード: <input type="password" name="password"> <br> <center> <input type="submit" name="submit" value="ログイン"> </center> </form> </td> </tr> </table> </center> HEADER } print "</body>"; print "</html>"; 1;

    • ベストアンサー
    • Perl
  • セレクトボタンで、サブルーチンを呼び出したいのですが

    宜しくお願いします セレクトボタンで項目を選択して其々別々のサブルーチンを呼び出したいのですが うまく機能しませんどうか宜しく御教授ください。 以下スクリプトです #!/usr/local/bin/perl &header; print qq|<h3>管理モード</h3>\n|; print qq|<li>新規データ追加 データ更新 データ削除 いづれかの処理項目を選んでください</li>\n|; print qq|<form action=\"$myself\" method=\"POST\">\n|; print qq|処理:<select name=action>\n|; print qq|<option value=\"edit\" value=$s>追加\n|; print qq|<option value=\"update\ value=$s">更新\n|; print qq|<option value=\"del\" value=$s>削除</select>\n|; print qq|<input type=submit value='送信する'>\n|; print qq|<P><table border=1 cellspacing=0><tr>\n|; print qq|</body></html>\n|; if ($s eq "edit"){ &edit; } elsif ($s eq "update"){ &update;} elsif ($s eq "del"){ &del;} sub edit { } sub update {; } sub del {; } #--------------# # HTML記述  # #--------------# sub header { print qq|Content-type: text/html\n\n|; print qq|<html>\n<head>\n|; print qq|<META HTTP-EQUIV=\"Content-type\" CONTENT=\"text/html; charset=Shift_JIS\">\n|; print qq|<LINK rel=\"stylesheet\" type=\"text/css\" href=\"./style.css\">\n|; print qq|<title></title></head>\n|; print qq|<body>\n|; }

  • セレクトボックスを使った計算式

    テキストボックスに文字を入力してセレクトボックスで四則計算 をプルダウンメニューで選択し、3つ目のテキストボックスに 計算結果を表示するにはどのようにしたらよいのでしょうか? とりあえず途中まで作ってみました。 <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS"> <title>スクリプト練習</title> <script type="text/javascript"> <!-- function keisan(){     if(option value="+"){     document.f1.t3.value(document.f1.t1.value + document.f1.t2.value); } } //--> </script> </head> <body> <form name="f1"> <input type="text" size="5" name="t1"> <select name="color2"> <option value="+">+</option> <option value="-">-</option> <option value="×">×</option> <option value="÷">÷</option> </select> <input type="text" size="5" name="t2"> <input type="button" value="=" onClick="keisan()"> <input type="text" size="5" name="t3"> </form> </body> </html> if文を作るところが特にわからず止まっています。 どうかよろしくお願いします。

  • perlがうごきません

    <html> <head> <title>form3</title> </head> <body> <form action="form3.cgi" method="post" name="form3"> <input type="text"name="form3"> <input type="submit"value="送信"> </form> </body> </html> ::::::::::::::::::::::::::::::: #! /usr/bin/perl if($ENV{"REQUEST_METHOD"} eq "GET"){ $str=$ENV{QUERY_STRING"}; }else{ read(STDIN, $str, $ENV{"CONTENT_LENGTH"}); } $str=~ tr/+/ /; $str=~ s/%([0-9A-Fa-f][0-9A-Fa-f])/pack("c", hex($1))/eg; foreach(split(/&/, $str)){ my ($key, $value)=split(/=/, $_); $data{$key}=$value; } print "Content-type:text/html\n"; print "\n"; print "<html>\n"; print "<head><title>form3</title></head>\n"; print "<body>$data{'form3'}</body>\n"; print "</html>\n"; exit; :::::::::::::::::::::::::::::::: どうしてもうごきません。 どこかスクリプトがまちがっているのでしょうか。 パールのパスはあっています。

    • ベストアンサー
    • 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
  • 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
  • javascriptでselectboxのvalueを取得し、特定のv

    javascriptでselectboxのvalueを取得し、特定のvalue値により、「<input type="text" name~>」をブラウザに表示させたいのですが、やり方がわかりません。 javascriptについて素人です。 jQUERYを使用して、phpのようにif文を追加したらいけるのかなと思って下記のようにやってみたのですが、更新しないと変わりませんでした。。 どなたかお力を貸して下さい!どうか宜しくお願い致します! ========================================== <head> <meta http-equiv="Content-Type" content="text/html; charset=euc-jp" /> <meta name="robots" content="noindex,nofollow" /> <meta http-equiv="Content-Script-Type" content="text/javascript" /> <script type="text/javascript" src="/admin/js/jquery-1.2.3.js" ></script> <script type="text/javascript"> $(function() { hogehoge = $("#abcdefg").val(); if(hogehoge !== '3'){ $('#hijklmn').hide(); } }); </script> </head> <body> <form method="post" action="/admin/~"> <select id="abcdefg"> <option value="1">aaaaaaaa</option> <option value="2">bbbbbbbb</option> <option value="3">cccccccc</option> </select> <div id="hijklmn"> 上のセレクトボックスが3の場合のみ、下記のフォームを表示させたい <input type="text" value="ああああああああ" /> </div> </form> </body> </html>

  • html →perlへフォームを渡そうとしてますが

    独学でmacでパールを勉強しています。 始めてからまだ1週間すこしくらい。 教科書読みながら、 CGIへフォームを渡す所の段階まで進んできました。 現段階で、htmlからperlへフォームを渡そうとしているのですが、 上手く行きません。 状況としては、htmlのフォームを入力して、登録を押す。 成功であれば→実行結果が表示されるはずなのですが、 現段階ではFinderがその実行htmlの場所を開くだけという形になっています。 下記は実験用に使っているソースです。 ーーーーーーーーーーー htmlは <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html;charset=utf-8" /> <title>test</title> <style type="text/css"> </style> </head> <body> <h1>メンバーズリスト</h1> <form method="post" action="form.cgi"> <p> 名前:<br/> <input type="text" name="name"/> </p> <p> 性別: <input type="radio" name="sex" value="male" checked>男 <input type="radio" name="sex" value="female">女 </p> <input type="checkbox" name="megane">メガネを付けてる </p> <p> <select name="kankei"> <option value="yuujin">友人 <option value="kaisya">会社関係 <option value="sonota">その他 </select> </p> <p> 住所: <textarea name="jyusyo" rows="5" cols="40" ></textarea> </p> <p> <input type="submit" value="登録"/><input type="reset" value="クリア"/> </p> </form> </body> </html> ーーーーーーーーーーーーーーーーー perlは #!/usr/bin/perl require 'cgi-lib.pl'; &ReadParse(*form); $name = $form{'name'}; $sex = $form{'sex'}; $megane = $form{'megane'}; $kankei= $form{'kankei'}; $jyusyo = $form{'jyusyo'}; print "Content-type: text/html\n\n"; print "<HTML>\n"; print "<HEAD><TITLE>情報受け取り</TITLE></HEAD>\n"; print " <BODY>\n"; print "<H1>情報受け取り</H1><HR>\n"; print "名前:${name}<BR>\n"; print "性別:${sex}<BR>\n"; print "めがね:${megane}<BR>\n"; print "関係:${kankei}<BR>\n"; print "住所${jyusyo}<BR>\n"; print "</BODY>\n"; print "</HTML>\n"; __END__ です。 ちなみに localhost上で同一ファイルに入れて、 動かしてます。 ご確認の上、ご助言ください、 perlの教科書に書いてあった構文は、 htmlの学習をするために使ってきたものと全く違ったため、 要点だけ残す形で、再度書いたものです。 htmlの文章がおかしいのか、perlがおかしいのか、 頭が変になりそうです。お助けください。

    • ベストアンサー
    • Perl

専門家に質問してみよう