abstractman
Decapat
- Katılım
- 30 Ocak 2022
- Mesajlar
- 100
- Çözümler
- 2
Daha fazla
- Cinsiyet
- Erkek
E-ticaret sitesi yaptım ürünleri çeşitli kategorilere göre filtreliyorum. Şu an kodumda mantık hatası var.
Örneğin 64GB ve 128GB hafıza seçersem hiç bir ürün gelmiyor ama 64GB hafıza ve 48MP kamera seçersem istediğim ürün geliyor. Sorunun sorguda olduğunu biliyorum ama çözemedim. İşte kullandığım tablolar:
"Ozellik_tbl" tablosunun sütunları şu şekilde: OzID/OzAdi/kategori/deger
"urnozellik_tbl" tablosu: uoID/OzellikID/urunID
İsterseniz verilerden örnekler de atabilirim.
En son da "Urunler_tbl" tablosundan ürünü çekiyorum. İşte gerekli kodlar:
Bu sorguları oluşturduğum fonksiyon:
Burası da filtreleme kısmının formu ve uygulaya basınca gönderilmesi.
Örneğin 64GB ve 128GB hafıza seçersem hiç bir ürün gelmiyor ama 64GB hafıza ve 48MP kamera seçersem istediğim ürün geliyor. Sorunun sorguda olduğunu biliyorum ama çözemedim. İşte kullandığım tablolar:
"Ozellik_tbl" tablosunun sütunları şu şekilde: OzID/OzAdi/kategori/deger
"urnozellik_tbl" tablosu: uoID/OzellikID/urunID
İsterseniz verilerden örnekler de atabilirim.
En son da "Urunler_tbl" tablosundan ürünü çekiyorum. İşte gerekli kodlar:
Bu sorguları oluşturduğum fonksiyon:
PHP:
Ürünleri getirme fonksiyonu
function getProducts($conn, $selectedSellers, $selectedColors, $selectedCategory, $selectedBrands, $selectedFeatures) {
$username2 = $_SESSION['username'];
// Kullanıcılar tablosundan ktur değerini alma
$sorgu1 = "SELECT * FROM Kullanicilar_Tbl WHERE Kullaniciadi = '$username2'";
$result1 = $conn->query($sorgu1);
if ($result1) {
// Sorgu başarılı bir şekilde çalıştıysa devam edelim
if ($result1->num_rows > 0) {
$row = $result1->fetch_assoc(); // İlk satırı al
$ktur = $row['ktur']; // ktur değerini al
$girisci = $row['K_ID'];
}
}
// Koşulları bir araya getirmek için bir dizi kullanıyoruz
$conditions = [];
if (!empty($selectedBrands)) {
$brands = implode("','", $selectedBrands);
$conditions[] = "MarkaID IN ('$brands')";
}
if (!empty($selectedSellers)) {
$sellers = implode(',', $selectedSellers);
$conditions[] = "SaticiID IN ($sellers)";
}
if (!empty($selectedColors)) {
$colors = implode(',', $selectedColors);
$conditions[] = "renk IN ($colors)";
}
if (!empty($selectedCategory)) {
$conditions[] = "KategoriID = '$selectedCategory'";
}
$conditions[]= " durum = 1";
$productSql = "SELECT * FROM Urunler_tbl";
if (!empty($conditions)) {
$productSql .= " WHERE " . implode(" AND ", $conditions);
}
if (!empty($selectedFeatures)) {
$features = implode(',', $selectedFeatures);
$productSql .= " AND UrunID IN (
SELECT urunID
FROM urnozellik_tbl
WHERE OzellikID IN ($features)
GROUP BY urunID
HAVING COUNT(DISTINCT OzellikID) = " . count($selectedFeatures) . "
)";
}
Burası da filtreleme kısmının formu ve uygulaya basınca gönderilmesi.
PHP:
<h2>Ürün Özellikleri</h2>
<ul class="list-group">
<?php
$sql = "SELECT o.*, oa.OzAd
FROM Ozellik_tbl o
INNER JOIN OzAd oa ON o.OzAdi = oa.OzADID
WHERE o.kategori = 1";
$result = $conn->query($sql);
// Özellikleri gruplayarak listeleme
$groupedProperties = array();
if ($result->num_rows > 0) {
while($row = $result->fetch_assoc()) {
$propertyName = $row["OzAd"];
$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 $propertyType => $properties) {
echo '<li class="list-group-item">';
echo '<h5>' . $propertyType . '</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>
<!-- Ürün Özellikleri divi sonu -->
<!-- Uygula butonu -->
<button type="submit" class="btn btn-primary mt-3" name="apply_btn">Uygula</button>
</form>
</div>
</div>
<!-- filtre paneli divi sonu -->
<!-- Ü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'] : '';
$selectedBrands = !empty($_POST['selected_brands']) ? $_POST['selected_brands'] : [];
$selectedFeatures = !empty($_POST['selected_features']) ? $_POST['selected_features'] : [];
getProducts($conn, $selectedSellers, $selectedColors, $selectedCategory, $selectedBrands, $selectedFeatures);
} else {
// Hiçbir filtre uygulanmadığında tüm ürünleri listele
getProducts($conn, [], [], '', [], []);
}
?>
</div>
</div>
</div>
Son düzenleyen: Moderatör: