2013-08-29 4 views
-1

Проблема: нет выхода из эха, и нет отправленного сообщения, несмотря на запрос, возвращающий результаты.Функция электронной почты Php не работает по назначению?

Код:

<?php 
$link = mysqli_connect('localhost','USER','PASSWORD','MY-DB'); 

$result = mysqli_query($link, "'SELECT * FROM Current WHERE Status = 'IE-Window-Missing' order by location desc"); 
$headers = 'From: [email protected]' . "\r\n" . 
'Reply-To: [email protected]' . "\r\n" . 
'X-Mailer: PHP/' . phpversion(); 

if($result->num_rows >= 1){ 
$email = "[email protected]"; 
$subject = "One or more devices have IE windows missing"; 
$message='The following devices are having issues: "'; 

while($row=$result->fetch_assoc()) { 
$message.="{$row['Location']}\r\n"; 
} 

$message.="has been accepted for review at redacted."; 
if(mail($email, $subject, $message, $headers)) { 
echo "Winning"; 
    //mail successfully sent 
} else { 
    echo "fail"; 
} 
} 
?> 

Выполнение прямой SQL запросов к БД дает результаты ... что происходит здесь не так?

Спасибо,

+0

Ваш SQL имеет начальный '' '- вы никогда не проверяете, что ваш запрос работал, поэтому проблема в том, что вы ничего не получаете, чтобы отправить. Проверьте 'mysqli_error' или, по крайней мере, возвращаемое значение из' mysqli_query'; – andrewsi

+0

Я не знаю, что это * * неправильно? Вы не описываете проблему. – deceze

+0

почему он помечен mysql и mysqli? –

ответ

1
$result = mysqli_query($link, "'SELECT * FROM Current WHERE Status = 'IE-Window-Missing' order by location desc"); 

Вопрос заключается в том, что вы не проверять возвращаемое значение mysqli_query. Вы предполагаете, что это работает; и все ваши звонки echo находятся внутри проверки if($result->num_rows >= 1){. Поэтому, если ваш запрос не удался, он не достигнет ни одного из них.

Фактический вопрос:

mysqli_query($link, "'SELECT * 
        ^

У вас есть дополнительный ' в начале запроса на выборку. Это приведет к созданию недопустимой строки SQL, что означает, что запрос завершился неудачно; и нет возвращенных записей.

Вы должны проверить ответ на запрос с помощью mysqli_error и ответить соответствующим образом.

1

Php функция почты не работает как задумано?

Нет, это работает по назначению. Конечно и дано. Похоже, что у вас неправильные ожидания.

Возможно, проверка подлинности с помощью документов помогает?

+0

Как мои ожидания ошибаются? Я работал прямо из руководства по php и удалял другие примеры? –

+0

Вы имеете в виду, что прочитали страницу сверху вниз и посетили ссылки, приведенные для получения дополнительной информации? – hakre

+0

только потому, что ваш php-код «правильный» не означает, что ваша почтовая система верна. Сам PHP не отправляет почту. Он просто передает сообщение электронной почте в систему доставки. например локальный MTA в unix-ish-блоках или удаленный SMTP-сервер в системах Windows. –