2014-01-23 8 views
0

OK У меня есть простая почта, где я пытаюсь отправить по электронной почте все мои члены на основе простого запроса. Проблема в том, что я должен что-то пропускать из-за формы, просто перезаряжаемой, и доза не посылает ничего.простой mailto интеграционный запрос

email.php

<form method="post" action="massemail.php"> 

     Subject:</br> 
     <input type="text" name="subject" /><br /> 

     Message:</br> 
     <textarea name="details"></textarea><br /> 

     <input type="submit" value="Send"/> 
    </form> 

massemail.php

require 'core/init.php'; 
require_once "email.php"; 

$message = check_input($_POST['details']); 
$subject = check_input($_POST['subject']); 

$results = mysql_query('SELECT email from users'); 

while(list($email) = mysql_fetch_row($results)) 
{ 
    mail($email, '$subject', '$message'); 
} 

попытались

<?php 
require 'core/init.php'; 
require_once "email.php"; 

$message = "test"; 
$subject = "123"; 

if ($results = mysql_query('SELECT email from users')) { 

    while(list($email) = mysql_fetch_row($results)) { 

    mail($email, '$subject', '$message'); 
} 
?> 
+1

действительно ли это что-то делает? вы пытались откликнуться на адрес электронной почты пользователей только для отладки в цикле? –

+0

его просто показывая, что форма вообще не выполняет никаких действий – Beep

ответ

1

Во-первых, вам нужно извлечь адреса электронной почты из каждой строки вместо того, чтобы использовать саму строку. Это может быть легко достигнуто с помощью $row[0] в вашем случае, так как ваш запрос всегда имеет один столбец, хотя вам, вероятно, следует попытаться использовать mysqli вместо устаревшего mysql.

Во-вторых, я бы рекомендовал позвонить mail()один раз только, чтобы отправить одно сообщение всем людям, а не одно письмо на одного человека! Почему вы хотите отправить тот же адрес электронной почты снова и снова, как это? Можно использовать список писем, разделенных запятыми, как показано на PHP: mail - Manual.

Если вы хотите использовать MySQL, ваш код может выглядеть примерно так с PHP Arrays и удобной implode функции:

require 'core/init.php'; // calls mysql_connect(...) 
require_once "email.php"; 

$message = check_input($_POST['details']); 
$subject = check_input($_POST['subject']); 

if (mysql_ping()) { echo 'Ping worked'; } else { echo 'Ping failed'; } // DEBUG 
$results = mysql_query('SELECT email from users'); 

$emails = array(); 
while($row = mysql_fetch_row($results)) 
{ 
    array_push($emails, $row[0]); 
} 
echo implode(", ", $emails); // DEBUG 
if (!empty($emails)) { 
    mail(implode(", ", $emails), $subject, $message); 
} 

мне кажется (в то время как в чате с вами), что весь механизм HTML форм + PHP (GET и/или POST) вам непонятно. Вероятно, вы должны прочитать обо всем этом немного, и, надеюсь, код ниже поможет вам:

<?php 
// Put requires here 
?> 
<html> 
<head> 
<title>Test</title> 
</head> 
<body> 
<h1>Demo form methods</h1> 
<?php 
if ((isset($_POST['subject']) && isset($_POST['body'])) || (isset($_GET['subject']) && isset($_GET['body']))) { 

    // Your code for sending an email could be here 
    ?> 

<h2>RESULTs</h2> 
<ul> 
    <li>POST 
     <ul> 
      <li>suject: <?php echo $_POST['subject']; ?></li> 
      <li>suject: <?php echo $_POST['body']; ?></li> 
     </ul> 
    </li> 
    <li>GET 
     <ul> 
      <li>suject: <?php echo $_GET['subject']; ?></li> 
      <li>suject: <?php echo $_GET['body']; ?></li> 
     </ul> 
    </li> 
</ul> 

    <?php 
    // The code above is just to show you how the variables in GET/POST work 

} else { 

    // Below are two formulaires, you can keep one only of course! 
    ?> 

<h2>FORMs</h2> 
<h3>GET method</h3> 
<form method="get" action="email.php"> 
    Subject: <input name="subject" type="text"><br> 
    Body: <input name="body" type="text"><br> 
    <input type="submit" value="Send with GET"> 
</form> 
<h3>POST method</h3> 
<form method="post" action="email.php"> 
    Subject: <input name="subject" type="text"><br> 
    Body: <input name="body" type="text"><br> 
    <input type="submit" value="Send with POST"> 

</form> 
<?php } ?> 
</body> 
</html> 
+0

+1 для получения информации с ответом, спасибо. – Beep

+0

Если вы хотите попробовать и добавить выражения 'echo', чтобы увидеть, что происходит, вы можете выбрать:' echo $ row [0] 'внутри цикла while или' echo implode (",", $ emails) 'один раз после цикл while. Дайте мне знать, как это происходит, и если все это сработает для вас: примите ответ! ;) – snooze92

+0

, когда он работает, я согласен с ответом, на данный момент он не работает, но попробует выполнить эхо-запрос. – Beep

0

Это не посылать электронную почту, потому что вы не правильно разбираете результаты запроса.

//connect to MySQL using following line. This is the NEW and better way of doing it. 
$mysqli = new mysqli("localhost", "my_user", "my_password", "world"); 

if ($result = $mysqli->query('SELECT email from users')) { 
     while($row = $result->fetch_object()){ 
      mail($row->email, $subject, $message); 
     } 
    } 
    $result->close(); 
+0

Я знаю, что OP не должен использовать устаревшие функции 'mysql_ *', но вы можете подумать о предоставлении своего ответа в этом контексте, так как прямо сейчас он не будет о чтобы использовать код в вашем примере, даже если вы правильно продемонстрировали проблему. –

+0

спасибо Майку, я сделал обновление. – vick

+0

Спасибо, что показали мне, что какой-то mysqli все еще не работает, но я собираюсь запустить эхо в запросе, посмотрите, что подходит – Beep

Смежные вопросы