分离值时PHP foreach问题
我基本上是在尝试创建月底表单日期=今天日期的位置,但在本例中,opmanager存储在2016年9月22日,用户获取该电子邮件,并且foreach opmanager(月底日期为2016年9月22日)发送电子邮件。我完成的电子邮件脚本已准备好在echo中实现 但是,如果db获取两个不同的opmanager,则只有一个manager获取电子邮件,并且没有发送给foreach opmanager 代码如下:分离值时PHP foreach问题,php,mysql,foreach,Php,Mysql,Foreach,我基本上是在尝试创建月底表单日期=今天日期的位置,但在本例中,opmanager存储在2016年9月22日,用户获取该电子邮件,并且foreach opmanager(月底日期为2016年9月22日)发送电子邮件。我完成的电子邮件脚本已准备好在echo中实现 但是,如果db获取两个不同的opmanager,则只有一个manager获取电子邮件,并且没有发送给foreach opmanager 代码如下: <?php include ("../dbconnect.php"); $sql
<?php
include ("../dbconnect.php");
$sql='SELECT * FROM `clients` WHERE endofmonthform="22/09/2016"'; //TODAYS DATE BACK HERE!
$result=mysql_query($sql);
while($row=mysql_fetch_array($result)){
$enddate = $row['endofmonthform']; // End
$startdate = $row['startofmonthform']; // Start
$email = $row['email']; //Email to send email to
$id = $row['id'];
$formlevel = $row['formlevel']; //To update and check formlevel
$sitegroupname = $row['mastersite'];
$manager = $row['opmanager'];
}
$query="SELECT userEmail FROM `users` WHERE userName='".$manager."'";
$resultSet = mysql_fetch_all($query);
foreach ($query as $row) {
echo $row['userEmail']; //Where send email function will be
}
?>
我需要它向每个经理发送电子邮件除了编码错误之外,它只向单个经理发送电子邮件的原因是因为经理位只执行一次。您的第二个问题:
SELECT userEmail FROM `users` WHERE userName='".$manager."'
将返回一组用户,其中用户名等于上一个循环中的最后一个$manager,因为此代码位不在第一个循环中
只要在循环中移动这段代码,就可以解决最初的问题。其余修复程序可在下面找到:
include ("../dbconnect.php");
$sql='SELECT * FROM `clients` WHERE endofmonthform="22/09/2016"'; //TODAYS DATE BACK HERE!
$result=mysql_query($sql);
while($row=mysql_fetch_array($result)){
$enddate = $row['endofmonthform']; // End
$startdate = $row['startofmonthform']; // Start
$email = $row['email']; //Email to send email to
$id = $row['id'];
$formlevel = $row['formlevel']; //To update and check formlevel
$sitegroupname = $row['mastersite'];
$manager = $row['opmanager'];
$query="SELECT userEmail FROM `users` WHERE userName='".$manager."'";
$result=mysql_query($query);
while($row=mysql_fetch_array($result)){
echo $row['userEmail']; //Where send email function will be
}
}
也就是说,这仍然是糟糕的代码。。。。它使用了一个不推荐使用的API(mysql),并且容易受到SQL注入的攻击。请查看或了解更好的API和SQL注入问题
如果您想轻松地使用带有php的数据库,可以查看我的PDO包装器:
编辑:
正如在评论中指出的,我们可以,实际上应该,使用连接来获取这些数据。在这一点上,TS/OP可能需要理解一点,但为了完整起见,我将添加它:
include ("../dbconnect.php");
$sql='SELECT c.endofmonthform, c.startofmonthform, c.email, c.id, c.formlevel, c.mastersite, c.opmanager, u.userEmail FROM `clients` as c LEFT JOIN `users` as u on c.opmanager = u.userName WHERE endofmonthform="22/09/2016"'; //TODAYS DATE BACK HERE!
$result=mysql_query($sql);
while($row=mysql_fetch_array($result)){
$enddate = $row['endofmonthform']; // End
$startdate = $row['startofmonthform']; // Start
$email = $row['email']; //Email to send email to
$id = $row['id'];
$formlevel = $row['formlevel']; //To update and check formlevel
$sitegroupname = $row['mastersite'];
$manager = $row['opmanager'];
echo $row['userEmail']; //Where send email function will be
}
您正在尝试循环字符串,而不是结果集。此外,你需要去拿它。在第一个查询(
while($row=mysql\u fetch\u array($resultSet)){
)mysql\u*
函数在PHP5.5中被弃用(在PHP7中被完全删除),如果可以的话,您应该选择另一个允许您使用的API(在处理用户输入时确实应该使用)是的,do$fetch=$resultSet->fetch_assoc();而不是foreach($fetchas$row){echo$row['userEmail'];}我的错误我有它mysql\u fetch\u all我现在会编辑它这是因为你的另一个查询在第一个while循环之外,$manager
在你的第二个查询中只会有最后一个值。你可以在第一个查询中使用一个子查询,在一个循环中完成所有事情。循环通过sql resultset,然后当从另一个表循环匹配记录时,这不是一个好办法。你听说过sql中的join
吗?举个例子@shadow?我上传了我希望运行的完整脚本。我使用了一个smtp脚本,Rick van Liehout使用的代码确实拉取了每封电子邮件。但是这并不能解决我的问题…请ee@Shadow我当然有,但是我觉得没有必要把它包括在内,因为已经有很多错误了。@user3473873,什么不起作用了?我的答案已经回答了你最初提出的问题。@RickvanLieshout是正确的,谢谢你。但是如果你看到我的pastebin,我很难暗示我仍然非常确定我需要一个foreach$opemail或$manager发送电子邮件是必需的pastebin.com/7PD2MyuC