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