Я пишу код для поиска 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;
}]
тема.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, и у нее нет проблем, но при поиске она не работает?
Может кто-нибудь помочь мне? Заранее спасибо.
вам нужно попробовать такой код: - 3v4l.org/rfAiq. Тем не менее код широко открыт для SQL-инъекций, поэтому лучше использовать подготовленный оператор






Разве это не должно быть так?
$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() возвращает TRUE/FALSE в зависимости от того, есть ли «поиск» в $_POST. Вот что работает:
<?php
include "data/data_model.php";
$search = isset($_POST["search"]) ? $_POST["search"]: '';
$subject = $data->getSubject($search);
?>
Я думаю, что проблема в вашем объекте подключения. Поэтому он не работает должным образом, если вы хотите выполнять операции с использованием класса, тогда вот мой предлагаемый код для вас.
Сначала создайте класс подключения
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;
}
}
Используйте этот класс так, если вы используете метод POST в вашем subject.php
$search = array();
if (isset($_POST['search'])){
$search = (new Data())->getSubject($_POST['search']);
}
print_r($search);
Вы получаете какую-либо ошибку? Кроме того, проверили ли вы, что в функции getSubject() переменная $search имеет значение ключевого слова поиска?