毎度作るとつかれて書き残すのを忘れる。
取得~編集
DBから該当データを引っ張ってきて、変数に入れる。
<?php
$id = '【照合用ユニークコード】';
$sql = "SELECT * FROM 【テーブル名】 WHERE id = {$id}";
$stmt = $dbh->prepare($sql);
$stmt->execute();
$result = $stmt -> fetch();
$dbh = null;
$example01 = (empty($result['example01']))? '' : $result['example01'];
$example04 = (empty($result['example02']))? '' : $result['example02'];
$example03 = (empty($result['example03']))? '' : $result['example03'];
︙
?>
編集は普通にフォーム。登録済みをvalueに突っ込む。
<form action="check.php" method="post">
<input type="text" name="id" readonly value="<?php print $id; ?>">
<input type="text" name="example01" value="<?php print $example01; ?>">
<input type="text" name="example02" value="<?php print $example02; ?>">
<input type="text" name="example03" value="<?php print $example03; ?>">
︙
<button type="submit"><span>保存</span></button>
</form>
上書き
DBから該当データを引っ張って、各カラムに上書きする。
<?php
$id = $_POST['id'];
$example01 = (empty($_POST['example01']))? '' : $_POST['example01'];
$example02 = (empty($_POST['example02']))? '' : $_POST['example02'];
$example03 = (empty($_POST['example03']))? '' : $_POST['example03'];
︙
try {
$updateSet = 'example01 = :example01, example02 = :example02, example03 = :example03, ...';
$updateSetData = array(':id'=>$id, ':example01'=>$example01, ':example02'=>$example02, ':example03'=>$example03, ...);
/* $dbh省略 */
$sql = "UPDATE 【テーブル名】 SET {$updateSet} WHERE id = :id";
$stmt = $dbh->prepare($sql);
$stmt->execute($updateSetData);
$dbh = null;
} catch (Exception $e) {
echo 'エラーが発生しました。:' . $e->getMessage();
}
:idはWHEREで代入するやつ。$sqlに$idを直接突っ込んでもいいんだけど、一括で代入するarray()にまとめたほうがいいんじゃないかって思った。
上書きできない場合のチェック方法
記述が間違ってなかったら普通は動く。変数名を並べるのは大変なんで、極力ヒューマンエラーが起きないようにexcelとかで一括整形して予防する。
記述が間違ってないのに動かない場合、POSTを疑う。最初に変数を宣言した内容が、手前の入力フォームに含まれなかった(=送信されなかった)場合、変数の中身がぶっ壊れるので動作しなくなる。emptyをissetに変えて、nullを代入すればよさそうだけど、きっちり作れてたら問題ないのでいじらなくていいと思う。
それから、変数化したものがちゃんとsqlに入ってることを確認する。
sql文内で書かれてる変数が宣言されていない場合もアウト。
画面上にエラーが出ず、上書き処理がされないまま完了することがある。なので、フォームをsubmitしてデータが更新されてるかをチェックする感じでやっていくことになる。
まとめ
今どき手作業でPHPをいじくってDBを操作するなんてあんまりないだろうし、労力すごいからやらないで済むに越したことはないですね。
コメント