リスを倒す 『初めてのPHP,MySQL,JavaScript&CSS』

『初めてのPHP,MySQL,JavaScript&CSS』勉強奮闘記

10-6.PHPからデータを操作する⑥データの更新

エラーにはまってまだ10章を抜け出せない。あるあるネタにはまって嬉しいと言ったことを撤回します…調子にのってしまってすみません。
今回のとあと2回やったら、11章いきます。

今日は入力したデータを更新する方法を勉強します。

1-1. 更新フォームの作成


更新処理を行うには、データを修正するPHPファイルと送信データによりデータベースを更新するPHPファイルが必要です。
どちらもデータべ0須に接続しますが、同じ接続処理を2つのファイルに記述するより、関数やクラスとして別ファイルにまとめておくと便利です。

まずは「MYDB.php」というファイル名で、関数で接続機能を作成します。
◎MYDB.php コード


<?php

function db_connect(){
$db_user = "ユーザー名";
$db_pass = "パスワード";
$db_host = "localhost";
$db_name = "sampledb";
$db_type = "mysql";
}

$dsn = "$db_type:host=$db_host;dbname=$db_name;charset=utf8";

try{
$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
session_start();
?>
<html>
<head>
<title>PHPテスト</title>
</head>
<body>

<?php
require_once("MYDB.php");
$pdo = db_connect();

$id = 1;
$_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();

} catch(PDOException $Exception){
print "エラー:" . $Exception->getMessage();
}

if($count < 1){
print "更新データがありません
";
}else{
$row = $stmh->fetch(PDO::FETCH_ASSOC);
?>

<FORM name ="form1" method="post" action="update.php">
番号 : <?=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 コード


<?php
session_start();
?>
<html>
<head>
<title>PHPテスト</title>
</head>
<body>
<?php
require_once("MYDB.php");
$pdo = db_connect();

$id = $_SESSION['id'];

try{
$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();
}

$_SESSION = array();

session_destroy();
?>
</body>
</html>

updateformにてデータを更新してみます。
f:id:taro-blog2323:20161002175505p:plain

そして結果はこちら。
f:id:taro-blog2323:20161002175519p:plain


ほっ。うまくいった。
またもエラー連発だったけど、なんとなくこれかなというのがわかったからどうにかなった。。
いじょー
あと2回。