79日目 | web制作
本日は…
■データベースの続き
こんな感じのものを生成していきたい。
昨日はタイトルと日付が一気に入ってくるところまで。
本日はその続きで、セキュリティをかけつつ。
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"; ?>
来週はこれに、削除や修正を追加していく予定。
さらに記事を追加するためのフォームも。
今日やったところはわからなくても、まぁ…仕方ないというくらいの部分も多々。