6/26 [PHP/SQL] データベース (INSERT / DELETE)
本日の授業テーマ
- [PHP] データベース
- 新規商品登録 (INSERT)
- 登録商品削除 (DELETE)
本日の学習内容
[PHP] データベース (前回のおさらい)
ここまでの処理の流れを確認(ログインから新規商品登録完了まで)
新規商品登録確認画面 (entry_confim.php)
[処理内容]
1. ログイン状態をチェック
if(!$_SESSION['login_data']['error']){ header('Location:index.html'); exit; }
2. $_POSTで送信された値を変数に格納(可変変数を使用)
foreach($_POST as $k => $v) {
$$k = $v;
}
3. エラーチェックを実行(エラーフラグにtrueを設定)
3.1.エラー判定用変数を初期化
3.2.エラーフラグにtrueを設定
3.3. 文字列長チェック(エラーならエラーフラグにfalseを設定)
if( mb_strlen($item_name, 'utf-8') > 30 ) { $item_name_error = '商品名が長すぎます。'; $error = false; } if(($item_price) > 10000000 ) { $item_price_error = '価格が大きすぎます。'; $error = false; }
3.4. 空文字チェック(エラーならエラーフラグにfalseを設定)
//空文字チェック if($item_name =='') { $item_name_error = '商品名が入力されていません。'; $error = false; } if($item_price =='') { $item_price_error = '価格が入力されていません。'; $error = false; }
4. $_POSTで受信した値をセッションに設定
foreach($_POST as $k => $v) {
$_SESSION['entry_data'][$k] = $v;
}
$_SESSION['entry_data']['error'] = $error;
5. セション情報のerrorにエラーフラグの値を設定
6. 登録確認画面を表示
[ソース]
<?php require_once(dirname(__FILE__)).'/init.php'; //ログイン状態チェック if(!$_SESSION['login_data']['error']){ header('Location:index.html'); exit; } //可変変数($_POSTで受け取った値を取得し変数に設定) foreach($_POST as $k => $v) { $$k = $v; } //エラーチェック実行 $item_name_error = ''; $item_price_error = ''; $error = true; //文字列長チェック if( mb_strlen($item_name, 'utf-8') > 30 ) { $item_name_error = '商品名が長すぎます。'; $error = false; } if(($item_price) > 10000000 ) { $item_price_error = '価格が大きすぎます。'; $error = false; } //空文字チェック if($item_name =='') { $item_name_error = '商品名が入力されていません。'; $error = false; } if($item_price =='') { $item_price_error = '価格が入力されていません。'; $error = false; } //POSTで受け取った値をSESSIONに設定 foreach($_POST as $k => $v) { $_SESSION['entry_data'][$k] = $v; } $_SESSION['entry_data']['error'] = $error; ?> <!DOCTYPE HTML> <html> <head> <meta charset="utf-8"> <title>新規商品登録確認</title> </head> <body> <h1>新規商品登録確認</h1> <a href="logout.php">ログアウト</a> <table> <tr> <th>商品名:</th> <td><?php echo h($item_name); echo h($item_name_error); ?></td> </tr> <tr> <th>価格:</th> <td> <?php echo h($item_price); if($item_price!=="") { echo '円'; } echo h($item_price_error); ?> </td> </tr> </table> <p><a href="entry.php">戻る</a> <?php if($error) { echo '<a href="entry_fin.php">新規商品登録実行</a>'; } ?> </p> </body> </html>
商品登録実行 (entry_fin.php)
[処理内容]
1. ログイン状態をチェック
2. エントリー状態をチェック
3. セッションにある値を取得し、変数に格納
4. セッション情報(entry_data)を削除
5. データベース接続
6. SQL実行(テーブルに値を追加)
7. 処理実行後、登録商品一覧画面に戻る
[ソース]
<?php require_once(dirname(__FILE__)).'/init.php'; //require_once 'init.php'; //ログインチェック if(!$_SESSION['login_data']['error']){ header('Location:index.html'); exit; } if(!$_SESSION['entry_data']['error']) { header('Location:entry.php'); exit; } //SESSIONにある値を取得 foreach($_SESSION['entry_data'] as $k => $v) { $$k = $v; } //セッション情報(entry_data)を削除 $_SESSION['entry_data'] = array(); unset($_SESSION['entry_data']); //データベース接続 try{ //DB_HOST localhost $dsn = 'mysql:dbname='.DB_NAME.'; host=localhost; charset=utf8;'; $db_user = DB_USER; //DB_USER $db_pass = DB_PASS;//DB_PASS //$db_user = 'root'; //$db_pass = 'root'; $dbh = new PDO($dsn,$db_user, $db_pass); }catch (Exception $e){ print 'システムエラーが発生しました'; exit; } //SQL実行(テーブルに値を追加) $sql = 'INSERT INTO items (item_name, item_price) VALUES(:item_name,:item_price);'; $stmt = $dbh -> prepare($sql); $stmt -> bindParam(':item_name', $item_name); $stmt -> bindParam(':item_price', $item_price); $stmt -> execute(); $rec = $stmt -> fetch(PDO::FETCH_ASSOC); //追記 if($error) { header('Location:item_list.php'); } ?> <!DOCTYPE HTML> <html> <head> <meta charset="utf-8"> <title>登録確認画面</title> </head> <body> </body> </html>
商品削除確認画面 (delete_confim.php)
[処理内容]
1. ログイン状態をチェック
2.$_GETで受信値を変数に格納(可変変数を使用)
3.データベース接続
4.SQL実行(テーブルから値を選択)
5. 削除確認画面を表示
[ソース]
<?php //var_dump($_GET); require_once(dirname(__FILE__)).'/init.php'; //ログインチェック if(!$_SESSION['login_data']['error']){ header('Location:index.html'); exit; } //可変変数($_GETで受け取った値を取得し変数に設定) foreach($_GET as $k => $v) { $$k = $v; } try{ //DB_HOST localhost $dsn = 'mysql:dbname='.DB_NAME.'; host=localhost; charset=utf8;'; $db_user = DB_USER; //DB_USER $db_pass = DB_PASS;//DB_PASS $dbh = new PDO($dsn,$db_user, $db_pass); }catch (Exception $e){ print 'システムエラーが発生しました'; exit; } $sql= 'SELECT * FROM items WHERE item_code =:item_code;'; $stmt = $dbh -> prepare($sql); $stmt -> bindParam(':item_code', $item_code); $stmt -> execute(); $rec = $stmt -> fetch(PDO::FETCH_ASSOC); $_SESSION['items_data']['item_code']=$_GET['item_code']; //$error = true; ?> <!DOCTYPE HTML> <html> <head> <meta charset="utf-8"> <title>商品削除確認</title> </head> <body> <h1>商品削除確認</h1> <a href="logout.php">ログアウト</a> <table> <tr> <th>商品名:</th> <td><?php echo h($rec['item_name']); ?></td> </tr> <tr> <th>価格:</th> <td> <?php echo h($rec['item_price']); if($rec['item_price']!==""){ echo '円'; } ?></td> </tr> </table> <p> <?php //if($error) { echo '<a href="delete_fin.php">商品削除実行</a>'; //} ?> <br><br> <a href="item_list.php">登録商品一覧へ戻る</a></p> </body> </html>