みんなの「教えて(疑問・質問)」にみんなで「答える」Q&Aコミュニティ

こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

締切り済みの質問

同名ID、同名画像ファイル名があったらエラー表示

CGI勉強中です。既に同名の商品id_num及び画像ファイル名gazouが存在する場合、エラー表示する場合、コードの書き方がわかりません。
教えて下さい。
---------------------------------------------------------------
# 商品登録処理
sub goods_regist {
if ( $in{'id'} eq '' ) { &error ('エラー','IDが未選択です'); }
if ( $in{'id_num'} eq '' ) { &error ('エラー','商品個別番号が未入力です'); }
if ( $in{'goods'} eq '' ) { &error ('エラー','商品名が未入力です'); }
if ( $in{'tanka'} eq '' ) { &error ('エラー','商品単価が未入力です'); }
if ( $in{'id_num'} eq '' ) { &error ('エラー','商品個別番号が未入力です'); }
if ( $in{'ad_amount'} eq 'text' && $in{'ad_amount2'} eq '' ) { &error ('エラー','個数設定が不正です'); }
if ( $in{'ad_amount'} eq 'list' && $in{'ad_amount3'} eq '' ) { &error ('エラー','個数設定が不正です'); }
$goods_data = "$goods_dir/$in{'id'}.cgi";
open (DATA,"$goods_data") || &error('オープンエラー','商品データファイルが開けません。');
@LINES = <DATA>;
close (DATA);

$count = @LINES;
if ( $count == 0 ) {
$num = 1;
} else {
@lists = $LINES[-1];
$num = $lists[0];
$num = $num + 1;
}


&lock2;

open (OUT,">>$goods_data") || &error('オープンエラー','メール設定ファイルが開けません。');
print OUT "$num\t$date_now\t$in{'id'}\t$in{'id_num'}\t$in{'goods'}\t$in{'tanka'}\t";
print OUT "$in{'ad_amount'}\t$in{'ad_amount2'}\t$in{'ad_amount3'}\t$in{'rem'}\t\n";
close (OUT);

# 画像アップロード処理 ################
$filename = $in{'gazou'};
$gif = 1;
$jpeg = 1;
$macbin=0;
foreach (@in) {
if ($_ =~ /(.*)Content-type:(.*)\/(.*)/i) { $tail=$3; }
if ($_ =~ /(.*)gazou=(.*)/i) { $fname=$2; }
if ($_ =~ /application\/x-macbinary/i) { $macbin=1; }
}
$tail =~ s/\r//g;
$tail =~ s/\n//g;
$filename =~ s/\"//g;

$flag=0;
if ($image_up eq '0') { $flag=1; }
if ($tail =~ /gif/i && $gif) { $tail=".gif"; $flag=1; }
if ($tail =~ /jpeg/i && $jpeg) { $tail=".jpg"; $flag=1; }

if (!$flag) {
if ($fname =~ /.gif/i && $gif) { $tail=".gif"; $flag=1; }
if (($fname =~ /.jpg/i && $jpeg) || ($fname =~ /.jpeg/i && $jpeg))
{ $tail=".jpg"; $flag=1; }
}
if (!$flag) { &error("アップロードできないファイル形式です","lock"); }

$upfile = $in{'gazou'};

投稿日時 - 2007-11-26 15:47:34

QNo.3548390

困ってます

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(2)

ANo.2

#1の回答のリンク先をよく読まれましたか?
-eはファイルの存在をチェックするものです。

画像ファイルの存在確認には使えるでしょうが、IDの検査には使えないでしょう。
サンプルコードをお望みとのことですが、
どのような形で商品のIDを管理しているのかがわかりませんので
申し訳ありませんが書けません。

ファイルの存在確認の方は、
> $in{'gazou'};
にファイル名が入っているようですから、
実際にファイルが置かれているディレクトリのパスと
このファイル名を連結した上で
-e で検査してやれば良いと思います。

こちらもファイルをどのように配置するかがわかりませんので
コードは書けませんのであしからず。

投稿日時 - 2007-11-27 15:53:24

補足

すいません。自分でもまだよくわかっておらず、いろいろと試行錯誤してます。
もうちょっといろいろと調べてみますが・・・

投稿日時 - 2007-11-27 17:07:10

ANo.1

-e で存在確認すればよいのではないでしょうか?
perlfunc - Perl 組み込み関数
http://perldoc.jp/docs/perl/5.6.1/perlfunc.pod#item__i__X__i__EXPR

> sub goods_regist {
regist という単語はありません。
よく間違われますけど。

投稿日時 - 2007-11-26 19:24:42

補足

サンプルコードはWEB寺小屋さんの参考にさせてもらっています。
一から人のコードを参考に、手打ちで練習してます。


具体的にはこんな感じなのでしょうか?違っていたら、すいませんが、
サンプルコードをお願いします。

■商品部分
-----------------------------------------------------------
sub goods_regist {
if ( $in{'id'} eq '' ) { &error ('エラー','IDが未選択です'); }
if ( $in{'id_num'} eq '' ) { &error ('エラー','商品個別番号が未入力です'); }
if(-e $id_num){ ######上記の次の行に追加
&error("同名のIDが存在します。");
}

■画像部分
-------------------------------------------------------------
$flag=0;
if ($image_up eq '0') { $flag=1; }
if ($tail =~ /gif/i && $gif) { $tail=".gif"; $flag=1; }
if ($tail =~ /jpeg/i && $jpeg) { $tail=".jpg"; $flag=1; }
if(-e $id_num){ ######上記の次の行に追加
&error("同名のファイルが存在します。");
}

投稿日時 - 2007-11-26 22:58:05

あなたにオススメの質問