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
Soru hatalı mı? 👎
Eğer sorunun kurallara aykırı olduğunu düşünüyorsanız lütfen bize bildirin!
Cevaplar (1)
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.