プロが教えるわが家の防犯対策術!

現在、PHPでCSVから検索するシステムをつくっています。
下記部分は、サイトから流用させていただき、検索ボックス1つの設置、値の返しまではできました。
さらに、この検索ボックスを5個~10個程度、同じページに設置して、「一括検索」をしたいと考えています。
色々なサイトを検索しましたが、「複数キーワード」で検索をするというのはヒットしますが、検索ボックスを複数設置して一括検索を行うというサイトは見あたりませんでした。
あまりにも簡単過ぎてサイトがないのか、それともPHPでできる範囲を超えてしまっているのかはわかりませんが、どなたかご教示いただければと思っています。

<?php
//POSTの処理
$id = isset($_POST['id']) ? $_POST['id'] : "false";
?>
<html>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<head>
<title></title>
</head>
<body bgcolor="#FFFFFF">
<h1 style="font-size:14pt"></h1>
<?php
//ファイル名の指定
$file_name = "price.csv";


//処理の分岐
if($id != "false"){
$fp = fopen($file_name, "a+") or die('ファイルオープンエラー!');
//データを$arrayに代入(多元配列)
while(!feof($fp)){
$data = fgets($fp);
$array[] = explode(",", mb_convert_encoding($data, "UTF-8", "auto"));
}
var_dump( $array );
fclose($fp);

//目的のデータの修得
for($i=0; $i<count($array); $i++){
if (strpos($array[$i][0], $id) !== false){
$new_data = $array[$i];
//var_dump( $new_data );
}
}
}
$new_data = isset($new_data) ? $new_data : "false" ;
?>
<form action="index.php" method="POST">
<input type="text" name="id">
<input type="submit" name="Submit" vale="検 索">
</form>
<?php
if($id != "false"){
if($new_data == "false" || $id == ""){
echo "データが存在しません。";
}else{
echo '▼検索結果';
echo '<hr>';
echo '商品番号: '.$new_data[0].'<br />';
echo '名 称: '.$new_data[1].'<br />';
echo '単 価: '.$new_data[2].'<br />';
echo '在 庫: '.$new_data[3].'<br />';

}
}
?>
</body>
</html>

宜しくお願い致します。

質問者からの補足コメント

  • うーん・・・

    早速のアドバイスありがとうございました。CSVデータについては、「”」や「,」など元々のデータに入っている文字と数値以外の記号は取り除きました。価格のところは本当ならば、3ケタのところに「,」をつけたいところですが、何らかの影響がでるのも嫌なので今はぐっとこらえて外してます。
    データ量もいらないものを削れば1,000件~2,000件以内に収まると思います。そのあたりに問題がなければ、検索ボックスの複数設置は可能ということでしょうか。

    No.1の回答に寄せられた補足コメントです。 補足日時:2017/05/19 10:40

A 回答 (2件)

csvのボリュームにもよりますが、データが数百件~数千件程度ならphpでも実用に耐えうるかもしれません


デリミタやエンクロージャがきちんとしていて、データ内にカンマが出現しないなど
一定の条件が整えばテキストを正規表現で確認してもいいですが
csvを一度配列にしたほうが余計な処理がへるかもしれません。
この回答への補足あり
    • good
    • 0

簡単なサンプルから始めればわかりやすいと思います



<?PHP
$fp=fopen("test.csv","r");
$a=[];
while(($b = fgetcsv($fp, 1024, ",")) !== FALSE) {
$a[]=$b;
}
fclose($fp);
print_r($a);
?>

whileのなかで$bをチェックし合致したものだけ$aに投入していけば
結果として抽出後のデータが$aとして受け取れます
    • good
    • 0
この回答へのお礼

助かりました

ありがとうございました。 早速やってみました。 検索ボックスを設置していないので、ただデータが表示されているだけの状態ですが、PHPの「$b」と「$a」にそれぞれ1.2.3とつけてみたところ、データがきちんと表示されていました。 あと金額の部分もカンマが表示されていました! これに対応する検索ボックスを設置すればいいわけですね。これから頑張ってみようと思います。
2日間ほど悩んで、最終的に初めてこちらに投稿したのですが、もっと早くに投稿してればよかったです。 ありがとうございました。

お礼日時:2017/05/19 14:02

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