【问题标题】:Notice: Trying to get property of non-object in C:\xampp\htdocs\php\search.php on line 39 [duplicate]注意:尝试在第 39 行的 C:\xampp\htdocs\php\search.php 中获取非对象的属性 [重复]
【发布时间】:2015-07-04 00:43:33
【问题描述】:

我正在尝试在我的网站中创建搜索菜单,我正在使用 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 中非对象的属性

请帮帮我

【问题讨论】:

  • 在您的 html 代码中 method 是“POST”,在您的 php 代码中搜索 GET var ?将 html 表单中的方法更改为 GET
  • 为什么代码中会出现这一行? $run = mysqli_query($query); ...那应该做什么? 塑料是什么?

标签: php mysql apache mysqli


【解决方案1】:

$query 在 if 块中声明

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

所以,如果 $_GET['keywords'] 没有设置,$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
        "
        );
}

【讨论】:

  • 那该怎么办呢?
  • 如果 $_GET['keywords'] 未定义,请勿在正文中使用 $query。
  • 那么我从数据库查询的地方
  • 如果 $_GET['keywords'] 未定义,您将不会查询任何内容,请查看您自己的代码。所以,如果你不查询任何东西,你就不能显示任何结果,对吧?
  • 我在问哪里可以放 select * user ,mysql 查询?
【解决方案2】:

正如@dlegall 已经指出的那样,可以立即确定的是:您遇到的错误来自keywords 当前未设置。

从那里,有两点:

  1. 无论如何,您的代码必须防止这种情况,因此您不能简单地在底部 (HTML) 部分使用任何 $query-&gt;... 而不对其进行调查。
    所以你可能会使用类似的东西:

    <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 为空的原因:这可能是一个完全不同的问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-24
    • 1970-01-01
    • 2015-12-06
    • 2018-04-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多