PDO ile kategori sırasını html <option> içerisinde nasıl listelerim?
Veritabanında kayıtlı kategori sırasını misal olarak maksimum 20 sıra olmasını istesek,
<select>
<option>1</option>
<option>2</option>
<option>3</option>
...
<option>19</option>
<option>20</option>
</select>
şeklinde hepsi döngü içerisinde maddeler halinde, veritabanındaki miktar kadar, örneğin 5 kaydı (20 sıra numarasının içinde) nasıl sıralayabilirim.
- SQL Tablom:
CREATE TABLE `firma_profili` (
`id` int(11) UNSIGNED NOT NULL,
`baslik` varchar(200) COLLATE utf8_turkish_ci NOT NULL,
`sef` varchar(200) COLLATE utf8_turkish_ci NOT NULL,
`icerik` text COLLATE utf8_turkish_ci NOT NULL,
`kategori_sira` int(11) UNSIGNED NOT NULL,
`durum` tinyint(1) NOT NULL DEFAULT 1
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_turkish_ci;
Soru hatalı mı? 👎
Eğer sorunun kurallara aykırı olduğunu düşünüyorsanız lütfen bize bildirin!
Cevaplar (4)
istediğin bu galiba

<?php
$data = $db->prepare("SELECT * FROM `firma_profili` WHERE `durum` = 1 ORDER BY `kategori_sira` ASC");
$data->execute();
$rows = $data->fetchAll(PDO::FETCH_OBJ);
$c = $data->rowCount();
?>
<select name="sira" size="7" class="form-control" multiple="">
<?php
foreach($rows as $key => $row){
if($key >= 20){
break;
}
?>
<option style='height:20px' value='<?=$row->id?>'><?=$row->kategori_sira.' - '. $row->baslik?></option>
<?php
}
if($c < 20){
$x = 20 - $c;
for($i; $i < $x; $i++){
$c++;
?>
<option style='height:20px' value='<?=$c?>' disabled><?=$c.' - Disable'?></option>
<?php
}
}
?>
</select>
Çok teşekkür ederim @makifgokce
İşimi biraz değişiklikle gördü, verdiğin kodlar sayesinde sadece seçileceklerle seçilmeyeceklerin yerini değiştirmem yeterli oldu sağolasın :))
Kodları bu şekliyle yazdığımda illegal bir string hatasıyla karşılaşıyorum, aslında dün kodlarımı ve sorumu uzunca yazmıştım ama biraz daha anlaşılabilsin diye düzeltmek zorunda kaldım. Yazdığım kodlarla istediğim sonucu elde edememin sebebini anlayamadım (aslında kayıtların sırasını <option></option> içine yazdırıp maksimum 20 sıraya kadar seçme hakkının olmasını istemem), çok fazla bilgim olmadığı için basit bir for döngüsüde işimi görür diye şöyle yazmıştım:
Aldığım Hata:
https://hizliresim.com/mRFE5j
Yapmak İstediğim Kategori Sırasının Ekran Çıktısı:
https://hizliresim.com/aS3O1y
Yazdığım Kodlar:
<?php
if (isset($_POST['menubuton'])) {
$baslik = post('baslik');
$icerik = $_POST['editor1'];
$oncelik = post('sira');
if(!$baslik || !$icerik){
uyari('Boş alan bırakmayınız','danger');
}else{
$varmi = $db->prepare("SELECT * FROM firma_profili WHERE sef=:s");
$varmi->execute([':s' => sef_link($baslik)]);
if($varmi->rowCount()){
uyari("daha önce eklenmiş", "danger");
}else{
$kaydet = $db->prepare("INSERT INTO firma_profili SET
baslik =:b,
sef =:s,
icerik =:i,
sira =:oncelik,
durum =:d
");
$kaydet->execute([
':b' => $baslik,
':s' => sef_link($baslik),
':i' => $icerik,
':oncelik' => $oncelik,
':d' => 1
]);
if($kaydet->rowCount()){
uyari('başarıyla eklendi','success');
go("yonetim/firmaprofili.php", 2);
}else{
print_r($kaydet->errorInfo());
}
}
}
}
?>
<form action="" enctype="multipart/form-data" class="card-form" method="POST">
<select name="sira" size="7" class="form-control" multiple="">
<?php
$var = $db->prepare("SELECT * FROM firma_profili WHERE durum=:d");
$var->execute([':d' => 1]);
$cekk = $var->fetch(PDO::FETCH_OBJ);
for ($i=1; $i <= 20; $i++) { ?>
<!-- echo "<option style='height:20px' value='$i'>$i</option>"; -->
<option value='1' <?php
if ($var->rowCount() == $i) {
if ($i == $cekk->sira) {
$a = 'selected';
echo $a;
} else {
$a = 'disabled';
echo $a;
}
}
// echo $i <= !isset($cekk->sira) ? 'selected' : 'disabled';
?>
><?php echo $i;?></option>";
<?php } ?>
</select>
<button type="submit" name="menubuton" class="btn btn-primary">Profil Ekle
<i class="ft-plus position-right"></i>
</button>
</form>
Yazdığım Kodlarla Çalışan Yerin Ekran Çıktısı: (Burada sadece veritabanına kayıtlı miktar 4 olduğu için sadece 4 rakamı pasife alınıyor)
https://hizliresim.com/lKBV7o
...Yazdığım yerlerde hata var bana önerebileceğiniz bir şey var mı, yani siz kategori sırasını menülerinize verdirirken hangi yolu tercih ediyorsunuz? bu konuda yardımcı olabilirseniz çok sevinirim
Anladığım kadarıyla böyle bişey istiyorsun.
$rows un db den gelen veri olduğunu varsayarak.
<select>
<?php
foreach($rows as $key => $row)
{
if($key > 20)
{
break; // 20 den büyükse döngüyü durduracak
}
?>
<option value="<?php echo $row["id"]; ?>"><?php echo $row["baslik"]; ?></option>
<?php
}
?>
</select>