My Web道

WEB制作科 受講記録 …とその後も続くWEB制作に関する活動・学習記録です。

6/26 [PHP/SQL] データベース (INSERT / DELETE)

本日の授業テーマ

  • [PHP] データベース
    • 新規商品登録 (INSERT)
    • 登録商品削除 (DELETE)

本日の学習内容

[PHP] データベース (前回のおさらい)

ここまでの処理の流れを確認(ログインから新規商品登録完了まで)

f:id:sntkk3:20140628094317p:plain

新規商品登録確認画面 (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>