全文検索ではなく、必要なデータ(複数フィールド)のみを検索するにはどうしたらいいですか?
はじめまして、まだCGI初心者なものでよくわからないですが教えてください。
あるCGI関連の書籍に付属のCD内に修められた顧客データベースを改造しているところです。このデータベースはCSVデータの全ての情報を検索して結果を表示するものなのですが、これを「備考($ message)以外の情報を全て検索して結果を表示する」とするにはどのように改造したらよろしいでしょうか。備考は検索しないけれど、他の情報は全て検索して結果を表示させるということです。ただし、結果として表示される画面には備考($ message)の内容も表示させたいのです。
検索に関わる箇所を抜き出すと次のようになります。初心者なので説明がうまくできていないと思いますが、ご解答できる方々は是非ともご教授お願いいたします。
############################
# 初期画面、検索結果表示
############################
sub html {
open(IN,"$file") || &error(100,'ファイルをオープンできません');
@DB = <IN>;
close(IN);
@DB = reverse(@DB);
if ($FORM{'action'} eq "search") {
$kw = $FORM{'kw'};
&jcode::convert(*kw,'euc');
foreach $line (@DB) {
$value = $line;
if ($kw =~ m/[\*\{\}\=\&\@\~\>\<\#\%\"\'\`\(\)\[\]\\\/\:\;\_\,]/){
&error(101,'検索キーが不適切です'); }
&jcode::convert(*value,'euc');
if ($value =~ /$kw/i){
push(@HIT,$line);
}
}
}else{
@HIT = @DB;
}
print "Content-type: text/html\n\n";
print <<"EOL";
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html lang="ja">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=x-euc-jp">
<title>$title</title>
@style
</head>
<body>
<div align="center">
<p class="title">$title</p>
<p class="text"><b>|</b><a href="$HomeUrl">ホームページ</a><b>|</b></p>
<form method="post" action="$reload">
<input type="hidden" name="action" value="write">
<input type="submit" value="データベースに書き込む" class="buttonsmall">
</form>
<form method="post" action="$reload">
<input type="hidden" name="action" value="search">
<table border="0" cellspacing="0" cellpadding="2">
<tr>
<td>
<p class="text">名前、ユーザー名他、備考文の文字検索ができます。</p>
</td>
</tr>
<tr>
<td>
<table border="0" cellspacing="0" cellpadding="2">
<tr valign="bottom">
<td>
<input type="text" name="kw" size="30" class="textarea">
</td>
<td>
<input type="submit" value="検索" class="buttonsmall">
</td>
</tr>
</table>
</td>
</tr>
</table>
</form>
EOL
if ($FORM{'line'} eq ''){
$line = 0;
}else{
$line = $FORM{'line'};
}
$data_count = @HIT - 1;
$view_end = $line + ($view-1);
if ($view_end >= $data_count){
$view_end = $data_count;
}
foreach ($line .. $view_end) {
($date_now,$number,$name,$email,$hp,$message,$tiku,$yuza,$tel,$fax,$busho)
= split(/\,/,$HIT[$_]);
$message =~ s/\r/<br>/g;
print <<"EOL";
############################