编程语言
首页 > 编程语言> > 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

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

<?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