• ベストアンサー

検索後の「見つかりません」がたくさんでてしまいます。

こんにちは!初歩的な質問失礼致します。 HTMLで名前を検索して、見つけると名前・出身地・その他を表示するというプログラミングを作っています。 検索にひっかかるときちんと表示されるとこまでいったのですが、検索で引っかからなければ「見つからない」と表示させようとして、elseをつかうと「見つからない」がたくさん出てきてしまい困っています。 サブルーチン・番兵君を使えば良いと書いてありますがはっきしどう使えばいいかわかりません。 下記がプログラムの一部なのですが open(rd,"./file.txt"); @file = <rd>; close(rd); foreach $ww2 (@file){ ($name,$shushin,$other) = split(/,/,$ww2); chomp($name); chomp($shushin); chomp($other); $SHU{$name} = $shushin; $OTHER{$name} = $other; } @name1 = keys ( %SHU ); foreach $string (@name1){ #chomp($string); #print "$string と$FORM{'item1'}<br>"; if($string eq $FORM{'item1'}){ print "見つかった名前:$string <br>     出身地:$SHU{$string} <br>     その他:$OTHER{$string}\n"; } } 「見つからない!」を一回だけ表示させるにはどうしれば良いでしょうか? 申し訳ないですが上記にプログラムを追加して、解説の方宜しくお願い致します。

  • Perl
  • 回答数2
  • ありがとう数2

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

  • ベストアンサー
回答No.1

上記スクリプトをそのまま使うのであればフラグを使ってやるのが一番手っ取り早そうですね。 my $FOUND = 0; foreach $string (@name1){ #chomp($string); #print "$string と$FORM{'item1'}<br>"; if($string eq $FORM{'item1'}){ $FOUND = 1; print "見つかった名前:$string <br>     出身地:$SHU{$string} <br>     その他:$OTHER{$string}\n"; } } unless ($FOUND) { print "見つからない!"; } これで上手くいくと思います。

terunosuke
質問者

お礼

返信ありがとうございます!参考にさせていただきますね!

その他の回答 (1)

回答No.2

ロジックを読むと、連想配列(SHU)にあるかどうかをチェックすれば良いように思うので.. open(rd,"./file.txt"); while(<rd>) { ($name,$shushin,$other) = split(/,/,$_); chomp($name); chomp($shushin); chomp($other); $SHU{$name} = $shushin; $OTHER{$name} = $other; } close(rd); @name1=keys(%SHU); if($SHU{$FORM{'item1'}} eq "") {print "無いじゃん<br>\n";} else {print "見つかった名前:$string <br>     出身地:$SHU{$string} <br>     その他:$OTHER{$string}\n";} は、同じ結果で、”無いじゃん”と出せます。 (前半のムダを排除しました)

terunosuke
質問者

お礼

返信ありがとうございます!こういう書き方もあるのですね。参考にさせていただきます。

関連するQ&A

  • 検索で二つが一致した場合「OK」と表示させたいのですが

    こんにちは、いつもお世話になっております。 早速質問失礼します。 以前「名前を検索して一致した場合」出身地等を表示するのを作ったのですが、これを「名前とパスを検索して一致した場合」OKと表示させたいのです。 ーーーーーーーーーーーーーーー open(rd,"./file.txt"); @file = <rd>; close(rd); foreach $ww2 (@file){ ($name,$pass,$shushin,$other) = split(/,/,$ww2); chomp($name); chomp($pass); chomp($shushin); chomp($other); $PS{$name} = $pass; $SHU{$name} = $shushin; $OTHER{$name} = $other; } @name1 = keys ( %SHU ); #???? my $FOUND = 0; foreach $string (@name1){ if($string eq $FORM{'item1'}){ $FOUND = 1; print "見つかった名前:$string <br>     出身地:$SHU{$string} <br>     その他:$OTHER{$string}\n"; } } unless($FOUND){print"見つかりません!再度入力してください!";} ーーーーーーーーーーーーーーーーーー 上記を if($string eq $FORM{'item1'})の後にさらにifで if($string eq $FORM{'item1'}){ if($string eq $FORM{'item2'}){ print "OK"; } } という感じにしたのですが動いてくれません。 一つの検索のときはきちんと動くのですが二つになるとさっぱりです。 プログラムの書き込みをお願いできますでしょうか? それと、@name1 = keys( %SHU ); #???? こちらの一文はどういうことに使われてるのかが良くわかりません。 申し訳ないですが解説の方宜しくお願い致します。

    • ベストアンサー
    • Perl
  • 簡単な検索エンジンの作り方

    <form id="form1" name="form1" method="post" action="lab.php"> <label for="textfield">しょうゆ検索エンジン<br /> </label> <input type="text" name="lab" value=""/> <input type="submit" name="button" id="button" value="検索" /> </form><br> <form id="form1" name="form1" method="post" action="lab.php"> <label for="textfield">成分エンジン<br /> </label> <input type="text" name="lab" value="" /> <input type="submit" name="button" id="button" value="検索" /> </form> このようなフォーム内に、例えば醤油検索エンジンに「キッコーマン 山さ」と入力したらsyouカラムから該当するデータを取り出し表示するにはどうしたら良いでしょうか? フォームに「キッコーマン 山さ ヤマキ」 と入力したら ※3件あります 醤油:キッコーマン 成分:大豆、油 醤油:山さ 成分:大豆、塩 醤油:ヤマキ 成分:醤油 と表示したいです。簡単だろうと考えては見た物の、残念ながら解決に至らず質問した次第であります。よろしく願います。 あと、莫大な量を登録したいのでnum_rowsなどで syounum=array("キッコーマン","山さ","ヤマキ") 等とphpに記述するのは避けたいです。よろしく願います。

    • ベストアンサー
    • PHP
  • 検索場所を増やすには

    cgiに下記のタグを埋め込んで板の検索をできるようにしたのですが、板のディレクトリがたくさんある場合はどのようにすればいいのでしょうか value="support"のsupportを他の板のディレクトリ名にすると、その板の検索がされるのですが <form action="search.cgi" name="SEARCH" method="POST"><BR>[掲示板内全文検索] キーワードは<b>スペース</b>で区切ってください。<BR>検索語句:<input type="text" name="keyword" size="20"><input type="submit" value="検索"><BR><input type="hidden" name="bbs" value="support"><BR></form>

    • 締切済み
    • CGI
  • フォームの値をまとめて取得する関数

    以下のようなフォームから値を取得するときに、(2)のような関数化したいと思っていますが、思うように取得できません。どこが問題かアドバイスください。 <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=sjis" /> <title>sample</title> </head> <body> <form action="" method="post"> 名前:<br /> <input type="text" name="name" size="30" value="" /><br /> コメント:<br /> <textarea name="comment" cols="30" rows="5"></textarea><br /> <br /> <input type="submit" value="登録する" /> </form> </body> </html> (1)問題なく表示できる <?php  foreach(${"_" . $_SERVER["REQUEST_METHOD"]} as $k=>$v) {   ${$k}=$v;  } echo "名前:$name<br>"; echo "コメント:$comment<br>"; ?> (2)表示できない? <?php function Request() {  foreach(${"_" . $_SERVER["REQUEST_METHOD"]} as $k=>$v) {   ${$k}=$v;  } } Request(); echo "名前:$name<br>"; echo "コメント:$comment<br>"; ?>

    • 締切済み
    • PHP
  • XML文書検索のエラー

    以下のコードを入力してボタンを押したところ、 エラーが出ました。どこに原因がありますか? Web ページ エラーの詳細 メッセージ: オブジェクトがありません。 ライン: 17 文字: 1 コード: 0 URI: 省略 xml 側 <?xml version="1.0" encoding="shift_jis"?> <会員>  <会員データ>   <番号>1</番号>   <氏名>佐藤</氏名>   <住所>北海道</住所>  </会員データ>  <会員データ>   <番号>2</番号>   <氏名>山田</氏名>   <住所>大阪</住所>  </会員データ>  <会員データ>   <番号>3</番号>   <氏名>田辺</氏名>   <住所>アメリカ</住所>  </会員データ>  <会員データ>   <番号>4</番号>   <氏名>岩崎</氏名>   <住所>島根</住所>  </会員データ>  <会員データ>   <番号>5</番号>   <氏名>大木 </氏名>   <住所>愛媛</住所>  </会員データ> </会員> html側 <html> <head> <meta http-equiv="Content-Type" content="text/html;charset=shift_jis"> <title>XML文書を検索 1</title> <script language="JavaScript"> function Search(ky) { var obXML = new ActiveXObject('microsoft.XMLDOM'); obXML.async = false; obXML.load('samp06.xml'); var Rnode = obXML.documentElement; var string = ""; string = "ルートノード名:" + Rnode.nodeName + "<br>"; if(Rnode.hasChildNodes()) { var Dnum = Rnode.childNodes.length; var Dname1 = Rnode.childNodes.item(0).childNodes.item(1).text; var Dname2 = Rnode.childNodes.item(1).childNodes.item(1).text; var Dname3 = Rnode.childNodes.item(2).childNodes.item(1).text; var Dname4 = Rnode.childNodes.item(3).childNodes.item(1).text; string += "sam06.xml内に記述されたデータの氏名は以下の" + Dnum + "件です。<br>"; string += "1" + Dname1 + "<br>"; string += "2" + Dname2 + "<br>"; string += "3" + Dname3 + "<br>"; string += "4" + Dname4 + "<br>"; } else { string += "該当データなし<br>"; } hyouji.innerHTML = string; } </script> </head> <body> <div align="center"> <form name="f1"> <input type="text" size="40" name="ky"> <input type="button" name="sbutton" value="検索" onClick="Search(ky)"> </form> <hr> <div id="hyouji" align="left"></div> </div> </body> </html>

  • JavaScriptを使ったらサーブレットの検索が出来なくなりました…

    お世話になります。 HTMLでテキストフォームに検索条件を入力し、送信ボタンを押すと 検索するサーブレットにとんで結果をJSPで表示する…という プログラムを作っています。 HTML上で、テキストフォームが未入力の場合はJavaScriptで 警告ウィンドウを表示させる様に作ったのですが、テキストフォームに 検索条件を入力した時にサーブレットにとばなくなってしまいました。 検索条件を入れて送信ボタンを押してもページは変わらず、 フォーム内容はクリアされます。この時は警告は出ません。 JavaScriptのコードを削除するとちゃんと検索結果のJSPにまで 処理が行われるのですが…。 参考までに、HTMLのソースも載せておきます。 <html> <head> <title>検索画面</title> <script language="JavaScript"> <!-- function getError() { txt=document.searchForm.search.value; if (txt=="") { alert("何も入力されていません!"); } } //--> </script> </head> <body> <center> <br><br><br><br><br><br><br><br><br><br> <b><font color=Salmon size=4>検索条件を入力して下さい。</font></b><br><br> <form name="searchForm"> <form method="post" action="../kadai7/Show" > <input type="text" name="search" size="25" maxlength="10">&nbsp; <input type ="submit" value="GO!" onClick="getError()"> </form> <a href=Menu.htm>★MENUに戻る★</a><img src="HTML\poo.gif"> </center> </body> </html> どうすればちゃんと処理されるようになるのか分かりません。 宜しくお願いします。

  • セレクトボックスとチェックボックスを使った絞込み検索

    Yomi-Searchについての質問なのですがタイトルの通りの質問でチェックボックスを使った絞り込み検索では 01_03 04_01 と検索結果に表示されるのですがセレクトボックスとチェックボックスを組み合わせて絞り込み検索をしてみると 01_0304_01 とこのようにカテゴリとカテゴリの間にスペースが入らず絞り込み検索が出来ません‥ タグはこのように書きました。 <FORM action="http://www..." method="get" target="" name="form1"> <INPUT type="hidden" name="mode" value="search"> <INPUT type="hidden" name="page" value="1"> <INPUT type="hidden" name="sort" value="mark"> <INPUT type="hidden" name="engine" value="pre"> <INPUT type="hidden" name="kn" value="30"> <SELECT size="1" name="word"> <OPTION type="selected" value="">--------</OPTION> <option value="01_01" name="word1">○○○</option> <option value="01_02" name="word2">○○○</option> <option value="01_03" name="word3">○○○</option> </SELECT><BR> <BR> <INPUT type="checkbox" name="word4" value="04_01">○○○<BR> <INPUT type="checkbox" name="word5" value="04_02">○○○<BR> <INPUT type="checkbox" name="word6" value="04_03">○○○<BR> <BR> <INPUT type="submit" value=" 検 索 "> <INPUT type="reset" value="リセット"> &nbsp; </FORM> 全くの初心者ですいませんが良きアドレスなどをお願いします。

  • smartyのforeachの使い方

    仮に$strが以下のような配列を持っている場合smartyのtpl側で 出力させたいのですがうまくいきません。 Array ( [0] => Array ( [id] => 1 [name] => 名前 [sub_id] => Array ( [0] => 12 [1] => 13 ) [sub_name] => Array ( [0] => あああ [1] => いいい ) [sub_cnt] => Array ( [0] => 5 [1] => 5 ) ) [1] => Array ( [id] => 1 [name] => 名前 ) ) sub_***は配列が存在するものとしないものがあります。 そしてtpl側は {foreach item=items from=$str} <ul id="side{$items.id}"> {foreach item=item from=$items} <li><a href="index.php?id={$item.sub_id}">{$item.sub_name} ({$item.sub_cnt})</a></li> {/foreach} </ul> {/foreach} とforeachを重ねてみたのですがsub_***の値が表示されない 状態です。 複雑な配列なのですがこの場合どうすればうまく表示させれるの でしょうか?

    • ベストアンサー
    • PHP
  • チェックボックスによる検索(複数チェックの場合)

    プログラム超初心者です。色々なサイトを検索し参考にしたのですがどうしても結果が得られないため投稿させていただきました。(似たようなものは多かったのですがわかりませんでした。) チェックボックスにて複数チェックされる可能性があるものをMYSQLより検索をかけ結果を表示したいと思っております。 地域:□北海道、□東北、□関東、□北陸、□中部、 ジャンル:□イタリアン、□アジアン料理、□洋食、□すべて 以上にチェックをいれてもらったものに対し検索結果画面をだす予定です。 検索をかけるhtml画面は以下のように致しました。 <form method="POST" action="search.php"> <input name="area[]" type="checkbox" value="0"/>北海道<br> <input name="area[]" type="checkbox" value="1"/>東北<br> <input name="area[]" type="checkbox" value="2"/>関東<br> <input name="area[]" type="checkbox" value="3"/>北陸<br> <input name="area[]" type="checkbox" value="4"/>中部<br> <input name="genre[]" type="checkbox" value="a"/>イタリアン<br> <input name="genre[]" type="checkbox" value="b"/>アジア料理<br> <input name="genre[]" type="checkbox" value="c"/>洋食<br> <input name="genre[]" type="checkbox" value="g"/>すべて<br> <input type="submit" name="bottun1" value="入 力"> PHPで$変数名a = $_POST["area"];と$変数名b = $_POST["genre"]; とし配列 foreach関数を使うのでは・・・とまで考えたのですがその後どうすればよいかわかりません。こんなにわからない状態でお伺いするのは恥ずかしいのですがお知恵を頂きたく投稿させていただきました。 お忙しいかと思いますがどうか宜しくお願いいたします。

    • ベストアンサー
    • PHP
  • phpでDBを検索したい

    最近PHP+mysqlの勉強を始めて、入門書片手に試行錯誤している状況です。 phpで検索ボックスを作って、データベースから名前を引っ張ってきたいのですが、うまくいきません… 因みに同じページに表示したいと思っています。 あと、多分使っている関数が古いとは思いますが、PDOやmysqliとかにすると今より更に知識不足でエラーになってしまうので、とりあえず古いままで使っていますが気にしないでください… データベース名:mydb テーブル名:table id | name | ---+------------+-- 1 | 名前太郎 | 2 | 氏名太郎 | 3 | 名字一郎 | 4 | 名前五郎 | 5 | 氏名花子 | こういうテーブルがあったとして、 名前 というキーワードで検索したときに、セレクトボックスに 名前太郎と名前五郎の2つが表示できたらと思っています。 根本的に間違っているのかもしれませんが、どのように変えればいいのかご教示いただけると幸いです。 何卒よろしくお願い致します。 <?php ちょっとした別の処理~省略 print <<<_FORM_ <label for="name_search">名前検索</label> <form action="" method="post"> <input name="u_name" type="text" id="u_namae" value="" /> <input type="submit"> </form> _FORM_; if (isset($_POST['u_name'])){ $kensaku = htmlspecialchars($_POST['u_name']); $kensaku = "'%". $kensaku ."%'"; require_once('dbconnect.php'); $sql = sprintf("SELECT * FROM table WHERE name LIKE $kensaku "); $recordSet = mysql_query($sql); print <<<_FORM_ <select name="u_name"> _FORM_; while ($kekka = mysql_fetch_assoc($recordSet)) { $val=htmlspecialchars($kekka['name']); ?> <option value="<?php print(htmlspecialchars($kekka['id'])); ?>"> <?php print(htmlspecialchars($kekka['name'])); ?> </option> <?php } print <<<_FORM_ </select> _FORM_; } ?>

    • 締切済み
    • PHP

専門家に質問してみよう