• 締切済み

クエリを利用して次のページへ

phpを学び始めて2日目の初心者です 現在サンプルスクリプトをコピペしながら勉強中です。 クエリを利用して大量のデータベースから検索項目にHitする物を小分けして 次のページへデータベースを出力したいのですが どのように記述すれば良いのか思いつきません どのようなPHP文章を書けば良いのでしょうか。 以下が現在の内容です <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <head> <body> <?php $Cid=$_GET['cid']; $Data=file("item.csv"); $P=$_GET["c"]; for($i=0;$i<sizeof($Data);$i++){ $line=explode(",",$Data[$i]); if($line[1]==$Cid){ //Cidと一致するテーブル検索 $ID=$line[0]; } echo "<a href=test2.php?id=$ID>リンク</a>"; } ?> </body> </html> item.csvファイルの中身は あいうえお,abc かきくけこ,efg さしすせそ,hij たちつてと,lmn 以下省略

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

みんなの回答

  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.1

大きく3つ修正をしたほうが良いでしょう (1)$_GETをいきなり書かずにissetで調査 (2)ファイルから読み取った文字列に対しては改行文字を削除 (3)URLに流し込むときにはurlencodeでエンコード それを踏まえるとこんな感じ <?PHP $Cid=isset($_GET['cid'])?$_GET['cid']:""; $Data=file("item.csv"); $P=isset($_GET["c"])?$_GET["c"]:""; for($i=0;$i<sizeof($Data);$i++){ $Data[$i]=str_replace(array("\r","\n"),"",$Data[$i]); $line=explode(",",$Data[$i]); if($line[1]==$Cid){ $ID=$line[0]; echo "<a href=test2.php?id=".urlencode($ID).">リンク</a>"; } } ?> ちなみにファイルすべてを読み込んで処理すると効率はわるいですね 頭から読んでヒットしたら処理をとめるほうがよいかもしれません その場合はfile()ではなくfopenで処理する通常のファイルI/Oを利用しましょう

kan1110
質問者

お礼

ありがとうございましたm(__)m

関連するQ&A

  • 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が分からず、人のコードを参考にして作った物をいじっています。 今回、どうしてもわからない事があるので質問しました。 item.csvとcate.csvからページを作成しています。 item.csvにデータを入れるのですが、バナータグを入れると ,"<a href=""http://・・・"" target=""_blank""><img src=""http://・・・"" border=""0""></a>", このようになってしまい、上手く表示ができない状態です。(エクセルが原因と考えられます) ""を"に置き変えてちゃんと表示できるのようにしたいのですが、どのようにすればいいのでしょうか? この問題点をクリアすればどうにかなりそうです。 すいませんが、どこをどのように直せばバナーが上手く表示できるようになるのでしょうか? phpがほとんど分かっていない為、詳しく教えてください。よろしくお願いします。 <?php $C=$_GET["c"]; //クエリからパラメータを取得 $DATA=file("item.csv"); //CSVファイルを1行1要素で配列に読み込む $CAT_DATA=file("cate.csv"); //カテゴリ用CSVファイルを読み込む //CSVファイルからページデータを獲得する関数 //@引数 $id :ページID //@戻り値 array :ページデータ //(該当するIDがなければ空の配列を返す) function getPageRecord ( $id ) { $filename = 'cate.csv'; // CSVファイル名 $maxlen = 1024; // 1行の最大長(バイト) $record = array(); if ($fp = fopen($filename, 'r')) { while ($rec = fgetcsv($fp, $maxlen, ',')) { if ($rec[0] == $id) { $record = $rec; break; } } fclose($fp); } return $record; } //ページデータ獲得 $page = getPageRecord($_GET['c']) //獲得したデータのレイアウト ?> <?php if($C){ print"<head>\n"; print"</head>\n"; print"<body>\n"; for($i=sizeof($DATA)-1;$i>=1;$i--){ //$DATAの要素を一つずつ読み込みながら以下の処理を行う $line=explode(",",$DATA[$i]); //1要素をさらにカンマで分解し配列に格納 if($line[1]==$C){ //もしパラメータとカテゴリ番号が一致すれば表示 //問題箇所:商品出力:バナータグやテキストリンクタグを入れると上手く表示できません print"<table width='90%' class='shop'><tbody><tr><td align='center' width='20%'>{$line[3]}</td><td width='60%' colspan='2'><p>{$line[2]}<br>{$line[7]}</td></tr></tbody></table>\n"; } } }else{ print"<head>\n"; print"</head>\n"; print"<body>\n"; } ?> </body></html>

    • ベストアンサー
    • PHP
  • PHPとCSVで簡易データベースなるものを作りたいのです

    私はプログラミングなどに関しては全くの素人なのですが、 今回こちらのサイト様(http://affiliate.aki-f.com/prog/cat/cat9.html)を参考にして簡易データベースなるものを作ろうと思っています。 ですがやはり付け焼刃の知識ではどうにも先が見えなく困っています。 今回が初投稿なのですが何卒宜しくお願いいたします。 以下に各ソースと質問を書かせていただきます。 ------------------------CSVの中身------------------------ 商品カテゴリー,商品タイトル,値段,発売年,簡単な説明,おすすめ度 商品カテゴリー,商品タイトル,値段,発売年,簡単な説明,おすすめ度 商品カテゴリー,商品タイトル,値段,発売年,簡単な説明,おすすめ度 ~同じ用に数十件ほど~ 商品カテゴリー,商品タイトル,値段,発売年,簡単な説明,おすすめ度 ------------------------------------------------------------- 同じカテゴリー、発売年、おすすめ度などで絞込み表示するような形を想定しています。 ------------------------------INDEX.PHP------------------------ <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html lang="ja"> <head><meta http-equiv="Content-Type" content="text/html; charset=EUC-JP"></head> <body> <table> <tbody> <?php $Data=file('list.csv'); for($i=1;$i<sizeof($Data);$i++){ $line=explode(",",$Data[$i]) ?> <tr> <td><a href="test.php?id=<?=$line[0]?>"><?=$line[0]?></a></td> <td><a href="test.php?id=<?=$line[1]?>"><?=$line[1]?></a></td> <td><a href="test.php?id=<?=$line[2]?>"><?=$line[2]?></a></td> <td><a href="test.php?id=<?=$line[3]?>"><?=$line[3]?></a></td> <td><a href="test.php?id=<?=$line[4]?>"><?=$line[4]?></a></td> <td><a href="test.php?id=<?=$line[5]?>"><?=$line[5]?></a></td> </tr> <?php } ?> </tbody></table></body></html> ---------------------------------------------------------------- index.phpでは全商品のリストが表示されます。 ---------------------------test.php----------------------------- <?php $id=$_GET['id'] ?> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html lang="ja"> <head><meta http-equiv="Content-Type" content="text/html; charset=EUC-JP"></head> <body> <table> <tbody> <?php $Data=file('list.csv'); for($i=0;$i<sizeof($Data);$i++){ $line=explode(",",$Data[$i]); if($line[/*質問1*/]==$id){ ?> <tr> <td><a href="test.php?id=<?=$line[0]?>"><?=$line[0]?></a></td> <td><a href="test.php?id=<?=$line[1]?>"><?=$line[1]?></a></td> <td><a href="test.php?id=<?=$line[2]?>"><?=$line[2]?></a></td> <td><a href="test.php?id=<?=$line[3]?>"><?=$line[3]?></a></td> <td><a href="test.php?id=<?=$line[4]?>"><?=$line[4]?></a></td> <td><a href="test.php?id=<?=$line[5]?>"><?=$line[5]?></a></td> </tr> <?php } } ?> </tbody></table></body></html> --------------------------------------------------------------- index.phpで選択された項目で絞り込んで表示するページです。 質問1 上記の、if($line[~]==$id)の、~の部分に例えば0と入っているなら商品カテゴリーを選択した時に同じカテゴリーで絞り込み表示するわけなのですが、これだけでは当然他の項目を選択しても何も表示されません。なので、~の部分に全ての$lineを巡回させるような命令を書ければ全項目での絞り込みに対応できるんじゃないかなと、素人ながらに思っているのですがどうでしょうか?またその方法、もしくは他の解決策をご教授願えますでしょうかm(_ _)m あと、index.phpとtest.phpを1つにまとめてしまえることはできるでしょうか?私としてはできるならそうしたいのです。が、うまくできませんでした。 どこか変なことを口走っているかも知れませんがご容赦ください。 宜しくお願いします。

    • 締切済み
    • PHP
  • 検索時エラー

    はじめまして 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
  • PHPで指定件数のデータを表示させる方法

    お世話になっております。 下記のようなPHPブログラムでitem.csvのデータをランダムに指定件数表示させようと思っています。 このままですとデータは1件か2件表示され、$i<=3にすると2件か3件表示されます。 require_once('common.php'); $Data=file('item.csv'); shuffle ($Data); for ( $i=1; $i<=2; $i++ ){ $line=explode(",",$Data[$i]); print($line[2]); print($line[3]); } これを1を設定すれば1件、3を設定すれば3件というように、数字の件数を表示させたいと思います。 ご教授いただければ幸いです。よろしくお願いいたします。

    • 締切済み
    • PHP
  • 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
  • csvファイルを読み込み→上書きするスクリプト【添削願】

    csvファイルを読み込み→上書きするスクリプトを作ってみましたがうまく行かないときがあり原因を考えています。 100行程度のcsvから任意の行($idで指定したもの)を書き換えたいのですが、(テスト書き込みを)書き込んでくれるときと指定したその行だけ削除されてしまうときとまちまちです。 なぜ2パターンの結果がでるのでしょうか? お力をお借りできると幸いです。 <?php //データの取り出し $id = $_GET['id']; $data = file("data/file.csv"); //idで指定した行に書き込み $data[$id] ="テスト書き込み"; //csvファイルにデータの書き込み $file = fopen("data/file.csv","w+"); flock($file, LOCK_EX); for($i=0; $i<count($data); $i++) { fwrite($file,$data[$i]); } fclose($file); ?>

    • ベストアンサー
    • PHP
  • データがない場合のクエリの書き方

    いつもお世話になっております。 MySQLとPHPで開発をしております。 以下のような3つのテーブルがあります。 テーブル:Hp(キー:hid) |hid |name |・・・| +---------------------+ |1  |a_name|・・・| |2  |b_name|・・・| テーブル:items(キー:item_id) |item_id|item|alias|type|・・・| +----------------------------------+ |1   |aa |aaaaa|11 |・・・| |2   |bb |bbbbb|11 |・・・| |3   |cc |ccccc|11 |・・・| |4   |dd |ddddd|22 |・・・| |5   |ee |eeeee|22 |・・・| テーブル:check(キー:hid, item_id ) |hid|item_id|・・・| +-------------------+ |1 |1   |・・・| |1 |2   |・・・| |1 |3   |・・・| |2 |1   |・・・| |2 |3   |・・・| |2 |5   |・・・| check に登録されていない item_id を表示したいと考えているのですが データの取得方法がわかりません。 例えば hid=1 の場合、item_id=4 と item_id=5 を取得したいです。 下記クエリの場合、hid に関係なく取得できてしまいます。 select i.* from items i left join check c using(item_id) where i.type='11' and c.item_id is NULL order by i.item_id ASC どうやってクエリを書いたらよろしいでしょうか。 ご教示お願いいたします。 <環境> MySQL:4.1.20

    • ベストアンサー
    • PHP
  • PHP 1ページあたりの表示制限に関して

    <?php require_once('test/common.php'); $Data=file("test/item.csv"); $ID=$_GET[id"]; if($P>0){ $Prev=$ID-1; $PrevPage="<a href='index2.html?id={$Prev}'>前の10件</a>"; } $Size=sizeof($Data); if($Size/1-1>$ID){ $Next=$ID+1; $NextPage="<a href='index2.html?id={$Next}'>次の10件</a>"; } ?> 全<?=$Size?>件 | <?=$PrevPage?> <?=$NextPage?> 「次の10件」「前の10件」のところを文字じゃなく画像を用いたいのですが、<img src="img/next.png" width="100px" />を入れてみるとページがエラーになってしまいます。文字じゃなく画像を使うにはどのようにすればいいのですか? 教えてください。

    • 締切済み
    • PHP
  • queryの使い方

    お世話になります。 queryの使い方で質問です。 DB内に下記の様なデータが在ります。 -------------------------------- | id | header | footer | -------------------------------- | 1 | HTML文 | HTML文 | -------------------------------- テーブルとフィールドを指定してデータ(HTML文)を抜き出したいのですが、いまいち方法が理解できません。 queryの使い方を理解していないのだと思います。 以下、PHPに記述しているコードです。PHP自体は問題なく動いてます。 PHP---------------------------------------------------- $footer =& $mdb2 -> query('select footer from where id=1'); if (PEAR::isError($footer)) {die($footer->getMessage());} $smarty->assign("footer",mb_convert_encoding($footer,"SJIS","UTF-8")); 表示---------------------------------------------------- MDB2 Error: syntax error 宜しくお願いします。

専門家に質問してみよう