2010-11-18 10 views
0

以下のコードでは、sqlをphpMyAdminで実行でき、結果が返されます。ブラウザ上でPHPエラーは発生しません。私はそれが電子メールを送信するように見えることはできません。PHP - mysqlと電子メールからデータを引き出す

<?php 
ini_set('display_errors',1); 
error_reporting(E_ALL); 
include('database.inc.php'); // Our database connectivity file 
?> 
<?php 
$reminder_date = "t1.`reminder_date`"; 
$email = "t1.`reminder_email`"; 
$reminder_name = "t1.`reminder_name`"; 
$reminder_details = "t1.`reminder_desc`"; 
$server = "[email protected]"; 

$sql = "SELECT t1.`reminder_id` , t1.`reminder_name` , t1.`reminder_desc` , t1.`reminder_date` , t1.`reminder_email` , lp4.`email` AS `lp_reminder_email` 
FROM `reminder_events` AS t1 
LEFT OUTER JOIN `authorize` AS lp4 ON (t1.`reminder_email` = lp4.`email`) 
WHERE reminder_date <= NOW() 
ORDER BY `reminder_date` ASC"; 

$result = mysql_query($sql) or die(mysql_error()); 

while($row = mysql_fetch_array($result)) 
?> 
<?php 
$to = "$email"; 
$from = "$server"; 
$headers = "$from"; 
$subject = "$reminder_name"; 
$body = "$reminder_details"; 


{ 
$send = mail($to, $subject, $body, $headers); 
} 

?> 

誰かが間違っていることを教えてください。おかげさまで

+1

メール機能の下にある@を削除してもう一度やり直してください。 "@"はエラー抑制演算子であり、その前に置かれた関数はerror_reportingステータスに関係なくエラーを投げません。 – castis

+0

私はそれをして、まだ電子メールを送信していません。エラーも投げられません。ありがとう。 – KAH

+0

は、最初に実行しているブロック全体をブロックしていますか? – castis

答えて

0

クエリ結果を適切にフェッチしていません。 mysql_fetch_array()は結果行を配列として返します。$ row [0]は結果の最初の列、$ row 1は第2列などです。

同様に、フェッチループ不適切に行が検索されることはありません。本質的に、あなたの電子メールは "t1 ` .reminder_email"に送信されています。 $ヘッダも無効です。あなたはメールヘッダを台無しにする必要がある場合は、その後、私はあなたが正しくなくても、あなたのためにそれらを設定することができ、そのようなPHPMailerSwiftMailerとして適切なメールパッケージを、使用することをお勧め

<?php 
    include('database.inc.php'); // Our database connectivity file 
    $server = "[email protected]"; 

$sql = <<<EOL 
SELECT t1.reminder_id AS reminder_id, t1.reminder_name AS reminder_name, 
    t1.reminder_desc AS reminder_desc, t1.reminder_date AS reminder_date, 
    t1.reminder_email AS reminder_email, lp4.email AS lp_reminder_email 
FROM reminder_events AS t1 
LEFT OUTER JOIN authorize AS lp4 ON (t1.reminder_email = lp4.email) 
WHERE reminder_date <= NOW() 
ORDER BY reminder_date ASC; 
EOL; 

$result = mysql_query($sql) or die(mysql_error()); 

while($row = mysql_fetch_assoc($result)) { 
    $to = $row['reminder_email']; 
    $subject = $row['reminder_name']; 
    $body = $row['reminder_desc']; 

    mail($to, $subject, $body); 
} 

:あなたのコードは次のようになります。きちんとした細部に対処する。あなたのコードで

、あなたが持っていた:

以下に解析し
while($row = mysql_fetch_array($result)) 
?> 
<?php 
$to = "$email"; 

:ので、見当違いの中括弧の

while($row = mysql_fetch_array($result)) { 
    $to = $email; 
} 

{})は、結果セット全体を無用に消費されましたループは$to = $emailであり、すべての行が無駄になった後までメールを送信することはありません。そのため、上記の元のフィールド名に$電子メールが残っていたので、 "t1.reminder_mail"という名前のユーザーにメールを送信しようとしていましたが、これはあなたのメールサーバーには間違いありません。

+0

それはうまくいった。これで電子メールが送信されます。神のお恵みがありますように。ありがとう。 – KAH

+0

ようこそ。これがすべて正常に機能していれば、この回答を受け入れることができます。 –

関連する問題