CGIの質問です。いちばん下の「この質問・回答へのコメント」に記載の内容はメルマガ独自配信システムCGI(http://www.netmania.jp/cgi/111.php)のregist.cgiの一部です。メールアドレスの登録/削除を行うCGIです。

メールアドレスが以下の形式に並んでおり、フォームから削除要求があると該当するアドレスを削除します。
aaa@bbb.com
bbb@ccc.net
ccc@ddd.ne.jp

これを削除要求があったとき以下の形式に並んでいる任意の1行を削除するにはどのように変更したらよいでしょうか?
aaa@bbb.com,1,2,
bbb@ccc.net,12,4,
ccc@ddd.ne.jp,3,22,

アドレスの後ろの数値2つは誕生日を表しています。1,2,は1月2日ということです。
CGIの知識があまりないため解決方法そのものを教えていただければうれしいです。
解決にいたる完全な回答には500ポイントを差し上げます。よろしくお願いいたします。

回答の条件
  • 1人2回まで
  • 登録:2008/02/19 12:28:54
  • 終了:2008/02/19 18:26:43

ベストアンサー

id:Numeric No.1

Numeric回答回数83ベストアンサー獲得回数182008/02/19 13:22:47

ポイント500pt

if($newlist eq $value){$find = 1;}


この行を、以下のように変更してください。


if ($newlist =~ /^$value\,/){$find = 1;}


#上は完全一致、下は前方一致での比較式です。

id:icta

回答ありがとうございました。期待通りに動きました。

これで煩わしい手作業の仕事から解放されます。

本当にありがとうございました。

2008/02/19 18:26:17

その他の回答(1件)

id:Numeric No.1

Numeric回答回数83ベストアンサー獲得回数182008/02/19 13:22:47ここでベストアンサー

ポイント500pt

if($newlist eq $value){$find = 1;}


この行を、以下のように変更してください。


if ($newlist =~ /^$value\,/){$find = 1;}


#上は完全一致、下は前方一致での比較式です。

id:icta

回答ありがとうございました。期待通りに動きました。

これで煩わしい手作業の仕事から解放されます。

本当にありがとうございました。

2008/02/19 18:26:17
id:tezcello No.2

tezcello回答回数459ベストアンサー獲得回数692008/02/19 13:42:22

ポイント10pt

if($newlist eq $value){$find = 1;} ここで読み込んだリスト(削除前)の1行と、フォームから受け取った文字列を比較しています。

eq では一致しか検出できないのを、メールアドレス部分だけの一致を検査したいという事ですね。


if ($newlist =~ '/'.$value.'/'){$find = 1;}

に変更してみてはどうでしょうか?

  • id:icta
    ■フォーム
    <form method="post" action="http://AAA/xxx/regist.cgi">
    <input type="hidden" name="mode" value="OUT">
    <input type="text" name="mail">
    <input type="submit" value="解除">
    </form>

    ■CGI
    $usrdata = "list.dat"; #読者リスト

    #読者削除
    sub readerdel {
    if ($QUERY{mail} eq "" || $QUERY{'mail'} !~ /(.*)\@(.*)\.(.*)/) {&main("メールアドレスが未記入です");}
    &readerload;
    $value = "$QUERY{mail}";
    foreach $list (@readerlist) {
    $newlist = $list;
    $newlist =~ s/\n//g;
    $newlist =~ s/\r//g;
    if($newlist eq $value){$find = 1;}
    else{push(@newreaderlist,$list);}
    }
    open(LOG,">$usrdata");
    flock(LOG,2);
    print LOG @newreaderlist;
    flock(LOG,8);
    close(LOG);
    if($find){&main("メールアドレス $QUERY{mail} をご購読解除しました");}
    else{&main("メールアドレス$QUERY{mail}は登録されていません");}

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません