CSVファイルの検索結果表示について

このQ&Aのポイント
  • CSVファイルを検索して検索結果を表示する方法を教えてください。
  • 上記のプログラムを実行すると、検索結果が正しく表示されません。改良すべき点を教えてください。
  • CSVファイルの内容を出力する際、指定したフォーマットに出力する方法を教えてください。
回答を見る
  • ベストアンサー

CSVファイルの検索結果表示について

CSVファイルを検索して検索結果を表示したいのですが、 検索結果を表示できません。 トップページ <form action="search.php" method="get"><input type="text" name="key" size="90"> <input type="submit" name="submit" value="検索"></form> 検索結果を表示するページ <?php $ArrKeywordLength = sizeof($ArrKeyword); $fp = fopen('data.csv', "r"); $Result=array(); while(!feof($fp)){ $ret = fgets($fp, 4096); $lines = strip_tags($ret); $Match=true; for($n=0; $n<$ArrKeywordLength;$n++){ if(!strpos($ArrKeyword[$n], $lines)){ $Match = false; break; } } if($Match === true){ $Result[] = $ret; } } ?> <?php $n=sizeof($Result); if($n==0){ print"見つかりませんでした"; }else{ print"{$n}件見つかりました"; ?> <ul> <?php for($i=0;$i<10;$i++){ $line=explode(",",$Result[$i]); ?> <li><a href="item.php?id=<?=$line[0]?>"><?=$line[1]?></a></li> <?php } } ?> </ul> 上記のプログラムを実行すると、以下のようになってしまいます。 ○件見つかりました ・ ・ ・ ・ ・ 私のやりたいことは、以下のようなCSVファイルがあったら ----------------------------------------------------- CSVファイル 1,あいうえお 2,かきくけこ 3,さしすせそ 4,たちつてと 5,なにぬねの ----------------------------------------------------- <li><a href="item.php?id=1">あいうえお</a></li> <li><a href="item.php?id=2">かきくけこ</a></li> <li><a href="item.php?id=3">さしすせそ</a></li> <li><a href="item.php?id=4">たちつてと</a></li> <li><a href="item.php?id=5">なにぬねの</a></li> のように出力したいのですが、 どのように改良すればよいのでしょうか? わかってる方からすれば笑われるようなことかもしれませんが、 PHP初心者なので、本を読みながらいろいろ試してみても、 全然うまくいかないので、どなたか教えてください。 よろしくお願いします。

  • PHP
  • 回答数1
  • ありがとう数1

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

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

<?=$exampe?> この記法は、ショートタグというものですが、php.iniの設定で無効になっている場合があります。 従いまして、 ><li><a href="item.php?id=<?=$line[0]?>"><?=$line[1]?></a></li> この部分を <li><a href="item.php?id=<?php echo $line[0]?>"><?php echo $line[1]?></a></li> というようにしてみたらいかがでしょう。

diet_blog
質問者

お礼

hogehoge78さん 的確なアドバイスありがとうございます。 おかげさまで表示できるようになりました。 本当にありがとうございました。

