php中的错误 - foreach

时间:2016-05-19 16:05:23

标签: 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($_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    
    }
?>

1 个答案:

答案 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语句中。