connet.lolipop.jp
トップページ
メニュー表示。

index.html
							<!DOCTYPE html>
							<html lang="ja">
							<head>
							<meta charset="utf-8">
							<title>画像データベース:トップページ メニュー</title>
							</head>
							<body>
								<h2>画像データベース</h2>
								<br /><br />
								<a href="inpimage.php">登録</a><br />
								<a href="show_All.php">全データ</a>
							</body>
							</html>
登録フォーム
画像及びコメントのデータの入力及び送信を行う。
送信には非同期通信で行うことにします。
入力する画像のデータは、ここではファイルの拡張子がJPG、PNG、GIFのいずれかの写真画像等を 想定しています。

inpimage.php
							<!DOCTYPE html>
							<html lang="ja">
							<head>
							<meta charset="utf-8">
							<title>画像データベース:データ入力</title>
							<script src="js/imginsert.js"></script>
							<style>
							.entry a {
							color:#000;	
							text-decoration:none;
							}
							.entry a:hover {
							position:relative;top:0.05rem;left:0.05rem;
							color:#BC0000;
							text-decoration:underline;
							}
							</style>
							</head>
							<body>
							<h2>登録</h2>
							<div id="reaction"> </div><br />    			
							<form name="img_form" id="img_form" method="POST" enctype="multipart/form-data">
							<table>
							  <tr>
							  <td style="vertical-align:top;">画像名:</td>
							  <td style="vertical-align:top;"><input type="file" name="inp_imagename" id="inp_imagename" style="width:260px;font-size:1.2rem;"></td>
							  </tr>
							  <tr>
							  <td style="vertical-align:top;">コメント:</td><td colspan="3"><textarea name="comment" id="comment" cols="28" rows="5"></textarea></td>
							  </tr>
							  <tr><td colspan="4"> </td></tr>
							  <tr>
							  <td><div class="entry"><a href="" onclick="javascript:imginsert_form('img_form'); return false;">登録</a></div></td>
							  <td><button type="button" onclick="formreset()">リセット</button></td>
							  </tr>
							</table>
							</form>
							<br /><br />
							<a href="show_All.php">全データ</a><br />
							<a href="index.html">トップページ</a>
							<script>
							<!--
							function formreset() {	
							  document.img_form.reset(); // フォームリセット
							  document.getElementById("reaction").innerHTML = ' ';
							  document.getElementById("inp_imagename").innerHTML = '';
							  document.getElementById("comment").innerHTML = '';
							}
							//-->
							</script>
							</body>
							</html>
Sqliteデータベースオブジェクトを作成
他のファイルからの呼び出しに応じて、データベースのオブジェクトを作成します。
データベース名はここでは「image.db」とし、また、pathはドキュメントルート(htdocs)下にしま したが、それぞれ任意でかまいません。
ただし、pathについてはなるべくドキュメントルートには置かないほうがよいでしょう。

テーブルのコードを作成する時、画像を格納するフィールドのデータタイプは「BLOB」型です。

データベースシステムをたとえばMysqlデータベースなどへ変更したい場合は、基本的にはここを書 き替えればOK。

