前回記事PHPとMySQLでデータの取得からリンクで飛んできたページを作っていきたいと思います。6月4日記事
GETメソッドはqueryの内容がURLに表示されているため、適切に処理する必要があります。
idでかつ公開中(2)のデータの場合のみ表示させ、そうでない場合は、「この記事はありません。」的なエラー処理をしていきたいと思います。 すると
mysql> SELECT * FROM information WHERE id = '受け取ったID番号' AND status = '2';
というようなクエリになると思います。
受け取った値が数値のもののみを許可する必要があります。
fillter関数を使ってもよいですし、PDOのbindParamで、数値のチェックをしてもいいと思います。
関数の勉強もかねて両方行っていきましょうか?あまり意味ないとは思いますが・・・
ファイル名(information.php)
<!DOCTYPE HTML> <html lang="ja"> <head> <meta charset="utf-8"> <title>更新情報</title> </head> <body> <?php $dsn = 'mysql:dbname=データベース名;host=localhost;port=3306'; $user = 'ユーザ名'; $password = 'ユーザパスワード'; try{ //成功時対応 $dbh = new PDO($dsn, $user, $password); $id = $_GET['id']; $filter_id = filter_var($id ,FILTER_SANITIZE_NUMBER_INT,FILTER_NULL_ON_FAILURE); //echo $filter_id; $stmt = $dbh -> prepare("SELECT * FROM information WHERE id = :id AND status = '2'"); $stmt->bindParam(':id', $filter_id, PDO::PARAM_INT); $stmt->execute();//実行 $result = $stmt->fetch(); echo '<dl><dt>記事ID</dt><dd>'; echo htmlspecialchars($result['id']).'<br>'; echo '</dd><dt>日付</dt><dd>'; echo htmlspecialchars($result['info_date']).'<br>'; echo '</dd><dt>投稿種類</dt><dd>'; switch($result['type']){ case 1: echo 'ニュース'; break; case 2: echo '更新情報'; break; case 3: echo '入荷情報'; break; case 4: echo 'その他'; break; default : echo 'その他'; } echo '</dd><dt>タイトル</dt><dd>'; echo htmlspecialchars($result['title']).'<br>'; echo '</dd><dt>内容</dt><dd>'; echo nl2br(htmlspecialchars($result['info_text'])).'<br>'; echo '</dd><dt>URL</dt><dd>'; echo htmlspecialchars($result['url']).'<br>'; echo '</dd></dl>'; echo '<a href="index.php">ホームに戻る</a>'; }catch (PDOException $e){//失敗時対応 print('Connection failed:'.$e->getMessage()); die(); } $dbh = null; ?> </body> </html>
次ページはPHPとMySQLを使って更新情報の再編集ページを作るです。