関連するQ&A

  • 検索時エラー

    はじめまして PHPを用いてsystem.csv内を検索するんですが、ある文字を入力すると Warning: eregi() [function.eregi]: REG_BADRPT と表示されてしまいます。 例えば: 藤、++ などです。 なぜでしょうか? またどのように修正してあげたらいいのでしょうか? よろしくお願いいたします。 <?php if($_GET["key"]==""){ print"キーワードを入力してくださいね"; }else{ $KeyWord=$_GET["key"]; $KeyWord=htmlspecialchars($KeyWord); $KeyWord=mb_convert_encoding($KeyWord,"EUC-JP","auto"); $Result=array(); $Data=file("system.csv"); for($i=0;$i<sizeof($Data);$i++){ $lines=strip_tags($Data[$i]); if(eregi($KeyWord,$lines,$text_b)){ array_push($Result,$Data[$i]); } } ?> <?php $n=sizeof($Result); if($n==0){ print"見つかりませんでした"; }else{ print"{$n}件見つかりました"; ?> <ul> <?php for($i=0;$i<sizeof($Result);$i++){ $line=explode(",",$Result[$i]); ?> <li><?=$line[2]?><a href="item.php?id=<?=$line[0]?>"><?=$line[1]?></a></li> <?php } } } ?>

    • 締切済み
    • PHP
  • CSVファイルの10件表示について

    PHP初心者です。 CSVデータを活用してサイトを作ろうとしているのですが、 フリーワードで検索すると下記のようなエラーが出てしまいます。 Fatal error: Allowed memory size of 52428800 bytes exhausted (tried to allocate 77287300 bytes) in レンタルサーバー(ロリポップ)に memory_limitについて問い合わせたところ、 消費メモリを削減して対処してほしいと言われました。 10件だけ表示するようにすれば解決するかと思い、 自分なりにあれこれいじってみたのですが、 うまくいきませんでした。 10件だけ表示する方法やメモリ消費を抑える方法を お分かりになる方がいらっしゃいましたら、 ぜひご教授お願いいたします。 -index.php-トップページ <form action="search.php" method="get"><input type="text" name="key" size="90"> <input type="submit" name="submit" value="検索"></form> -seach.php-検索結果表示ページ <?php if($_GET["key"]==""){ print"キーワードを入力してください"; }else{ $KeyWord=$_GET["key"]; $KeyWord=htmlspecialchars($KeyWord); $KeyWord=mb_convert_encoding($KeyWord,"Shift_JIS"); $KeyWord=mb_convert_kana($KeyWord,s); $ArrKeyword=explode(" ",$KeyWord); $Result=array(); $Data=file("item.csv"); for($i=0;$i<sizeof($Result);$i++){ $lines=strip_tags($Data[$i]); $Match=true; for($n=0;$n<sizeof($ArrKeyword);$n++){ if(!eregi($ArrKeyword[$n],$lines)){ $Match=false; break; } } if($Match==true){ array_push($Result,$Data[$i]); } } ?> <?php $n=sizeof($Result); if($n==0){ print"見つかりませんでした"; }else{ print"{$n}件見つかりました"; ?> <ul> <?php for($i=0;$i<sizeof($Result);$i++){ $line=explode(",",$Result[$i]); ?> <li><a href="item.php?id=<?=$line[0]?>"><?=$line[3]?></a></li> <?php } } } ?> 下記の行がエラーのようです。 for($i=0;$i<sizeof($Result);$i++){

    • ベストアンサー
    • PHP
  • 検索プログラムの10件表示について

    私はPHPの初心者ですが、ステップアップを兼ねてサイト内検索を作ろうかと思っています。 今回こちらのサイト様(​http://affiliate.aki-f.com/prog/cat/cat9.html​)を参考にさせて頂きました。 ・絞込み検索(and検索) ・1ページを10件表示に制限する 上記のサンプルプログラムを組み合わせてみたのですが 表示結果に問題があり、なんとか修正できないかと思い投稿させて頂きました。 ------------------------表示結果------------------------ 2件見つかりました。全2件 | 次の10件 ・JavaScriptハッカーズ・プログラミング ・コピーするだけですぐに使えるJavaScript ・<空白> ・<空白> ・<空白> ・<空白> ・<空白> ・<空白> ・<空白> ・<空白> -------------------------------------------------------- 2件表示のはずが、10件表示されてしまいます。 さらに、2件しか該当していないに「次の10件」まで表示されてしまいます。 なんとか、検索結果に基づいた表示にしたいのですが どなたか知恵を貸していただければと思います。 宜しくお願い致します。 --------------------------ソース------------------------- if($_GET["key"]==""){ print"キーワードを入力してください"; }else{ $KeyWord=$_GET["key"]; $KeyWord=htmlspecialchars($KeyWord); $KeyWord=mb_convert_encoding($KeyWord,"EUC-JP","auto"); $KeyWord=mb_convert_kana($KeyWord,s); $ArrKeyword=explode(" ",$KeyWord); $Result=array(); $Data=file("item.csv"); for($i=0;$i<sizeof($Data);$i++){ $lines=strip_tags($Data[$i]); $Match=true; for($n=0;$n<sizeof($ArrKeyword);$n++){ if(!eregi($ArrKeyword[$n],$lines)){ $Match=false; break; } } if($Match==true){ array_push($Result,$Data[$i]); } } ?> <?php $n=sizeof($Result); if($n==0){ print"見つかりませんでした"; }else{ print"{$n}件見つかりました"; ?> <?php $P=$_GET["p"]; if($P>0){ $Prev=$P-1; $PrevPage="<a href='allitem.php?p={$Prev}'>前の10件</a>"; } $Size=sizeof($Result); if($Size/10-1>$P){ $Next=$P+1; $NextPage="<a href='allitem.php?p={$Next}'>次の10件</a>"; } ?> 全<?=$Size?>件 | <?=$PrevPage?> <?=$NextPage?> <ul> <?php for($i=$P*10;$i<$P*10+10;$i++){ $line=explode(",",$Result[$i]); $ID=$line[0]; $Title=strip_tags($line[3]); print"<li><a href='item.php?id={$ID}'>{$Title}</a></li>"; } ?> <?php } } ?> </ul> ----------------------------------------------------------

    • ベストアンサー
    • PHP
  • PHPでCSVの一部の行を編集したい

    掲示板の管理画面の様な感じで、 PHPでCSVファイル内の一行を編集するフォームを作りたいと思っています。 フォームには新規投稿と、編集用のボタンがあり、 編集用で送られてきたものを受け取るPHPプログラムは以下の通りです。 if($mode == "edit"){ foreach($csv as $val){ list($li_id, $li_date, $li_comment) = split("\t",$val); $fp = fopen(csv' , 'w'); if($li_id == $info_no){ $csv[$li_id] = "$li_id\t$date_y/$date_m/$date_d\t$comment\t\n"; }else{ $csv[$li_id] = "$li_id\t$li_date\t$li_comment\t\n"; } } $fp = fopen('csv' , 'w'); fputs ($fp, $csv[$li_id]); for ($i=0; $i<1000; $i++){ fputs ( $fp,$csv[$i]); } fclose($fp); } としたのですが、うまくいきませんでした。 なぜか、編集した文章と、最後に新規で追記した文章が追加されてしまいます・・・・。 「あいうえお」を新規で追記した後、 1. あいうえお 2. かきくけこ 3. さしすせそ 4. たちつてと の2を編集すると 1.あいうえお 1.あいうえお 2.かきくけこ(編集した) 3.さしすせそ 4.たちつてと となってしまいます。。。。 新規で追記されたものがない場合は 空行が追記されてしまいます。 いろいろ試行錯誤したのですが、さっぱりわかりません。 教えて下さい。

    • 締切済み
    • PHP
  • PHPでCSVファイルの任意の行だけを編集したい

    簡易掲示板の管理画面を作成しようと思っていますが、 うまくいかずに悩んでいます。 入力フォームで送られてきた内容をcsvファイルに書き込み、 それを表示するという掲示板なのですが、 管理画面ではそのcsvファイルを操作して、 任意の書き込みを修正・削除できるようにしたいと考えています。 以下、PHPコードです。 if($mode == "edit"){ foreach($csv as $val){ list($li_no, $li_date, $li_comment) = split("\t",$val); if($li_no == $info_no){ $csv[$info_no] = "$id\t$date_y/$date_m/$date_d\t$comment\t\n"; fputs($fp,$csv[$info_no]); fclose($fp); } } }else{ $dat = "$id\t$date_y/$date_m/$date_d\t$comment\t\n"; $fp = fopen('$csv' , 'w'); fputs ($fp, $dat); for ($i=0; $i<1000;$i++){ fputs ( $fp,$csv[$i]); } fclose($fp); } 編集用のフォームで$info_noを飛ばして、 CSVファイル内の$li_noと一致した場合、 $li_noの行を書き換えという処理をしているつもりなのですが、 なぜか、他の行がすべて消えて、 編集した行だけがファイル内に残ります。 いろいろと検索して試してはみたのですが、 どうもうまくいきません。 どなたか教えてください。 お願いします。 これ以外の方法で簡単にできる方法があれば そちらも教えていただけたら幸いです。

    • ベストアンサー
    • PHP
  • CSVファイルから検索出力してページ毎に別けたい

    宜しくお願いします。 下記URLを参考にアイテム別ページを作成したのですが データ量が多い為クエリを利用して10件毎にページを分けたいのですが やり方が思い浮かびませんどのように記述すれば出来ますでしょうか http://affiliate.aki-f.com/prog/page/33.html <?php require_once('common.php'); $Cid=$_GET['cid']; $Data=file('cat.csv'); for($i=0;$i<sizeof($Data);$i++){ $line=explode(",",$Data[$i]); if($line[0]==$Cid){ $CatTitle=$line[1]; } } ?> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html lang="ja"> <head> <title><?=$CatTitle?> | サンプルリンク集</title> <meta http-equiv="Content-Type" content="text/html; charset=EUC-JP"> <body> <a href="index.php">HOME</a> <h1><?=$CatTitle?></h1> <table border="1"> <tbody valign="top"> <?php $Data=file('item.csv'); for($i=0;$i<sizeof($Data);$i++){ $line=explode(",",$Data[$i]); if($line[1]==$Cid){ $ImageLink=DeleteEsc($line[2]); $TextLink =DeleteEsc($line[3]); ?> <tr> <td><?=$ImageLink?></td> <td> <?=$TextLink?><br><br> <a href="item.php?id=<?=$line[0]?>">詳細を見る</a> </td> </tr> <?php } } ?> </tbody> </table> </body> </html> item.csvファイルの中身は あいうえお,abc かきくけこ,efg さしすせそ,hij たちつてと,lmn 以下省略

    • ベストアンサー
    • PHP
  • PHPによるCSVファイルの指定列検索について

    いつも参考にさせていただいております。今回はじめての質問になりますが、よろしくお願いします。 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つ目のみを検索対象とする)、上記プログラムのどこを変更すべきなのかご教授いただけますでしょうか? よろしくお願いします。

    • ベストアンサー
    • PHP
  • cygwinを使ってcsvファイルを読み込み、出力させようとしています

    cygwinを使ってcsvファイルを読み込み、出力させようとしています。 とりあえず、読み込みのみのプログラムを作成し、 実行させてみたのですが(run ファイル名.csv と入力) 「Error: could not start C:\cygwin\home\ユーザー名ファイル名.csv」 と出力され、読み込みができず、困っています。 プログラム初心者です。 恐縮ですがご回答よろしくお願いします。 以下に、読み込みプログラムとcsvファイルを記載します。 (プログラムは拾い物です。) <プログラム> #include <stdio.h> #define MAX_ITEM_SIZE 100 #define MAX_LINE_SIZE 1024 char *GetCSVItem(char *wp, char *buff, int size); void main(int argc, char *argv[]) { FILE *fp; char buff[MAX_LINE_SIZE], *wp, item[3][MAX_ITEM_SIZE]; int i1, len; if(argc != 2){ printf("comand error nyuuryoku keishiki\n"); return; } fp = fopen(argv[1], "r"); if(fp == NULL){ printf("can not open file[%s].\n", argv[1]); return; } for(;;){ if(fgets(buff, MAX_LINE_SIZE, fp) == NULL) break; len = strlen(buff); if(len == 0 || buff[len-1] != '\n'){ if(feof(fp) == 0){ printf("data error[%s].\n", buff); return; } } buff[len-1] = '\0'; wp = buff; if((wp = GetCSVItem(wp, item[0], MAX_ITEM_SIZE)) == NULL){ printf("error(1)\n"); break; } if((wp = GetCSVItem(wp, item[1], MAX_ITEM_SIZE)) == NULL){ printf("error(2)\n"); break; } if((wp = GetCSVItem(wp, item[2], MAX_ITEM_SIZE)) == NULL){ printf("error(3)\n"); break; } if(*wp != '\0'){ printf("error(4)\n"); break; } for(i1 = 0; i1 < 3; i1++){ printf("%d:%s\n", i1+1, item[i1]); } } fclose(fp); } char *GetCSVItem(char *wp, char *buff, int size) { int i1; buff[0] = '\0'; while(*wp == ' ' || *wp == '\t') wp++; if(*wp == '\0'){ return(NULL); } for(i1 = 0; i1 < MAX_ITEM_SIZE; i1++, wp++){ if(i1 >= size) return(NULL); buff[i1] = *wp; if(*wp == '\0'){ buff[i1] = '\0'; return(wp); } if(*wp == ','){ wp++; buff[i1] = '\0'; break; } } return(wp); } <csvファイル> 1,2,3 11,12,13 21,22,23

  • PHP、CSVファイルの日本語データが表示されない

    どうもこんにちわ。PHP初心者です。 どうか助けてください! CSVファイルを読み込んで表示させるプログラムなんですが、 サーバーが変わったら、日本語のデータのみ表示されなくなりました。 以前質問があった下記件と同じ事象で、 参考に色々試してみましたが上手くいきません。 http://oshiete1.watch.impress.co.jp/qa5972094.html ソースは下記です。 どうか、どこをどういじれば良いか、どなたか教えて頂けないでしょうか? 何卒よろしくお願いします。 ------------------ <?php //今日の日付を取得 $today = date("Ymd"); //表示数の設定。 $disp_num = 1; //CSV格納先 $fp = fopen("data/today_word.csv", "r"); while ($data = fgetcsv($fp, 10000)) { for($n = 0; $n < count($data); $n++){ $data[$n] = mb_convert_kana($data[$n], "ak", "SJIS"); } if ((ereg($today,$data[0]))) { $result[] = "<a href='$data[2]'>$data[1]</a><br />"; } } fclose ($fp); ?> -----------------------------

    • ベストアンサー
    • PHP
  • CSV...

    <?php $csv = "system.csv"; $array = file($csv); $c = count($array); $item = 5; //1ページの表示件数 $page = $_GET['page']; //ページ番号 $start = $page * $item; //pageが0 $matched = 0; //条件にマッチした数 foreach( $array as $i => $row ) { $row = trim( $row ); list($id[$i],$name[$i],$sex[$i],$age[$i],$stamp[$i]) = split("\,",$array[$i]); if($sex[$i] == 1 ) { if( $matched >= $start ) { echo $name[$i]; } $matched++; if( $matched - $start >= $item ) break; } } echo "登録件数:$i件"; if( $page ) echo '<a href="search_4?page=' . ( $page - 1 ) . '">前へ</a>'; else echo '前へ'; if( $i < $c ) echo '<a href="search_4?page=' . ( $page + 1 ) . '">次へ</a>'; else echo '次へ'; ?> かなりアホな質問かもしれませんが、動くかテストしようと思い 次へのリンクを押すとsearch_4?page=1となりNot Foundと表示されます。 どうしてですか?

    • ベストアンサー
    • PHP