我得到的错误是警告:为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($_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
}
?>
答案 0 :(得分:0)
好的,你在这里遇到了很多问题。
首先,不要使用mysql_
函数,因为它们自PHP 5.5起已被弃用,并在7.0中被删除。请改用mysqli_
函数或PDO。
其次,如果你在$_POST['search']
中没有任何内容,那么$searchq
永远不会被初始化,而你的foreach循环也没有任何内容。
第二个半,如果你确实传入$_POST['search']
,但没有找到结果,那么你有$searchq
作为字符串,所以当它到达foreach循环时,它就是不是foreach可以使用的东西。 (老实说,你的变量不应该像那样做双重任务,你在$searchq
中将preg_replace
作为一个字符串,然后在有搜索结果的情况下将其用作数组。)
第三,当你使用mysqli_query()
时(如你所愿),它需要两个参数。它被称为
$results = mysqli_query($connection, $statement);
第四,您通过while循环重新初始化$searchq
。
所以,你可能实际上没有得到任何结果,所以你的while循环可能永远不会做任何事情,因此,$searchq
不是一个可以用foreach循环的数组。
你需要做的是在你的查询之前初始化$searchq
,所以你有一个空数组,所以当你到达你的foreach时,你至少有一个空数组。
基本上,在你的foreach之上,你应该
if( !empty($searchq) && is_array($searchq))
{
foreach(...)
}
或在while循环之后将foreach移动到else语句中。