繁体   English   中英

PHP mysql选择rand()行

[英]PHP mysql select with rand() rows

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

我在名为email_list数据库中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);

您能告诉我我的代码有什么问题吗,是我的while语句吗?

我要解决的问题是,当它发送电子邮件时,会发送到这5条具有不同trackCodes电子邮件

我认为我迷失了自己的流程和逻辑。

多谢你们

尝试将其更改为:

$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扩展名。 相反,应使用MySQLiPDO_MySQL扩展。

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

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

PS:使用更好的mysql扩展PDOMysqli ),使用更好的转义或准备好的语句来插入数据。 看起来您的代码仅用于学习目的,在这种情况下,请始终学习更好的东西。 万一用于生产, 那是非常非常脆弱的!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM