PHP32(画像をデータベースに保存)
ブログ・PHPの勉強「商品管理(3)画像を追加」
- 画像は、データベースに画像名、サーバーに画像本体を保存する。
- データベースに画像名を保存するカラムを作成する。
- サイト内に画像本体を保存するフォルダを作成する。
商品追加画面
<!DOCTYPE HTML> <htmllang="ja"> <head> <metacharset="utf-8"> <title>商品管理</title> <linkrel="stylesheet"href="style.css"> </head> <body> <divid="container"> <h1>商品を追加</h1> <formaction="02_check.php"method="post"enctype="multipart/form-data"id="product"> <p>商品名を入力してください。</p> <p><inputtype="text"name="name"size="30" placeholder="例:野菜・果物名" autofocus required></p> <p>価格を入力してください。(半角数字)</p> <p><inputtype="text"name="price" required pattern="^[0-9]+$" placeholder="例:50">円</p> <p>画像を選択してください。</p> <p><inputtype="file"name="image"style="width:400px"></p> <inputtype="submit"value="確認画面へ"> <inputtype="button"value="登録データ一覧へ"onClick="location.href='04_list.php'"> </form> </div> </body> </html>
追加確認画面
<?php session_start(); session_regenerate_id(true); if(isset($_SESSION['login'])==false){ print '<p>ログインされていません。</p>'; print '<p><a href="../staff_login/01_login.php">ログイン画面へ</a></p>'; exit(); } if(empty($_POST)){ print '処理を終了しました。'; exit; }else{ $prd_name=htmlspecialchars($_POST['name'],ENT_QUOTES); $prd_price=htmlspecialchars($_POST['price'],ENT_QUOTES); $prd_image=$_FILES['image']; $_SESSION['name']=$prd_name; $_SESSION['price']=$prd_price; $_SESSION['image']=$prd_image; $_SESSION['image_name']=$prd_image['name']; $flg=true; }; ?> <!DOCTYPE HTML> <htmllang="ja"> <head> <metacharset="utf-8"> <title>商品管理</title> <linkrel="stylesheet"href="style.css"> </head> <body> <divid="container"> <h1>商品を追加確認画面</h1> <p>商品名: <?php if($prd_name==''){ print '<span class="red">※未入力です。</span>'; $flg=false; }else{print $prd_name;} ?> </p> <p>価格:<?php if($prd_price==''){ print '<span class="red">※未入力です。</span>'; $flg=false; }elseif(preg_match('/^[0-9]+$/',$prd_price)==0){ print '<span class="red">※半角数字で入力してください。</span>'; $flg=false; }else{ print $prd_price.'円'; } ?></p> <?php if($prd_image['size']>0){ if($prd_image['size']>100000){ print'<p>画像が大きすぎます。</p>'; $flg=false; }else{ move_uploaded_file($prd_image['tmp_name'],'./img/'.$prd_image['name']); print '<img src="./img/'.$prd_image['name'].'">'; } } ?> <formaction="03_output.php"method="post"> <?php if($flg==false){ print '<p>「戻る」をクリックし入力してください。</p>'."\n"; print '<p><input type="button" value="戻る" onClick="history.back()"></p>'; }else{ print '<p>上記の商品を追加します。</p>'."\n".'<p><input type="button" value="戻る" onClick="history.back()"> <input type="submit" value="OK"></p>';}; ?> </form> </div> </body> </html>
画像サイズが大きい場合
登録完了画面
<?php session_start(); session_regenerate_id(true); if(isset($_SESSION['login'])==false){ print '<p>ログインされていません。</p>'; print '<p><a href="../staff_login/01_login.php">ログイン画面へ</a></p>'; exit(); } $prd_name=$_SESSION['name']; $prd_price=$_SESSION['price']; $prd_image_name=$_SESSION['image_name']; $flg=true; ?> <!DOCTYPE HTML> <htmllang="ja"> <head> <metacharset="utf-8"> <title>商品管理</title> <linkrel="stylesheet"href="style.css"> </head> <body> <divid="container"> <h1>商品追加を確認</h1> <?php try{ $dsn='mysql:dbname=shop;host=localhost;charset=utf8'; $user='root'; $password='root'; $dbh=new PDO($dsn,$user,$password); $sql='INSERT INTO mst_product(name,price,image) VALUES("'.$prd_name.'","'.$prd_price.'","'.$prd_image_name.'")'; $stmt=$dbh->prepare($sql); $stmt->execute(); $dbh=null; print '<p>'; print htmlspecialchars($prd_name,ENT_QUOTES); print 'を追加しました。</p><br>'; }catch(Execption $e){ print 'ただいま障害により大変ご迷惑をお掛けしております。'; exit(); } ?> <p><ahref="04_list.php">商品一覧</a></p> </div> </body> </html>
登録内容一覧
<!DOCTYPE HTML> <htmllang="ja"> <head> <metacharset="utf-8"> <title>登録データ一覧</title> <linkrel="stylesheet"href="style.css"> <?php session_start(); session_regenerate_id(true); if( isset( $_SESSION[ 'login' ] ) == false ) { print 'ログインされていません。<br>'; print '<p><a href="../staff_login/01_login.php">ログイン画面へ</a></p>'; exit(); } ?> </head> <body> <divid="container"> <h1>商品一覧</h1> <formaction="05_edit.php"method="post"> <ul> <?php $dsn='mysql:dbname=shop;host=localhost;charset=utf8'; $user='root'; $password='root'; $dbh=new PDO($dsn,$user,$password); $sql='SELECT*FROM mst_product WHERE 1'; $stmt=$dbh->prepare($sql); $stmt->execute(); while(1){ $rec=$stmt->fetch(PDO::FETCH_ASSOC); if($rec==false){ break; } print <<<EOD <li><input type="radio" name="{$rec['code']}">{$rec['name']}-----{$rec['price']}円</li> EOD; } $dbh=null; ?> </ul> <p> <inputtype="submit"value="修正する"> <inputtype="button"value="入力画面に戻る"onClick="location.href='01_input.php'"> </p> </form> </div> </body> </html>