Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/59.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 为foreach()提供的参数无效-但脚本仍然有效_Php_Mysql_Foreach - Fatal编程技术网

Php 为foreach()提供的参数无效-但脚本仍然有效

Php 为foreach()提供的参数无效-但脚本仍然有效,php,mysql,foreach,Php,Mysql,Foreach,建议的问题没有完全涵盖我的问题。我对这里的答案很感兴趣,但不太明白它如何适用于我的情况 我有下面的代码,它确实像我期望的那样工作;这段代码通过匹配上一页发布的隐藏表单id来构建电子邮件地址数组,在mysql数据库中查找“email”列 但是,我也得到了错误:第50行为foreach()提供的参数无效 谢谢你的帮助 function findEmail($id) { $mysqli = new mysqli(DBHOST,DBUSER,DBPASS,DB); if ($mysqli->con

建议的问题没有完全涵盖我的问题。我对这里的答案很感兴趣,但不太明白它如何适用于我的情况

我有下面的代码,它确实像我期望的那样工作;这段代码通过匹配上一页发布的隐藏表单id来构建电子邮件地址数组,在mysql数据库中查找“email”列

但是,我也得到了错误:
第50行为foreach()提供的参数无效

谢谢你的帮助

function findEmail($id) {
$mysqli = new mysqli(DBHOST,DBUSER,DBPASS,DB);
if ($mysqli->connect_errno) {
    error_log("Cannot connect to MySQL: " . $mysqli->connect_error);
    return false;
}

$query = "SELECT email FROM `Students` WHERE id = '$id'";
$result = $mysqli->query($query);
while($row = $result->fetch_array()) {
    $rows[] = $row;
}
$email = "";
foreach($rows as $row) {      //This is line 50
    $email = ($row['email']);
}
return $email;
}

$userId = array();
$userEmail = array();

foreach($_POST as $key => $value) {
array_push($userId, $value);
array_push($userEmail, findEmail($value));
}

这个错误不是致命的,你可以让它成为。。。但是,错误在于未定义$rows——您的查询必须返回空。

您可能在$rows数组中有一个元素为NULL,如果您使用var_dump($rows),是否有任何NULL?

您需要初始化可值的$rows,否则如foreach上所述“当您尝试对具有不同数据类型的变量或未初始化的变量使用时,将发出错误”

因此,在第50行之前,请注意:

$rows=null;

该功能可以这样选择:

function findEmail($id) {
$mysqli = new mysqli(DBHOST,DBUSER,DBPASS,DB);
if ($mysqli->connect_errno) {
    error_log("Cannot connect to MySQL: " . $mysqli->connect_error);
    return false;
}

$query = "SELECT email FROM `Students` WHERE id = '$id'";
$result = $mysqli->query($query);  

  $row = $result->fetch_array($query);

  return $row[0];
}
“提交”的值被发送到函数。添加下面的第二行解决了问题

foreach($_POST as $key => $value) {
    if($key == "submit") continue;
    array_push($userId, $value);
    array_push($userEmail, findEmail($value));
}

你在while中循环两次一个,然后在foreach中循环两次,没有任何意义。你似乎只是在
foreach
循环中分配
$email
,因此在循环结束时,你不是在添加变量,而是每次都覆盖它。id是唯一的,因此应该只有一个电子邮件地址。是的-事实上,尽管fo中只有隐藏的元素rm值“Submit”包含在$\u POST中,这导致了错误。