Webデザインの勉強と製作 | あかとんぼ

フェリカテクニカルアカデミーの学習をベースに、Webについての勉強と製作の過程をまとめています。

[PHP][SQL]データベースに登録したニュースをPHPで表示①

ニュースのデータベースを作成

  • テーブルを作成。テーブル名=news
  • データベースを作成。今回は4カラム
  • news_id=連番,int,AUTO_INCREMENT
  • news_headline=タイトル,varchar
  • news_date=日付,datatime
  • news_article=内容,text

phpを作成

index.php
  • データベースに接続、変数に取得し、phpで表示する
  • さらにnews_headline部分をクリックするとgetメソッドを利用し個別記事ページに移動する
<?php
require_once dirname(__FILE__).'/func.php';
/* データベースに接続 */
/* PhpDataObject('データベース設定','アカウント','パスワード') */
/* 'データベース場所;データベースの名前;文字コード' */
$dbh = new PDO('mysql:host=localhost;dbname=データベースの名前;charset=utf8','アカウント','パスワード');
/* SQL文を変数に用意する */
$sql = 'SELECT news_headline, news_date, news_id FROM news;';
/* dbhの中のクエリーをアロー演算子で実行:上で用意したSQL文を実行する */
$rec = $dbh->query($sql);
?>
<!DOCTYPE HTML>
<html>
<head>
<meta charset="utf-8">
<link rel="stylesheet" href="css/style.css">
<title>最新ニュース</title>
</head>
<body>
<h1>最新ニュース</h1>
<?php
/* foreach文でデータを取り出す */
echo "<dl>\n";
foreach($rec as $v){
    echo "<dt>";
    echo '<a href="news.php?news_id=';
    echo $v['news_id'];//データベースのidをそれぞれのアンカーリンクに設定
    echo '">';
    echo h($v['news_headline']);
    echo "</a>";
    echo "</dt>";
    echo "<dd>";
    echo h($v['news_date']);
    echo "</dd>";
}
echo "</dl>";
?>
</body>
</html>
news.php
  • ニュースの個別ページ(news_articleの内容を表示)
<?php
require_once dirname(__FILE__).'/func.php';
/* 直接アクセスされたときindex.phpに戻る */
/* is_numeric…数値であるかを判定→アドレスに文字列を入力されたときの対策 */
if(!isset($_GET['news_id']) || !is_numeric($_GET['news_id']) || $_GET['news_id'] <= 0){
  header('Location: index.php');
  exit;
}
/* データベースに接続、取得 */
$dbh = new PDO('mysql:host=localhost;dbname=news0316;charset=utf8','root','root');
/* WHERE文でgetで渡されたidを指定する */
$sql = 'SELECT news_headline, news_date, news_id, news_article FROM news WHERE news_id='.$_GET['news_id'].';';
$rec = $dbh->query($sql);
?>

<!DOCTYPE HTML>
<html>
<head>
<meta charset="utf-8">
<title>ニュース詳細</title>
</head>

<body>
<h1>ニュース詳細</h1>

<?php
echo "<dl>\n";
foreach($rec as $v){
    echo "<dt>";
    echo '<a href="news.php?news_id=';
    echo $v['news_id'];
    echo '">';
    echo h($v['news_headline']);
    echo "</a>";
    echo "</dt>";
    echo "<dd>";
    echo h($v['news_date']);
    echo "</dd>\n";
}
echo "</dl>";
echo "<p>".nl2br(h($v['news_article']))."</p>";
?>

</body>
</html>

今回の要点

データベースに接続
  • $dbh = new PDO('データベースに関する情報');
  • $rec = $dbh->query('実行するSQL文');
アンカータグ(a)でGET型で値を渡す
  • <A HREF="飛びたいURL?項目名=値"> とアンカーに記述
  • リンク先(news.php)、$_GET['項目名']に値が格納される
phpで配列/連想配列の利用、foreach文の利用
<?php
/* 配列を利用する */
$finger = array('親指','人差し指','中指','薬指','小指');
/* foreachで表示する */
foreach($finger as $v){
  echo $v.'<br>';
}

/* 連想配列を利用する */
$goranger = array('red'=>'赤レンジャー','blue'=>'青レンジャー','yellow'=>'黄レンジャー','pink'=>'ももレンジャー','green'=>'みどレンジャー');

foreach($goranger as $k=>$v){
  echo $k.'<br>';
  echo $v.'<br>';
}

/* 配列の別の記述方法 */
$beatles = ['John','Paul','George','Ringo'];
echo $beatles[0];
  • 多次元配列の利用

php-beginner.com