perlにてデータ削除ボタンを押す方法

このQ&Aのポイント
  • Perlを使用してデータ削除ボタンを実装する方法を教えてください。現在、削除ボタンを押してもデータが削除されません。
  • データ削除の処理における「data_num」の条件分岐が正常に機能していないようです。削除ボタンを押しても何も起こらない原因を教えてください。
  • 問題の原因が不明ですが、「data_num」の条件に入らない可能性があると考えられます。データ形式がCSVであること、その他の関連する情報を提供していただくことで、具体的な解決策を提案できるかと思います。
回答を見る
  • ベストアンサー

削除ボタンを押すと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
  • 回答数1
  • ありがとう数0

質問者が選んだベストアンサー

  • ベストアンサー
  • fujillin
  • ベストアンサー率61% (1594/2576)
回答No.1

全体がよくわかりませんが… >この「data_num2」の削除には成功するんですが >「data_num」の場合はボタンを押しても何も起こりません。 「data_num2」と「data_num」のHTMLの違いが読み取れないけれど、HTMLを見るとPOST送信のformで、imputボタンを押すとスクリプトでロケーションを操作しているみたいですけど?(GET送信になっている?) submitボタンは設置していないのでしょうか? まずは、各ケースでperl側で正しくパラメータを取得できているかをチェックしてみてはいかがでしょうか?

