PDOで編集機能を実装する。
概要
PHPでバンドの管理アプリをつくる際、編集機能の実装でしばらく躓いてしまってました。
データの受け渡しの理解を深める意味で、個人用に記録として残しておきます。
ソース
Edit.php
<?php
//CREATE_INFO(テーブル)の中身を初期値に入れ込む
$id = $_GET['id'];
$db = new PDO('mysql:host=localhost;dbname=SCHEDULE','root','root');
$sql = 'SELECT * FROM CREATE_INFO WHERE id = :id';
$stmt = $db->prepare($sql);
$stmt -> execute([':id' => $id]);
$result = $stmt->fetch(PDO::FETCH_OBJ);
//更新処理
if(isset($_POST['Band']) && ($_POST['StarTime']) && ($_POST['Song1']) && ($_POST['Song2']) && ($_POST['EndTime'])){
$Band = $_POST['Band'];
$StarTime = $_POST['StarTime'];
$Song1 = $_POST['Song1'];
$Song2 = $_POST['Song2'];
$EndTime = $_POST['EndTime'];
try{
$db = new PDO('mysql:host=localhost;dbname=SCHEDULE','root','root');
$sql = 'UPDATE CREATE_INFO SET Band = :Band, StarTime = :StarTime, Song1 = :Song1, Song2 = :Song2, EndTime = :EndTime WHERE id=:id';
$stmt = $db->prepare($sql);
$stmt -> execute([':Band'=> $Band,':StarTime'=> $StarTime,':Song1'=> $Song1,':Song2'=> $Song2,':EndTime'=> $EndTime, ':id'=> $id ]);
$result = $stmt->fetchAll(PDO::FETCH_OBJ);
header('Location: http://192.168.33.10/AdjusTime/Schedule.php');
exit;
}catch(PDOException $e){
echo $e->getMessage();
exit;
}
}
?>
Edit.php
<?php
//CREATE_INFO(テーブル)の中身を初期値に入れ込む
$id = $_GET['id'];
$db = new PDO('mysql:host=localhost;dbname=SCHEDULE','root','root');
$sql = 'SELECT * FROM CREATE_INFO WHERE id = :id';
$stmt = $db->prepare($sql);
$stmt -> execute([':id' => $id]);
$result = $stmt->fetch(PDO::FETCH_OBJ);
//更新処理
if(isset($_POST['Band']) && ($_POST['StarTime']) && ($_POST['Song1']) && ($_POST['Song2']) && ($_POST['EndTime'])){
$Band = $_POST['Band'];
$StarTime = $_POST['StarTime'];
$Song1 = $_POST['Song1'];
$Song2 = $_POST['Song2'];
$EndTime = $_POST['EndTime'];
try{
$db = new PDO('mysql:host=localhost;dbname=SCHEDULE','root','root');
$sql = 'UPDATE CREATE_INFO SET Band = :Band, StarTime = :StarTime, Song1 = :Song1, Song2 = :Song2, EndTime = :EndTime WHERE id=:id';
$stmt = $db->prepare($sql);
$stmt -> execute([':Band'=> $Band,':StarTime'=> $StarTime,':Song1'=> $Song1,':Song2'=> $Song2,':EndTime'=> $EndTime, ':id'=> $id ]);
$result = $stmt->fetchAll(PDO::FETCH_OBJ);
header('Location: http://192.168.33.10/AdjusTime/Schedule.php');
exit;
}catch(PDOException $e){
echo $e->getMessage();
exit;
}
}
?>
実行結果をfetchで受け取るのか、fetchAllで受け取るのかで「?」でした。
・fetchで受け取る=データを一行ずつ取得。
・fetchAllで受け取る=全データを配列に変換。全ての結果行を含む配列を返す。
そりゃデータが複数あったら配列にしないと取得できませんわな()
以下、html部分。
Edit.php
<html>
<head>
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.4.1/css/bootstrap.min.css" integrity="sha384-Vkoo8x4CGsO3+Hhxv8T/Q5PaXtkKtu6ug5TOeNV6gBiFeWPGFN9MuhOf23Q9Ifjh" crossorigin="anonymous">
</head>
<div class="container">
<div class="card-header">
<h2 class="head-edit">バンド編集</h2>
</div>
<div class="card-body">
<form action="" method="POST">
<!-- <div class="form-group">
No
<input type="text" name="id" class="form-control">
</div> -->
<div class="form-group">
バンド名
<input value="<?= $result->Band; ?>" type="text" name="Band" class="form-control">
</div>
<div class="form-group">
開始時刻
<input value="<?= $result->StarTime; ?>" type="text" name="StarTime" class="form-control">
</div>
<div class="form-group">
曲1
<input value="<?= $result->Song1; ?>" type="text" name="Song1" class="form-control">
</div>
<div class="form-group">
曲2
<input value="<?= $result->Song2; ?>" type="text" name="Song2" class="form-control">
</div>
<div class="form-group">
終了時刻
<input value="<?= $result->EndTime; ?>" type="text" name="EndTime" class="form-control">
</div>
<div class="col-12 clearfix">
<div class="float-right test-box">
<div class="btn-toolbar mb-3" role="toolbar">
<div class="btn-group mr-2" role="group">
<button type="button" class="btn btn-primary" onclick="history.back()">戻る</button>
</div>
<div class="input-group">
<button type="submit" href="Schedule.php<? $result['id'] ?>" name="btnSend" class="btn btn-danger">決定</button>
</div>
</div>
</div>
</div>
</form>
</div>
</div>
</html>
PDO::FETCH_OBJのおかげで楽に実装できています。
コード自体相当汚いと思いますが、かなり直感的に実装できました。
しかし、詰まったのは、
<div class="input-group">
<button type="submit" href="Schedule.php<? $result['id'] ?>" name="btnSend" class="btn btn-danger">決定</button>
</div>
この部分です。DBの$resultの部分、こんな書き方できるんですね。(超初歩)
ここの書き方が分からず仕舞いで数日調べまくってました、、、笑
まとめ
・データを複数件fetchするときはfetchAll。
・テーブルのキーを受け取って全体を表示する。
勉強になりました。プログラムおもしろい!
Author And Source
この問題について(PDOで編集機能を実装する。), 我々は、より多くの情報をここで見つけました https://qiita.com/mst_141/items/49de08192bf1e60692ee著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .