96's blog

WEBサイト制作科 6ヶ月コース

PHP32(画像をデータベースに保存)

ブログ・PHPの勉強「商品管理(3)画像を追加」

  • 画像は、データベースに画像名、サーバーに画像本体を保存する。
  • データベースに画像名を保存するカラムを作成する。
  • サイト内に画像本体を保存するフォルダを作成する。

商品追加画面

f:id:webtm2013:20131115104629p:image:w400

<!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>

追加確認画面

f:id:webtm2013:20131115104628p:image:w400

<?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>

画像サイズが大きい場合

f:id:webtm2013:20131115104626p:image:w400

登録完了画面

f:id:webtm2013:20131115104627p:image:w400

<?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>

登録内容一覧

f:id:webtm2013:20131115104630p:image:w400

<!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>