分离值时PHP foreach问题

分离值时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

我基本上是在尝试创建月底表单日期=今天日期的位置,但在本例中,opmanager存储在2016年9月22日,用户获取该电子邮件,并且foreach opmanager(月底日期为2016年9月22日)发送电子邮件。我完成的电子邮件脚本已准备好在echo中实现

但是,如果db获取两个不同的opmanager,则只有一个manager获取电子邮件,并且没有发送给foreach opmanager

代码如下:

<?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