PHP+MySQL入門

ページングの処理4

全333コースを10日間無料で

ぜひご覧ください。

無料で視聴する すべての加入プランを見る
または
「次のページへ」のリンクの制御は、データベースと連携して算出しなければならず、非常に難しい処理です。ここでは、スクリプトの仕上げとともに紹介します。
講師:
12:58

字幕

ここではページングの処理の四つ目としまして「次のページへ」のリンクの制御について製作していきたいと思いますこのレッスンは前の三つのレッスンの続きとなりますので一連のレッスンを続けてご覧ください素材についてはこちらlesson 02-09 というフォルダに前のレッスン lesson 02-08 をそのままコピーして利用していますデータベースについても こちらにエクスポートのデータを準備していますのでこちらを利用していただいても良いでしょうではさっそくスクリプトを始めていきますここでは「次のページへ」のリンクを作る時にこのif 構文の こちらの条件となる「 4 」という数字をこのように手で書いてしまうと ページが増えた時に困ってしまいますのでこのどこが上限なのかというのをなんとか決めなければなりませんそのためデータベースから情報を引き出さなければなりませんここではこのようなsql を使っていきます少しここにコメントを記述していきましょうとしまして ここでは「 $count 」という変数を準備しここに「 mysql_query 」で「SELECT COUNT(id)FROM item_table 」としますそして「 or die(mysql_error) 」としましょうここで COUNT というのはsql の構文の一つでデータベースに記録されている件数を取得するというものですそしてこの COUNT というのもmysql_query から受け取った変数ですので レコードセットになりますそのためここではmysql_fetch_assoc 等を使って伝送配列等に展開しなければならないわけなんですがここでは このようにしたいと思います「 $cnt 」としまして「 mysql_fetch_array 」というファンクションを使います「 $count 」としますこの mysql_fetch_array というのは mysql_fetch_assocというすでに学習したファンクションと非常に似たものですがこちらの「 array 」というのは伝送配列ではなく通常の配列に格納されますなぜかといいますと 今回発行しているこの sql は「 COUNT(id) 」となっていて特にフィールド名がありませんそのため そのフィールド名を指定する事ができないため伝送配列にはできないわけです様々な解決方法があるんですが ここではmysql_fetch_array の使い方を学ぶためにも このmysql_fetch_arrayというファンクションを使うやり方を紹介しましょうこの「 mysql_fetch_array 」でこちらの変数に格納するとここでは「 $cnt[0] 」にこのデータベースの件数が入りますでは続いての計算式です今度は「 $maxpage 」という変数を準備し この「 $cnt 」を元に実際このサイトは何ページあるのかというのを計算していきたいと思いますその計算式はこのようになりますここでは「 $cnt[0] 」を「 /5 」で割りますただし この場合ですと 少数等になってしまう可能性がありページ数としては正しくないのでこれを整数にしていきますこの時「 ceil 」というまた新しく出てくる こちらのファンクションを使っていきましょうではまずはこの「 $maxpage 」というのが今何ページになっているのかを確認しておきたいと思います「print($maxpage)」として画面に表示してみましょうこちらでこの画面を表示してみますすると このように「 4 」と表示されました実際ここではページは四ページが最高のページ数となりますので正しく四ページである事が分かりますこちらまず いったんこの「 ceil 」を外してみましょう「 ceil 」を外し「 $cnt[0] / 5 」を画面に表示してみますするとここでは「 3.2 」という数字が出ていますこちら「 $cnt[0] 」つまりデータベースに何件データが入っているかというのは 16 件になります そのため「 16 / 5 」という計算が行われ「 3.2 」という結果が出てきたわけですしかし ここで「 3.2 」等の小数点の場合 ページ数としてはこのようにこぼれたものが次のページへ表示されますので実際には四ページになりますそのため小数点を切り上げるという計算を行うために ここでは「 ceil 」というファンクションを使うというわけですこのようにすると数字は小数点以下が切り上げられて「 4 」となりページ数の「 4 」と一致するようになりますこれでこの $maxpage つまり最大のページ数が算出できましたので「次のページへ」のリンクを判断するこちらの数字は「 $maxpage 」という変数と比べる事で このリンクを貼るか貼らないかの判断が行えるようになるというわけですでは実際に確認してみましょうこちらページが「 4 」というのを指定されている状態でこのページを表示してみますすると「次のページへ」のリンクは貼られていません前のページに戻りますと「次のページへ」のリンクが貼られているという状態になりますそしてこれはデータの件数を増やして 21 件等にした場合は四ページ目では「次のページへ」がリンクが貼られた状態になりそのリンクをクリックすると「次のページへ」のリンクが貼られていないというかたちで正しく制御が行われるようになりますたかがページングの処理と思われるかもしませんが実はこのリンクの制御であったりですとかページ数の算出であったりですとかというところには非常に難しい こちらの sql や計算といったものが必要になってきてしまいます頭を使って組み立てなければなりませんがぜひ頑張って覚えていきましょうさて 最後に このスクリプトを仕上げていきたいと思います実はこのウェブページですれけどもこちらのリンクをたどる分には正しく制御が行えるようになりましたがこちらの url を直接いじってしまうとまだこのようなエラーが出たりそれから非常に大きな数字を指定され このようなページが表示されてしまったりというような事が起こりますこのままですと 何か危険なパラメーター等をここに指定されてしまうといったような事も起こりえますのでこのパラメーターが不正にならないようにしていきたいと思いますではここでは様々な方法がありますが数字を丸めるという処理にしていきたいと思います例えばここに 「パラメーターの検査」としましてもしもページが「 0 」よりも下が指定されしまった場合又は ページが「 $maxpage 」よりも上が指定されてしまった場合としましょうその場合ここでページは「 1 」に丸めてしまいオフセットは「 0 」に丸めてしまいますこれでちょっと動きをまず確認してみましょう例えば こちらページを「 -1 」等ゼロ以下の数字にした場合このように一ページ目が表示されますそして非常に大きな数字を指定した場合にも このように一ページ目が表示されてしまいますこれは こちら論理演算子「 OR 」というものを使って「 $page 」がゼロ以下 又は「 $page 」が「 $maxpage 」よりも上の場合はページを「 1 」ページにしオフセットを「 0 」に丸める事で不正な値が指定できないようになっていますこのようにする事で危険を回避する事ができますこのままですと 一見パラメーターを正常に指定したはずなのにうまくいかないという事が起こりえるのでもしかしたら このような処理ではなくエラーページにジャンプさせるといったような処理の方が好ましい事もありますがここではあくまでも管理画面で管理者しか利用しないという想定なのであまりこのようなエラーの処理には手間を掛けず簡単な処理としましたその画面の役割などに応じて どのような処理にするべきかというのを考えてみてくださいそして最後に 今このスクリプトには一つちょっと効率の悪い部分がありますここに「 5 」ここに「 5 」ここに「 5 」とそれぞれ「5」が指定されていますこの「 5 」というのはそれぞれ一ページに表示する件数なんですが全てをこの数字で指定してしまうとこの「 5 」がすべて同じ意味であるという事が分かりづらくなっていますまたもし将来的に一ページの表示件数を変えたいと思った時一つの数字だけを変えてしまったりするとプログラムがすべて壊れてしまう事になりますそのためここでは この「 5 」という数字をこのまま指定するのではなくファイルの先頭で まず変数等を作って例えばこのように「 $count_per_page 」等という変数を作りここに「 5 」等と指定しますそしてこちら 「 5 」と書いてあった場所にはその変数を指定するようにしましょうこの部分も文字列連結を使ってこのようにしますこうするとそれぞれの場所が何を意味しているのかこれはページごとの count の数なんだなという事が一目で分かりますし もし一ページに表示する数を変えたければここの部分の数字を変えるだけで このように全体の処理が変わってくれますので非常に親切 そして分かりやすいスクリプトになりますまたここで このように変数に代入する事でも構いませんがこのような冒頭で定義する変数の場合これの代わりに define という構文を使うと より良いでしょうここでは「 COUNT_PER_PAGE」等とし 「 5 」と指定しますこの definte というのはその名の通り定義という意味のもので定数定義等と呼ばれます変数を定義するのと それほど変わらないんですけどもこのように定数定義ていうのをするとこれ以降 この「 COUNT_PER_PAGE 」というのはスクリプト内で変える事ができなくなるためより安全性が高まるという性格が合いますここではそれぞれを定数定義で書き換えていきましょうこちらで改めてページを表示すると このように正しく動作していますこのようにスクリプトには定数定義を仕込んだりそれから様々な安全性の高いスクリプトを仕込んだりそしてコメントを仕込んだりというような事で後から見やすいスクリプト他の人にも見やすいスクリプト そしてメンテナンスのしやすいスクリプト等を記述する事ができます全てを一気に覚えようとするのはなかなか難しいかもしれませんのでしばらくは効率の悪いスクリプト等を書いていても良いですがたまに自分のスクリプトを見直して汚く書いてしまった場所等はこのように書き直すというような事も少しづつやっていくと良いでしょう

PHP+MySQL入門

MySQLというデータベースはPHPと連携させてウェブサイト上で利用することによってよりその威力を発揮します。このコースではPHPとMySQLを組み合わせたWebシステムを構築する手法を紹介します。コースの後半ではページングの処理の仕方などについて学びながら、具体的に挿入画面や編集画面の作成を行っていきます。

3時間08分 (21 ビデオ)
現在、カスタマーレビューはありません…
 
ソフトウェア・トピック
価格: 2,990
発売日:2014年01月20日

このコースは、「オンデマンド」でご利用可能であり、ダウンロードすることもオンラインで見ることもできます。

ダウンロードすると、オフラインでコースを使用し、豊富なインターフェースをフルに活用できます。複数のデバイスを使用したり、 一度に全コースをダウンロードしたくない場合は、アカントにログインして、ストリーミング・ビデオとしてコースのレッスンを視聴してください。

ビデオトレーニングをお楽しみいただけますように! お問い合わせは、cs-jp@lynda.com宛までご連絡ください。