Php 为foreach()提供的参数无效-但脚本仍然有效
建议的问题没有完全涵盖我的问题。我对这里的答案很感兴趣,但不太明白它如何适用于我的情况 我有下面的代码,它确实像我期望的那样工作;这段代码通过匹配上一页发布的隐藏表单id来构建电子邮件地址数组,在mysql数据库中查找“email”列 但是,我也得到了错误: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
第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中,这导致了错误。