考え、感じる、Web制作。

Web制作の学習や情報についての記事が中心です。

DB操作 newsfeed制作1

newsfeed制作

企業サイトのトップページによくある更新情報のリンク一覧を作る。今回はトップページ(index.php)の記述について学ぶ。

DB作成

  1. xamppパネルからphpMyAdminを開く。
  2. DBを作成。DB名はnewsfeedとする。照合順序はutf8-general-ci。
  3. tableを作成。table名はnewsとする。
  4. カラム定義
主キー
  • 名前:news_id
  • データ型:int
  • インデックス:Primary
  • A_I(Auto Increment):checked
ヘッドライン(記事タイトル)
  • 名前:news_headline
  • データ型:varchar
  • 長さ/値:128
  • 照合順序:utf-8-general-ci
記事本文
  • 名前:news_article
  • データ型:text
  • 照合順序:utf-8-general-ci
投稿日時
  • 名前:news_date
  • データ型:datetime

DB以外の準備

htdocs配下にindex.php,news.php,init.phpを新規作成。

仕様

2ページ構成。index.phpにニュースの見出しを一覧を表示させ、クリックすると本文が表示される仕様。

index.phpの記述1

まずDBとの接続確立~値取得が可能な環境構築までを記述する。

変数初期化、変数宣言

$dbh="";
$db_connect='mysql:host=localhost;dbname=newsfeed;charset=utf8';
$db_user='root';
$db_pass='root';
$dbhは後でdbハンドラを格納する。$db_connectはDBに接続する際に必要なhost名、DB名、charsetを定義。$db_use,$db_passはそれぞれDBへのログインID,password。

try文

try{
DBをつかみに行く際には、DBとの接続確立をtryする、という格好になる。そのため、成功時と失敗時の処理が記述される。

try成功時の処理

$dbh=new PDO($db_connect,$db_user,$db_pass);
DBに接続し$dbhにDBハンドラを格納している。なお、utf8にハイフンは不要なので注意。PDOとはクラスの一種で、データベース抽象化を担う。

try失敗時

}catch(Exception $e){
tryが失敗した場合の命令。エラーメッセージを捕まえ、後述の処理を実行させる。if文のelse部に似ている。

try失敗時の処理

exit('ランタイムエラーが発生しました');
tryが失敗したときの挙動として、処理を停止させている。('')内に文字列を記述することで、exitに際しコメントを表示させられる。

sql命令格納

$sql="SELECT news_id,news_headline,news_date FROM news;";
sql命令を変数に代入している。ここではselect文により、newsというテーブルから3つのカラムを見よ、という命令。

値の取得

$stmt=$dbh->query($sql);
$dbhに定義されたハンドラによりsql命令の実行、アロー演算子を用いる点に注意。その結果を$stmtに代入。

index.phpの記述2

DBから実際の値を取得し、表示させる処理。今回はforeachを使う。

コード記述
<div id="news">
<table>
<?php
foreach($stmt as $row){
  print'<tr><th><a href="news.php?news_id=';
  print h($row['news_id']);
  print'">';
  print h($row['news_headline']);
  print'</a></th><td><span class="gry">';
  print h($row['news_date']);
  print"</span></td></tr>\n";
}
?>
</table>
</div><!--#news-->

表示部分。ヘッドライン、時刻を表示させる。idは取得するが表示させず、urlに反映させリンクページを確定させている。このままだと全件表示してしまうので、後で修正する。