Kodları lütfen aşağıdaki butonları kullanarak renklendirin. Örnek: <php> echo "Selam Dünya"; </php>
Yardım
karakter kaldı

etiket sistemi

internetde araştırdıklarım olsun daha önceden hep benim yaptığım şekilde yapılan etiket sistemleri,

veritabanını şişirmekden başka bişey yaptığı yok, veritabanı şişirmeden nasıl bir etiket ekleme mantığında kodlayabilirim, wordpress sistemi gibi bu konuda bilgisi olan varsa yardımcı olabilirmi


genel olarak hep bu şekilde bulunuyor internetde araştırma yaptığım zaman
$etiket = $_POST['etiket'];

$ayir = explode(',', $etiket);

foreach($ayir as $a)

{

$etiketim = trim($a);

$insertSQL = sprintf("INSERT INTO etiket (etiket, icerik_id) VALUES (%s, %s)", GetSQLValueString($etiketim, "text"), GetSQLValueString($icerik_id, "int"));

mysql_select_db($database_etiketim, $etiketim); $sonuc = mysql_query($insertSQL, $etiketim) or die(mysql_error());

}
+0
-0
Cevaba KatılıyorumKatılmıyorum
Cevap Yaz Yorum Yaz Arşivime Ekle Takip Et

Cevaplar

  • siyahbeyaz adlı üyenin fotoğrafı
    11 yıl önce yazılmış
    472 cevap - 20 soru
    wordpress tarzi birsey yapmak istiyorsunuz bu konuda düşünceniz çok iyi.

    ilk olarak veritabanımızdan başlayalım.
    2 adet tablo örnek veriyorum.

    1.tablomuz = veriler olsun
    2.tablomuz = etiketler olsun

    veriler tablosu
    CREATE TABLE `veriler` (
      `id` int(11) NOT NULL auto_increment,
      `baslik` varchar(250) default NULL,
      `icerik` mediumtext,
      `hit` int(11) default '1',
      `tarih` datetime default NULL,
      PRIMARY KEY  (`id`)
    ) ENGINE=MyISAM;
    


    etiketler tablosu
    CREATE TABLE `etiketler` (
      `etiketlerID` int(11) NOT NULL auto_increment,
      `etiket` varchar(250) default NULL,
      `self` varchar(250) default NULL,
      `veri_id` int(11) default NULL,
      PRIMARY KEY  (`etiketlerID`)
    ) ENGINE=MyISAM;
    


    şimdi verilerimizi listelerken veriler ile beraber etiketlerimizi gösterelim. bunada listele.php diyelim

    listele.php
    $sql = mysql_query("Select * from veriler") or die(mysql_error());
    	while($yaz=mysql_fetch_array($sql)) 
    	{
    		echo "<a href=\"oku.php?id=$yaz["id"]\">{$yaz["baslik"]}</a><br />";
    		echo substr($yaz["icerik"],0,100);
    		echo "<hr /> <strong>Etiketler </strong>";
    			$sql2 = mysql_query("Select * from etiketler where veri_id='".$yaz[]."'");
    			while($etk = mysql_fetch_array($sql2) 
    			{
    				echo '<a href="/etiket/'.$etk["self"].'">'.$etk["etiket"].'</a>, ';
    			}
    	} 
    


    oku.php icin kodlarımız.

    <?
    $sql = mysql_query("Select * from veriler where id='".$_GET["id"]."'") or die(mysql_error());
    $yaz = mysql_fetch_array($sql);
    
    /*
    hit sayısını artiralim.
    */
    $artir = $yaz["hit"] + 1;
    mysql_query("update veriler set hit='".$artir."' where id='".$_GET["id"]."'");
    
    /* Verilerimizi Getirelim.. */
    echo "<h1>".$yaz["baslik"]."</h1>";
    echo $yaz["icerik"];
    echo "<br /> Veri ".$yaz["tarih"]." tarihinde Eklendi. ".$yaz["hit"]." Kişi Okudu. ";
    
    
    /* Etiketlerimizi Listeleyelim */
    
    echo "<strong>Etiketler :</strong>";
    
    $etiketSorgu = mysql_query("Select * from etiketler where veri_id='".$_GET["id"]."'");
    $cikti ="";
    while($EtiketYaz=mysql_fetch_array($etiketSorgu)) {
    $cikti .= '<a href="/etiket/'.$EtiketYaz["self"].'">'.$EtiketYaz["etiket"].'</a>, ';
    }
    $cikti = rtrim($cikti,", ");
    echo $cikti;
    
    /*
    burda cıktı kullanmamızın amacı. en sıradaki verinin , virgül ve bosluk alanını almak. 
    eğer bu işlemi yapmasaydık bize tag1, tag2, tag3,   seklinde bir cıktı verirdi. 
    ve $cikti degiskenine atigimiz degerleri rtrim ile en sondaki , ve boslugu aldık.
    */
    
    ?>
    


    birde veri ekleme ve güncelleme olayı var. onlarıda yazayım.
    bunun icin bir form.html dosyasını ele alıyorum.
    form.html
    <form method="post" action="kaydet.php">
    Baslık :<br >
    <input type="text" name="baslik" /><br />
    İçerik : <br />
    <textarea name="icerik"></textarea><br />
    Etiketler : <br />
    <input type="text" name="etiketler"> <em>Etiketleri Virgül ile ayırınız. örnek: etiket1,etiket2</em> <br />
    <button type="submit">Kaydet</button>
    </form>
    


    kaydet.php
    <?
    
    function seola($s) 
    {
        $tr = array('ş','Ş','ı','İ','ğ','Ğ','ü','Ü','ö','Ö','Ç','ç');
        $eng = array('s','s','i','i','g','g','u','u','o','o','c','c');
        $s = str_replace($tr,$eng,$s);
        $s = strtolower($s);
        $s = preg_replace('/&.+?;/', '', $s);
        $s = preg_replace('/[^%a-z0-9 _-]/', '', $s);
        $s = preg_replace('/\s+/', '-', $s);
        $s = preg_replace('|-+|', '-', $s);
        $s = trim($s, '-');
        return $s;
    }
    
    $baslik = $_POST["baslik"];
    $icerik = $_POST["icerik"];
    $etiketler = $_POST["etiketler"];
    
    mysql_query("INSERT INTO veriler (baslik,icerik,tarih) VALUES ('".$baslik."','".$icerik."',now())") or die(mysql_error());
    $pid = mysql_insert_id();  // en son eklenen verinin id numarasını verir.
    
    $ayir = explode(",",$etiketler);
    foreach($etiketler as $deger) 
    {
    	if(!empty($deger)) 
    	{
    		mysql_query("INSERT INTO etiketler (etiket,self) VALUES ('".trim($deger)."','".seola($deger)."')");
    	}
    }
    echo "Veri Eklendi.";
    ?>
    
    • siyahbeyaz adlı üyenin fotoğrafı siyahbeyaz
      listele.php alanında ufak bir yanlıslık yapmısım

      $sql2 = mysql_query("Select * from etiketler where veri_id='".$yaz[]."'");
      

      yeri
      $sql2 = mysql_query("Select * from etiketler where veri_id='".$yaz["id"]."'");
      

      olarak degistir
      11 yıl önce yazılmış
    • pl_phe adlı üyenin fotoğrafı pl_phe
      çok teşekkürederim ama bişe sorucam :)

      bu sistemde ben baktımda mesela aynı etiketden birtane daha eklediğim zaman varklı bir veri girişinde
      tekrar ekleme yapıyor

      yani etiketler tablosunda şöyle birşey olucak ozaman

      ID-1 - php - veriID-1
      ID-2 - css - veriID-1
      ID-3 - php - veriID-2
      ID-4 - php - veriID-3

      bunun böyle olmamasını nasıl yapabilirim
      11 yıl önce yazılmış