10-6.PHPからデータを操作する⑥データの更新
エラーにはまってまだ10章を抜け出せない。あるあるネタにはまって嬉しいと言ったことを撤回します…調子にのってしまってすみません。
今回のとあと2回やったら、11章いきます。
今日は入力したデータを更新する方法を勉強します。
1-1. 更新フォームの作成
更新処理を行うには、データを修正するPHPファイルと送信データによりデータベースを更新するPHPファイルが必要です。
どちらもデータべ0須に接続しますが、同じ接続処理を2つのファイルに記述するより、関数やクラスとして別ファイルにまとめておくと便利です。
まずは「MYDB.php」というファイル名で、関数で接続機能を作成します。 function db_connect(){ $dsn = "$db_type:host=$db_host;dbname=$db_name;charset=utf8"; try{
◎MYDB.php コード
<?php
$db_user = "ユーザー名";
$db_pass = "パスワード";
$db_host = "localhost";
$db_name = "sampledb";
$db_type = "mysql";
}
$pdo = new PDO ($dsn, $db_user, $db_pass);
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$pdo->setAttribute(PDO::ATTR_EMULATE_PREPARES,false);
} catch (PDOException $Exception){
die ('エラー:' . $Exception->getMessage());
}
return $pdo;
}
?>
関数db_connectを定義し、あとは今までに作ったコード(データベース接続について)と同じです。
1-2. 更新データの取得と表示を行う
更新データの取得を行うため「updateform.php」を作成します。
◎updateform.php コード <?php $id = 1; } catch(PDOException $Exception){ if($count < 1){ <FORM name ="form1" method="post" action="update.php">
<?php
session_start();
?>
<html>
<head>
<title>PHPテスト</title>
</head>
<body>
require_once("MYDB.php");
$pdo = db_connect();
$_SESSION['id'] = $id;
try{
$sql ="SELECT * FROM member WHERE id =:id";
$stmh = $pdo->prepare($sql);
$stmh->bindValue(':id', $id, PDO::PARAM_INT);
$stmh->execute();
$count = $stmh->rowCount();
print "エラー:" . $Exception->getMessage();
}
print "更新データがありません
";
}else{
$row = $stmh->fetch(PDO::FETCH_ASSOC);
?>
番号 : <?=htmlspecialchars($row['id'])?>
氏 : <INPUT type = "text" name = "last_name"
value="">
名 : <INPUT type = "text" name = "first_name"
value="">
年齢 :< INPUT type = "text" name = "age"
value="<?=htmlspecialchars($row['age'])?>">
<INPUT type ="submit" value="更新">
</FORM>
<?php
}
?>
</body>
</html>
require_once("MYDB.php");で接続用ファイルを読み込んで、db_connect関数を実行しデータベースに接続し、データベースハンドラを$pdoに格納します。
更新するデータ番号を「$id = 1;」として登録し、セッション変数にも同じ$idの値を格納します。
SELECT文では、idが$idと同じデータ、「1」番のデータを検索します。
1-3. データを更新する
データ更新処理を行う「update.php」を作成します。updateform.phpでセッション変数に格納したデータを利用するため、先頭にsession_start関数を実行します。
◎update.php コード $id = $_SESSION['id']; try{ $_SESSION = array(); session_destroy();
<?php
session_start();
?>
<html>
<head>
<title>PHPテスト</title>
</head>
<body>
<?php
require_once("MYDB.php");
$pdo = db_connect();
$pdo->beginTransaction();
$sql = "UPDATE member SET last_name = :last_name, first_name = :first_name, age = :age WHERE id = :id";
$stmh = $pdo->prepare($sql);
$stmh ->bindValue(':last_name',
$_POST['last_name'], PDO::PARAM_STR);
$stmh ->bindValue(':first_name',
$_POST['first_name'], PDO::PARAM_STR);
$stmh ->bindValue(':age',
$_POST['age'], PDO::PARAM_INT);
$stmh ->bindValue(':id',
$id, PDO::PARAM_INT);
$stmh->execute();
$pdo->commit();
print "データを". $stmh->rowCount()."件、更新しました。
";
}catch(PDOException $Exception){
$pdo->rollBack();
print "エラー:". $Exception->getMessage();
}
?>
</body>
</html>
updateformにてデータを更新してみます。
そして結果はこちら。
ほっ。うまくいった。
またもエラー連発だったけど、なんとなくこれかなというのがわかったからどうにかなった。。
いじょー
あと2回。