アプリ版:「スタンプのみでお礼する」機能のリリースについて

いつも参考にさせていただいております。今回はじめての質問になりますが、よろしくお願いします。

PHPによるCSVファイル内の指定列内を検索する方法について困っております。似たような質問(http://oshiete1.goo.ne.jp/qa3570985.html)を参照しましたが、どうにもわからずほとほと困っている状態です。

とりあえず他サイトを参考にして検索フォームを下記のように作成しました。(ラジオボタンの送信内容は便宜上変更しました)
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html lang="ja">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=SHIFT-JIS">
<title></title>
</head>
<body>
<form action="search_4.php" method="POST">
<INPUT type="radio" name="touroku_type" value="りんご">りんご
<INPUT type="radio" name="touroku_type" value="なし">なし
<INPUT type="radio" name="touroku_type" value="ぶどう">ぶどう
<INPUT type="radio" name="touroku_type" value="メロン">メロン
<INPUT type="radio" name="touroku_type" value="スイカ">スイカ<BR>
<input type="submit" name="submit" value="検索">
</form>
<!--ここから検索結果-->
<ul>
<?php
if($_POST["touroku_type"]!=""){
  $KeyWord=$_POST["touroku_type"];
  $KeyWord=htmlspecialchars($KeyWord);
  $Data=file("system.csv");
  for($i=0;$i<sizeof($Data);$i++){
    $lines=strip_tags($Data[$i]);
    if(mb_eregi($KeyWord,$lines)){
      $line=explode(",",$Data[$i]);
?>
<li><?=$line[3]?> → <a href="item.php?id=<?=$line[0]?>">詳細を見る</a></li>
<?php
    }
  }
}
?>
</ul>
</body>
</html>

CSVファイルの登録情報は
1,りんご,あり
2,なし,あり
3,ぶどう,なし
4,メロン,なし
5,スイカ,なし
とします。

この場合、”りんご”や”スイカ”など他で入力されていない情報で検索した場合きちんと出ますが、”なし”で検索すると2から5の情報が出てしまい検索として役に立たない状態です。
ここで質問なのですが、PHP上で指定列のみを検索する場合(上記の場合、配列の2つ目のみを検索対象とする)、上記プログラムのどこを変更すべきなのかご教授いただけますでしょうか?

よろしくお願いします。

A 回答 (1件)

こんにちは。


はじめまして。

ソースを拝見しました。
「なし」で検索をするとCSVの3列目の「あり・なし」も
引っかかってしまってますね。

ということは2列目のみ検索させなければならないので、
先に explode で各列に分割し、2列目のみを検索対象にします。

こんな感じです。

<!--ここから検索結果-->
<ul>
<?php
if($_POST["touroku_type"]!=""){
$KeyWord=$_POST["touroku_type"];
$KeyWord=htmlspecialchars($KeyWord);
$Data=file("system.csv");
print_a($Data);
for($i=0;$i<sizeof($Data);$i++){
$lines=strip_tags($Data[$i]);
$line=explode(",",$Data[$i]);
if(mb_eregi($KeyWord,$line[1])){
?>
<li><?=$line[1]?> → <a href="item.php?id=<?=$line[0]?>">詳細を見る</a></li>
<?php
}
}
}
?>
</ul>

いかがでしょうか。
    • good
    • 0
この回答へのお礼

explode様
回答ありがとうございました。
指示通りに書き換えて実行したところ、見事指定列のみを検索対象とすることができるようになりました。ここで2週間ほど躓いていたので感動の極みです。

しかし、少し変えただけで動くようになるなんて勉強不足としか言いようがないですね。お恥ずかしい。CSVに関する参考書自体なかなか本屋に置いていない事が多いので情報源がネットに偏りすぎて応用が利かないのはまずいですね。もっと勉強します。



アドバイスありがとうございました。

お礼日時:2008/07/25 23:57

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!