PHP在Post文件中删除匹配的数组元素

PHP在Post文件中删除匹配的数组元素,php,jquery,Php,Jquery,我相信这是非常接近,但我不断得到一个500错误。我有一个html表单,您在其中键入一封电子邮件,然后将其发布到一个名为unsubscribe.php的文件中,该文件假定会找到一个匹配项,然后将其从文件中删除。我哪里做错了?它可以告诉您文件中是否有人,但问题是删除匹配的记录 <?php if (isset($_POST['email'])) { $email = $_POST['email']; if (filter_var($email, FILTER_VALIDATE_E

我相信这是非常接近,但我不断得到一个500错误。我有一个html表单,您在其中键入一封电子邮件,然后将其发布到一个名为unsubscribe.php的文件中,该文件假定会找到一个匹配项,然后将其从文件中删除。我哪里做错了?它可以告诉您文件中是否有人,但问题是删除匹配的记录

<?php
if (isset($_POST['email'])) {
    $email = $_POST['email'];
    if (filter_var($email, FILTER_VALIDATE_EMAIL)) {
        $file = file_get_contents(__DIR__.'/subscribers.php');
        $file = explode(', ', $file);

        if (in_array($email, $file)) {
            $fopen = fopen(__DIR__.'/subscribers.php', 'r+');
            if(($key = array_search($email, $file)) !== false) {
                unset($file[$key]);
                fwrite($fopen, $file);
                fnclose($fopen);
                echo "successfully unsubscribed ${email}";
            }
            echo "error unsubscribing ${email}";
        } else {
            echo "no matching email found";
        }
    } else {
        echo "email address invalid";
    }
}
?>

    //unsubscription action
    $('#submit0').click(function () {
        var email = $('#email0').val().toLowerCase();
        $.ajax({
            type: 'POST',
            url: 'unsubscribe.php',
            data: {email: email},
            success: function(data) {
                $('#result0').hide();
                $('#result0').html(data);
                $('#result0').fadeIn();
            }
        });
    });

//退订行动
$('#submit0')。单击(函数(){
var email=$('#email0').val().toLowerCase();
$.ajax({
键入:“POST”,
url:“unsubscribe.php”,
数据:{email:email},
成功:功能(数据){
$('#result0').hide();
$('#result0').html(数据);
$('#result0').fadeIn();
}
});
});

您在
fnclose
中有一个输入错误,它应该是
fclose
。但更好的方法是使用
文件内容

另外,您需要调用
内爆()
$file
转换回字符串。错误消息应该在
else
语句中

您不需要在数组()中同时使用
array\u search()


日志中是否有错误报告?
fwrite($fopen,$file)是错误的
$file
是一个数组,
fwrite()
的第二个参数应该是字符串。它应该是
fwrite($fopen,introde(',',$file))
但致命错误是由于
fnclose($fopen)
引起的。函数名为
fclose()
。在上面的示例中,我收到一个POST unsubscribe 500错误。为什么不使用
file\u put\u contents()
而不是
fopen()
fwrite()
fclose()
?没有错误,它返回成功取消订阅,但不删除subscribers.php文件中的匹配记录。如果您以前运行过该脚本,则可能已损坏该文件。当您忘记使用
内爆()
时,它将文件内容替换为单词
数组
。我也这么认为,但只是正确的内容“,test@gmal.com,“您试图删除的电子邮件是什么?请注意,您在
gmal
中有一个输入错误,它不是
gmail
该电子邮件是当前的-新键盘缺少键-该文件包含,test@gmail.com,当我用test@gmail.com在it中-它成功取消订阅,但不会从文件中删除电子邮件。
        if if(($key = array_search($email, $file)) !== false) {
            unset($file[$key]);
            if (file_put_contents(__DIR__.'/subscribers.php', implode(', ', $file))) {
                echo "successfully unsubscribed ${email}";
            } else {
                echo "error unsubscribing ${email}";
            }
        } else {
            echo "no matching email found";
        }