Я запустил небольшой веб-сайт, и мои пользователи попросили настроить список рассылки. Я нашел простой бесплатный скрипт, который добавляет адреса электронной почты в защищенном текстовый файл, 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]
UPDATE: Я попробовал этот код:
<?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();
}
?>
Этот код даже не показывает форму.
UPDATE 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
в списке и удаляет его.
UPDATE 3 31 декабря 2011:
Я попробовал расширенный код и только что получил пустую страницу, поэтому я вернулся к моей версии. Вот код, который у меня есть сейчас:
<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!" как только он выполнил код.
Я бы хотел, чтобы эхо-сообщения были последним скриптом, выполненным на странице.
[PHPlist] (http://www.phplist.com/) – hakre
Похоже, что вы должны иметь синтаксическую ошибку с вашим '$ _POST ['email']' строка. –
как бы вы предлагаете мне это сделать, чтобы удалить ошибки? спасибо mate –