mysql:4230
From: "tamuzin2" <"tamuzin2" <tamuzin@xxxxxxxxxx>>
Date: Mon, 27 Aug 2001 15:22:02 +0900
Subject: [mysql 04230] 画像を表示
田中です。
画像をアップロードしてデータベースに挿入させて、
そのデータベースのデータを表示させるPerl DBIを組んでいるのですが、
なにせ初心者な者でなかなか上手くいきません。
下記のようなプログラムでアップロードさせて、
#!perl
##《設定》
#データベースインターフェースのドライバ指定
$db_db="DBI:mysql:shopping:localhost";
#MySQLのユーザーネーム
$db_usnm="root";
#MySQLのパスワード
$db_pw="cq3jfgc";
#プログラムタイトル
$pg_title="kanrigamen";
#ページの背景色
$pg_haikei="#FFFFFF";
#ページの見出し
$pg_midasi="◆ショッピング管理ページ◆";
#ページの見出しの位置
$pg_mdaichi="center";
#フォームの属性
$zokusei="post";
#フォームを処理するプログラム指定
$form_pg="syouhin_kanri.cgi";
#フォームテーブルの外枠の幅
$tb_haba="70";
#フォームテーブルの外枠の太さ
$tb_futosa="3";
#フォームテーブルの内枠の太さ
$tb_futosa2="4";
#フォームテーブルの枠の余白
$tb_yohaku="5";
#フォームテーブルの位置
$tb_ichi="center";
#フォーム記入漏れ
$taipumisu="記入漏れがあります。";
#モジュール&ライブラリの指定
require"jcode.pl";
use DBI;
use CGI_Lite;
use File::Copy;
#CGI_Liteをライブラリ関数をコールする為の宣言
$cgi= new CGI_Lite();
#受け取ったフォームデータを置くディレクトリを指定
$cgi->set_directory("./tmp") || die $!;
#フォームデータを受け取り連想配列(%in)に代入
%in=$cgi->parse_form_data();
#商品画像2を別のフォルダに移動
move("./tmp/$in{'SH_gazou2'}", "./img");
#$dns:データベースインターフェース基本形となるドライバ部分
#my($dns) = "DBI:ドライバ名:アクセスするデータベース名:ホスト名";
my($dns) = "$db_db";
#MySQLのユーザーネーム
my($username) = "$db_usnm";
#MySQLのパスワード
my($password) = "cq3jfgc";
#$dbh:はMySQLへのコネクション。$sthはMySQLコマンドの実行
my($dbh,$sth);
#MySQLコマンドが情報を出力する場合は、その情報を詰める為の値
my(@ary);
#入力日時の表示
$ENV{'TZ'} = "JST-9";
($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime(time);
$year += 1900;
$mon++;
if ($mon < 10) { $mon = "0$mon"; }
if ($mday < 10) { $mday = "0$mday"; }
if ($hour < 10) { $hour = "0$hour"; }
if ($min < 10) { $min = "0$min"; }
#商品の新規登録
if($in{'mode'} eq 'new'){
#フォームの入力ミス時のエラー表示
&form_error;
#ここではEUCコードでデータを挿入してみる事にする。表示はSJISを利用
&mozihenkan;
#日時の取得
&zikan;
#$dbhでMySQLに接続
$dbh = DBI -> connect ($dns,$username,$password) or &Error("データベースへア
クセスできません。");
#MySQLコマンドの実行
#insert:レコードの挿入 insert into テーブル名 values("各フィールドの変数名")
$sth = $dbh->prepare(qq{insert into syouhin
values("$Categori","$in{'SH_gazou1'}","$in{'SH_gazou2'}","$senmon","$SH_url"
,"$Syoukaibun","$Kakaku","$SH_name","$SH_kikan_mae","$SH_kikan_syuu","$Nyu_n
icizi")});
#MySQLのエラー出力
$sth -> execute() or &Error("MySQL INSERT コマンドを実行できません。");
#MySQLコマンドの終了
$sth -> finish();
#MySQLへのコネクションを閉じる
$dbh -> disconnect();
}#商品の新規登録はここまで
#《商品管理画面HTML》
#Perl内でHTML分を使用時に必要な指定文
print"Content-type: text/html\n\n";
print<<"__HTML__";
<html>
<head>
<title>$pg_title</title>
<meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS">
</head>
<body bgcolor="$pg_haikei">
<table width="32%" border="0" cellspacing="1" cellpadding="1"
align="center">
<tr>
<td>
<h2 align="center">$pg_midasi</h2>
</td>
</tr>
</table>
<form method=$zokusei action=$form_pg enctype=multipart/form-data>
<table width="$tb_haba%" border="$tb_futosa" cellspacing="$tb_futosa2"
cellpadding="$tb_yohaku" align="$tb_ichi">
<tr>
<td width="21%" bgcolor="#99CCFF">
<div align="center"><font size="3"><b>カテゴリー</b></font></div>
</td>
<td width="79%" bgcolor="#FDF9C1">
<select name="Categori">
<option>映像機器</option>
<option>記憶装置</option>
<option>ディスプレイ</option>
<option>ネットワーク機器</option>
<option>入力装置</option>
<option>PC本体</option>
<option>プリンター</option>
<option>音声機器</option>
<option>ソフト</option>
<option>スキャナー</option>
</select>
</td>
</tr>
<tr>
<td width="21%" bgcolor="#99CCFF">
<div align="center"><font size="3"><b>専門分野</b></font></div>
</td>
<td width="79%" bgcolor="#FDF9C1">
<select name="senmon">
<option>娯楽用</option>
<option>仕事用</option>
<option>娯楽兼仕事用</option>
</select>
</td>
</tr>
<tr>
<td bgcolor="#99CCFF">
<div align="center"><font size="3"><b>製品の関連URL
</b></font></div>
</td>
<td bgcolor="#FDF9C1">
<input type="text" name="SH_url" value="http://" maxlength="64"
size="80">
<font size="1" color="#FF3333">(半角英数)</font> </td>
</tr>
<tr>
<td bgcolor="#99CCFF">
<div align="center"><font size="3"><b>製品の紹介文</b></font></div>
</td>
<td bgcolor="#FDF9C1">
<textarea name="Syoukaibun" rows="5" cols="60"></textarea>
</td>
</tr>
<tr>
<td bgcolor="#99CCFF">
<div align="center"><font size="3"><b>価 格</b></font></div>
</td>
<td bgcolor="#FDF9C1">
<input type="text" name="Kakaku" size="10." maxlength="8">
<b><font size="3">円</font></b> <font size="1" color="#FF3333">(半角
数字)</font></td>
</tr>
<tr>
<td bgcolor="#99CCFF">
<div align="center"><font size="3"><b>製 品 名</b></font></div>
</td>
<td bgcolor="#FDF9C1">
<input type="text" name="SH_name" maxlength="80" size="90">
<font size="1" color="#FF3333">(全角)</font> </td>
</tr>
<tr>
<td bgcolor="#99CCFF">
<div align="center"><font size="3"><b>製品出品期間
(始)</b></font></div>
</td>
<td bgcolor="#FDF9C1">
<input type="text" name="mae_nen" size="6" maxlength="4">
<b><font size="3">年</font></b>
<input type="text" name="mae_tuki" size="4" maxlength="2">
<b><font size="3">月
<input type="text" name="mae_hi" size="4" maxlength="2">
日
<input type="text" name="mae_zi" size="4" maxlength="2">
時
<input type="text" name="mae_fun" size="4" maxlength="2">
分</font></b><font size="1" color="#FF3333">(半角数字)西暦
</font></td>
</tr>
<tr>
<td bgcolor="#99CCFF">
<div align="center"><font size="3"><b>製品出品期間
(終)</b></font></div>
</td>
<td bgcolor="#FDF9C1">
<input type="text" name="syuu_nen" size="6" maxlength="4">
<b><font size="3">年</font></b>
<input type="text" name="syuu_tuki" size="4" maxlength="2">
<b><font size="3">月
<input type="text" name="syuu_hi" size="4" maxlength="2">
日
<input type="text" name="syuu_zi" size="4" maxlength="2">
時
<input type="text" name="syuu_fun" size="4" maxlength="2">
分</font></b><font size="1" color="#FF3333">(半角数字)西暦
</font></td>
</tr>
<tr>
<td bgcolor="#99CCFF">
<div align="center"><font size="3"><b>商品画像1</b></font></div>
</td>
<td bgcolor="#FDF9C1">
<input type=file name=SH_gazou1>
</td>
</tr>
<tr>
<td bgcolor="#99CCFF">
<div align="center"><font size="3"><b>商品画像2</b></font></div>
</td>
<td bgcolor="#FDF9C1">
<input type="file" name="SH_gazou2">
</td>
</tr>
<tr>
<td bgcolor="#99CCFF">
<div align="center"><font size="3"><b>入力日時</b></font></div>
</td>
<td bgcolor="#FDF9C1">
<input type="text" name="nyuu_nen" size="6" maxlength="4"
value="$year">
<b><font size="3">年</font></b>
<input type="text" name="nyuu_tuki" size="4" maxlength="2"
value="$mon">
<b><font size="3">月
<input type="text" name="nyuu_hi" size="4" maxlength="2"
value="$mday">
日
<input type="text" name="nyuu_zi" size="4" maxlength="2"
value="$hour">
時
<input type="text" name="nyuu_fun" size="4" maxlength="2"
value="$min">
分</font></b><font size="1" color="#FF3333">(半角数字)西暦
</font></td>
</tr>
<tr>
<td colspan="2">
<div align="center">
<input type=submit name=submit value="送信">
</div>
</td>
</tr>
<input type="hidden" name="mode" value="new">
</table>
<br>
</form>
<br>
</body>
</html>
__HTML__
##《サブルーチンエリア》
#EUCコードでデータを挿入
sub mozihenkan{
$Categori=$in{'Categori'};
&jcode'convert(*Categori,"euc");
$senmon=$in{'senmon'};
&jcode'convert(*senmon,"euc");
$SH_url=$in{'SH_url'};#パスワードは半角英数のみなのでこのまま
$Syoukaibun=$in{'Syoukaibun'};
&jcode'convert(*Syoukaibun,"euc");
$Kakaku=$in{'Kakaku'};#価格は半角数字のみなのでこのまま
$SH_name=$in{'SH_name'};
&jcode'convert(*SH_name,"euc");
$mae_nen=$in{'mae_nen'};#年月日時間は半角数字のみなのでこのまま
$mae_tuki=$in{'mae_tuki'};
$mae_hi=$in{'mae_hi'};
$mae_zi=$in{'mae_zi'};
$mae_fun=$in{'mae_fun'};
$syuu_nen=$in{'syuu_nen'};
$syuu_tuki=$in{'syuu_tuki'};
$syuu_hi=$in{'syuu_hi'};
$syuu_zi=$in{'syuu_zi'};
$syuu_fun=$in{'syuu_fun'};
$nyuu_nen=$in{'nyuu_nen'};
$nyuu_tuki=$in{'nyuu_tuki'};
$nyuu_hi=$in{'nyuu_hi'};
$nyuu_zi=$in{'nyuu_zi'};
$nyuu_fun=$in{'nyuu_fun'};
}
#フォームの入力ミス時のエラー表示
sub form_error{
&Error("$taipumisu") unless $in{'Categori'};
&Error("$taipumisu") unless $in{'senmon'};
&Error("$taipumisu") unless $in{'Syoukaibun'};
&Error("$taipumisu") unless $in{'Kakaku'};
&Error("$taipumisu") unless $in{'SH_name'};
#&Error("$taipumisu") unless $in{'SH_kikan_mae'};
#&Error("$taipumisu") unless $in{'SH_kikan_syuu'};
&Error("$taipumisu") unless $in{'SH_gazou1'};
#&Error("$taipumisu") unless $in{'Nyu_nicizi'};
}
#MySQLのエラー処理
sub Error{
print"Content-type: text/html\n\n";
print $_[0];
print qq(<br><a href="javascript:history.back(1)">戻る</a>);
exit;
}
#日時の取得
sub zikan{
$ENV{'TZ'} = "JST-9";
($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime(time);
$year += 1900;
$mon++;
if ($mon < 10) { $mon = "0$mon"; }
if ($mday < 10) { $mday = "0$mday"; }
if ($hour < 10) { $hour = "0$hour"; }
if ($min < 10) { $min = "0$min"; }
$SH_kikan_mae=sprintf("%04d-%02d-%02d
%02d:%02d:%02d",$mae_nen,$mae_tuki,$mae_hi,$mae_zi,$mae_fun);
$SH_kikan_syuu=sprintf("%04d-%02d-%02d
%02d:%02d:%02d",$syuu_nen,$syuu_tuki,$syuu_hi,$syuu_zi,$syuu_fun);
$Nyu_nicizi=sprintf("%04d-%02d-%02d
%02d:%02d:%02d",$nyuu_nen,$nyuu_tuki,$nyuu_hi,$nyuu_zi,$nyuu_fun);
}
そして、そのダウンロードされた画像を表示させるといったPerl DBIは、
下記の様に組んで見たのですが駄目でした(このプログラムは全く自身がありませ
ん)。
#!perl
#モジュール&ライブラリの指定
use DBI;
##《設定》
#データベースインターフェースのドライバ指定
$db_db="DBI:mysql:shopping:localhost";
#MySQLのユーザーネーム
$db_usnm="root";
#MySQLのパスワード
$db_pw="cq3jfgc";
#プログラムタイトル
$pg_title="syoppu";
#$dns:データベースインターフェース基本形となるドライバ部分
#my($dns) = "DBI:ドライバ名:アクセスするデータベース名:ホスト名";
my($dns) = "$db_db";
#MySQLのユーザーネーム
my($username) = "$db_usnm";
#MySQLのパスワード
my($password) = "cq3jfgc";
#$dbh:はMySQLへのコネクション。$sthはMySQLコマンドの実行
my($dbh,$sth);
#MySQLコマンドが情報を出力する場合は、その情報を詰める為の値
my(@ary);
#$dbhでMySQLに接続
$dbh = DBI -> connect ($dns,$username,$password) or &Error("データベースへア
クセスできません。");
#MySQLコマンドの実行
#select:データの閲覧 select フィールド名1,フィールド名1,… from テーブル名 where フィールド
名
#like"検索内容"
$sth=$dbh->prepare(qq{select SH_gazou1 from shopping});
#MySQLのエラー出力
$sth -> execute() or &Error("MySQL select コマンドを実行できません。");
#《ショップサイトHTML》
#Perl内でHTML分を使用時に必要な指定文
print"Content-type: text/html\; charset=shift_jis\n\n";
print<<"__HTML__";
<html>
<head>
<title>ショッピングサイトTOP</title>
<meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS">
</head>
<body bgcolor="#00CCCC">
__HTML__
while(@ary=$sth->fetchrow_array()){
binmode($ary[1]);
print $ary[1];
<img src="http://localhost/~shopping/test/tmp/$ary[0]" width="115"
height="125">
}
print<<"__HTMLEND__";
</body>
</html>
__HTMLEND__
#MySQLコマンドの終了
$sth -> finish();
#MySQLへのコネクションを閉じる
$dbh -> disconnect();
exit;
#MySQLのエラー処理
sub Error{
print"Content-type: text/html\n\n";
print $_[0];
exit;
}
大変長いメールになってしまい申し訳ございません。
どなたか宜しければ教えてください。
宜しくお願いします。
4222 2001-08-27 00:00 [e-oohira <e-oohira@x] 4226 2001-08-27 12:15 ┗[とみたまさひろ <tomm] スレッド表示について -> 4230 2001-08-27 15:22 ┗["tamuzin2" <tamuzin@] 画像を表示 4232 2001-08-27 16:30 ┗["Kawai,Takanori" <GC] 4256 2001-08-30 14:57 ┗["tamuzin2" <tamuzin@] Re: 画像を表示【解決】