• 締切済み

データ削除処理後に指定のhtmlファイルに飛ばす

下記サイトで頂戴したファイルアップローダーについてご教示お願いします。 http://cgi-garage.parallel.jp/utility.html ※ファイルアップローダーVer 1 アップロードした画像の削除処理をした後に指定したhtmlファイルに飛ばしたいのですが どのようにに書き足すと上手くいくか悩んでいます。 削除処理を抜粋して記載しますので宜しくお願い致します。 sub delete{ my $inpass = $cgi->param('inpass'); if($pass ne $inpass){ &errorprint('Input Error!','パスワードが違いますので、削除できません。'); } my @delchk = $cgi->param('delchk'); my $newstr; my @logs = &setread2('log.cgi'); for my $i( @logs ){ my @i = split(/\t/,$i); my $hit = "0"; for my $p( @delchk ){ if($i[0] eq $p){ $hit++; unlink $i[2]; last; } } if($hit eq "0"){ $newstr .= $i . "\n"; } } $chstr = &setchange3($newstr,"log.cgi"); }

みんなの回答

  • YkazubonY
  • ベストアンサー率30% (26/86)
回答No.1

下記サブルーチンの引数に飛び先URLを指定して呼び出します。 目的地のURLには、ブラウザが飛ばしてくれます。 sub jumpNextUrl { my($url) = @_; # print "\n\n"; print <<"HEAD1"; <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> <html> <head> <script language="JavaScript" type="text/javascript"> <!-- function jumpNext(nexturl) { window.location = nexturl; } //--> </script> <title></title> </head> <body onLoad="jumpNext('$url')"> </body> </html> HEAD1 return; }

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • Perl BBS掲示板 サーバ側のファイル削除

    いつもお世話になっております。 サーバ側のファイルを削除したいのですが、 どのようにすればいいのでしょうか・・・? #-----------------------------------------DELETE sub deletedata { use CGI; my $form = new CGI; my $tm = time; my $DELETE = $form->param('pass'); my $NO = $form->param('no'); my $NAME = TransFormdata($form->param('name')); my $TITLE = TransFormdata($form->param('title')); my $TEXT = TransFormdata($form->param('text')); my $img = TransFormdata($form->param('img')); open(FILE, "<$FILE") or die("error :$!"); eval{ flock(FILE, 1) }; @DATA = <FILE>; close FILE; my $DELETE = $form->param('pass'); my $NO = $form->param('no'); if(length $NO == 0) {} elsif($DELETE eq $PASSWORD) { deleteImg($NO); splice @DATA, $NO, 1; } else{} open(FILE, ">$FILE") or die("error :$!"); eval{ flock(FILE, 2) }; print FILE @DATA; close FILE; &endform } #-----------------------------------------DELETE #-----------------------------------------UPFILEDELETE sub deleteImg { my ($NO,$tm,$NAME,$TITLE,$TEXT,$imgname) = split(/,/, $DATA[$_[0]]); $filename = $DIR . $imgname; if(-e $imgname) { unlink $filename; } } #-----------------------------------------UPFILEDELETE ラジオボタン選択 ↓ パスワード入力 ↓ 削除ボタン ↓ 削除 この段階で テキストファイルの指定行は削除されているのですが、 画像が投稿され、サーバー側に残っているファイルも削除させたいのです。 Unlinkを使うとなっていたのですが・・・わからないです。 どうかご教示お願い致しますm(;;)m

    • ベストアンサー
    • Perl
  • 削除ボタンを押すとperlにてデータを削除するようにしたいんですができません。

    フォーム.html(一部) <form name="form1" method="post" action="admin.cgi"> <input type="hidden" name="mode" value="edit3"> <table width="740" border="0" cellspacing="0" cellpadding="0" align="center"> <tr> <td><b>クライアント(ロードサイド)</b> <input type="hidden" name="group" value="1"> <br> ※前のページへ戻る場合には、ブラウザの戻るボタンでお戻りください。</td> </tr> </table> <br> <table width="740" border="1" cellspacing="0" cellpadding="10" align="center" bordercolor="#333333"> <tr> <td bgcolor="#FFEEEE">このデータを削除する場合には、下の削除ボタンをクリックしてください。<br> ※この作業は取り消しができませんので、よく確認してから削除ボタンをクリックしてください。<br> <br> <input type="button" value="物件NO: _%data_num%_ を削除する" onClick="location.href='admin.cgi?mode=del&group=_%group%_&data_num=_%data_num%_'"> <br> この「物件NO: 」のボタンを押すとadmin.cgiに飛び データファイル内のデータを空にします。 ----------------admin.cgi---------------------------------- if($param{'mode'} eq 'del'){ ##===================================== ## 物件データをオープン = ##===================================== if($param{'group'} eq '1'){ $datafile = $datafile1;} elsif($param{'group'} eq '2'){ $datafile = $datafile2;} elsif($param{'group'} eq '3'){ $datafile = $datafile3;} if(!stdio::lock($lock)){ error('システムエラー','只今混み合っております.'); } # ロック if(!open(DATA,"+<$datafile")){ stdio::unlock($lock); &error('システムエラー',"ファイル ( $datafile ) をオープンできませんでした。"); } @data = <DATA>; foreach(@data){ @data2 = split(/,/); if($data2[0] eq $param{'data_num'}){ $_ = ''; last; } elsif($data2[0] eq $param{'data_num2'}){ $_ = ''; last; } } seek(DATA,0,0); print DATA @data; truncate(DATA,tell(DATA)); close(DATA); stdio::unlock($lock); ##===================================== ## テンプレートオープン = ##===================================== if(!open(HTML,$html_finish)){ &error('システムエラー',"ファイル ( $html_finish ) をオープンできません。"); } @html = <HTML>; close(HTML); ##===================================== ## HTML出力 = ##===================================== print <<"EOF"; Content-type: text/html @html EOF exit; } # モード del ここまで ----------------------------------------------------- この「data_num2」の削除には成功するんですが 「data_num」の場合はボタンを押しても何も起こりません。 恐らく「data_num」のif文に行っていないのだと思うんですが、 何が原因か分かりません。 情報が少ないかもしれませんが 解決の糸口をお願いします。 データはcsv形式のファイルです。

    • ベストアンサー
    • HTML
  • perlでのデータ処理について

    みなさんこんにちは、今、perlについてとても困っています。 以下に内容を記載しますので、わかる方がいましたら 良きアドバイスをお願いします。 #使用するファイルは2つです。 #元データ=$files1 #送信データ=$files2 #データの一行処理開始 open(IN,"$files2") || &error("$files1を開けません。"); while (<IN>) { ($no,$id,$mail,$type,$data)=split(/,/); # $files2を一行づつ読み込んで送信処理をしていきます。 . . . . . #ここからが問題点です。 # $files2を一行読み込んで送信が終わったら、$files1へ送信履歴として、 #日付を入力します。以下にスクリプトを記載しますので、良きアドバイスを #お願いします。 &get_date; @logs=(); @new=(); open(LOG,"$files1") || &error("$files1を開けません"); @logs = <LOG>; close(LOG); foreach $log (@logs){ @all_data = split(/,/,$log); if ($all_data[0] eq $id){ # $idは$files2から読み込んだ数値です。 $shori_date="$year\/$w_mon\/$w_mday"; $all_data[33]="($shori_date)($hour:$min)"; for ($i=0; $i<@all_data; $i++){ $work.="$all_data[$i],"; } chop $work; push(@new,$work); }else{ push(@new,$log); } } open(ALL,"+< $files1") || &error("$files1に書き込めません"); flock(ALL,2); truncate(ALL,0); seek(ALL,0,0); print ALL @new; close(ALL); #ここまでです。 #このようにすると、日付は入るのですが、データの更新、書き込みされたファイルを見ると #同じ内容が、2重、3重にコピーされて、ファイルに書き込みされてしまいます。 } close(IN); 以上なのですが、良きアドバイスを教えて下さい。

    • ベストアンサー
    • Perl
  • 指定したファイルがあるかどうかの確認

    指定したファイルがフォルダ内にあるかどうかを調べるために以下のようにしました。 #フォルダ内の確認 opendir (FOLDER,"img"); @FOLDERS = readdir (FOLDER); closedir(FOLDER); my ($cnt) = 0; foreach(@FOLDERS) { if ($_ =~ /.+\..+/) { $cnt++; } } #指定したファイルがあるかどうかの確認 for($i=1;$i<3;$i++){ for($n=2;$n<$cnt;$n++){ $F = $FOLDERS[$n]; if('$i.jpg' eq '$F'){ print "<TD CLASS=TD1><IMG SRC='img/$i.jpg' HEIGHT=65 WIDTH=50></TD>\n"; print "<FONT COLOR=RED>★</FONT><BR>\n"; #$i=$i+1; } elsif('$i.jpg' ne '$F'){ print "$i.jpg $F<BR>\n"; }#if } #for $n } #for $i ですがすべて「違う」となってしまいます。 どこがダメなのでしょうか? ※perlです。

    • ベストアンサー
    • CGI
  • 指定のフォルダに指定のファイルがあったら画像を表示、なければ飛ばすいい方法(CGI)

    指定のフォルダに指定のファイルがあったら画像を表示、なければ飛ばすというようにしたいのです。 opendir (FOLDER,"img"); @FOLDERS = readdir (FOLDER); closedir(FOLDER); my ($cnt) = 0; foreach(@FOLDERS) { if ($_ =~ /.+\..+/) { $cnt++; } } $tate = $cnt/10; print "<TABLE CELLSPACING=0 CELLPADDING=2>\n"; print "<TR>\n"; for($i=1;$i<11;){ for($n=2;$n<$cnt;$n++){ $F = $FOLDERS[$n]; if("$i.jpg" eq "$F"){ print "<TD CLASS=TD1><IMG SRC='img/$i.jpg' HEIGHT=65 WIDTH=50><BR>$i</TD>\n"; $i=$i+1; } #if } #for $n } #for $i というようにしてみたのですが時間がかかりすぎてしまいます。 何かいい方法はないでしょうか?

    • 締切済み
    • CGI
  • シェルにて指定された上位3つを残してファイルを削除する

    シェルにて指定された上位3つを残してファイルを削除したい A.上記の雰囲気にて、やってみましたが、エラーになります ls -r /tmp/abc | awk '{ if NE >3 rm $1 }' B.次に、下記のように行ってみたいのですが、for文では、ファイル名ソートは、保障されているのでしょうか? i=0 for fname in /tmp/abc/* do let i =i + 1 if [ $i > 3 ] ; then rm fname fi done ※また、他にどのような方法があるのでしょうか?

  • 次のcgiファイルを開くには?

    すみません。初心者です。 001.cgi というファイルで フォーム に 正解を入力して Enterキー を 押したら 次の 002.cgi を 開く(実行する)ようにするには どうしたらよいでしょうか? 今は↓このようにして 「次のファイルへ」をクリックしてもらっています。 Enterキーを押すだけで 次の002.cgi (=$num2.cgi)へ行きたいのです。よろしく、お願いいたします。 #-------- if (param('answer') eq $ans){ print ('正解'); print ("<a href=$num2.cgi accesskey=]>次のcgiファイルへ (Alt+])</a> "); #--------

    • ベストアンサー
    • Perl
  • ログファイルと受信データを比べたい。

    フォームを使用して送られてきたデータをlogを比べて同じものがあったら、同じものがあるということを表示したいのです。 前にも同じようなことをしてできたはずなのですが、なぜかできなくて…。 もうずーっとやっていて頭がボーッとしてきてしまいました。。。。 #フォームで受信したデータ read(STDIN,$buffer,$ENV{'content_length'}); $buffer =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg; #ログファイルオープン open FILE,"naisen.log"; @FILES =<FILE>; close FILE; $i=0; $n=0; $gyou = @FILES; #文末の改行を削除 $buffer =~ s/\n$//; $FILES[$i] =~ s/\n$//; foreach(@FILES){ @log = split(/&/,$FILES[$i]); ($keys,$values) = split(/=/,$log[$_]); $FORMS{$keys} = $values; } for ($i=0; $i<=$gyou-1;$i++){ if ($buffer eq $FILES[$i]){ print "$i行目<BR>\n"; } else{ print "$i行目。これはありません。<BR>\n"; print "$FILES[$i]<BR>\n"; print "$buffer<BR>\n"; } } ログの1行目と同じものとときだけ、きちんとした結果がでます。 上記のほかにもいろいろやりましたができませんでした。

    • ベストアンサー
    • CGI
  • 指定したもの以外の削除方法

    Visual Basic 2005を使っています。 現在、複数の拡張子をサブフォルダ内も含めて検索し、削除するというものを作ったのですが、それ以外のファイルを削除する方法が分かりません。 作ったプログラムは下のものですがどうすればよいでしょうか? よろしくお願いします。(宣言の部分は省略させてもらっています) a = "場所" //(c\・・・)// if a <> "" then b = system.IO.Directory.GetFiles (a,"*.txt",IO.SeachOption.AllDirectories) for i=0 tob.lengh-1 My.computer.FileSystem.DeleteFile(b(i))  Next End if If ・・・(ここから繰り返して拡張子を増やしています)

  • 一定期間過ぎたファイルを削除

    CentOSを利用したwebサーバ(専用サーバ)をレンタルで利用しています。 コントロールパネルとしてPleskがインストールされています。 現在、某アクセス解析ソフトを利用しているのですが、そのログファイルがデフォルトでは1年分くらい保存されています。 しかし、そのためにサーバ容量を圧迫しているので、数ヶ月分だけ取っておいて、あとは自動で削除されるようにしたいです。 知り合いに聞いたところ、以下のコマンドを紹介されました。 find /var/www/vhosts -iregex ".*/httpdocs/cgi/acc/logs/*.log" -mtime +120 -exec rm -f {} /; これで、120日以上経ったファイルは削除するはずですよね? しかし、logsのフォルダには120日以上前のファイルが保存されています。 これは、何が悪いのでしょうか? また、これがなぜ動かないかを確認する方法はありますか? 教えてもらった人に連絡を取ろうとしたのですが、現在連絡が取れずちょっと困ってます。