Я хочу отфильтровать цены с помощью флажков и php из базы данных - PullRequest
0 голосов
/ 18 апреля 2020

Я хочу фильтровать данные в базе данных, используя набор диапазонов. У меня есть флажок внизу.

<body>
<form id="form" method="post" action="">
<input type="checkbox" name="price1" class="checkbox" <?=(isset($_POST['price'])?' checked':'')?>/> $0 - 5<br>
<input type="checkbox" name="price2" class="checkbox" <?=(isset($_POST['price'])?' checked':'')?>/> $6 - 10<br>
<input type="checkbox" name="price3" class="checkbox" <?=(isset($_POST['price'])?' checked':'')?>/> $11 - 20<br>
 </form>
 </body>

 <script type="text/javascript">  
    $(function(){
     $('.checkbox').on('change',function(){
        $('#form').submit();
        });
    });
</script>

Ниже приведено то, что у меня есть для моего PHP кода

<?php
if (isset($_POST["price1"])){
  $query = $conn->query("SELECT * FROM item WHERE price BETWEEN 0 AND 5");
 }

if (isset($_POST["price2"])){
  $query = $conn->queryn("SELECT * FROM item WHERE price BETWEEN 6 AND 10");
 }

if (isset($_POST["price3"])){
 $query = $conn->query("SELECT * FROM item WHERE price BETWEEN 11 AND 20");
 }

else { $query = $conn->query("SELECT price * FROM item");
}
?>

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

?php
        //get product rows
        $query = $conn->query("SELECT * FROM item WHERE price BETWEEN 0 AND 5 ");

        if($query->num_rows > 0){
                while($row = $query->fetch_assoc()){
            ?>

                <div class="list-item">
                    <h2><?php echo $row["name"]; ?></h2>
                    <h4>Price: <?php echo $row["price"]; ?></h4>
                </div>
        <?php }
        }else{
            echo  'Product(s) not found';
        } ?>
    </div>
</div> 

Код указан ниже:

<?php 
$conn_error = "Could not connect";
// SQL connection credentials

//They are blanked out since it is connected to the server already

$mysql_host = "";
$mysql_user = "";
$mysql_pass = "";
$mysql_name = "";

$conn = new mysqli($mysql_host, $mysql_user, $mysql_pass,$mysql_name);

if ($db->connect_error) {
    die("Connection failed: " . $db->connect_error);
}
?>

<?php
        //get product rows test to see database is working 
        $query = $conn->query("SELECT * FROM item WHERE price BETWEEN 0 AND 5 ");

        if($query->num_rows > 0){
                while($row = $query->fetch_assoc()){
            ?>

                <div class="list-item">
                    <h2><?php echo $row["name"]; ?></h2>
                    <h4>Price: <?php echo $row["price"]; ?></h4>
                </div>
        <?php }
        }else{
            echo  'Product(s) not found';
        } ?>
    </div>
</div> 

<body>
<form id="form" method="post" action="">
<input type="checkbox" name="price1" class="checkbox" <?=(isset($_POST['price'])?' checked':'')?>/> $0 - 5<br>
<input type="checkbox" name="price2" class="checkbox" <?=(isset($_POST['price'])?' checked':'')?>/> $6 - 10<br>
<input type="checkbox" name="price3" class="checkbox" <?=(isset($_POST['price'])?' checked':'')?>/> $11 - 20<br>
 </form>
 </body>

<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.5.0/jquery.min.js"></script>
<script type="text/javascript">
    $(function(){
        $('.checkbox').on('change',function(){
            $('#form').submit();
        });
    });
</script>
<?php
    if (isset($_POST["price1"])){
        $query = $conn->query("SELECT * FROM item WHERE price BETWEEN 0 AND 5");

    } elseif (isset($_POST["price2"])){
        $query = $conn->queryn("SELECT * FROM item WHERE price BETWEEN 6 AND 10");
    } elseif (isset($_POST["price3"])){
        $query = $conn->query("SELECT * FROM item WHERE price BETWEEN 11 AND 20");
    } else {
        $query = $conn->query("SELECT price * FROM item");
    }
