abstractman
Decapat
- Katılım
- 30 Ocak 2022
- Mesajlar
- 100
- Çözümler
- 2
Daha fazla
- Cinsiyet
- Erkek
İlk önce veri tabanı tablolarımı anlatmak istiyorum bir e-ticaret sitesi yapıyorum ve sayfada filtreleme yapmak için PHP kullanıyorum.
İşte tablolarım "urunler_tbl": Urunıd / saticiıd / urunadi /fiyat / urunaciklama / renk / kategoriıd / stok "urnozellik_tbl": Uoıd / ozellikıd / /urunıd
"ozellik_tbl": Ozıd / ozadi / kategori /deger
Şimdi şöyle ilk olarak en basitinden sadece marka ve renk filtreliyordum bunlar da zaten urunler tablomda var ama şimdi özellik filtrelemem gerekiyor ve benim özelliklerim çoka çok tablo ile oluşturuldu basitçe kodlarımı atayım.
Bu kod marka ve renk filtreliyor şimdi aşağıya form kodlarımıda bırakıyorum.
Ben ise son kısım olan ürünlerin özelliklerinin de filtrelenmesini istiyorum ama uzun süredir uğraşmama rağmen başaramadım biraz karışık anlattım sitemin görselini de bırakayım anlamak kolay olsun. ( ek olarak ürün özellikleri kısmı da "Ozellikler_tbl" sinden geliyor ).
İşte tablolarım "urunler_tbl": Urunıd / saticiıd / urunadi /fiyat / urunaciklama / renk / kategoriıd / stok "urnozellik_tbl": Uoıd / ozellikıd / /urunıd
"ozellik_tbl": Ozıd / ozadi / kategori /deger
Şimdi şöyle ilk olarak en basitinden sadece marka ve renk filtreliyordum bunlar da zaten urunler tablomda var ama şimdi özellik filtrelemem gerekiyor ve benim özelliklerim çoka çok tablo ile oluşturuldu basitçe kodlarımı atayım.
PHP:
// Satıcıları veritabanından çekme (Sadece Kategori_ID'si 1 olan ürünlerin satıcıları)
$sql = "SELECT s_ID, s_Ad FROM Saticilar_Tbl WHERE s_ID IN (SELECT DISTINCT SaticiID FROM Urunler_tbl WHERE KategoriID = 1)";
$result = $conn->query($sql);
// Ürünleri getirme fonksiyonu.
function getProducts($conn, $selectedSellers, $selectedColors, $selectedCategory) {
// Satıcılar için SQL sorgusu.
$sellerSql = "";
if (!empty($selectedSellers)) {
$sellerSql = " SaticiID IN (".implode(',', $selectedSellers).") ";
}
// Renkler için SQL sorgusu.
$colorSql = "";
if (!empty($selectedColors)) {
if (!empty($sellerSql)) {
$colorSql .= " AND ";
}
$colorSql .= " renk IN (".implode(',', $selectedColors).") ";
}
// Kategori için SQL sorgusu.
$categorySql = "";
if (!empty($selectedCategory)) {
if (!empty($sellerSql) || !empty($colorSql)) {
$categorySql .= " AND ";
}
$categorySql .= " KategoriID = '".$selectedCategory."' ";
}
// Ürünleri getirme SQL sorgusu.
$productSql = "SELECT * FROM Urunler_tbl";
if (!empty($sellerSql) || !empty($colorSql) || !empty($categorySql)) {
$productSql .= " WHERE";
if (!empty($sellerSql)) {
$productSql .= $sellerSql;
}
if (!empty($colorSql)) {
$productSql .= $colorSql;
}
if (!empty($categorySql)) {
$productSql .= $categorySql;
}
}
// Ürünlerin renklerini göster.
$colors = array();
$colorSql = "SELECT * FROM Renk_tbl";
$colorResult = $conn->query($colorSql);
if ($colorResult->num_rows > 0) {
while($colorRow = $colorResult->fetch_assoc()) {
$colors[$colorRow["RenkID"]] = $colorRow["RenkAdi"];
}
}
// Ürünleri getirme.
$productResult = $conn->query($productSql);
if ($productResult->num_rows > 0) {
echo "<div class='container mt-5'>";
echo "<div class='row'>"; // Kartları saran row elementi.
while($productRow = $productResult->fetch_assoc()) {
echo "<div class='col-md-6'>";
echo "<div class='card mb-3'>";
echo "<div class='card-body'>";
echo "<h5 class='card-title'>" . $productRow['UrunAdi'] . "</h5>";
echo "<p class='card-text'>" . substr($productRow['UrunAciklama'], 0, 50) . "...</p>"; // Açıklamayı belirli bir karakter limitine kısalt.
echo "<p class='card-text'><strong>Fiyat: </strong>" . $productRow['fiyat'] . "</p>";
// Ürünün rengini göster.
if (isset($colors[$productRow['renk']])) {
echo "<p class='card-text'><strong>Renk: </strong>" . $colors[$productRow['renk']] . "</p>";
} else {
echo "<p class='card-text'><strong>Renk: </strong>Bilinmeyen Renk</p>";
}
echo "</div>";
echo "</div>";
echo "</div>";
}
echo "</div>"; // Row elementini kapat.
echo "</div>"; // Container elementini kapat.
} else {
echo "<p class='mt-3'>Seçilen kriterlere uygun ürün bulunamadı.</p>";
}
}
Bu kod marka ve renk filtreliyor şimdi aşağıya form kodlarımıda bırakıyorum.
Kod:
<!DOCTYPE html>
<html lang="tr">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Marka ve Renk Seçimi</title>
<!-- Bootstrap CSS dosyası -->
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.5.2/css/bootstrap.min.css">
<style>
.seller-list {
list-style: none;
padding: 0;
}
.card-text {
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
}
/* Filtre paneli stil */
.filter-panel {
padding: 15px;
margin-top: 50px;
}
.seller-list input[type="checkbox"],
.list-group-item input[type="checkbox"] {
width: 15px;
height: 15px;
margin-right: 5px;
vertical-align: middle;
}
/* Kartlar stil */
.product-card {
margin-bottom: 10%;
}
.product-card .card {
height: 100%;
}
.product-card .card-body {
height: 100%;
display: flex;
flex-direction: column;
}
.card {
transition: transform 0.2s ease;
}
.card:hover {
transform: scale(1.05);
}
</style>
</head>
<body>
<?php include 'header.php'; // Header dosyasını çağırarak sayfanın başında navbar'ı oluştur ?>
<div class="container-fluid mt-3">
<div class="row">
<!-- filtre paneli -->
<div class="col-md-4">
<div class="filter-panel">
<h2 class="mt-4">Markalar </h2>
<form method="POST">
<ul class="list-group seller-list">
<!-- PHP kodu ile satıcıları listeleme -->
<?php
if ($result->num_rows > 0) {
while($row = $result->fetch_assoc()) {
echo "<li class='list-group-item'><input type='checkbox' name='selected_sellers[]' value='" . $row["s_ID"] . "'>" . $row["s_Ad"] . "</li>";
}
} else {
echo "<li class='list-group-item'>Satıcı bulunamadı.</li>";
}
?>
</ul>
<h2 class="mt-4">Renkler</h2>
<ul class="list-group renk-list">
<!-- Renklerin listelenmesi -->
<?php
$colorSql = "SELECT * FROM Renk_tbl";
$colorResult = $conn->query($colorSql);
if ($colorResult->num_rows > 0) {
while($colorRow = $colorResult->fetch_assoc()) {
echo "<li class='list-group-item'><input type='checkbox' name='selected_colors[]' value='" . $colorRow["RenkID"] . "'>" . $colorRow["RenkAdi"] . "</li>";
}
}
?>
</ul>
<br>
<h2>Ürün Özellikleri</h2>
<ul class="list-group">
<?php
$sql = "SELECT * FROM Ozellik_tbl where kategori = 1";
$result = $conn->query($sql);
// Özellikleri gruplayarak listeleme.
$groupedProperties = array();
if ($result->num_rows > 0) {
while($row = $result->fetch_assoc()) {
$propertyName = $row["OzAdi"];
$propertyValue = $row["deger"];
// Grup adına göre özellikleri gruplama.
if (!isset($groupedProperties[$propertyName])) {
$groupedProperties[$propertyName] = array();
}
$groupedProperties[$propertyName][] = array(
"id" => $row["OzID"],
"value" => $propertyValue
);
}
// Grupları listeleme.
foreach ($groupedProperties as $groupName => $properties) {
echo '<li class="list-group-item">';
echo '<h5>' . $groupName . '</h5>';
foreach ($properties as $property) {
echo '<input type="checkbox" name="selected_features[]" value="' . $property["id"] . '">';
echo $property["value"] . '<br>';
}
echo '</li>';
}
} else {
echo '<li class="list-group-item">Özellik bulunamadı.</li>';
}
?>
</ul>
<!-- Uygula butonu -->
<button type="submit" class="btn btn-primary mt-3" name="apply_btn">Uygula</button>
</form>
</div>
</div>
<!-- Ürün kartları -->
<div class="col-md-7">
<div class="container mt-5">
<div class="row">
<?php
// Form gönderilmiş mi kontrol et.
if(isset($_POST['apply_btn'])) {
$selectedSellers = !empty($_POST['selected_sellers']) ? $_POST['selected_sellers'] : [];
$selectedColors = !empty($_POST['selected_colors']) ? $_POST['selected_colors'] : [];
$selectedCategory = isset($_POST['selected_category']) ? $_POST['selected_category'] : '';
getProducts($conn, $selectedSellers, $selectedColors, $selectedCategory);
} else {
// Hiçbir filtre uygulanmadığında tüm ürünleri listele.
getProducts($conn, [], [], '');
}
?>
</div>
</div>
</div>
</div>
</div>
<!-- Bootstrap JS dosyası (jQuery ve Popper.js dahil) -->
<script src="https://code.jquery.com/jquery-3.5.1.slim.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/@popperjs/[email protected]/dist/umd/popper.min.js"></script>
<script src="https://stackpath.bootstrapcdn.com/bootstrap/4.5.2/js/bootstrap.min.js"></script>
</body>
</html>
Ben ise son kısım olan ürünlerin özelliklerinin de filtrelenmesini istiyorum ama uzun süredir uğraşmama rağmen başaramadım biraz karışık anlattım sitemin görselini de bırakayım anlamak kolay olsun. ( ek olarak ürün özellikleri kısmı da "Ozellikler_tbl" sinden geliyor ).
Dosya Ekleri
Son düzenleme: