注意:尝试在第39行的C:\ xampp \ htdocs \ php \ search.php中获取非对象的属性

时间:2015-07-04 00:43:34

标签: php mysql apache mysqli

我正在尝试在我的网站上创建搜索菜单,我正在使用php和mysqli,我已经创建了所有必需的凭据,但它仍然向我显示了一些错误,任何人都可以帮助我。 的 analyze.php

<!DOCTYPE html>
<html>
  <head>
    <title>Gtec NetWork</title>
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <!-- Bootstrap -->
    <link href="asset/bootstrap/css/bootstrap.min.css" rel="stylesheet" media="screen">
  </head>
  <body>
    <div class="navbar">
        <div class="navbar-inner">
            <a class="brand" href="#">GTEC Network</a>
            <ul class="nav">
                <li><a href="#">Home</a></li>
                <li><a href="#">Boys</a></li>
                <li><a href="#">Girls</a></li>
            </ul>
        </div>
    </div>
    <div class="container-fluid">
        <div class="row">
            <div class="span12">
                    <form method="POST" action="search.php">
                    <label>Search
                            <input type="text" name="keywords" >
                            <input type="submit" class="btn btn-primary lg" value="Search">
                            </label>

                    </form>
            </div>
        </div>
    </div>
  </body>
 </html>

的search.php

<?php  
    require_once 'lib/db.php';
?><?php
    if (isset($_GET['keywords'])) {
        $keywords = $db->escape_string($_GET['keywords']);
        $query = $db->query("
            SELECT *
            FROM user 
            WHERE  registernumber LIKE '%{$keywords}%'
            OR username LIKE '%{$keywords}%' 
            "
            );
        $run = mysqli_query($query);

    }

?>
    <!DOCTYPE html>
<html>
  <head>
    <title>Gtec NetWork</title>
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <!-- Bootstrap -->
    <link href="asset/bootstrap/css/bootstrap.min.css" rel="stylesheet" media="screen">
  </head>
  <body>
    <div class="navbar">
        <div class="navbar-inner">
            <a class="brand" href="#">GTEC Network</a>
            <ul class="nav">
                <li><a href="#">Home</a></li>
                <li><a href="#">Boys</a></li>
                <li><a href="#">Girls</a></li>
            </ul>
        </div>
    </div>
    <div class="container">
        <div class="row">
            <div class="col-md-4">
                Found<?php echo $query->num_rows;?> results.
                <?php  
                    if ($query->num_rows) {
                        while($r = $query->mysqli_fetch_array())
                        {
                        ?>

                        <div class="gylphicon glyphicon-heart">
                            <a href="#"><?php echo $r->username;?></a>
                        </div>
                        <?php   }
                    }?>

            </div>
        </div>
    </div>
    </body>
</html>

问题是

实测值 注意:未定义的变量:第39行的C:\ xampp \ htdocs \ php \ search.php中的查询

注意:尝试在第39行的C:\ xampp \ htdocs \ php \ search.php中获取非对象的属性 结果。 注意:未定义的变量:第41行的C:\ xampp \ htdocs \ php \ search.php中的查询

注意:尝试在第41行的C:\ xampp \ htdocs \ php \ search.php中获取非对象的属性

请帮帮我

2 个答案:

答案 0 :(得分:0)

$ query在if-block

中声明
if (isset($_GET['keywords'])) { ... }

因此,如果$ _GET [&#39;关键字&#39;]未设置,则$ query不会在稍后的脚本中定义。

也许你可以这样做:

if (isset($_POST['keywords'])) {
    $keywords = $db->escape_string($_POST['keywords']);
    $query = $db->query("
        SELECT *
        FROM user 
        WHERE  registernumber LIKE '%{$keywords}%'
        OR username LIKE '%{$keywords}%' 
        "
        );

} else {
    $query = $db->query("
        SELECT *
        FROM user
        "
        );
}

答案 1 :(得分:0)

正如@dlegall已经指出的那样,当然可以肯定的是:你得到的错误来自keywords当前未设置的事实。

从那里,有两点:

  1. 无论如何,您的代码必须来阻止这种情况,因此您无法在不进行调查的情况下直接使用底部(HTML)部分中的任何$query->...
    所以你可以使用类似的东西:

    <div class="col-md-4">
      <?php if (@$query) { ?>
        Found<?php echo $query->num_rows;?> results.
        <?php  
            if ($query->num_rows) {
                while($r = $query->mysqli_fetch_array())
                {
                ?>
                <div class="gylphicon glyphicon-heart">
                    <a href="#"><?php echo $r->username;?></a>
                </div>
                <?php   }
            }?>
      <?php } else { ?>
        No keywords available.
      <?php } ?>
    </div>
    
  2. 这样您的应用程序现在能够响应任何情况 现在,您可以测试当前导致keywords为空的内容:这可能是一个完全不同的问题。