CSVデータを使ったページングとソートの方法

このQ&Aのポイント
  • phpを使ってCSVデータを一覧表示し、詳細データを表示する方法について解説します。
  • fgetcsvを使用してCSVデータの一覧表示を行い、ページングとソート機能を追加する方法について説明します。
  • この記事では、phpを使ってCSVデータを一覧表示し、ページングとソート機能を追加する方法を紹介します。
回答を見る
  • ベストアンサー

CSVデータを使ったページングとソート

phpをやり始めて3ヶ月くらいですが、高度な事がまだまだわかりません。どなたかお知恵を拝借願えないでしょうか? fgetcsvを使って一覧表示をしidからそのデータの詳細をsyousai.phpへ送って表示するようにしています。 この一覧表示にページングとソート機能をつけたいのですが、どうやったらよいかわかりません。 <? $fname = "list.csv"; $file = fopen($fname, "r"); while (list( $data0, $data1, $data2, $data3, $data4) = fgetcsv($file, 1000, ",")) { ?> <table> <tr> <td> <form action="syousai.php" method="get" name="code"> <a href="syousai.php?id=<? echo $data0;?>" name="id">詳細</a> </form> </td> <td>番号:<? echo $data0;?></td> <td>名前:<? echo $data1;?></td> </tr> </table> <? } ?> <? fclose($file); ?> と、言うようなソースです。 こんなやり方でいいのかも不明ですがこの中にページングとソートの機能を追加したいと思っています。

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

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

  • ベストアンサー
  • randman
  • ベストアンサー率51% (17/33)
回答No.1

ロジックだけ。 1.CSVデータを2次元配列などに読み込む。 2.配列をsort系の関数でソートする。 3.配列を1ページの最大表示数だけ表示する。 4.ページングのナビゲータを表示する。 CSVファイルの「読込」と「表示」を別々に処理することが肝心。今みたいに同じルーチンの中に書いちゃうと、柔軟性が無くなっちゃうんじゃないでしょうか。 あと、ページングだけど、「abc.php?start=4&end=14」みたいに、アイテムの表示範囲をGET値で指定できるようにすれば楽かも。掲示板みたいに。