関連する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
  • CGI間のデータ送信について(perl)

    perlのcgiで詰まってしまったので質問します。 現在困っていることは、cgiからcgiへの変数の値の受け渡しについてです。 色々調べてやってみたのですが、うまくいきません。 送信側で print "<form action = \"sendmail.cgi\" method=\"post\">"; print "<A href =\"sendmail.cgi?$array1[0]&$array1[1]&$array1[2]&$array1[3]\">sendmail.cgi</A>"; print "<input type=\"submit\" value=\" ボタンです。 \">"; print "</form>"; として 受信側で # postでもgetでも受信できるようにする if ($ENV{'REQUEST_METHOD'} eq "GET") { $data = '1'; $testmsg = "GETで受信"; $formdata = $ENV{'QUERY_STRING'}; print("$formdata<BR>"); } elsif ($ENV{'REQUEST_METHOD'} eq "POST"){ # こちらを使用している $data = '2'; $testmsg = "POSTで受信"; $length = $ENV{'CONTENT_LENGTH'}; read(STDIN,$formdata,$ENV{'CONTENT_LENGTH'});# $dataに受信する print("$formdata<BR>"); } else { $data = '3'; $testmsg = "受信することができませんでした。<BR>"; } としてpostにて受信しようとしています。 postのif文には入ったようなのですが、データが空っぽで何も入っていないようなのです。 何が原因なのでしょうか?助けてほしいです。

    • 締切済み
    • CGI
  • mkdirでのファイルロック

    以前にも質問したのですが間違って締めきってしまったので再度質問します。CGI初心者なのですがmkdirを使ってファイルロックをかけたいのですがどうすればいいのかわかりません。たぶん、下記の部分というのはなんとなくわかりました。 分かる方よろしくお願いします。 #### メッセージ番号設定 #### sub getnumber { open(COUNTER,"$countfile") || &error('カウントファイルが開けない'); $this_num = <COUNTER>; close(COUNTER); $this_num++; open(COUNTER,">$countfile") || &error('カウントファイルに書きこめない'); print COUNTER "$this_num"; close(COUNTER); if( length($this_num) == 1 ){ $this_num ="000000" . $this_num;} elsif( length($this_num) == 2 ){ $this_num ="00000" . $this_num; } elsif( length($this_num) == 3 ){ $this_num ="0000" . $this_num; } elsif( length($this_num) == 4 ){ $this_num ="000" . $this_num; } elsif( length($this_num) == 5 ){ $this_num ="00" . $this_num; } elsif( length($this_num) == 6 ){ $this_num ="0" . $this_num; } } #### データファイルへ入力 #### sub inputDB { $datafile = "$predatadir/userdata01.csv"; open(DB,">>$datafile") || &error('データファイルに書きこめない'); print DB "$yourname,$email\n"; close(DB); }

    • ベストアンサー
    • CGI
  • mkdirでのファイルロック

    私はCGIの経験がほとんどなく超初心者です。下記のようなファイルを作りましたがファイルのロックをしなければデータが書き込まれないようなので困ってしまっています。flockはつかえないようなのでmkdirでロックをかけたいのです。 #! /usr/local/bin/perl $| = 1; require './jcode.pl'; require './mimew.pl'; require './cgi-lib.pl'; &ReadParse(*FORM); $thisfile = 'mother'; $countfile = './mother.txt'; $predatadir ='./mom'; $fromname = "sabra net"; $fromemail = '***@****.co.jp'; $act = $FORM{'act'}; #### main始動 #### if($act eq "indata"){   &getnumber;   &datamod;   &inputDB;   &mailsend;   &view; } else{   &datamod;   &kakunin; } #### main終了 #### #### メッセージ番号設定 #### sub getnumber {   open(COUNTER,"$countfile") || &error('countfileが開けない');     $this_num = <COUNTER>;   close(COUNTER);     $this_num++;   open(COUNTER,">$countfile") || &error('countfileに書きこめない');     print COUNTER "$this_num";   close(COUNTER);   if( length($this_num) == 1 ){     $this_num ="000000" . $this_num;   }   elsif( length($this_num) == 2 ){     $this_num ="00000" . $this_num;   } } #### datafileへ入力 #### sub inputDB {   $datafile = "$predatadir/userdata01.csv";    open(DB,">>$datafile") || &error('datafileに書きこめない');      print DB "$yourname,$email\n";    close(DB); }

    • 締切済み
    • CGI
  • perlでファイルのデータの一部を削除したい

    久しぶりにPerlを操作してファイルのデータの一部を削除したいのですが、削除出来ずに困っております。 3年以上触っていないため、過去のファイル等々を見ながらやってましたが、結果は出来ずじまいで停滞して困っております。 ご指導いただけないかと思い、書き込みしました。 ファイル名 $tmpfile データ構成  no,名称 1<>フレーム 2<>レンズ 3<>カメラ 4<>ファインダー 5<>めがね 6<>ズーム これで「めがね」を削除したいのです。 データnoで削除したいと思っておりますが、うまく動作しません。 以下ソース open(DB,"$tmpfile") || &error("Open Error : $tmpfile"); flock(DB, 1); @lines = <DB>; @new=(); foreach $line (@lines) { $flag=0; ($no,$meisyo) = split("<>", $line); foreach $x (@DEL) { if ("$x" eq $tmpnum) { $flag=1; last; } } if ($flag == 0) { push(@new,$line); } } open(OUT,">$tmpfile") || &error("Write Error : $tmpfile"); print OUT @new; close(OUT); ここまで 上のソースですと、エラーこそならずに(そうみえているだけかもしれません)終わりますが、データ削除が正しく出来ませんでした。 説明不足があるかもしれませんので、指摘いただけますと幸いです。 よろしくお願いいたします。

    • ベストアンサー
    • Perl
  • ショッピングカートのカスタマイズ

    WEB寺小屋のショッピングカートで当サイトは、現在サポートしていないようで、商品登録する際のサブルーチン処理は 下記です。下記のソースで「id_num」が同じ場合、単純にエラーを返す場合は、どのように返したら分かりません。 わかるかた教えて下さい。ちなみに下記はオリジナルソースで3行目と6行目は同じ処理をしています。 どちらか、削除しても問題ないでしょうか? 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; } #if ( $in{'id_num'} != $num ) { &error ('エラー','商品個別番号が間違っています'); } &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);

  • データ削除処理後に指定の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"); }

  • perlにてスペースの削除に苦労してます。

    perlにてテキスト書き出しをしをしたとき 書き出したテキストファイルの先頭にどうしてもスペースが入ってしまうので そのテキストを別のcgiにて読み込み表示するときに 先頭のスペースを削除しようとしていますがうまく行きません 多分スペースをパターンマッチさせるのだろうと思うのですが いまいち私の理解が足らないようでぜひどなたか教えてください。 (1つ目のcgi)------------------------------- フォームから入力$title $subtitle $contentsとしそれを下記のような形で読み込み(途中省略) use CGI; $query = new CGI; $title = $query->param('title'); $subtitle = $query->param('subtitle'); $content = $query->param('content'); #タブ区切りにし@memoryに代入 @memory="$meday\t$title\t$subtitle\t$content\t$number\t$namberc\n"; open(FILE,">>../data/memory.txt")||&error("$datafile 外部ファイルが開きませんでしたエラー"); print FILE"@memory"; close(FILE); ----------------------------- それを違うcgiのソースで読み込み------------------------------------ (2つ目のcgi) open(IN, "< sys/data/memory.txt"); eval{flock(IN,1)}; @inbun=<IN>; for($i=0;$i<@inbun;$i++){ @retudata=split(/\t/,$inbun[$i]); $inbun[$i] =~ s/^\s+//g; $retu =~ s/^\s+//g; @retudata[$i]='$retu[0]\t$retu[1]\t$retu[2]\t$retu[3]\t$retu[4]\t$retu[5]\n'; ; }@data=@inbun; open(FILE,">sys/data/memory.txt")||&error("../data/memory.txt 外部ファイルが開きませんでしたエラー"); print FILE"@data"; close(FILE); close (IN); --------------------------------------------------- 追加するとなぜか先頭にスペースが入りどうしてもとれないんですが どうしたら良いでしょうか? ちなみに結果は下記のとおりです。 20121122 test1 test1 test1あいうえおABCDEFG 1 112223157 20121122 test2-r test2-r test2-rあいうえおABCDEFG 2 1122231647 20121122 test3 test3 test3あいうえおABCDEFG 3 112223254 乱筆乱文ご容赦ください。 宜しくお願いします。

    • ベストアンサー
    • Perl
  • perl初心者なのですが

    use strict; use CGI; use DBI; my $dbh = DBI->connect("dbi:ODBC:DB_test"); my $NAME1 = CGI->new(); my $ADDRESS1 = CGI->new(); my $LETTER_NUM1 = CGI->new(); my $TEL_NUM1 = CGI->new(); my $NAME = $NAME1->param('name'); my $ADDRESS = $ADDRESS1->param('address'); my $LETTER_NUM = $LETTER_NUM1->param('letter_num'); my $TELL_NUM = $TEL_NUM1->param('tell_num'); my $sth = $dbh->prepare("INSERT INTO table1(name1,address1,letter_num1,tell_num1) values(?,?,?,?)"); $sth->execute($NAME,$ADDRESS,$LETTER_NUM,$TELL_NUM); $sth->finish; $dbh->disconnect; フォームから受け取ったデータをデータベースに格納したいのですが、うまくいきません。誰か教えてください。

  • IFのネストについて(PERL/CGI)

    データファイルからHTMLへの吐き出しについての質問です。 CSVデータ用ファイルに 「1,0」(データNO,表示フラグ) 「2,1」 「3,1」 と並んでいて、そこから  (1)表示フラグが1のときのみ、HTMLの表の中にサブウィンドウが開くボタンを表示させたい  (2)表示フラグが0の時は何も表示させない というところまで出来ているものに  (3)データNOごとにサブウィンドウのサイズを変えたい ということを考えているのですが 現在(3)の盛り込み方が分からず、全て同サイズのサブウィンドウを表示させるだけになってしまっています。 そもそもPERLを全然分かっていないような状況で、前の製作者のソースを触っているので 単純なIF文でいけるのかと思い、  if($DATA[1] == 1){   print <<END;    【<a href="JavaScript:openwin(ボタン)</a>】   END  }else{   print<<END;   <br>   END  } というのを  if($DATA[1] == 1){   if($DATA[0] == 1 ){    print <<END;     【<a href="JavaScript:open_big(ボタン)</a>】→大きいサブウィンドウ    END   }elsif($DATA[0] == 3 ){    print <<END;     【<a href="JavaScript:open_little(ボタン)</a>】→小さいサブウィンドウ    END   }  }else{   print<<END;    <br>   END  } のように変えてみたら、エラーになりました。 たぶん、参考書でも初歩中の初歩みたいな質問かと思いますが、さっぱり分からないんです。。 回答例か、このレベルの質問でも答えてくれているサイトを教えてください。 よろしくおねがいします。

    • ベストアンサー
    • CGI