Cevaplar
-
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 tablosuCREATE 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 tablosuCREATE 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
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 degistir11 yıl önce yazılmış -
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 yapabilirim11 yıl önce yazılmış
-