v2.5.2
Giriş yap

MULTİSELECT İÇİNDEKİ VERİYİ ÇEKME

kaandenizblkn
279 defa görüntülendi

Merhabalar ekte paylaşmış olduğum resimde araç modelleri vs gözüküyor bu modellerin hepsini cekmem lazım bunu nasıl yapabilirim. php ile

https://i.hizliresim.com/a0wjc8p.png

Cevap yaz
Cevaplar (1)
ebykdrms
663 gün önce

Sadece PHP ile yapacaksanız (her seçimde sayfa yenilenecek şekilde) bu <select> elementlerini bir <form> elementiyle sarmalayın. Bu form elementinin method attribute'si post olsun.
Ayrıca her bir <select> elementine onchange attribute'si vererek değeri değiştiğinde form'un submit işlemi gerçekleştirmesini (form verilerini post yöntemiyle iletmesini) sağlayın.
Başlangıçta sadece ilk <select> elementinin <option>'ları PHP ile doldurulmuş olacak. Diğer <select> elementleri boş olacak.
Diğer select elementleri sadece bir önceki select'in değeri alınabilmişse PHP tarafından doldurulacak.

<?php
// her bir select'in elemanlarını PHP dizilerinde tutuyoruz.
$car_select_1 = ["BMV","TOYOTA","MERCEDES"]; // İlk select'in elemanları baştan belli.
$car_select_2 = []; // İkinci select'in elemanları sadece ilk select'te seçim yapıldıysa doldurulacak.
$car_select_3 = []; // Üçüncü select'in elemanları sadece ikinci select'te seçim yapıldıysa doldurulacak. 
$car_select_4 = []; // Dördüncü select'in elemanları sadece üçüncü select'te seçim yapıldıysa doldurulacak.

$select1 = ""; // 1.select'te seçilmiş olan değer. Şu an boş.
$select2 = ""; // 2.select'te seçilmiş olan değer. Şu an boş.
$select3 = ""; // 3.select'te seçilmiş olan değer. Şu an boş.
$select4 = ""; // 4.select'te seçilmiş olan değer. Şu an boş.

$allItems = []; // Tüm seçimler yapıldığında listelenecek araçların verilerini tutacak dizi.

// Eğer ilk select'te seçim yapılmışsa
if(isset($_POST["car_select_1"])) {
    $select1 = $_POST["car_select_1"];
    $car_select_2 = getSelectItems($select1, "select2"); // Bu fonksiyonu uydurdum. Burada $select1 verisini kullanarak ikinci select'e hangi verilerin geleceğini veritabanından çekmişsiniz ve $car_select_2 değişkenine atamışsınız gibi düşünün.
    // $car_select_2 = ["1-Serisi", "2-Serisi", "3-Serisi"] gibi bir değer atanmış olmalı.
}

// Eğer ikinci select'te de seçim yapıldıysa ve birinci select'te seçilmiş olan değer belliyse (ilk if'e girilmiş olacağı için belli olmalı)
if($select1!="" && isset($_POST["car_select_2"]) && $_POST["car_select_2"]!="0") {
    $select2 = $_POST["car_select_2"];
    $car_select_3 = getSelectItems($select2, "select3"); // Bu fonksiyonla $select2 değerine bakılarak üçüncü select'te hangi veriler olacağı veritabanından çekiliyor.
    // $car_select_3 = ["E81 - 2005 -> 2007", "E81 - 2008 -> 2010", "E81 - 2010 -> 2012"] gibi bir değer atanmış olmalı.
}

// Eğer ücüncü select'te de seçim yapıldıysa ve ilk iki select'in seçimleri de belliyse (ilk 2 if'e de girilmiş olacağına göre belli olmalı)
if($select1!="" && $select2!="" && isset($_POST["car_select_3"]) && $_POST["car_select_3"]!="0") {
    $select3 = $_POST["car_select_3"];
    $car_select_4 = getSelectItems($select3, "select4"); // Bu fonksiyonla $select3 değerine bakılarak dördücü select'te hangi veriler olacağı veritabanından çekiliyor.
    // $car_select_4 = ["116i - 115HP", "120i - 230HP"] gibi bir değer atanmış olmalı.
}

// Eğer dördüncü select'te de seçim yapılmışsa artık ilgili verileri seçebiliriz.
if($select1!="" && $select2!="" && $select3!="" && isset($_POST["car_select_4"]) && $_POST["car_select_4"]!="0") {
    $select4 = $_POST["car_select_4"];
    $allItems = getItems($select1, $select2, $select3, $select4); // Burada da tüm seçimlere göre veritabanından listelenecek araçları getiren bir fonksiyon var.
}

// Böylece kaç tane seçim yapılmışsa ona göre verileri elimizde topladık.
// Artık bu verileri html'de göstermemiz için bütün veriler elimizde.
?>

<!-- select'lerin olduğu form elementi -->
<form method="post">
    <select name="car_select_1" onchange="if(this.value != 0) { this.form.submit(); }">
        <?php foreach($car_select_1 as $item) { ?>
            <option <?=($item===$select1 ? "selected" : "")?> value="<?=$item?>"><?=$item?></option>
        <?php } ?>
    </select>
    <select name="car_select_2" onchange="if(this.value != 0) { this.form.submit(); }">
        <option value="0" disabled>Seçiniz</option>
        <?php foreach($car_select_2 as $item) { ?>
            <option <?=($item===$select2 ? "selected" : "")?> value="<?=$item?>"><?=$item?></option>
        <?php } ?>
    </select>
    <select name="car_select_3" onchange="if(this.value != 0) { this.form.submit(); }">
        <option value="0" disabled>Seçiniz</option>
        <?php foreach($car_select_3 as $item) { ?>
            <option <?=($item===$select3 ? "selected" : "")?> value="<?=$item?>"><?=$item?></option>
        <?php } ?>
    </select>
    <select name="car_select_4" onchange="if(this.value != 0) { this.form.submit(); }">
        <option value="0" disabled>Seçiniz</option>
        <?php foreach($car_select_4 as $item) { ?>
            <option <?=($item===$select4 ? "selected" : "")?> value="<?=$item?>"><?=$item?></option>
        <?php } ?>
    </select>
</form>

<!-- Seçilen içeriğin gösterileceği alan -->
<div>
    <?php if(count($allItems)==0) { ?>
        <div>Tüm select'lerde seçim yaptıktan sonra burada içerik görüntülecenek.</div>
    <?php } else { ?>
        <?php foreach($allItems as $item) { ?>
            <div><?=print_r($item)?></div>
        <?php } ?>
    <?php } ?>
</div>

Kodları test etmedim. Kurgusal olarak böyle bir yapı kullanabilirsiniz.
<select> elementlerindeki onchange attribute'leri sayesinde herhangi bir elementte değişiklik olduğunda kapsayıcı form verileri aynı sayfaya post ediyor. Biz de sayfanın başında post edilmiş verilere göre gereken aksiyonu alıyoruz.