Поиск товаров по флажку в системе интернет-магазинов в коде кода php - PullRequest
0 голосов
/ 26 октября 2019

Я использую CodeIgniter для создания проекта электронной коммерции, в котором я работаю над поиском продуктов из базы данных по нескольким параметрам фильтра с флажками.

Но я не получаю правильных результатов. Сначала я проверил Brand-> Dell, он получил два продукта, после этого я проверил Ram-> 5 ГБ, чтобы он не менялся, но я хочу, чтобы он показывал только 1 продукт 5 ГБ Ram с брендом DELL.

enter image description here

Модель

<?php
class ProductsM extends CI_Model {

public function getRowsByCheck($keyword){
if($keyword=="")
{
  $search_keuword = '';
}
else
{
 $search_keuword = "and brand IN ('".$keyword."') OR ram IN ('".$keyword."') OR price IN ('".$keyword."')"; 
}
$res = $this->db->query("SELECT * FROM products WHERE id!='' ".$search_keuword."")->result_array();
return $res;
}
}?>

Контроллер

class ProductsC extends CI_Controller {
public function fetchByCheck(){
   $output='';
    $keyword='';
    if($this->input->post('tmp')){
      $array = $this->input->post('tmp');
      $keyword = implode("','",$array);
    }
    $data = $this->productsM->getRowsByCheck($keyword);
       foreach ($data as $p) {
  $output.='<div class="col-md-4">
      <div class="panel panel-info">
          <div class="panel-heading">'.$p["name"].'</div>
          <div class="panel-body" align=center>
          <img src="'.base_url("assets/images/".$p['image']).'" style="height:100px;">
          </div>
          <div class="panel-heading">Rs.'.$p["price"].'
      <a href="'.base_url()."ProductsC/addToCart/".$p['id'].'" class="btn btn-success">Add To Cart</a>
          Ram '.$p["ram"].'GB</div>
        </div>
        </div>';
       }
    echo   $output;
  }
}?>

Просмотр

div class="list-group">
                <h3>BRAND</h3>
                <?php
                foreach($brand_data as $row){?> 
                  <div class="list-group-item checkbox">
                    <label><input type="checkbox" class="common-selector brand searchType"
                      value="<?php echo $row['brand'];?>"><?php echo $row['brand'];?></label>  
                  </div>
              <?php } ?>
            </div>    

            <div class="list-group">
                <h3>RAM</h3>
                  <?php
                foreach($ram_data as $row){?> 
                  <div class="list-group-item checkbox">
                    <label><input type="checkbox" class="common-selector ram searchType" 
                      value="<?php echo $row['ram'];?>"><?php echo $row['ram'];?></label>  
                     </div>
               <?php } ?>
            </div>  

Script.js

<script type="text/javascript">
  $(document).ready(function(){
$('.searchType').on('click', function () {
  var tmp = [];
      $("input").each(function() {
          if ($(this).is(':checked')) {
          var checked = ($(this).val());
          tmp.push(checked);
        }
      });
  //alert(tmp);

$.ajax({
              url:"<?php echo base_url();?>ProductsC/fetchByCheck",
              method:"POST",
              data:{tmp:tmp},
              success:function(data){
                //alert(data);
                $('#result').html(data);
              }
        });
});
});
</script>

1 Ответ

1 голос
/ 26 октября 2019

Вы используете условие OR в своем запросе, оно всегда будет иметь значение true, если указано одно из необязательных ключевых слов. Чтобы установить все условия, можно разделить каждое из ключевых слов и использовать условие AND:

HTML

<div class="list-group">
    <h3>BRAND</h3>
    <?php
    foreach ($brand_data as $row) { ?>
        <div class="list-group-item checkbox">
            <label><input type="checkbox" name="brand" class="common-selector brand searchType" value="<?php echo $row['brand']; ?>"><?php echo $row['brand']; ?></label>
        </div>
    <?php } ?>
</div>

<div class="list-group">
    <h3>RAM</h3>
    <?php
    foreach ($ram_data as $row) { ?>
        <div class="list-group-item checkbox">
            <label><input type="checkbox" name="ram" class="common-selector ram searchType" value="<?php echo $row['ram']; ?>"><?php echo $row['ram']; ?></label>
        </div>
    <?php } ?>
</div>

Javascript

<script type="text/javascript">
    $(document).ready(function() {
        $('.searchType').on('click', function() {
            var tmp_brand = [];
            $("input[name='brand']").each(function() {
                if ($(this).is(':checked')) {
                    var checked = ($(this).val());
                    tmp_brand.push(checked);
                }
            });
            var tmp_ram = [];
            $("input[name='ram']").each(function() {
                if ($(this).is(':checked')) {
                    var checked = ($(this).val());
                    tmp_ram.push(checked);
                }
            });
            //alert(tmp);

            $.ajax({
                url: "<?php echo base_url(); ?>ProductsC/fetchByCheck",
                method: "POST",
                data: {
                    tmp_brand: tmp_brand,
                    tmp_ram: tmp_ram,
                    tmp_price: tmp_price
                },
                success: function(data) {
                    //alert(data);
                    $('#result').html(data);
                }
            });
        });
    });
</script>

Контроллер

<?php

class ProductsC extends CI_Controller
{
    public function fetchByCheck()
    {
        $output = '';
        $keyword = [];
        if ($this->input->post('tmp_ram')) {
            $array = $this->input->post('tmp_ram');
            $keyword['ram'] = implode("','", $array);
        }
        if ($this->input->post('tmp_brand')) {
            $array = $this->input->post('tmp_brand');
            $keyword['brand'] = implode("','", $array);
        }
        if ($this->input->post('tmp_price')) {
            $array = $this->input->post('tmp_price');
            $keyword['price'] = implode("','", $array);
        }
        $data = $this->productsM->getRowsByCheck($keyword);
        foreach ($data as $p) {
            $output .= '<div class="col-md-4">
      <div class="panel panel-info">
          <div class="panel-heading">' . $p["name"] . '</div>
          <div class="panel-body" align=center>
          <img src="' . base_url("assets/images/" . $p['image']) . '" style="height:100px;">
          </div>
          <div class="panel-heading">Rs.' . $p["price"] . '
      <a href="' . base_url() . "ProductsC/addToCart/" . $p['id'] . '" class="btn btn-success">Add To Cart</a>
          Ram ' . $p["ram"] . 'GB</div>
        </div>
        </div>';
        }
        echo   $output;
    }
} ?>

Модель

<?php
class ProductsM extends CI_Model
{

    public function getRowsByCheck($keyword)
    {
        $search_keuword = '';
        if (count($keyword) > 0) {
            foreach ($keyword as $key => $value) {
                if ($key == 'ram') {
                    $search_keuword .= "and ram IN ('" . $value . "')";
                }
                if ($key == 'brand') {
                    $search_keuword .= "and brand IN ('" . $value . "')";
                }
                if ($key == 'price') {
                    $search_keuword .= "and price IN ('" . $value . "')";
                }
        }
        $res = $this->db->query("SELECT * FROM products WHERE id!='' " . $search_keuword . "")->result_array();
        return $res;
    }
} ?>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...