php-foreach中的错误
我得到的错误是警告:为foreach提供的参数无效,我已经阅读了foreach案例的相关帖子,但我仍然不知道如何修复它。我能知道引起此警告的原因和修复方法吗 这是我的密码php-foreach中的错误,php,foreach,Php,Foreach,我得到的错误是警告:为foreach提供的参数无效,我已经阅读了foreach案例的相关帖子,但我仍然不知道如何修复它。我能知道引起此警告的原因和修复方法吗 这是我的密码 mysql_connect("localhost","psm","psm") or die("could not connect"); mysql_select_db("planner") or die ("could not find db!"); $output = ''; //collect if(isset($_PO
mysql_connect("localhost","psm","psm") or die("could not connect");
mysql_select_db("planner") or die ("could not find db!");
$output = '';
//collect
if(isset($_POST['search']))
{
$searchq =$_POST['search'];
$searchq = preg_replace("#[^0-9a-z]#i","",$searchq);
$query = mysql_query("select c.*,u.username from login_user u left join calendar c on c.user_id = u.user_id where u.matrix LIKE '{$searchq}'" ) or die ("could not search");
$count = mysql_num_rows($query);
if ($count == 0){
$output = 'There are no search result!';
} else {
while($row = mysql_fetch_array($query)){
$searchq = [];
$searchq[] = $row;
}
}
}
foreach($searchq as $u) {
?>
<div class="well" align="left" width="65%" >
<fieldset>
<table>
<tr><th>Matrix No:
<?php echo $query['matrix']; ?>
<?php foreach($query as $c){
if($c['user_id'] == $u['user_id']){
if($c['cate'] == 0){
echo "<p style='background: red;'>Course Name : ";
}else{
echo "<p>Title : ";
}
?>
<?php echo $c['title']; ?></p>
<p>Description :<?php echo $c['description'];?></p>
<p>Location : <?php echo $c['location'];?></p>
<p>Start Time : <?php echo date('Y-m-d',$c['starttime']);?></p>
<p>End Time : <?php if($c['endtime'] != 0)echo date('Y-m-d',$c['endtime']);?></p>
<?php }}?>
</th></tr>
</table>
</div>
<?php
}
?>
好吧,你这里有很多问题 首先,不要使用mysql函数,因为它们从PHP5.5开始就被弃用,并在7.0中被删除。改为使用mysqli_u函数或PDO 其次,如果您在$\u POST['search']中没有任何内容,那么$searchq永远不会初始化,您的foreach循环也没有任何内容 第二个半月,如果您确实传入了$_POST['search'],但未找到任何结果,则$searchq是一个字符串,因此当它进入foreach循环时,foreach无法使用它。老实说,您的变量不应该像这样执行双重任务,即在preg_replace中将$searchq作为字符串,然后在有搜索结果的情况下将其用作数组 第三,当您使用mysqli_查询时,它需要两个参数。这叫做使用
$results = mysqli_query($connection, $statement);
第四,在while循环的每个过程中都重新初始化$searchq
因此,您可能实际上没有得到任何结果,因此您的while循环可能永远不会做任何事情,因此,$searchq不是一个可以通过foreach循环的数组
您需要做的是在查询之前初始化$searchq,这样您就有了一个空数组,这样当您开始使用foreach时,您至少有一个空数组
基本上,在你的前额之上,你应该
if( !empty($searchq) && is_array($searchq))
{
foreach(...)
}
或者在while循环之后将foreach移动到else语句中。首先,如果我期望的是表单未提交,则不定义$searchq。其次,如果已提交,但没有行,$searchq是字符串而不是数组。第三,你循环你的结果,但是当你在每次迭代中将$searchq重置为一个空数组时,你只会得到一个结果。。。。关于这个问题,没有争吵。。可以更具体一些吗?例如,如果$count==0{如果返回true。修复了它。mysqli_查询需要两个参数。您为mysqli修复了它,但OP没有使用mysqli,即使它们应该使用,所以在我看来仍然不正确。谢谢,我将修复mysqli,然后尝试您所说的: