• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:Power Searchでチェックボックスから検索(改造))

Power Searchでチェックボックスから検索(改造)

このQ&Aのポイント
  • Power Search Ver.1.11を使用してチェックボックスから検索する方法を試みましたが、うまく動作しませんでした。
  • 特定の文字列を入力せずに、チェックボックスのチェックだけで検索できるようにする方法を教えてください。
  • 現在、エラーが発生し、改造前の状態に戻しています。詳細なエラー内容はリンク先で確認できます。

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

  • ベストアンサー
  • Mulumba
  • ベストアンサー率45% (27/59)
回答No.1

少なくとも if ($word eq ""){ my @terms = /; } 中の my @terms = /; は誤りです。 で、改造の内容なのですが、 1.チェックボックスがチェックされていて、検索窓に入力がない場合、チェックボックスの項目で検索。 2.チェックボックスがチェックされていて、検索窓に入力がある場合、チェックボックスの項目と検索窓のキーワードで検索する。 ということをしたいのだと思いますが、 その場合 sub search{} の内容はいじらずに 91行目 elsif ($act eq "search"){&search;} を elsif ($act eq "search"){if(@cat){if($word){$pword1 = $word; &powersearch;}else{&cat;}}else{&search;}} とすればよいのではと思いますが。試してみて下さい。 86行目は変更しても可です。 なるべく少ない改造でと思ったのですが、自分では検証してません。悪しからず。

nana_7
質問者

お礼

