v2.5.2
Giriş yap

PDO ile kategori sırasını html <option> içerisinde nasıl listelerim?

seyfullahki
574 defa görüntülendi

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;
seyfullahki
1728 gün önce

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