php ошибка с mail () требует уточнения - PullRequest
1 голос
/ 15 августа 2011

Я новичок в php, и мне нужно немного разъяснений. Я искал в Google, но слишком много результатов, ни один не может четко определить, что не так с моим. так как я не получаю никаких ошибок, я не уверен, что происходит.

ошибка, которую я получаю, такова:

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, чтобы передать ему сообщение, по сути, отправив по электронной почте всю электронную почту .

ошибка говорит "ожидает строку, массив, данный", если предположить, означает, что имя, полученное из БД, получено как значение ассоциативного массива, но разве это не то, что он должен делать?

заранее спасибо.

EDIT ***

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

from и mssg, заполняются через форму на другой странице.

Ответы [ 3 ]

2 голосов
/ 15 августа 2011

Нет, вы должны получить фактическое имя пользователя в виде строки, а не массива.

Что-то вроде $row['name'] - введите var_dump вашего значения, чтобы узнать, как хранятся данные, или print_r.

1 голос
/ 15 августа 2011

Похоже, вы пытаетесь ввести 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 в исходный код.

1 голос
/ 15 августа 2011

Вы должны установить $ для параметра внутри цикла while, и вам нужно установить его в строку.Вам также необходимо переместить оператор if в цикл while, если вы хотите, чтобы он имел смысл, и вы не можете дважды вызывать 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";
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...