?>

1 Ответ

0 голосов
/ 18 апреля 2020

Это связано с упорядочением ваших операторов if,

<?php
if (isset($_POST["price1"])){
  $query = $conn->query("SELECT * FROM item WHERE price BETWEEN 0 AND 5");
 }

if (isset($_POST["price2"])){
  $query = $conn->queryn("SELECT * FROM item WHERE price BETWEEN 6 AND 10");
 }

if (isset($_POST["price3"])){
 $query = $conn->query("SELECT * FROM item WHERE price BETWEEN 0 AND 5");
 }

else { $query = $conn->query("SELECT price * FROM item");
}
?>

Остальное рассчитывает только на последнюю попытку if, я заменил средние два if на "elseif", чтобы они образовали единицу оператор if,

<?php
    if (isset($_POST["price1"])){
        $query = $conn->query("SELECT * FROM item WHERE price BETWEEN 0 AND 5");
    } elseif (isset($_POST["price2"])){
        $query = $conn->queryn("SELECT * FROM item WHERE price BETWEEN 6 AND 10");
    } elseif (isset($_POST["price3"])){
        $query = $conn->query("SELECT * FROM item WHERE price BETWEEN 11 AND 20");
    } else {
        $query = $conn->query("SELECT price * FROM item");
    }
?>

Я также обновил последний, чтобы он был 11-20 вместо 0-5, чтобы соответствовать тексту вашего флажка.

Чтобы уточнить элементы JS, вы используете селектор jQuery $, сначала вы должны включить jQuery, чтобы заставить это работать,

<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.5.0/jquery.min.js"></script>
<script type="text/javascript">
    $(function(){
        $('.checkbox').on('change',function(){
            $('#form').submit();
        });
    });
</script>

Полный пример,

<?php
$conn_error = "Could not connect";
// SQL connection credentials

//They are blanked out since it is connected to the server already

$mysql_host = "";
$mysql_user = "";
$mysql_pass = "";
$mysql_name = "";

$conn = new mysqli($mysql_host, $mysql_user, $mysql_pass,$mysql_name);

if ($db->connect_error) {
    die("Connection failed: " . $db->connect_error);
}
?>
    </div>
    </div>

    <body>
    <form id="form" method="post" action="">
        <input type="checkbox" name="price1" class="checkbox" <?=(isset($_POST['price'])?' checked':'')?>/> $0 - 5<br>
        <input type="checkbox" name="price2" class="checkbox" <?=(isset($_POST['price'])?' checked':'')?>/> $6 - 10<br>
        <input type="checkbox" name="price3" class="checkbox" <?=(isset($_POST['price'])?' checked':'')?>/> $11 - 20<br>
    </form>

    <?php
        if($_SERVER["REQUEST_METHOD"] == "POST") {
            if (isset($_POST["price1"])){
                $query = $conn->query("SELECT * FROM item WHERE price BETWEEN 0 AND 5");
            } elseif (isset($_POST["price2"])){
                $query = $conn->queryn("SELECT * FROM item WHERE price BETWEEN 6 AND 10");
            } elseif (isset($_POST["price3"])){
                $query = $conn->query("SELECT * FROM item WHERE price BETWEEN 11 AND 20");
            } else {
                $query = $conn->query("SELECT price * FROM item");
            }

            if($query->num_rows > 0){
                while($row = $query->fetch_assoc()){
                    ?>

                    <div class="list-item">
                        <h2><?php echo $row["name"]; ?></h2>
                        <h4>Price: <?php echo $row["price"]; ?></h4>
                    </div>
                <?php }
            }else{
                echo  'Product(s) not found';
            }
        }
    ?>
    </body>

    <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.5.0/jquery.min.js"></script>
    <script type="text/javascript">
        $(function(){
            $('.checkbox').on('change',function(){
                $('#form').submit();
            });
        });
    </script>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...