我运行一个小网站,我的用户请求我设置一个邮件列表。我发现了一个简单的免费脚本,将电子邮件地址受保护的文本文件,email.txt
,CSV格式:PHP脚本从逗号分隔列表中删除电子邮件地址
[email protected],[email protected],blah,blah,blah
脚本完美的作品。但是,当用户取消列表订阅时,通过文件手动删除电子邮件地址是一件麻烦事。我需要创建一个简单的脚本来删除电子邮件地址。
我只想要一个简单的PHP脚本,显示一个文本框,以便用户可以输入他们的电子邮件地址,然后单击“取消通讯”按钮。该脚本应该搜索文本文件,找到给定的电子邮件地址并将其删除,并删除它的尾部逗号。
例如,说的email.txt
内容是
[email protected],[email protected],[email protected]
如果键入“[email protected]”成我想要的脚本中显示的文本框,我想这个文件,看起来像这样:
[email protected],[email protected]
更新:我想这个代码:
<?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);
?>
这工作就去掉了E-mail地址去,但没有公布(回波)。我想根据脚本是否成功地在列表中找到$email
并删除它,说出“该电子邮件未订阅”或“您已被删除”。
更新3 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>
这很好用。但是,它在加载页面时显示“失败”消息,而不是在触发加载时按下提交按钮后显示。
如果可能,我想保留原始代码,只需重新排列,以便它只显示“成功!”或“失败!”一旦它执行了代码。
我想echo消息是页面上执行的最后一个脚本。
[PHPList(http://www.phplist.com/) – hakre 2011-12-30 16:14:21
它看起来像你应该有一个解析器错误的'$ _POST ['email']'行。 – 2011-12-30 20:32:14
你会如何建议我编码,以消除错误?感谢队友 – 2011-12-30 20:45:03