Я пытаюсь использовать разные входные данные для поиска данных из моей базы данных и держать все в сеансе

Я пытаюсь искать данные в php mysql, используя разные поля ввода, но мой код кажется правильным, но не остается в сеансе всякий раз, когда я пытаюсь переключаться между страницами...

    <form method = "POST" action = "search_all_properties">
   <div class = "form-row align-items-center">
    <div class = "col-auto my-1">
      <select class = "custom-select mr-sm-2" id = "inlineFormCustomSelect" name = "category" value = "category" >
        <option selected>Category</option>
        <option value = "houses">Houses</option>
        <option value = "shops">Shops</option>
        <option value = "office_spaces">Office Spaces</option>
      </select>
    </div>
    <div class = "col-auto my-1">
      <select class = "custom-select mr-sm-2" id = "inlineFormCustomSelect" name = "bedroom">
        <option selected>Bedrooms</option>
        <option value = "1_bedroom">1 Bedroom</option>
        <option value = "2_bedroom">2 Bedrooms</option>
        <option value = "3_bedroom">3 Bedrooms</option>
      </select>
    </div>
    <div class = "col-auto my-1">
      <select class = "custom-select mr-sm-2" id = "inlineFormCustomSelect" name = "price">
        <option selected>Price</option>
        <option value = "200,000">200,000</option>
        <option value = "300,000">300,000</option>
        <option value = "500,000">500,000</option>
        <option value = "800,000">800,000</option>
        <option value = "1_million">1 Million</option>
      </select>
    </div>
    <div class = "col">
      <input type = "text" onchange = "trim(this)" name = "location" class = "form-control" placeholder = "Location">
    </div>
    <div class = "col-auto my-1">
      <button type = "submit" name = "submit" class = "btn bg-info">Search</button>
    </div>
  </div>
        </form>

я всегда получаю сообщение об ошибке, что некоторые значения не определены...

$bedroom  = $database->escape_value($bedroom);
        $price    = $database->escape_value($price);
        $location = $database->escape_value($location); 

Вышеупомянутые переменные не определяются каждый раз, когда я пытаюсь перейти на следующую страницу... сеанс предназначен для переменных, которые сбрасываются, когда я пытаюсь перейти на следующую страницу.

<?php
        if (isset($_POST['submit']) || isset($_SESSION['search'])){
        // 1. the current page number ($current_page)
        $page = !empty($_GET['page']) ? (int)$_GET['page'] : 1;
        // 2. records per page ($per_page)
        $per_page = 2;
        // 3. total record count ($total_count)
        if (isset($_POST['submit'])) {
            $_SESSION['category']  = $_POST['category'];
            $category              = $_POST['category'];
            $_SESSION['bedroom']   = $_POST['bedroom'];
            $bedroom               = $_POST['bedroom']; 
            $_SESSION['price']     = $_POST['price'];
            $price                 = $_POST['price'];
            $_SESSION['location']  = $_POST['location'];
            $location              = $_POST['location'];
        } else { if (isset($_SESSION['category'])){
            $category         = $_SESSION['category'];
               }else if (isset($_SESSION['bedroom'])){
            $bedroom          = $_SESSION['bedroom'];
        }else if (isset($_SESSION['price'])){
            $price            = $_SESSION['price'];
        }else if (isset($_SESSION['location'])){
            $location         = $_SESSION['location'];
        }
        }  
        $category = $database->escape_value($category);
        $bedroom  = $database->escape_value($bedroom);
        $price    = $database->escape_value($price);
        $location = $database->escape_value($location); 

        $sql  = "SELECT COUNT(*) FROM pictures WHERE title LIKE '%$category%'";
        $sql .= " OR location LIKE '%$location%'";
        $sql .= " OR price LIKE '%$price%'";
        $sql .= " OR description LIKE '%$category%'";   
        $sql .= " OR bedroom LIKE '%$bedroom%'";
        $sql = $database->query($sql);
        $sql = $database->fetch_array($sql);
        $total_count = array_shift($sql);

        // Find all photos
        // use pagination instead
        $pagination = new Pagination($page, $per_page, $total_count);
        // Instead of finding all records, just find the records

        $sql  = "SELECT * FROM pictures WHERE title LIKE '%$category%'";
        $sql .= " OR location LIKE '%$location%'";
        $sql .= " OR price LIKE '%$price%'";    
        $sql .= " OR description LIKE '%$category%'";
        $sql .= " OR bedroom LIKE '%$bedroom%'";    
        $sql .= " ORDER by id DESC";
        $sql .= " LIMIT {$per_page}";
        $sql .= " OFFSET {$pagination->offset()}";
        $photos = Picture::find_by_sql($sql);
        $tcount = count($photos);   
        }
?>

Добро пожаловать в SO, поделитесь своей ошибкой.

Amin.MasterkinG 15.05.2019 16:06
$database->escape_value() Сомневаюсь, что этого достаточно для предотвращения SQL-инъекций. Вместо этого используйте подготовленный оператор с параметрами
Cid 15.05.2019 16:06

Эскейп-значения @Cid достаточно, чтобы избежать его... я просто не понимаю, почему сеанс сбрасывается, как только я пытаюсь разбить на страницы.

sanmexma 15.05.2019 16:10
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
0
3
25
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Ваше условие проверки содержимого переменной сеанса не будет работать так, как вы ожидаете.

Вы используете else if, что означает, что if (isset($_SESSION['category'])) верно, остальные else if не будут выполнены.

Сессия по-прежнему сохраняется, но достигается только category (из-за else)

Измените свой код на:

if (isset($_POST['submit'])) {
    // your code
}
else
{
    if (isset($_SESSION['category'])) {
        $category         = $_SESSION['category'];
    }
    if (isset($_SESSION['bedroom'])){
        $bedroom          = $_SESSION['bedroom'];
    }
    if (isset($_SESSION['price'])){
        $price            = $_SESSION['price'];
    }
    if (isset($_SESSION['location'])){
        $location         = $_SESSION['location'];
    }
}

Вы понимаете, почему?

Cid 15.05.2019 16:29

да, теперь я понимаю... добавление else прервет сеанс, потому что кажется, что остальные должны соответствовать условию категории... возможно, я не очень хорошо объяснил, но я понимаю... спасибо

sanmexma 15.05.2019 17:54

Сессия не прерывается, просто переменные $bedroom и остальные не определены. $_SESSION['bedroom'] а остальные все еще существуют

Cid 16.05.2019 09:58

Другие вопросы по теме