v2.5.2
Giriş yap

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

seyfullahki
573 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;
Cevap yaz
Cevaplar (4)
makifgokce
1728 gün önce

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

Ç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 :))

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

makifgokce
1729 gün önce

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>