パスワード自動再発行
登録時のメールアドレスを入力すると、登録メールアドレスにパスワードが自動発行されます。
ここでは、情報更新時にログインする画面に設置しています。
ここでは、情報更新時にログインする画面に設置しています。
- ps_user.cgi 74行目
追加部分
elsif ($act eq "repass"){&repass;}
elsif ($act eq "repass1"){&repass1;}
- ps_user.cgi 417行付近(sub check)
↓を追加
パスワード再発行<br>
<form method="post" action="./ps_user.cgi">
登録メールアドレス <input type="text" name="cpass" size="25">
<input type="submit" value="再発行">
<input type="hidden" name="act" value="repass">
<input type="hidden" name="curl" value="$url">
</form>
追加場所
$message = <<EOD;
<b>$site[4]</b>の情報変更・削除を行います。<br>
<form method="post" action="./ps_user.cgi">
<input type="radio" name="cman" value="0" checked>登録者
<input type="radio" name="cman" value="1">管理人<br>
パスワード <input type="password" name="cpass" size=9 maxlength=8>
<input type="submit" value="認証">
<input type="hidden" name="act" value="change1">
<input type="hidden" name="curl" value="$url">
</form>
ココへ追加
EOD
- ps_user.cgi
どこでもいい。
サブルーチンの隙間に追加すればOK。
サブルーチンの隙間に追加すればOK。
#************************************************************
sub repass{
#パスワード再発行(ユーザー)
my (@site,@y2,$name,$email,$sitename,$siteurl,$newpass,$cryptpass,$buffer);
my $flag = 0;
my $a1="0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ./";
my $a2=substr($a1,int(rand(64)),1).substr($a1,int(rand(64)),1);
for(0 .. 7){$newpass.=substr($a1,int(rand(62)),1);}
$cryptpass = crypt($newpass,$a2);
&filelock("linkdata");
open (IO,"+<$linkdata");
while(<IO>){
if (index($_,">$curl<") != -1){
@y2=split(/<.?>/,$_);
if (($y2[5] eq $curl) && ($y2[10] eq $cpass)){
($name,$email,$sitename,$siteurl) = ($y2[9],$y2[10],$y2[4],$y2[5]);
for ($i=0;$i<=10;$i++){$buffer.="$y2[$i]<>";}
$buffer.=$cryptpass;
for ($i=12;$i<=$#y2-1;$i++){$buffer.="<c>$y2[$i]";}
push(@site,$buffer."<>\n");
$flag = 1;
}else{
push(@site,$_);
}
}else{
push(@site,$_);
}
}
if ($flag == 0){
close(IO);
&fileunlock("linkdata");
&error("登録時のメールアドレスを入力してください。");
}
truncate(IO,0);
seek(IO,0,0);
print IO @site;
close (IO);
&fileunlock("linkdata");
&repass_mail($name,$sitename,$siteurl,$newpass,$email) if ($mailcheck[4][0]);
$action = "パスワード再発行";
$message = <<EOD;
パスワード再発行が完了しました。<br>
<br>
<b>$sitename</b>の新しいパスワードは <font color="#ff0000"><b>$newpass</b></font> です。<br>
パスワードはログイン後変更できます<br>
<br>
EOD
&html_output;
}
##ここまで
全URL抜き出し
改造っていうかメール抜き出しをまるっとコピー
- ps_admin.cgi 68行付近
if ($pass ne $adminpass){&enter;}
の後に↓追加
elsif ($act eq "link1"){&link1;}
- ps_admin.cgi 670行付近
追加部分
<option value="mail1">全メールアドレス抜き出し
<option value="link1">全URL抜き出し
<option value="reset1">全アクセス数リセット
- ps_admin.cgi
サブルーチンの合間に追加
#******************************************************************************
sub link1{
#URL抜き出し
my $buffer;
&filelock("linkdata");
open(IN,"$linkdata");
while(<IN>){
$buffer.=(split(/<>/,$_))[5]."\n";
}
close(IN);
&fileunlock("linkdata");
chop($buffer);
chop($buffer);
chop($buffer);
$action = "URL抜き出し";
$message = <<EOD;
<br>
<form>
<textarea cols=60 rows=10>$buffer</textarea><br>
</form>
<br>
改行で抜き出し<br>
<form method="post" action="./ps_admin.cgi">
<input type="submit" value="戻る">
<input type="hidden" name="pass" value="$pass">
</form>
EOD
&html_output;
}
【応用】8行目
赤字の数字がデータの格納順序。
ここの数字を変更するだけでキーワード一覧サイト名一覧などにも応用可能。
赤字の数字がデータの格納順序。
ここの数字を変更するだけでキーワード一覧サイト名一覧などにも応用可能。
$buffer.=(split(/<>/,$_))[5]."\n";