lostyazilim
tr.link

Gelen Metni Değiştirme

7 Mesajlar 1.290 Okunma
acebozum
tr.link

herace herace WM Aracı Kullanıcı
  • Üyelik 03.11.2012
  • Yaş/Cinsiyet 39 / E
  • Meslek Öğretmen
  • Konum Ankara
  • Ad Soyad ** **
  • Mesajlar 15
  • Beğeniler 0 / 0
  • Ticaret 0, (%0)
Merhaba Arkadaşlar,

TinyMCE ile gönderdiğim bir veride

[yazar]Namık Kemal[/yazar] falanı yazdı. [yazar]Şinasi[/yazar] filanı yazdı.
gibi bir şey alıyorum. Bu veriyi, veri tabanına kaydetmeden önce başka tablodan sorgu yapıp bu yazarın id değerine göre yazarı linke çevirmek istiyorum, mantığını kuramadım sanırım.

[yazar]Namık Kemal[/yazar] falanı yazdı.

yerine

Namık Kemal falanı yazdı.

yazacak yani, nasıl yapabiliriz bunu?
 

 

webimgo

Ibolac Ibolac #php #mysql #wordpress Kullanıcı
  • Üyelik 13.11.2012
  • Yaş/Cinsiyet 33 / E
  • Meslek Öğrenci
  • Konum Eskişehir
  • Ad Soyad ** **
  • Mesajlar 294
  • Beğeniler 46 / 49
  • Ticaret 25, (%96)

$yazi = $_POST['yazi'];
$desen = preg_match_all('#[yazar](.*?)[/yazar]#si', $yazi, $veri);
for($i = 0; $i <= count($veri[1]); $i++)
{
$yazar = $veri[1][$i]; // yazarımınızın adı

// veritabanında yazarı arıyoruz

$yazarbul = mysql_fetch_assoc(mysql_query("SELECT * FROM yazarlar WHERE yazaradi = '$yazar'"));
$yazarID = $yazarbul['yazarid'];

// bulduğumuz veriyi değiştireceğiz.

$degistir = str_replace('[yazar]'.$yazar.'[/yazar]', "[yazar]$yazar[/yazar]", $yazi);

// veritabanına kayıt ediyoruz

$ekle = mysql_query("INSERT INTO yazi (baslik, icerik) VALUES ('$baslik', '$degistir')");
}


Kodu denemedim, hatalar varsa üzerinden geliştirebilirsin. Çalışacağını düşünüyorum :)

Ek Olarak: Yalnız benim verdiğim kod for döngüsünde insert sorgusu olduğundan dolayı her seferinde yeni kayıt oluşturacaktır. Yazıyı içeriği boş halde ekleyip tablodaki icerik kısmını update edersen istediğin şekle girecektir. Yapamazsan yardımcı olabilirim.
 

 

Tüm PHP İşleriniz Yapılır # BOT # SCRIPT # EDIT

herace herace WM Aracı Kullanıcı
  • Üyelik 03.11.2012
  • Yaş/Cinsiyet 39 / E
  • Meslek Öğretmen
  • Konum Ankara
  • Ad Soyad ** **
  • Mesajlar 15
  • Beğeniler 0 / 0
  • Ticaret 0, (%0)
Cevap için çok teşekkür ederim.
Aşağıdaki gibi değiştirdim kodları:
$desen = preg_match_all('#\[yazar\](.*?)\[\/yazar\]#si', $m_icerik, $veri);
for($i = 0; $i <= count($veri[1]); $i++)
{
$yazar = $veri[1][$i]; // yazarımınızın adı
// veritabanında yazarı arıyoruz

$yazarbul = mysql_fetch_assoc(mysql_query("SELECT * FROM yazarlar WHERE y_adi = '$yazar'"));
$yazarID = $yazarbul['y_id'];

// bulduğumuz veriyi değiştireceğiz.

$degistir = str_replace("[yazar]".$yazar."[/yazar]", "$yazar", $m_icerik);

echo $degistir;

}


Şimdilik yazdırıp bakıyorum sonuca, çıktı istediğim gibi değil. Mesela [yazar]Namık Kemal[/yazar] falanı yazdı. [yazar]Şinasi[/yazar] şöyle dedi.
gibi bir veriyi üç kez yazıyor ve önce Namık Kemal' i linkliyor, sonra Şinasi' yi; ama üçüncü yazımda ikisini de linklemiyor. :/
 

 

Ibolac Ibolac #php #mysql #wordpress Kullanıcı
  • Üyelik 13.11.2012
  • Yaş/Cinsiyet 33 / E
  • Meslek Öğrenci
  • Konum Eskişehir
  • Ad Soyad ** **
  • Mesajlar 294
  • Beğeniler 46 / 49
  • Ticaret 25, (%96)
