我经营一个小型网站,我的用户要求我建立一个邮件列表。我找到了一个简单的免费脚本,可以将电子邮件地址添加到email.txt
CSV 格式的受保护文本文件中:
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 日更新 3 :
我尝试了高级代码,只是得到了一个空白页,所以我回到了我的版本。这是我现在拥有的代码:
<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>
这完美地工作。但是,它会在页面加载时显示“失败”消息,而不是在按下提交按钮后触发加载时显示。
如果可能,我想保留原始代码,只是重新排列,使其只显示“成功!” 或“失败!” 一旦它执行了代码。
我希望回显消息成为页面上执行的最后一个脚本。