web制作 | 夜間飛行 備忘録

web制作講座で教わったあれこれを書き留めていきます

79日目 | web制作

本日は…

■データベースの続き
f:id:knkasay:20150616125206p:plain
こんな感じのものを生成していきたい。

昨日はタイトルと日付が一気に入ってくるところまで。

本日はその続きで、セキュリティをかけつつ。
index.php

<?php
require_once dirname(__FILE__) . '/func.php';
try{
$dbh = new PDO(DB_CONNECT,DB_USER,DB_PASS);
}catch (expection $e){
  //echo h($e);
  echo 'システムエラーが発生しました。管理者にお問合わせください';
  exit;
}//trycatch構文 パスが違う、とか。eさんがエラーを捕まえてきてくれます

//var_dump($dbh);
//PDO php data ofject データベースに接続にいっている

$stmt=$dbh->query('SELECT news_id,news_date,news_headline FROM news');//オブジェクト…色んな機能がいっぱい入っているので、呼び出すといろいろしてくれる
//dbhのなかにはqueryというオプションが入っている。それによってnewsからなんか採ってきてる

?>

index.phpの出力側

<body>
<table border="1">
<tr>
<th>見出し</th><th>日付</th>
</tr>
<?php
foreach($stmt as $row){
echo '<tr><td>';
echo '<a href="news.php?news_id=';
echo h($row['news_id']);
echo '">';
echo h($row['news_headline']);
echo '</a></td><td>';
echo h($row['news_date']);
echo '</td></tr>';
}
 ?>
</table>
</body>

news.php

<?php
if(!isset($_GET['news_id'])||!is_numeric($_GET['news_id'])||$_GET['news_id']<0){//numericは[]が数値型かどうか調べてくれるらしい
  header('Location:./index.php');
  exit;
}
require_once dirname(__FILE__) . '/func.php';

$news_id = $_GET['news_id'];
try{
$dbh = new PDO(DB_CONNECT,DB_USER,DB_PASS);
}catch (exception $e){
  //echo h($e);
  echo 'システムエラーが発生しました。管理者にお問合わせください';
  exit;
}
$sql='SELECT news_headline,news_article,news_date FROM news WHERE news_id = :news_id';//:newsには後で値を入れる
$stmt = $dbh->prepare($sql);//$sqlを準備します
$stmt->bindParam(':news_id',$news_id);//:news_idに入れるのは$news_idですよと紐付け??
$stmt->execute();//実行する
$rec = $stmt->fetch(PDO::FETCH_ASSOC);
//var_dump($rec);
/*
$stmt=$dbh->query('SELECT * FROM news WHERE news_id='.$news_id.';');
$_GETの[news_id]がもと。=?news_idに、「1;」と「デリートしよう」
という値入れると、news_idの中がデリートされてしまう。>>XSS的(ニュースの本文を呼び出すために、news_idの値をとってくるという仕組みに、deleteを入れる)
*/
//何万ってidを入れられたとき、データベースに問いかけない限りそこにデータがあるかどうかわからないので通してしまう
if(!$rec){
  heaader('Location:./index.php');
  exit;
}
?>

news.phpの呼び出し部分は

<?php
echo '<h1>'.h($rec['news_headline']).'<span>'.h($rec['news_date']).'</span></h1>'."\n";
echo '<p>'.h($rec['news_article']).'</p>'."\n";

?>

来週はこれに、削除や修正を追加していく予定。
さらに記事を追加するためのフォームも。

今日やったところはわからなくても、まぁ…仕方ないというくらいの部分も多々。