Peki veritabanına eklenirken değilde yazıyı okumak için insanlar açtığında link versen olmaz mı?

Örneğin: Namık Kemal falanı yazdı. Şinasi şunu dedi.

gibi bir yazımız olsun.

İçeriği göstereceğimiz yerde yazarlar tablosundan kontrol yaparak eğer yazar adıyla eşleşen kelime veya kelime öbeği varsa bunu linkle diyebilirsin. Yine str_replace kullanarak yapabilirsin.
 

 

Tüm PHP İşleriniz Yapılır # BOT # SCRIPT # EDIT
wmaraci
wmaraci

herace herace WM Aracı Kullanıcı
  • Üyelik 03.11.2012
  • Yaş/Cinsiyet 39 / E
  • Meslek Öğretmen
  • Konum Ankara
  • Ad Soyad ** **
  • Mesajlar 15
  • Beğeniler 0 / 0
  • Ticaret 0, (%0)

Ibolac adlı üyeden alıntı

Peki veritabanına eklenirken değilde yazıyı okumak için insanlar açtığında link versen olmaz mı?

Örneğin: Namık Kemal falanı yazdı. Şinasi şunu dedi.

gibi bir yazımız olsun.

İçeriği göstereceğimiz yerde yazarlar tablosundan kontrol yaparak eğer yazar adıyla eşleşen kelime veya kelime öbeği varsa bunu linkle diyebilirsin. Yine str_replace kullanarak yapabilirsin.


Dediğin şekilde olsun diye denedim, veriyi gösteren sayfaya kodları ekledim; ama sonuç aynı. :(
 

 

Ibolac Ibolac #php #mysql #wordpress Kullanıcı
  • Üyelik 13.11.2012
  • Yaş/Cinsiyet 33 / E
  • Meslek Öğrenci
  • Konum Eskişehir
  • Ad Soyad ** **
  • Mesajlar 294
  • Beğeniler 46 / 49
  • Ticaret 25, (%96)
Verdiğim kodlar ile olmaz zaten. Diyelim yazıyı çektin. Yazar isimlerini yazı içinde arayacaksın. Eğer varsa yazar ismine link vereceksin.

$yazi = "Namık Kemal falan dedi, Şinasi de bunu dedi.";
$q = mysql_query("SELECT * FROM yazarlar ORDER BY yazaradi ASC");
$r = mysql_fetch_assoc($q)
if(strstr($yazi, $r['yazaradi'])
{
$yazi = str_replace($r['yazaradi'], "$r['yazaradi']", $yazi);
echo $yazi;
}


Bu şekilde olmaz ise birde while döngüsüne alarak deneyebilirsin.
 

 

Tüm PHP İşleriniz Yapılır # BOT # SCRIPT # EDIT

herace herace WM Aracı Kullanıcı
  • Üyelik 03.11.2012
  • Yaş/Cinsiyet 39 / E
  • Meslek Öğretmen
  • Konum Ankara
  • Ad Soyad ** **
  • Mesajlar 15
  • Beğeniler 0 / 0
  • Ticaret 0, (%0)
Bu şekilde de olmadı. Son söylediğin yöntem performanslı olur mu? 500 kelimelik bir yazıyı -diyelim ki 250 yazar var- 250 kez taramak?..

Ek Olarak:

Ek Olarak: İstediğim şey şu şekilde oldu:
// Yazarları bulup ayrıştıralım
$deger = '[yazar]Namık Kemal[/yazar] falanı yazdı. [yazar]Şinasi[/yazar] filanı yazdı.';
preg_match_all('#\[yazar\](.*?)\[/yazar\]#', $deger, $sonuc);

// Dizi İçerisinde yazarlar
$yazarlar = $sonuc[1];

// Replace edilecek değerler ve sonuçları
$yazarBulArray = $sonuc[0];
$yazarDegistirArray = array();

// Şimdi döngüye sokup tek tek kontrol edelim
foreach ($yazarlar as $yazar){
$query = mysql_query("SELECT * FROM yazarlar WHERE yazar_adi = '$yazar'");
if (mysql_affected_rows()){
$row = mysql_fetch_object($query);
$yazarDegistirArray[] = ''.$yazar.'';
}
}

// Değiştirme işlemini gerçekleştir
$deger = str_replace($yazarBulArray, $yazarDegistirArray, $deger);

// Çıktıyı ekrana yazdır
echo $deger;


Tayfun Erbilen' e teşekkür ediyorum. ;)
 

 

wmaraci
wmaraci
Konuyu toplam 1 kişi okuyor. (0 kullanıcı ve 1 misafir)
Site Ayarları
  • Tema Seçeneği
  • Site Sesleri
  • Bildirimler
  • Özel Mesaj Al