
雑誌の記事索引をデータベースに整理し、読者にバックナンバー記事を検索してもらえるようにしたいと思います。
開発環境は、PHP5.2.17、MySQL5.0.77、IIS7です。
データベースの構成は、mymagazineというテーブルに、
magazinecode(通し番号)
yyyymm(発行年月日)
category(分類)
title(題名)
author(著者)
とあり、以下のようにデータが格納されています。
()内は、NULLとお考えください。
1 2013年5月号 目次 (題名なし) 鈴木
2 2013年5月号 特集:折り紙 作成法1 山本
3 2013年5月号 特集:折り紙 作成法2 佐藤
4 2013年5月号 特集:折り紙 作成法3 岩田
5 2013年5月号 連載 はさみ研ぎ方 伊藤
6 2013年5月号 連載 のりの選び方 野口
7 2013年5月号 (分類なし)会議報告 加藤
8 2013年5月号 (分類なし)読者便り 山田
9 2013年5月号 編集後記 (題名なし) 近藤
10 2013年6月号 目次 (題名なし) 江藤
11 2013年6月号 特集:切り絵 デザイン方法 山口
13 2013年6月号 特集:切り絵 材料購入先 高田
14 2013年6月号 連載 はさみ研ぎ方 伊藤
15 2013年6月号 連載 のりの選び方 野口
16 2013年6月号 (分類なし)読者便り 関谷
17 2013年6月号 編集後記 (題名なし) (筆者なし)
これを、以下のように、「号ごと」にまとめる知恵が浮かびません。
2013年5月号
目次
特集:折り紙
・作成法1 山本
・作成法2 佐藤
・作成法3 岩田
連載
・はさみ研ぎ方 伊藤
・のりの選び方 野口
会議報告 加藤
読者便り 山田
編集後記
2013年6月号
目次
特集:切り絵
・デザイン方法 山口
・材料購入先 高田
連載
・はさみ研ぎ方 伊藤
・のりの選び方 野口
読者便り 関谷
編集後記
HTMLにリストに出すだけなら、以下でできることはわかります。
「if ($recmax > 0) {}」の中をどのようにいじれば、
上記のようなフォームに出力できますでしょうか。
「2013年6月号」をグループ化、
「特集:切り絵」でグループ化、みたいにするのだと思いますが・・・
<?php
$con = mysql_connect(SERV, USR, DBPW);
$selectdb = mysql_select_db(DBNAME, $con);
$sql = "select * from mymagazine";
$rst = mysql_query($sql, $con);
$recmax = mysql_num_rows($rst);
if ($recmax > 0) {
$body = "<table border=\"1\">";
for ($recnum = 0; $recnum < $recmax; $recnum++) {
$col = mysql_fetch_array($rst);
$body .= "<tr>";
$body .= "<td>" . $col["magazinecode"] . "</td>";
$body .= "<td>" . $col["yyyymm"] . "</td>";
$body .= "<td>" . $col["category"] . "</td>";
$body .= "<td>" . $col["title"] . "</td>";
$body .= "<td>" . $col["author"] . "</td>";
$body .= "</tr>";
}
$body .= "</table>";
} else {
$body = "データなし";
}
?>
<html>
<body>
<?= $body ?>
</body>
</html>
No.2ベストアンサー
- 回答日時:
>$sql = "select * from mymagazine";
orderの指定がないのが謎です。順不同で取得してもいいというわけではないですよね(最低でもmagazinecode, categoryの指定が必要です。
またネイティブなMySQL関数はすでにオワコンが違いので、今のうちにMySQLiもしくはPDO(個人的にはPDOを推奨)に書き替えてください。
閑話休題
おおまかに流れを書くとこんな感じでいいのではないですかね。
$sv_magazine = '';
while ($col = mysql_fetch_array($rst)) {
$magazine = $col['magazinecode'];
if ($magazine !== $sv_magazine) {
if ($sv_magazine !== '') {
// 前のマガジン番号($sv_magazine)のフッタ(必要があれば)
}
// 今読んだマガジン番号($magazine)のヘッダ
$sv_magizine = $magazine;
}
// $col から明細を出力
} // ループ終了
if ($sv_magazine !== '') {
// 最後のマガジン番号($sv_magazine)のフッタ(必要があれば)
}
agunuzさん、ご回答およびいろいろとアドバイスありがとうございました。
>orderの指定がないのが謎です。
はい、本番環境では通し番号が振ってあるので
これで並び替えします。
>今のうちにMySQLiもしくはPDO
大変お恥ずかしながら、MySQLiもPDOというのが初耳でした。
ちょっと調べたら情報いろいろあるので勉強して導入します。
http://otukutun.hatenablog.com/entry/2013/01/29/ …
>おおまかに流れを書くとこんな感じでいいのではないですかね。
具体的なコードで示していただき、非常に助かります。
早速解読しながら組み込んでみます。
また何か不明な点があれば、書き込ませていただきます。
No.6
- 回答日時:
To_aru_Userさん、御礼遅くなって失礼しました。
PDOを使ったサンプルをご提示いただきありがとうございました。
PDOの導入を含め、皆さんの回答を一通り、きちんと試してから締め切りたかったですが、
本件に取り組むまでに少し時間がかかりそうですので一旦〆切にします。
たびたびのご教示本当にありがとうございました。
No.5
- 回答日時:
PHP5.2.17がどれだけのバグをかかえているかこれを見てもらえれば分かると思います。
常に最新版を使うようにしましょう。
レンタルサーバー側がPHP5.2.17のままアップデートしていない場合等は、サーバー移転を検討しましょう。
To_aru_Userさん、たびたび恐れ入ります
>レンタルサーバー側がPHP5.2.17のままアップデートしていない
まさにこのケースなのですが、手元の開発環境だけでも
最新版にすることとします。
以上に参考になるアドバイスありがとうございます。
No.4
- 回答日時:
To_aru_Userさん、非常に参考になるURLを教えていただきありがとうございました。
「やっちゃいけないこと」のオンパレードでした、、、
一つ一つつぶしていきたいと思います。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
phpのエラーについてです
-
PHPのSQLインジェクションはspr...
-
sqlから多次元配列に要素を格納...
-
データの取得方法
-
PHP+MySQLでの配列のinsert文に...
-
トランザクション処理
-
PHPのIF文で条件の記述の仕方に...
-
MySQLでデータベースにデータin...
-
アラートでyes noを作りたいです。
-
実行時エラー3131 FROM 句の構...
-
JAVA SQLServerException 列名 ...
-
VB.NET エラーになる箇...
-
PHPからデータベースに接続した...
-
SELECT結果から動的にコンボボ...
-
PHPのスタイルシート割り当て
-
テキストボックスに入れた内容...
-
検索結果($_POST)が2ページ目...
-
RFC822形式での日時の取得
-
phpmyadminにタグを格納するには
-
DBで検索結果に該当するデータ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
下記エラーメッセージ解決について
-
文字化けするのはなぜですか
-
ループ内に任意行を差し込む処...
-
PHPでMySQLのデータを検索したい
-
Resource id #3 をフィールドの...
-
sqlから多次元配列に要素を格納...
-
テーブルにINSERTができません...
-
MySQLにデータが書き込まれない
-
リストから詳細画面に遷移する...
-
会員登録したらメールが送られ...
-
phpMyadminとPHP上からの違い?
-
データベースから,そのレコー...
-
PHP と Mysql の連携時に発生す...
-
XAMMPが起動しません。
-
DBから同じ文字があるレコード...
-
phpのデータベースを使用したsq...
-
PHP+MYSQL IF文の初歩
-
for文で表示する画像を10件づつ...
-
MySQLのエラー出力
-
次のエラーメッセージ検証 テ...
おすすめ情報