ThingEngineer / PHP-MySQLi-Database-Class

Wrapper for a PHP MySQL class, which utilizes MySQLi and prepared statements.
Other
3.3k stars 1.34k forks source link

e commerce (e-commerce) sorting and filtering problem #931

Closed oxcakmak closed 3 years ago

oxcakmak commented 3 years ago

Hello again,

upside:

include('Url.php');
$url = new Url;
//last Url
$lastUrl = $url->getCurrentUrl();
//last Vars
$uv = $url->getQueryVars();
//remove page
$lastUrl = $url->removeQueryVar("page");
/*
keyword
order
rating
seller
category
$uv['data'];
*/
$keyword = @$uv['keyword'];
$order = @$uv['order'];
$rating = @$uv['rating'];
$seller = @$uv['seller'];
$category = @$uv['category'];
$page = @intval($_GET['page']); if(!$page){ $page = 1; }
$dbh->where("product_status", 1);
$totalDataCount = $dbh->getValue("product", "COUNT(*)");
$pageLimit = 9;
$pageNumber = ceil($totalDataCount/$pageLimit); if($page > $pageNumber){ $page = 1;}
$viewData = $page * $pageLimit - $pageLimit;
$viewPerPage = 5;

product listing section:

if(isset($keyword) && $keyword!=""){
                    $dbh->where("product_title", '%'.$keyword.'%', 'like');
                    $dbh->where("product_about", '%'.$keyword.'%', 'like');
                    $dbh->where("product_content", '%'.$keyword.'%', 'like');
                    }

                    /*
                    if(isset($rating) && $rating!=""){
                        if($rating=="oneStar"){ }
                        if($rating=="twoStar"){ }
                        if($rating=="threeStar"){ }
                        if($rating=="fourdStar"){ }
                        if($rating=="fiveStar"){ }
                    }
                    */
                    $vSeller = "";
                    if(isset($seller) && $seller!=""){
                        $dbh->where("product_owner", $seller);
                    }
                    $vCategory = "";
                    if(isset($category) && $category!=""){
                        $dbh->where("product_category", $category);
                    }
                    if($order){ 
                        switch($order){
                            case "priceAsc":
                            $dbh->orderBy("product_amount", "ASC");
                            $vOrder = "priceAsc";
                            break;
                            case "priceDesc":
                            $dbh->orderBy("product_amount", "DESC");
                            $vOrder = "priceDesc";
                            break;
                            case "sale":
                            $dbh->orderBy("product_sale", "DESC");
                            $vOrder = "sale";
                            break;
                            case "comment":
                            $dbh->orderBy("product_rating", "DESC");
                            $vOrder = "comment";
                            break;
                        }
                    }
foreach($dbh->rawQuery('SELECT * FROM product LIMIT ?, ?', [$viewData, $pageLimit]) as $productRow){
foreach($dbh->rawQuery('SELECT * FROM product LIMIT ?, ?', [$viewData, $pageLimit]) as $productRow){
                            if($vSeller){ $dbh->where("seller_name", $vSeller); }else{ $dbh->where($productRow['product_owner']); }                         
                            $sellerRow = $dbh->getOne("seller");
                            echo '
                            <div class="col-lg-4 col-sm-6">
                               <div class="games-single-item img-contain-isotope">
                                  <div class="games-thumb">
                                     <div class="games-thumb-image"><a href="#"><img src="'.BASE_URL.$productRow['product_image'].'" alt="'.$productRow['product_title'].'" style="height:250px;" /></a></div>
                                     <div class="game-overlay"><a class="popup-youtube" onclick="window.open(\''.BASE_URL.'product/'.$productRow['product_slug'].'\');" style="cursor:pointer;"><i class="fa fa-search"></i></a></div>
                                  </div>
                                  <div class="games-desc">
                                     <h3><a href="'.BASE_URL.'product/'.$productRow['product_slug'].'">'.$productRow['product_title'].'</a></h3>
                                     <p class="game-meta">'.$lang['label_seller'].':&nbsp;<span>'; if(empty($sellerRow['seller_title'])){ echo STUCK; } echo '</span></p>
                                     <p class="game-meta">'.$lang['label_quantity'].':&nbsp;<span>'.$productRow['product_quantity'].'</span></p>
                                     <div class="game-action">
                                        <div class="game-price"><h4><i class="fa fa-try"></i>'.$productRow['product_amount'].'</h4></div>
                                        <div class="game-buy"><a href="#" class="fag-btn-outline addProduct" pd-slug="'.$productRow['product_slug'].'" pd-title="'.$productRow['product_title'].'" pd-image="'.BASE_URL.$productRow['product_image'].'" pd-price="'.$productRow['product_amount'].'">'.$lang['label_cart_add'].'</a></div>
                                     </div>
                                  </div>
                               </div>
                            </div>';
                        }
                     echo '</div>
                  </div>
     <div class="pagination-box-row">
                     <!-- <p>Page 1 of 6</p> -->
                     <ul class="pagination">';
            if($page > 1){ 
                echo '<li><a href="'.$lastUrl.'&page=1"><i class="fa fa-angle-double-left"></i></a></li>
                <li><a href="'.$lastUrl.'&page='.($page - 1).'"><i class="fa fa-angle-left"></i></a></li>';
            }
            for($i = $page - $viewPerPage; $i < $page + $viewPerPage +1; $i++){ 
                if($i > 0 && $i <= $pageNumber){
                    if($i == $page){
                        echo '<li class="active"><a class="page" href="'.$lastUrl.'&page='.$i.'">'.$i.'</a></li>';
                    }else{
                        echo '<li><a href="'.$lastUrl.'&page='.$i.'">'.$i.'</a></li> <div class="pagination-item short"><a href=""></a></div>';
                    }
                }
            }
            if($page != $pageNumber){
                echo '<li><a href="'.$lastUrl.'&page='.($page + 1).'"><i class="fa fa-angle-right"></i></a></li>
                <li><a href="'.$lastUrl.'&page='.$pageNumber.'"><i class="fa fa-angle-double-right"></i></a></li>';
            }
echo ' </ul>
        </div>
oxcakmak commented 3 years ago

I did this solution with raw query:

<?php
require_once('config.php');
$keyword = "csgo";
$rating = "";
$seller = "";
$category = "";
$order = "priceDesc";
$sql= 'SELECT * FROM product WHERE product_status = 1';
if(isset($keyword) && $keyword !=""){
    $sql.=' AND product_title LIKE "%'.$keyword.'%" AND product_about LIKE "%'.$keyword.'%" AND product_content LIKE "%'.$keyword.'%"';
}
if(isset($seller) && $seller !=""){
    $sql.=' AND product_owner = {$seller}"';
}       
if(isset($category) && $category !=""){     
    $sql.=' AND product_category = "'.$category.'"';
}   
if(isset($order) && $order !=""){
    if($order == 'priceAsc') {
        $sql.=' ORDER BY product_amount ASC';
    } else if($order == 'priceDesc') {
        $sql.=' ORDER BY product_amount DESC';
    }else if($order == 'sale') {
        $sql.=' ORDER BY product_sale DESC';
    }elseif($order == 'comment'){
        $sql.=' ORDER BY product_rating DESC';
    }
} else {
    $sql.=" ORDER BY product_id DESC";
}       
$sql.=" LIMIT 30"; // add limit, $start, $max
echo $sql.'<br>';
foreach($dbh->rawQuery($sql) as $product){
    echo 'Product ID:'.$product['product_id'].'
    Product Title:'.$product['product_title'].'
    Product Price:'.$product['product_amount'].'<br>';
}
?>