我是php的新手,我需要一点澄清。香港专业教育学院搜索谷歌,但太多的结果,没有明确指出我的错误。因为我没有得到任何错误,我不知道发生了什么。
我得到的错误是这样的:
Warning: mail() expects parameter 1 to be string, array given in
如此冗长,这只是我的一小部分代码:
while( $sn_rowSelect = mysqli_fetch_array($sn_queryResult) ) {
mail($to,$subject,$mssg,'from:xyz');
}
if(mail($to,$subject,$mssg,'from:xyz')) {
echo "An e-mail was sent to $to with the subject: $subject";
} else {
echo "There was a problem sending the mail. Check your code and make sure that the e-mail address $to is valid";
}
我想要做的是,我有一个带有名称等的小型数据库,上面有这个循环,它假设虽然在$ sn_rowSelect中有一个名字,但是它给消息提供了它,基本上是通过电子邮件发送大量的电子邮件
错误说“期望字符串,数组给定'im假设意味着从DB获取的名称被作为一个相关的数组值获得,但是,不是它应该做什么?
提前感谢。
EDIT ***
$to = $sn_rowSelect;
$from = $_POST['sender'];
$mssg = $_POST['message'];
from和mssg,通过另一页上的表格填写。
答案 0 :(得分:2)
不,你应该将实际用户名称作为字符串而不是数组。
类似于$row['name']
的内容 - 执行价值的var_dump
以了解数据的存储方式,或print_r
。
答案 1 :(得分:1)
您必须在while循环中将$设置为参数 ,并且需要将其设置为字符串。如果您希望它有意义,您还需要在while循环中移动if
语句,并且您不能两次调用mail(),因为这将创建冗余电子邮件。
以下是您的固定代码:
$from = $_POST['sender'];
$mssg = $_POST['message'];
while($sn_rowSelect = mysqli_fetch_array($sn_queryResult) ) {
$to = sn_rowSelect['email']; //change 'email' to the name of column in db
$mailstatus = mail($to, $subject, $mssg, 'from:xyz');
if($mailstatus) {
echo "An e-mail was sent to $to with the subject: $subject\n";
}else{
echo "There was a problem sending the mail. Check your code and make sure that the e-mail address $to is valid\n";
}
}
答案 2 :(得分:1)
您似乎正在尝试将包含多封电子邮件的array
直接输入$to
。
您可以在mail
函数中输入多封电子邮件,但必须用逗号分隔。
所以改变这个:
mail($to,$subject,$mssg,'from:xyz');
为:
$to = implode(",",$to);
mail($to,$subject,$mssg,'from:xyz');
另外要小心,你正在之后检查你发送的邮件是这样的:
if(mail($to,$subject,$mssg,'from:xyz')) {
这实际上会再次发送电子邮件 。如果要检查电子邮件功能是否正常,请将if
语句添加到原始代码中。