検索機能の作成で困っています

このQ&Aのポイント
  • perl初心者です。perlでデータ検索の機能をHPにつけようとしています。
  • フォームのテキストボックスに値が入っている場合はサブルーチンを走らせその値でDB検索するようにしたいのですが、値を入れて検索ボタンを押しても動きません。
  • if文のところの書き方が間違っていると思うのですがわかりません。。どなたかご教授おねがいします。
回答を見る
  • ベストアンサー

検索機能の作成で困っています

perl初心者です。 perlでデータ検索の機能をHPにつけようとしています。以下のようなスクリプトを書いたのですが、どうもうまく動かず「失敗」という風に表記されます。フォームのテキストボックスに値が入っている場合はサブルーチンを走らせその値でDB検索するようにしたいのですが、値を入れて検索ボタンを押しても動きません。たぶんif文のところの書き方が間違っていると思うのですがわかりません。。どなたかご教授おねがいします。 #!/usr/bin/perl use DBI; print "Content-type: text/html\;charset=shift_jis\n\n"; print <<"__HTML__"; <html><head><title>test</title></head> <body> <form method= "post" action="test.cgi"> 商品検索<input type="text" name="search" size="30"> <input type="submit" value="検索"></form> __HTML__ if($form{'search'}){&SearchMySQL;} else { print "失敗"; } print<<"__HTMLEND__"; </table> </body></html> __HTMLEND__ exit; sub SearchMySQL{ DB検索 }

noname#94762
noname#94762
  • Perl
  • 回答数1
  • ありがとう数1

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

  • ベストアンサー
  • Ethersky
  • ベストアンサー率71% (168/235)
回答No.1

> たぶんif文のところの書き方が間違っていると思うのですが if文以前に連想配列formのsearch($form{'search'})に値が入ってないのでは? 提示されたソースを見た限り、ブラウザから受けたフォームからのデータをデコードして連想配列に代入する処理がないようですけど・・・。

noname#94762
質問者

お礼

アドバイスいただいた事を本や他のwebページを参考にして原因がわかりました。 デコード文の内容はまだ初心者なのでわからないところがたくさんありましたが、うまく走らせることができました。また、急いでいたため他のwebページにも同じような質問をしてしまいましたが、もしEtherskyさんがご覧になってお気を悪くされていたら申し訳なく思います。 本当にありがとうございました。

関連するQ&A

  • 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
  • Perl CGI -入力フォーム-

    Perlを始めたばかりの初心者です。 Perlの中にフォームを入れたいのですが、エラーが出てしまいます。 現在は、ローカルで作動させています。 #! c:/perl/bin/perl print "Content-type: text/html\n\n"; print "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01//EN\">\n"; print "<head><title>TEST</title></head>\n"; print "<body>\n"; print "<p><input type="text" name="name"></p>\n"; print "</body>\n"; print "</html>"; 【print "<p><input type="text" name="name"></p>\n";】この記述がエラーの対象行となっています。 inputを使用する場合は他にも記述が必要なのでしょうか? 宜しくお願いします。

  • FORMを教えてください

    全くの素人で、どなたか教えて下さい。 <HTML> <TITLE>TEST</TITLE> <BODY> <FORM ACTION="test.cgi" METHOD="POST"> 氏名<INPUT TYPE="TEXT" NAME="name"> 住所<INPUT TYPE="TEXT" NAME="tokoro"> <INPUT TYPE="Submit" value="データ送信"> <INPUT TYPE="Reset" value="リセット"> </FORM> </BODY> </HTML> 名前と住所を記入して送信ボタンを押したら記入した内容が表示されるCGIプログラムを教えて下さい。 #!/usr/local/bin/perl print "Content-Type: text/html"; print "<html>\n"; print "<head><title>TEST</title></head>\n"; print "<body>\n"; #受け取ったデータを表示する print "氏名=$in{'namae'}\n"; print "住所=$in{'tokoro'}\n"; print "</body>\n"; print "</html>\n"; exit; とした場合 氏名= 住所= しか表示されません。 何が足りないのでしょうか?

    • 締切済み
    • CGI
  • 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
  • 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";

  • 入力フォームを変数に格納

    Perlを始めたばかりの初心者です。 inputで入力した情報を変数として取得する方法は可能でしょうか? #! c:/perl/bin/perl print "Content-type: text/html\n\n"; print "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01//EN\">\n"; print "<head><title>TEST</title></head>\n"; print "<body>\n"; print "<p><input type=\"text\" name=\"name\"></p>\n"; print "</body>\n"; print "</html>"; 上記の入力フォームで、777と入力した場合、サーバーを経由しないで、777を変数に格納したいのですが、可能でしょうか? 宜しくお願いします。

    • ベストアンサー
    • Perl
  • ファイルから検索

    ファイルを読み取って、検索し、結果を表示するプログラムを考えましたが、検索結果が全てのデータとなってしまいます。どう改善すれば良いのでしょうか? ファイル(mem.dat) あいこ29女性 唯21女性 裕樹23男性 <perlプログラム> #!c:/perl/bin/perl print "Content-type: text/html;\n\n"; require 'cgi-lib.pl'; &ReadParse(\%data); $kw=$input{'key'}; $n=0; #ファイル open (RF ,"mem.dat"); while($line=<RF>){ if((index $line,$kw)!=-1){ $n++; @data[$n]=$line; } } close(RF); print "<HTML><HEAD>\n"; print "<TITLE>検索結果ページ</TITLE>\n"; print "</HEAD><BODY>\n"; print "検索結果:$n件<BR>"; for($i=1;$i<=$n;$i++){ print "@data[$i]<BR>"; } print "</BODY></HTML>\n"; exit; 実行すると↓ 検索結果:3件 あいこ29女性 唯21女性 裕樹23男性

    • ベストアンサー
    • Perl
  • 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
  • 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にてcgiを作成しています。 以下のようなcgiを作成したのですが、POSTで受取ったデータが 標準入力より取得できません。 解決策、又は、調査方法等ご存知の方いらっしゃいましたら教えてください。 --------- a.cgi -------- #!/usr/bin/perl print "Content-type: text/html\n\n"; if( $ENV{'REQUEST_METHOD'} eq "POST" ){ read( STDIN, $buffer, $ENV{'CONTENT_LENGTH'} ); }else{ $buffer = $ENV{'QUERY_STRING' }; } print <<"HTML"; <HTML><HEAD><TITLE>テスト</TITLE> <META http-equiv=Content-Type content="text/html;"> </HEAD> <BODY> <FORM id=Form1 name=Form1 action=a.cgi method=post> HTML print <<"HTML"; <INPUT type=hidden value=aaa name=text1> <INPUT onclick="return confirm('送信します。よろしいですか?');" type=submit value=送信 name=Button1> </FORM> </BODY> </HTML> HTML exit; -------------------------------------------------- $ENV{'REQUEST_METHOD'} は POST を取得できていますし、 $ENV{'CONTENT_LENGTH'} も文字数は取得できています。 どうか宜しくお願い致します。

    • ベストアンサー
    • Perl

専門家に質問してみよう