imageDB.php
							<?php
							/**
							Sqliteデータベースオープン
							*/
								
							function executeQuery(){		
							  try {
							  	// DBが存在しない場合は自動的に作成(’IF NOT EXISTS’の挿入は必須)
							  	$pdo = new PDO('sqlite:image.db');  
							  	$pdo->exec("CREATE TABLE IF NOT EXISTS image_table
							  	(id INTEGER PRIMARY KEY, imgName text, imgType text, imgContent blob, imgComment text, 
							  	created_at timestamp NOT NULL default (datetime(CURRENT_TIMESTAMP,'localtime')), 
							  	updated_at timestamp NOT NULL default (datetime(CURRENT_TIMESTAMP,'localtime'))
							  	)");
							  	return $pdo; 
							  } catch (Exception $e) {
							  		echo 'DB:Error!';
							  		echo $e->getMessage();
							  		$pdo = null;
							  }
							}	
							?>
登録
登録フォームページの「登録」操作により、非同期通信経由でデータを受け取りデータベースに登録 をする。

insert.php
							<?php
							/**
							登録の実行
							*/
							
							// データベースに接続
							require_once('imageDB.php');
							$pdo = executeQuery();
							
							$result = '';
							// 入力チェック
							if (isset($_FILES['inp_imagename']) && !empty($_FILES['inp_imagename']['name'])) {		
							  $file_name = htmlspecialchars($_FILES['inp_imagename']['name'], ENT_QUOTES); // ファイル取得
							  $file_type = pathinfo($file_name, PATHINFO_EXTENSION); // 拡張子取得
							  $type_name = strtolower($file_type); // 小文字に変換
							  $type_name_array = ['jpg', 'png', 'gif'];
							  
							  // 画像形式チェック
							  if(!in_array($type_name, $type_name_array)) {	
							  	$result = '<span style="color:#BC0000;">画像形式のデータではありません!.</span><br />';
							  } else {	
							  	// 入力データを$_FILESグローバル変数で受け取る
							  	$imagename = $_FILES['inp_imagename']['name']; // ファイル名	
							  	$imagecontent = $_FILES['inp_imagename']['tmp_name']; // 一時保存
							  	$imagecomment = htmlspecialchars($_POST['comment'], ENT_QUOTES);
							  	
							  	// 作成したい画像幅を指定(大きくすれば当然DBのファイルサイズも大に)
							  	$new_width = 400;
							  	// アスペクト比を維持
							  	$new_height = -1;		
							  	// バッファリング開始
							  	ob_start();
							  	if($type_name == 'jpg') {
							  	  $imagetype = 'image/jpg';		
							  	  // 新画像を作成
							  	  $originalimage = imagecreatefromjpeg($imagecontent);
							  	  // 画像の縮尺を変更
							  	  $originalimage = imagescale($originalimage, $new_width, $new_height);						
							  	  // 出力
							  		imagejpeg($originalimage);
							  	} elseif ($type_name == 'png') {
							  	  $imagetype = 'image/png';			
							  	  $originalimage = imagecreatefrompng($imagecontent);
							  	  $originalimage = imagescale($originalimage, $new_width, $new_height);						
							  	  imagepng($originalimage);	
							  	} elseif ($type_name == 'gif') {
							  	  $imagetype = 'image/gif';			
							  	  $originalimage = imagecreatefromgif($imagecontent);
							  	  $originalimage = imagescale($originalimage, $new_width, $new_height);						
							  	  imagegif($originalimage);	
							  	}
							  	// バッファ内容を取得
							  	$newimagecontent = ob_get_clean();		
							  	// メモリを開放
							  	imagedestroy($originalimage);
							  
							  	// DBに登録		
							  	$sql = 'INSERT INTO image_table (imgName, imgType, imgContent, imgComment) VALUES(?, ?, ?, ?)'; // ステートメント	
							  	// トランザクションの開始 
							  	$pdo->beginTransaction();
							  	try {			
							  	  $stmt = $pdo->prepare($sql);
							  	  $stmt->bindValue(1, $imagename);		
							  	  $stmt->bindValue(2, $imagetype);
							  	  $stmt->bindValue(3, $newimagecontent);
							  	  $stmt->bindValue(4, $imagecomment);	
							  	  $stmt->execute();
							  	  $pdo->commit();
							  	  $result = '<span style="color:#0000FF;font-weight:bold;">画像データ['.$imagename.']を登録しました.</span>';
							  	} catch(PDOException $e) {
							  		$pdo->rollback(); // エラーなら元に戻す
							  		echo $e->getMessage();
							  		$result = '画像データ['.$imagename.']の登録に失敗しました!.';
							  	}		
							  }
							} else {
							    $result = '<span style="color:#BC0000;font-weight:bold;">画像データ入力は必須です!.</span>';
							}
							$pdo = null;
							echo $result;
							?>
							
Search
Google


↟ このページの先頭へ