お教え頂きありがとうございました。 ご指摘頂いた部分を変更したところ、無事目的の動作を確認することが出来ました。 まだまだ力量足らず、躓きつまづきではありますが、今後もコツコツと頑張って完成させて行きたいと思っています。 本当に有難うございました。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • 解析機能の拡張について

    おはようございます。いつもお世話になっています。 今回は解析機能の拡張についてお聞きしたいと思います。 解析機能については、かんたん作成.comさんのcgiをお借りしました。 http://www7a.biglobe.ne.jp/~wwwwww/analyzer/ これをベースに、検索ワードの集計機能を追加しようと思っております。 word1、word2に検索ワードの表示・分割がありますが、新たにword3を設けて分割されたものを集計し、表示する処理をしたいです。 集計については、前回までで教えていただいた正規表現を用いて自ら組んでみたのですが、変数が一致していないせいか上手く表示できません。 以下に検索ワードを処理しているプログラムを記載します。 elsif($FORM{'mode'} eq "word1" or $FORM{'mode'} eq "word2" or $FORM{'mode'} eq "word3") { #検索ワード my ($n, $pair, $word); if($referer =~ /\?/) { my ($url, $query) = split(/\?/, $referer); for($n = 0 ; $n < @search ; $n++) { if($url =~ /$search[$n][1]/) { foreach $pair (split(/&/, $query)) { my ($key, $value) = split(/=/, $pair); if($key eq $search[$n][2]) { $word = $value; last; } } last; } } if($word) { $word =~ tr/+/ /; $word =~ s/%([0-9a-fA-F][0-9a-fA-F])/chr(hex($1))/eg; if($FORM{'mode'} eq "word1") { ++$freg{$word}; } elsif($FORM{'mode'} eq "word2") { my $word2; $word =~ s/\x81\x40/ /g; foreach $word2 (split(/\s+/, $word)) { if($word2) { ++$freg{$word2}; } } } #=====================================================================EDIT elsif($FORM{'mode'} eq "word3") { my %word_of = map {$_ => 0} %freg; foreach my $search_key ( keys %word_of ) { foreach my $word ( keys %word_of ) { $word_of{$search_key}++ if $word =~ /$search_key/; } } foreach ( sort ( keys %word_of ) ){ print "<table><tr><td>「$_」 </td><td> $word_of{$_} 件</td></table>\n"; } } #=====================================================================END } } } } word3の項目が現在私が編集している部分です。 プログラム全体を通して、私自身が望む動作を可能とする部分の追加は行ったと思うのですが、見落としている点があるかもしれません。 また前述したように、変数が一致していないのかもしれません。 おかしな点に気づかれたら、お手数ですがお教え願えますか。 もしかしたら初歩的なミスをしているかもしれませんが、よろしくお願いいたします。 不明な点などございましたら、随時対応します。 ここでは書ききれないため、現在編集中のcgiファイルを添付データとして貼り付けておきます。

  • チェックボックスを使用してのAND検索

    宜しくお願いします。 検索データベース2という、CGI-GARAGE さんのCGIを使って、データベースの検索プログラムを作ってみているのですが、初期の仕様でチェックボックスでの検索が、or検索になっています。 これを、AND検索できるように変えたいのですが、どなたかお力を貸していただけませんでしょうか? チェックボックスに関係ありそうな部分は2箇所あったのですが 補足が必要であれば言ってください。宜しくお願いします。 $print .= "<TD><input type=checkbox name=\"$count\" value=\"$sobicount\">$p[1]</TD>\n"; if($tcount >= 5 && ($tcount % 5) eq 0){ $print .= "</TR>\n"; ---------------------------------------------------- my $pp = $tcount - 1; $print .= "<TD><input type=checkbox name=\"$count\" value=\"$pp\">$p  </TD>\n"; if($tcount >= 5 && ($tcount % 5) eq 0){ $print .= "</TR>\n"; }

    • 締切済み
    • CGI
  • KENTさんの掲示板のワード検索について

    http://www.supra.cx/joyful2chMe/index.html こちらのjoyful2ch.cgiの1071行目からのワード検索で、 検索対象を親記事のみにしたいのですが、どうすればよいでしょうか。 ログの中の$reno=""が親記事のようなのですが・・ # ファイルを読み込み @new=(); open(IN,"$logfile") || &error("Open Error : $logfile"); $top = <IN>; while (<IN>) { $flag=0; foreach $pair (@pairs) { if (index($_,$pair) >= 0) { $flag=1; if ($in{'cond'} eq 'OR') { last; } } else { if ($in{'cond'} eq 'AND') { $flag=0; last; } } } if ($flag) { push(@new,$_); } } close(IN); ここの辺りを書き換えるのでしょうか。

    • 締切済み
    • CGI
  • 大文字と小文字を区別しない検索にする方法

    勉強する間もなく手探りでフリーCGIの改造をさせて頂いています。 if ゃ foreach などは分かりやすいですが、変数の意味が良く理解できていません。 どうぞお力添えをお願い致します。 現在、フリーのCGIでデータ登録と検索をしていますが、大文字と小文字の 区別を無くしたものにするにはどうすればよいでしょうか? 1) AbcDe も abcde も同じにしたい。 2) 可能なら全角と半角も区別無しにしたい。   ただ、2の方は漢字も使うので難しいでしようか? iオプションを使えとの記述を見ましたが、どこを変えるのか解りません。 ソースを載せますので、ご指導宜しくお願い致します。 # 入力内容を整理 $in{'word'} =~ s/\x81\x40/ /g; @wd = split(/\s+/, $in{'word'}); @find=(); $i=0; # 検索処理 foreach (@line) { $flag = 0; foreach $wd (@wd) { if (index($_,$wd) >= 0) { $flag = 1; if ($in{'cond'} eq 'OR') { last; } } else { $andor="and 検索"; if ($in{'cond'} eq 'AND') { $flag=0; last; } $andor="or 検索"; } } # ヒットした場合 $view = $in{'viewc'}; if ( $view eq '' ) { $view = $views } if ($flag) { $i++; next if ($i < $page + 1); next if ($i > $page + $view); push(@find,$_); } } # 検索終了

    • ベストアンサー
    • CGI
  • ちょこっと改造教えてください

    携帯用メールフォームのcgiを設置しました。 ほとんど触っていないので正常に動作しています。 メールアドレス記入が [      ]@[selectになってる] ←@の前と後と分割されています。 必須項目チェックのメールアドレスチェックのソースが ---ここから--- #メールアドレスのチェック &isMail(); sub isMail{ my $str=$_[0]; my $regex ="^[^@]+@[^.]+\..+"; if ($str =~ /$regex$/) { return 1; }else{ return 0; } } if(isMail($mail) eq '0'){ if($hensin eq "1" ){ &err1('メールアドレスが正しく入力されていないようです。お手数ですが、前の画面に戻って入力し直してください。'); } ----ここまで--- となっています。 これを、メールアドレス記入 [      ]←@で分割しない に変更したいのですが、 この場合ソースをどのように修正すれば良いでしょうか。 色々探したり試しましたがあまり知識がないのでわかりませんでした。 よろしくお願いします。

    • ベストアンサー
    • CGI
  • 最新のファイルのみ検索

    サーバー内のファイルを検索するのにKentWebさんのwwwsrch.cgiを利用しています。 # # すべてのファイルをなめ回す # sub search1 { local($dir) = $_[0]; local(@filelist, $file, $filename); opendir(DIR, $dir); @filelist = readdir(DIR); closedir(DIR); foreach $file (@filelist) { if ($file eq ".") { next; } if ($file eq "..") { next; } $filename = "$dir/$file"; if (-d $filename) { if ($recursive_flag) { &search1($filename); } } else { &search2($filename, $dir); } } } # # ファイルの中身を検索する # # 指定していない拡張子のファイルは無視する $suffix = ".html .cgi .pl"; $fname = substr($target, rindex($target, ".")); if ($suffix{$fname} != 1) { return; } ↑の条件に30日以上古いファイルを無視するように改造することはできないでしょうか? 検索対象ファイルが数十万以上と莫大に増加してきたため、最新のファイルのみ検索対象にできればと考えております。

    • ベストアンサー
    • Perl
  • 入力内容のチェック・・・『または』の場合

    いつもお世話になっております。 お問い合わせフォームCGIで未入力のチェックを行っています。 CGIは前任者が作ったもので、引き継いだ私自身はCGI初心者です。 sub sendmail { if ($namecheck eq "1" && $in{'name'} eq "") { &error("お名前は必ずご記入ください"); } elsif ($op_value1 eq "") { &error("フリガナは必ずご記入ください"); } ・ ・ ・ ↑こんな感じです。 $op_value9~$op_value12の値(フォーム上ではチェックボックスを使用)についても入力チェックを行いたいのですが、9~12を1グループと考え、いずれかに値が入っていた場合はエラーを出さずにOKとしたいと思います。 そこで、初心者なりにネットを調べ elsif ($op_value9 eq "" || $op_value10 eq "" || $op_value11 eq "" || $op_value12 eq "") { &error("項目を一つ以上選択してください"); } &&を||にすればいいのでは・・・?という結論にいたったのですが、 ダメでした。 どうしたらいいでしょうか? よろしくお願いします。

    • ベストアンサー
    • CGI
  • perl初心者です。宜しくお願い致します。

    ファイルの容量が大きく。perlを使用してデータの集計をしています。 "A"がきたらflag1をたてなさい。 "B"がきたらflag2をたてなさい。 "C"がきたらflag3をたてなさい。 これでAとBとCを抜き取ること&AからCまでの時間を取得したのですが、 Bの数のmaxの値だけを抜き取りたいのですが、Bがきたときの数をすべて 出力してしまいます。下記の文だと、Bが4回きたら、1,2,3,4と出力してしまいます。 それで4だけを出力したいのですがどのように書き換えたらようか教えて頂けますでしょうか。 '----------------------------------------------------------------------------- open (IN,"< $ARGV[0].txt") or die; open (OUT,"> $ARGV[0]_out.txt") or die; $flag =0; my $a, $b, $c; $count = 0; ####################################################### while($line =<IN>){ ($time,$data) = split(/\s+/,$line); if($data eq "A") { $flag=1; $a = $time; #print OUT $line; #print OUT "\n"; } elsif($data eq "B"){ $flag=2; $count++; $count == $data; print OUT ("$count\n") } #print OUT ("$count\n"); elsif($data eq "C"){ $flag=0; $count=0; $b = $time; $c = $b - $a; print OUT ("time $c\n") } } -------------------------------------------------------------------------------

  • CGIでチェックボックスのエラーチェック

    下記のような感じで チェックボックスをいくつか配置し、CGIで動かしています。 それぞれの質問に関して未選択がある場合、 メッセージボックスで「未選択があります」と表示させたいです。 できればjavascriptでなくCGIでやりたいです。 どのようにコードを書けばいいですか? ためしに以下のように書いてみましたがだめでした。 ・・・ elsif ($q1 eq "" && $q2 eq "") { &error($error = "すべての項目に回答して下さい"); } ・・・ お願いいたします! <form name="q1" action="test.cgi" method="POST"> Q1 <input type="radio" name="q1" value="q1_a"> A <input type="radio" name="q1" value="q1_b"> B <input type="radio" name="q1" value="q1_c"> C Q2 <input type="radio" name="q2" value="q2_a"> D <input type="radio" name="q2" value="q2_b"> E <input type="radio" name="q2" value="q2_c"> F </form>

    • ベストアンサー
    • CGI
  • フォームのアクションから引数をとる

    <form action="test.cgi?ref=5" method="post"> このような感じで、引数を送ります。 my $cgi = CGI::new(); my $ref = $cgi->param('ref'); if ($ref eq 0){ (省略) }elsif ($ref eq 5){ こんな感じでプログラムを書きました。 アドレスを見ても、ちゃんとref=5となっていますし、 普通に<a href="test.cgi?ref=1">などのリンクから飛べば、指定したifの処理に入ります。 しかし、 <form action="test.cgi?ref=5" method="post"> 上のフォームのsubmitから送ると、ref=5のifが判別されません。 どうすれば、判別してくれるのでしょうか? ご存知の方がいらっしゃいましたら、ご教授ください

    • ベストアンサー
    • CGI