用mysnd()行选择PHP mysql

时间:2012-08-26 11:14:34

标签: php mysql while-loop

我有这个小逻辑,我不知道如何解决它。

我的数据库名为email_list 5条记录

然后我就有了trackCode 15条记录。

我的问题就是当我点击email all时,它会收到我的email_list的电子邮件,其中有5条记录,然后trackCode会将其发送给这些电子邮件。

我有这个代码

$sql = mysql_query( "SELECT * FROM code WHERE track = '$_POST['track']' " ) or die ( mysql_error() );
$row = mysql_fetch_array( $sql );
$subject = 'You have received your code';
$message = '
Your code is '.$row['trackCode'].'

Please click here to activate your code - click here -

management
';

$header = "From: noreply@fastindexer.com \r\n";
$header .= 'Content-type: text/html' . "\r\n";

$sqlemail = mysql_query( "SELECT * FROM email_list ORDER BY rand() LIMIT 15" ) or die ( mysql_error() );
while ( $rowemail = mysql_fetch_array( $sqlemail ) ) {
  $to = $rowemail['emails'];
}
$send_contact = mail($to,$subject,$message,$header);

你能告诉我我的代码有什么问题吗?是我的声明吗?

我试图解决的问题是,当它发送电子邮件时,会发送给那些具有不同trackCodes

的5封电子邮件

我认为我的过程和逻辑都失败了。

谢谢你们

2 个答案:

答案 0 :(得分:2)

尝试将其更改为:

$sqlemail = mysql_query("SELECT * FROM email_list ORDER BY rand() LIMIT 15") or die ( mysql_error());

while($rowemail = mysql_fetch_assoc($sqlemail))
{
    mail($rowemail['emails'], $subject, $message, $header);
}

而且:

$sql = mysql_query("SELECT * FROM code WHERE track = '$_POST['track']'") or die (mysql_error());

应该是:

$sql = mysql_query("SELECT * FROM code WHERE track = '".mysql_real_escape_string($_POST['track'])."'") or die (mysql_error());

重要:

  但是,重要的是要指出使用的   不鼓励mysql扩展。相反,MySQLi或   应该使用PDO_MySQL扩展名。

答案 1 :(得分:1)

看起来你在每次迭代中将$to变量设置为电子邮件ID,但从未使用它,直到while循环之后。这意味着只有结果中的最后一封电子邮件ID才会被邮寄。尝试将邮件移入while循环。

while ( $rowemail = mysql_fetch_array( $sqlemail ) ) {
    $to = $rowemail['emails'];
    $send_contact = mail($to,$subject,$message,$header);
}

PS:使用更好的mysql extensionPDOMysqli),使用更好的转义或准备好的语句来插入数据。看起来你的代码只是为了学习目的,在这种情况下,总是学习什么更好。如果它用于生产,它非常脆弱!