php怎么删除邮件,PHP脚本,用于从逗号分隔的列表中删除电子邮件地址

我经营一个小型网站,我的用户要求我设置一个邮件列表.我找到了一个简单的免费脚本,该脚本以CSV格式将电子邮件地址添加到受保护的文本文件email.txt中:

email1@yahoo.com,email2@yahoo.com,blah,blah,blah

该脚本可以完美运行.但是,当用户取消列表订阅时,浏览文件以手动删除电子邮件地址是很麻烦的.我需要创建一个简单的脚本来删除电子邮件地址.

我想要的只是一个简单的PHP脚本,它显示一个文本框,以便用户可以输入其电子邮件地址并单击“取消新闻稿”按钮.该脚本应搜索文本文件,找到给定的电子邮件地址,并将其及其尾部逗号删除.

例如,假设email.txt的内容是

john@yahoo.com,peter@yahoo.com,steve@yahoo.com

如果在所需脚本显示的文本框中键入“ peter@yahoo.com”,则我希望文件看起来像这样:

john@yahoo.com,steve@yahoo.com

更新:我尝试了这段代码:

function showForm() {

echo '

Email Address:

';

}

$_POST['email']

$to_delete = 'email';

$file = array_flip(explode(",",file_get_contents("email.txt")));

unset($file[$to_delete]);

file_put_contents("email.txt",implode(",",array_flip($file));

if(!$file_put_contents) {

die('Error occured');

} else {

echo 'Your subscription has been cancelled. You will not receive any further emails from us.';

}

}

} else {

showForm();

}

?>

此代码甚至不显示该表单.

更新2:

编写此脚本的另一种尝试:

$email = $_POST["email"];

$text = file_get_contents("email.txt");

$oldWord = "$email";

$newWord = "";

$text = str_replace($oldWord , $newWord , $text);

$fp = fopen('email.txt', 'w');

fwrite($fp, $text);

fclose($file);

?>

就删除电子邮件地址而言,此方法有效,但是没有通知(回声).我希望它根据脚本是否在列表中成功找到并删除了$email来说“未订阅电子邮件”或“您已被删除”.

2011年12月31日更新:

我尝试了高级代码,只是空白页,所以我回到了我的版本.这是我现在拥有的代码:

Email Address:

$email = $_POST["email"];

$basetext = file_get_contents("email.txt");

$oldWord = "$email";

$newWord = "";

$text = str_replace($oldWord , $newWord , $basetext);

$str1 = $basetext;

// echo strlen($str1);

$str2 = $text;

// echo strlen($str2);

$fp = fopen('email.txt', 'w');

fwrite($fp, $text);

if ($str1 > $str2) { // This part handles the success/fail message

echo ("Success!");

} else {

echo ("Fail!");

}

fclose($file);

?>

这很完美.但是,在按下页面按钮后,页面加载时会显示“ fail”消息,而不是触发加载时.

如果可能的话,我想保留原始代码,只是重新排列以便只显示“成功!”.或“失败!”一旦执行了代码.

我希望回显消息是页面上执行的最后一个脚本.

解决方法:

该答案最初由OP附加到问题正文中.

首先,我将表单移至/cancel.html并使用了< form action =“ / cancel_submit.html”>.

(在我编写.html的地方,这只是为了演示,因为我的服务器配置为不使用页面扩展,也可以在.html页面上解析PHP.)

然后,将PHP代码放入/cancel_submit.html页面并移动

if ($str1 > $str2) {

echo ("You Have Successfully Unsubscribed From Our Newsletter....
You Will Not Receive Any More Emails From Us.");

} else {

echo ("The Email Address You Specified Is Not In Our Mailing List.");

}

到另一组PHP括号.

这意味着电子邮件地址是通过POST发送到另一页的,然后该页面从列表中实际删除了电子邮件地址,然后检查是否删除了地址以提供确认消息.

我还为$oldword =“ $email”添加了两个逗号.使它成为$oldword =“,$email”;因此,只有在两边都有逗号的情况下,它才会查找输入到电子邮件框中的文本.这解决了有人提交一半电子邮件地址的情况.

我还更改了$newWord =“”;到$newWord =“,”;因此,如果脚本删除了两边带有逗号的电子邮件地址,则其旁边的两个电子邮件地址将不会被逗号分隔.

这是我现在两个页面都有的代码:

> cancel.html

To cancel our Newsletter please enter your email address below....

Email Address:

> cancel_submit.html

$email = $_POST["email"];

$basetext = file_get_contents("email.txt");

$oldWord = ",$email,";

$newWord = ",";

$text = str_replace($oldWord , $newWord , $basetext);

$str1 = $basetext;

// echo strlen($str1);

$str2 = $text;

// echo strlen($str2);

$fp = fopen('email.txt', 'w');

fwrite($fp, $text);

fclose($file);

?>

if ($str1 > $str2) {

echo ("You Have Successfully Unsubscribed From Our Newsletter....
You Will Not Receive Any More Emails From Us.");

} else {

echo ("The Email Address You Specified Is Not In Our Mailing List.");

}

?>

Please wait to be re-directed or CLICK HERE.

编辑:

我做了一些改进.我补充说:

$email = strtolower($email);

到电子邮件添加脚本和电子邮件删除脚本.这会将所有输入的字符转换为小写形式;以前,它不会删除与大列表不同的情况下键入的电子邮件.

这搞砸了确认消息命令,所以我将其更改为

if (str_replace($oldWord , $newWord , $basetext)) {

echo ("You Have Successfully Unsubscribed From Our Newsletter....
You Will Not Receive Any More Emails From Us.");

} else {

echo ("The Email Address You Specified Is Not In Our Mailing List.");

}

标签:php,mailing-list

来源: https://codeday.me/bug/20191010/1886080.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值