2011-08-15 47 views
1

即时通讯新的PHP和我需要一些澄清。虽然搜索谷歌,但太多的结果,没有明确识别什么是我的错。因为我没有得到任何错误我不知道最新情况发生。PHP错误与邮件()需要澄清

错误即时得到是这样的:

Warning: mail() expects parameter 1 to be string, array given in 

所以longstory总之,这是我的一小段代码:

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中有一个名字,给它提供消息,实质上是通过电子邮件发送大量电子邮件。

错误说:“预计字符串数组给定”聊天假定机构从数据库得到的名称得到作为assosiative数组值,但心不是什么它应该做的?

在此先感谢。

编辑***

$to = $sn_rowSelect; 
$from = $_POST['sender']; 
$mssg = $_POST['message']; 

从和mssg,通过另一个页面上的表单填写。

+0

你在哪里设置'$ to'变量?因为它没有在你显示的代码中设置。 –

+0

嗨,埃米尔,对不起。我编辑我的帖子上面,但要保护您的问题,$ to = s到$ sn_rowSelect。 – somdow

+0

$ sn_rowSelect是一个数组(http://php.net/mysqli_fetch_array)。所以你试图传递一个字符串的数组insead(邮件函数的第一个参数)。你在用什么SQL查询? – realmfoo

回答

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

不,你应该得到的实际用户ñ ame作为一个字符串,而不是一个数组。

类似$row['name'] - 做你的价值的var_dump找出数据如何存储,或print_r

+0

嘿囚犯,好吧,所以我不知道什么var_dump是,谷歌搜索它,测试它,我得到了一些结果。感谢那。现在,就实际转储而言,我得到7个转储结果,这是我数据库中7个电子邮件地址。所以即时通讯假设它的工作,因为它将数据库中的所有地址传递给我的应用程序,但仍然没有解释“mail()期望参数1是字符串,数组给定的意思”,我仍然得到 – somdow

+0

这是因为你'将数组传递给'mail()'的'$ to'参数。你应该传递类似'$到['email_column_in_database']'的东西 – Prisoner

1

好像你试图输入一个包含多封电子邮件直接进入$toarray

可以输入多个电子邮件到mail功能,但它们必须用逗号分隔。

所以改变这样的:

mail($to,$subject,$mssg,'from:xyz'); 

到:

$to = implode(",",$to); 
mail($to,$subject,$mssg,'from:xyz'); 

另外要小心,你正在做一个检查后,您发送的邮件是这样的:

if(mail($to,$subject,$mssg,'from:xyz')) { 

这实际上会再次发送电子邮件。如果您想检查您的电子邮件功能是否正常工作,请将if声明添加到原始代码中。