【问题标题】:MySQL search using PHP使用 PHP 进行 MySQL 搜索
【发布时间】:2019-11-16 13:43:03
【问题描述】:

我正在为 MySQL 搜索编写代码,但它不起作用

我使用 PHP 类,这是代码:

data_model.php

<?php
$data = new Data();
if(isset($_GET['q'])) {
    $data->$_GET['q']();
}
class Data {

    function __construct(){
        if(!isset($_SESSION['id'])){
            header('location:../../');   
        }
    }


    function getSubject($search){
        global $con;
        $q = "select * from subject where code like '%$search%' or title like '%$search%' order by code asc";
        $r = mysqli_query($con, $q);
        return $r;
    }]

subject.php

<?php
include "data/data_model.php";

$search = isset($_POST["search"]); 
$subject = $data->getSubject($search);
?>

<form action="subject.php" method="post">
   <label>
       <input type="text" class="form-control" name="search" placeholder="Search Subject..." >
   </label>
   <button type="submit" name="search" class="btn btn-success" value="search"><i class="fa fa-search"></i> Search</button>
</form>

我的代码有什么问题吗?我还使用 getSubject 从 db 表中获取数据到我的 html 表中,它没有问题,但是在搜索时它不起作用?

谁能帮帮我?提前致谢。

【问题讨论】:

  • 您是否遇到任何错误?另外,您是否检查过 getSubject() 函数中的 $search 变量的值为 search 关键字?
  • 你需要尝试这样的代码:- 3v4l.org/rfAiq 。仍然代码对于 SQL 注入是开放的,所以最好使用准备好的语句

标签: php mysql database search


【解决方案1】:

不应该这样吗?

$data = new Data();
if(isset($_GET['q'])) {
    $data->getSubject($_GET['q']);
}

还有,这个:

<?php
include "data/data_model.php";

$search = isset($_POST["search"]); 
$subject = $data->getSubject($search);
?>

不会按预期工作,因为 isset() 根据 $_POST 中是否存在“搜索”返回 TRUE/FALSE。这是有效的:

    <?php
        include "data/data_model.php";


        $search = isset($_POST["search"]) ? $_POST["search"]:  '';
        $subject = $data->getSubject($search);
        ?>

【讨论】:

    【解决方案2】:

    我认为您的连接对象存在问题所以如果您想使用类进行操作,它无法正常运行,那么这是我为您建议的代码。

    首先创建你的连接类

    class DBConnection {
    
            private $dbConnection = false;
    
            function __construct() {
    
            }
    
            public function connect() {
                $this->dbConnection = new mysqli(DB_HOST, DB_USER, DB_PASSWORD, DB_NAME);
                if (mysqli_connect_error()) {
                    die(error_db_not_conntected);
                }
                return $this->dbConnection;
            }
    
            public function disconnect() {
                $this->connect()->close();
            }
        }
    

    像这样在数据类中扩展该类

    您必须在此处包含 DBConnection 文件

    include 'DBConnection.php';
    
     class Data extends DBConnection{
           function __construct(){
                if(!isset($_SESSION['id'])){
                    header('location:../../');   
                }
            }
    
            function getSubject($search){
                $q = "select * from subject where code like '%$search%' or title like '%$search%' order by code asc";
                $results = $this->connect()->query($q);
                $this->disconnect();
                return $results;
            }     
        }
    

    像这样使用这个类,如果你在你的 subject.php 中使用 POST 方法

    $search = array();  
         if(isset($_POST['search'])){
            $search = (new Data())->getSubject($_POST['search']);
        }    
        print_r($search);   
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-03-21
      • 2012-10-23
      • 1970-01-01
      • 2019-07-24
      • 2010-11-02
      • 2017-09-13
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多