MULTİSELECT İÇİNDEKİ VERİYİ ÇEKME
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
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.