<!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>
<!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>
<?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;
}
}
?>
<?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;
?>