関連するQ&A

  • PHPでCSVファイルのデータを表示したところ日本語が表示されません

    PHPで、CSVファイルの中身を表示させようと思ったのですが、一部の日本語が正しく表示されません。 問題のPHPとCSVファイルの内容を明記します。アドバイスお待ちしております。 PHP <html lang="ja"> <head> <meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS"> <title>tokuten</title> </head> <body> <TABLE border="1"> <TBODY> <TR> <TD>ID</TD> <TD>名前</TD> <TD>点数</TD> </TR> <?php $fname = "name.csv"; $fp = fopen($fname, "r"); while (list($id, $name, $point) = fgetcsv($fp, 100, ",")) { echo"<TR>"; echo"<TD>".$id; echo"</TD>"; echo"<TD>".$name; echo"</TD>"; echo"<TD>".$point; echo"</TD>"; echo"</TR>"; } fclose($file); ?> </TBODY> </TABLE> </body> </html> CSV 1,a,50 2,b,70 3,c,100 55,松井,55 530000,フリーザ,530000

    • 締切済み
    • PHP
  • PHPでCSVデーターの表示について

    PHPでCSVデーターの表示について 教えてください。PHPでCSVデーターを表示したいのですが一覧表示ではなくテキストをクリックして特定のデーターを表示させようと考えております。 CSVデーターの中身(CSV.csv) 一郎,男,20歳 二郎,男,22歳 一子,女,24歳 二子,女,26歳 --data.php-- <?php $csvFile = 'CSV.csv'; $tempCSV = file_get_contents($csvFile); $tempCSV = mb_convert_encoding($tempCSV,'utf-8','SJIS-win'); $fp = tmpfile(); fwrite($fp,$tempCSV); rewind($fp); setlocale(LC_ALL,'ja_JP.UTF-8'); while ($arr = fgetcsv($fp,1024)) { list ($name,$sex,$age) = $arr; echo '<p>',<a href="01.php">' . $name . '</a>','</p>'; } fclose($fp); function h($string) { return htmlspecialchars($string, ENT_QUOTES); } ?> 一郎をクリックしたら一郎のデーターだけを(01.php)で表示させたいのですがよく分りません。 01.phpは今のところ一覧表示されるものを置いてあります。 --01.php-- <?php $csvFile = 'CSV.csv'; $tempCSV = file_get_contents($csvFile); $tempCSV = mb_convert_encoding($tempCSV,'utf-8','SJIS-win'); $fp = tmpfile(); fwrite($fp,$tempCSV); rewind($fp); setlocale(LC_ALL,'ja_JP.UTF-8'); while ($arr = fgetcsv($fp,1024)) { list ($name,$sex,$age) = $arr; echo '<table border=1>'; echo '<tr>'; echo '<td>','名前','</td>'; echo '<td>'.$name.'</td>'; echo '</tr>'; echo '<tr>'; echo '<td>','性別','</td>'; echo '<td>'.sex.'</td>'; echo '</tr>'; echo '<tr>'; echo '<td>','年齢','</td>'; echo '<td>'.$age.'</td>'; echo '</tr>'; echo '</table>'; } fclose($fp); function h($string) { return htmlspecialchars($string, ENT_QUOTES); } ?> 本を読んだり、ググったりしてヒントになる様な物を探しているのですが中々見つかりません。 初心者で申し訳ありませんが、どなたか教えていただけないでしょうか?

    • ベストアンサー
    • PHP
  • htmlで作成したフォームにcsvファイルのデータを表示するには

    <?php //ファイルを開く $fp = fopen('maillog.csv', 'r') or die('ファイルが開けません'); //テーブルを出力 echo '<table border="0">'; echo '<tbody>'; while ($field_array = fgetcsv($fp, 4096, ',', '"')) { echo '<tr>'; foreach ($field_array as $key=>$value) { if(!in_array($key,Array(0,1,2,3,4,5,6,7))) continue; echo '<td nowrap>'.htmlspecialchars($value, ENT_QUOTES).'</td>'; } echo '</tr>'; } echo '</tbody>'; echo '</table>'; //ファイルを閉じる fclose($fp); ?> 簡単な一覧は、できるのですが 下記、フォームに対してデータの一覧を表示するには どうすれば良いのでしょうか? 教えてください

    • 締切済み
    • PHP
  • データーベースをフォームから入力し更新

    データーベースをフォームから入力し更新 登録済のデーターベースをフォームから入力し更新したいのですが、どうしてもうまくいきません。 http://park18.wakwak.com/~little-box/Dreamweaver/sql010.htm のサイトを参考にしているのですがitiran.phpのところからつまづいています。 // 検索した結果を全部表示 echo "<table border=1>"; echo "<tr><td>id</td><td>name</td></tr>"; while($row=mysql_fetch_array($res)){    echo "<tr>";    echo "<td>". $row["name"] . "</td>";    echo "<td>". $row["age"] . "</td>";    echo "<form action=koushin_input.php method=post>";    echo "<input type=hidden name=id value=" . $row["id"] . ">";    echo "<td><input type=submit value=更新></td>";    echo "</form>";    echo "<form action=sakujo.php method=post>";    echo "<input type=hidden name=id value=" . $row["id"] . ">";    echo "<td><input type=submit value=削除></td>";    echo "</form>";    echo "</tr>"; } echo "</table>"; の辺りがおかしいのではと思っているのですが… アドバイスください。また、他に参考になるサイトがありましたらぜひ教えてください。

    • ベストアンサー
    • PHP
  • CSVファイルを読み込んで表示するPHP

    <?php setlocale(LC_ALL, 'ja_JP'); if( $handle = fopen( 'data.csv', 'r' ) ){ echo '<table border=1 cellspacing=0 bordercolor=#ff6600 align=center>'; if( ( $data = fgetcsv( $handle ) ) !== FALSE ){ echo '<tr style="background-color:#FFCCFF">'; for( $i = 0; $i < count( $data ); $i ++ ){ if($i===0){ echo '<td align=center width=160px>' . $data[$i] . '</td>'; }else{ echo '<td align=center width=60px>' . $data[$i] . '</td>'; } } echo '</tr>'; } while( ( $data = fgetcsv( $handle ) ) !== FALSE ){ echo '<tr>'; for( $i = 0; $i < count( $data ); $i ++ ){ echo '<td align=center>' . $data[$i] . '</td>'; } echo '</tr>'; } echo '</table>'; } fclose($handle); ?> ■data.csvの内容 品名,数量,予備 AAA,1,1 BBB,1,1 CCC,1,1 上記のPHPは2列まで表示されるようになっています。 それを3列まで表示できるようにしたいのですが、 初心者なので、どう記述したらいいのか分かりません。 どうか、ご教授お願いします。

    • ベストアンサー
    • PHP
  • PHPでレコード一覧から詳細へのリンク方法

    MySQLでデータベースを構築し、PHPで表示しています。 レコードを一覧で並べるのはうまく行きましたが…一覧から詳細へリンクさせるのがうまく行きません。 detail.phpというファイルを作成してリンクさせようと思っていますが… (1)formタグを使って、GETでSUBMITする形にする場合はどうしたらいいでしょうか? (2)普通にaタグを使って、detail.php?id=xxxxx という形にする方法でもいいのですが、リンクを教えてdetail.phpに移った時点で"?"以下が消えてしまいます。 (1)の方法がやり易いかと思い、色々調べて自分なりにやってみましたが、"detail.php?id=%BE%DC%BA%D9&id=1&id=4&id=3&id=5&id=6&id=7&id=9&id=10&id=11" という形になり、なんでか全てのIDを並べている形になっています… 理想はdetail.php?id=xxxxxとなって欲しいのですが… ちなみにコードは以下の通りです。 <? php echo "<table>"; echo "<tr>"; echo "<th>ID</th>"; echo "<th>名前</th>"; echo "<th>所在地</th>"; echo "<th>詳細</th>"; echo "</tr>"; while( $row = mysql_fetch_array($result) ) { echo "<form method=\"GET\" action=\"detail.php?id=".$row["id"]."\">"; echo "<tr>"; echo "<td>".$row["id"]."</td>"; echo "<td>".$row["name"]."</td>"; echo "<td>".$row["addr"]."</td>"; echo "<td><input type=\"submit\" value=\"詳細\" name=\"id\"></td>"; echo "<input type=\"hidden\" value=\"".$row["id"]."\" name=\"id\">"; echo "</tr>"; } echo "</table>"; ?>

    • ベストアンサー
    • MySQL
  • PHPでMySQLにデーターを追加するところで壁に当たってしまいました

    PHPでMySQLにデーターを追加するところで壁に当たってしまいました。 PHP5.3&MYSQL5.1 1.フォームへ入力 2.確認画面 3.MySQLへデーター追加 1.form <html> <head><title></title></head> <body> <form method="post" action="conf.php"> <table> <tr><th>番号</th><td><input type="text" name="id" /></td></tr> <tr><th>タイトル</th><td><input type="text" name="title" /></td></tr> <tr><th>テキスト</th><td><textarea name="cont" cols="40" rows="5" /></textarea></tr> <tr><th>日付け</th><td><input type="text" name="update" size="10" /></td></tr> </table> <input type="submit" value="送信" /><input type="reset" value="リセット" /> </form> </body> </html> 2.確認画面 <html> <head><title></title></head> <body> <table> <tr><th>番号</th><td><?php echo htmlspecialchars($_POST["id"]) ?></td></tr> <tr><th>タイトル</th><td><?php echo htmlspecialchars($_POST["title"]) ?></td></tr> <tr><th>テキスト</th><td><?php echo htmlspecialchars($_POST["cont"]) ?></td></tr> <tr><th>日付け</th><td><?php echo htmlspecialchars($_POST["update"]) ?></td></tr> </table> <form method="post" action="upld.php"> <input type="hidden" name="did" value="<?php echo htmlspecialchars($_POST["id"]) ?>" /> <input type="hidden" name="title" value="<?php echo htmlspecialchars($_POST["title"]) ?>" /> <input type="hidden" name="cont" value="<?php echo htmlspecialchars($_POST["cont"]) ?>" /> <input type="hidden" name="update" value="<?php echo htmlspecialchars($_POST["update"]) ?>" /> <input type="submit" value="登録" /> </form> </body> </html> 3.MySQLへデーター追加 <?php $Con = mysql_connect("localhost","root",""); if ($Con == false) {dir ("MySQLの接続に失敗。");} if (!mysql_select_db("phpdata",$Con)) {dir ("データーベース接続に失敗。");} $sql = "insert into daimoku(id,title,cont,update) values('".$_POST["id"]."','".$_POST["title"]."','".$_POST["cont"]."','".$_POST["update"]."')";//SQL文の作成 $res = mysql_query($sql) or die(mysql_error());//クエリの実行 mysql_close($Con);//切断 ?> <html> <head> <title></title> </head> <body> <p>ご登録ありがとうございました。</p> <a href="01.php">戻る</a> </body> 以上のコードでデーターの追加が出来ません。 どなたか教えていただけないでしょうか?

    • ベストアンサー
    • PHP
  • 集計表が作れない

    集計表が作れない お世話になります あるレンタルサーバーでウェブページを作成しています 環境はWin vista PHP5 apache2.2 mysqlです。レンタルサーバーの都合によりViewが作成できませんので PHPで集計表を作成しようと思っています。一覧のcolumn列の総数を求めようというものです。 下記のコードのようにしたのですがうまく表示できません。よろしくご教示願います。 これより上省略ーーーーーーーーーーー <table border=1> <tr> <th>合計</th> </tr> <?php while($row = mysql_fetch_assoc($result)) { $mino = $row['suu']; $goukei = $row['kei']; $row['kei'] = sum($mino);//←ここがうまく書けていない? $data_id = $row['id']; echo '<tr>'; echo '<td><input type="radio" name="select" value='.$data_id.'></td>'; echo '<td>'.$data_id.'</td>'; echo '<td>'.$row['kei'].' </td>'; echo '</tr>'; } ?> </table> <input type="submit" value="詳細を見る"> </form> <?php

  • テーブルデータ表示

    mysqlからデータをphpで取得し以下のような多次元配列になっています。 Array ( [0] => Array ( [id] => 116 [name] => あああ ) [1] => Array ( [id] => 58 [name] => いいい ) [2] => Array ( [id] => 89 [name] => ううう ) ) 単純にデータを表示させたく以下のようにしましたが<th>$key2</th>の箇所が上記配列の場合 2回繰り返されて表示されてしまいます。ここはフィールド名なので1回の表示でいいのですが どのように記述すれば思うような表示になるでしょうか? echo "<table border=\"1\">"; echo "<tr>"; foreach ($tmp1 as $key => $val) { foreach ($val as $key2 => $val2) { echo "<th>" . $key2 . "</th>"; //フィールド名 } } echo "</tr>"; foreach ($tmp1 as $key => $val) { echo "<tr>"; foreach ($val as $key2 => $val2) { echo "<td>" . $val2 . "</td>"; // 取得したデータをある分だけ繰り返し } echo "</tr>"; } echo "</table>";

    • ベストアンサー
    • PHP
  • phpで読み込んだcsvが文字化けします

    PHPでCSVよ読み込んで名簿を作っています。 出力まではうまくいったのですが、なぜか一字だけ文字化けしてしまいます。(「務」→「冶」になってしまいます) 普段あまりプログラムはしないので、原因がわからず困りはてております。よろしくお願いいたします。 PHP部分の記述は以下になります。 ――――――――――――――――――――――――――――――――――― <?php $fname = "csv/meibo.csv"; $file = fopen($fname, "r"); $nowrap = "nowrap=\"nowrap\""; $tcent = "class=\"center\""; $tbg = "class=\"even\""; while (list($name, $post, $add, $add2, $tel, $http, $url, $mail) = fgetcsv($file, 1000, ",")){ $name = strtr($name, "﨑", "崎"); $add2 = strtr($add2, "﨑", "崎"); $tline ++; if($tline % 2 == 0){ echo "<tr $tbg>\n"; }else{ echo "<tr>\n"; } echo "<td $nowrap>$name</td>\n"; echo "<td $tcent>$post</td>\n"; echo "<td>$add<br />$add2</td>\n"; echo "<td $tcent>$tel</td>\n"; if($http == "http://"){ echo "<td $tcent><a href=\"$http$url\" target=\"_blank\"><img src=\"img/common/img_hp.gif\" alt=\"HPへ\" width=\"16\" height=\"16\" /></a></td>\n"; } else { echo "<td $tcent>&nbsp;</td>\n"; } echo "<td>$mail</td>\n"; echo "</tr>\n"; } fclose($file); ?> ――――――――――――――――――――――――――――――――――― PHP4を利用。 .phpのcharsetはShift_JISで、同じくShift_JISで保存しています。 CSVファイルはエクセルで作りShift_JISで書き出しています。

    • ベストアンサー
    • PHP

専門家に質問してみよう