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
更新:我尝试了这段代码:
<?php
function showForm() {
echo '
<form method="post" action="">
Email Address: <input type="text" name="email"> <br />
<input type="submit" value="Cancel Newsletter" name="submit">
</form>
';
}
$_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:
编写此脚本的另一种尝试:
<?php
$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日更新:
我尝试了高级代码,只是空白页,所以我回到了我的版本.这是我现在拥有的代码:
<html>
<body>
<form method="post" action="">
<p>Email Address: <input type="text" name="email"></p>
<input type="submit" value="Cancel Newsletter" name="submit">
</form>
<?php
$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);
?>
</body>
</html>
这很完美.但是,在按下页面按钮后,页面加载时会显示“ 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....<br>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
<p>To cancel our Newsletter please enter your email address below....</p>
<p>
<form method="post" action="/cancel_submit.html">
<p>Email Address: <input type="text" name="email"></p>
<input type="submit" value="Cancel Newsletter" name="submit">
</form>
> cancel_submit.html
<?php
$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);
?>
<?php
if ($str1 > $str2) {
echo ("You Have Successfully Unsubscribed From Our Newsletter....<br>You Will Not Receive Any More Emails From Us.");
} else {
echo ("The Email Address You Specified Is Not In Our Mailing List.");
}
?>
<p>
<p>Please wait to be re-directed or <a href="http://the-flying-shuttle.com/"><u>CLICK HERE.</u></a>
</p>
编辑:
我做了一些改进.我补充说:
$email = strtolower($email);
到电子邮件添加脚本和电子邮件删除脚本.这会将所有输入的字符转换为小写形式;以前,它不会删除与大列表不同的情况下键入的电子邮件.
这搞砸了确认消息命令,所以我将其更改为
if (str_replace($oldWord , $newWord , $basetext)) {
echo ("You Have Successfully Unsubscribed From Our Newsletter....<br>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