前回記事PHPとMySQLでデータの取得からリンクで飛んできたページを作っていきたいと思います。6月4日記事





GETメソッドの注意点

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を使って更新情報の再編集ページを作るです。

最終更新:2015年06月13日 17:25