lostyazilim
tr.link

PHP=TÜRKÇE KARAKTERLİ veriyi GET ile çekmek için yapılması gereken!

6 Mesajlar 1.040 Okunma
acebozum
tr.link

BEYAZMASTER BEYAZMASTER YÜCE ALLAH'IN aciz 1 kulu Kullanıcı
  • Üyelik 04.02.2020
  • Yaş/Cinsiyet 43 / E
  • Meslek Yazılım...
  • Konum Diğer
  • Ad Soyad O** B**
  • Mesajlar 597
  • Beğeniler 154 / 153
  • Ticaret 0, (%0)

Merhabalar...

Başlığı açayım arkadaşlar fazla vaktinizi almadan...

Kodum şu;

<?php 
	$product_head=isset($_GET["product_head"]) ? $_GET["product_head"] : die (" ... "); 
	
	try 
	{
		
		$sorgu = "SELECT * FROM table_products WHERE product_head = ? LIMIT 0,1"; 
		
		...
		
?>	

$product_head TÜRKÇE karakterli olarak ürün başlığını yazdığım sütun...

HTACCESS içinde linkleri sef hale getirdiğim için bu GET DEĞERİNİ ALAMIYOR SAYFA BİR TÜRLÜ...

SEO fonksiyonunu bu GET koduna uyarlayamadım/entegre edemedim birçok deneme yapmama rağmen...

BAŞLIKLARI;
baslik ADINDA BİR SÜTUNA TEMİZLEYEREK KAYDETTİĞİMDE
VE 
$product_head YERİNE $baslik DEĞERİNİ KULLANDIĞIMDA ÇALIŞIYOR SADECE...


Sütunlara ve içeriklerini örneklendireyim;

product_head = Çamaşı Makinası
baslik              = camasir-makinasi


SONUÇ OLARAK;
baslik SÜTUNU OLMADAN YANİ BİNLERCE ÜRÜNÜN BAŞLIĞINI SEO FORMATINDA KAYDETMEDEN
GET İLE DOĞRU DEĞERİ ELDE ETMEK İÇİN KODUN ÇALIŞIR HALE GETİRERECEK MÜDAHALE NE OLABİLİR SİZCE?

KATKI SUNACAK OLANLARA PEŞİNEN TEŞEKKÜR EDERİM...



 

 

ÖNCE "İYİ,DOĞRU,GÜZEL BİR İNSAN" OLMAK (VEFA,TEVAZZU,NAİFLİK,SAYGI,...) GEREK!
Sonra wm oluruz.
elektronikssl
webimgo

bytokca bytokca WM Aracı Kimlik Onayı
  • Üyelik 29.11.2012
  • Yaş/Cinsiyet 39 / E
  • Meslek Yazılım
  • Konum Konya
  • Ad Soyad H** T**
  • Mesajlar 48
  • Beğeniler 1 / 26
  • Ticaret 1, (%100)

Eğer belirttiğiniz GET adı htaccessde tanımlı değilse okuyamaz.

 

.htaccess 

RewriteEngine On
RewriteRule ^urunler-(.*)$ urunler.php?product_head=$1 [L]

 

.php

if((!empty($_GET['product_head'])) && (temizlikYap($_GET['product_head']))) {

//daha önce vermiştim temizlik fonsiyonunu...

try 
{
$sorgu = "SELECT * FROM table_products WHERE product_head = ? LIMIT 0,1"; 
// ......
}

} else {
die("düriyenin güyümleri kalaylı ah kalaylı.")
}

echo '<a href="urunler-'.$product->baslik.'"> Ürüne Git </a>'

 

// Veritabanına kayıt yaparken mutlaka urunler tablosuna seourl yada seolink gibi bir sutunda ekle. VHARCHAR (150) yaparsın.

include "database.php";

//Database.php içinde veritabanı bilgilerinden sonrasına 

header('Content-Type: text/html; charset=utf-8');
setlocale(LC_TIME, 'tr_TR', 'tr', 'turkish');

//Eğer hala Türkçe karakter sorunu varsa Tablolarını utf8_turkish_ci formatına dönüştür. Bu en garantilisi. Kırılmaz dişim ağrımaz başım hesabı.

//Bazı karakterler html kodlarıyla veritabanına kayıt olmaya gidiyorsa, o zamanda şöyle bir fonksiyon yazalım sorun tamamen ortadan kaldırılsın.

function html_turkce_karakter($dondur){
    $dondur=str_replace('&CCEDİL;', 'Ç', $dondur);
    $dondur=str_replace('&CCEDIL;', 'Ç', $dondur);
    $dondur=str_replace('&Ccedil;', 'Ç', $dondur);
    $dondur=str_replace('&ccedil;', 'ç', $dondur);
    $dondur=str_replace('&Ouml;', 'Ö', $dondur);
    $dondur=str_replace('&OUML;', 'Ö', $dondur);
    $dondur=str_replace('&ouml;', 'ö', $dondur);
    $dondur=str_replace('&Uuml;', 'Ü', $dondur);
    $dondur=str_replace('&UUML;', 'Ü', $dondur);
    $dondur=str_replace('&uuml;', 'ü', $dondur);
    $dondur=str_replace('&#351;', 'ş', $dondur);
    $dondur=str_replace('&#350;', 'Ş', $dondur);
    $dondur=str_replace('&#304;', 'İ', $dondur);
    $dondur=str_replace('&#305;', 'ı', $dondur);
    $dondur=str_replace('&#287;', 'ğ', $dondur);
    $dondur=str_replace('&#286;', 'Ğ', $dondur);
    return $dondur;
}

//ben kaba saba yaptım gerisi sizin ellerinizden öper.

// Verileri post ettiğini varsayıyorum.

function SEOLink($baslik){
    $metin_aranan = array("ş", "Ş", "ı", "ü", "Ü", "ö", "Ö", "ç", "Ç", "ş", "Ş", "ı", "ğ", "Ğ", "İ", "ö", "Ö", "Ç", "ç", "ü", "Ü");
    $metin_yerine_gelecek = array("s", "S", "i", "u", "U", "o", "O", "c", "C", "s", "S", "i", "g", "G", "I", "o", "O", "C", "c", "u", "U");
    $baslik = str_replace($metin_aranan, $metin_yerine_gelecek, $baslik);
    $baslik = preg_replace("@[^a-z0-9\-_şıüğçİŞĞÜÇ]+@i", "-", $baslik);
    $baslik = strtolower($baslik);
    $baslik = preg_replace('/&.+?;/', '', $baslik);
    $baslik = preg_replace('|-+|', '-', $baslik);
    $baslik = preg_replace('/#/', '', $baslik);
    $baslik = str_replace('.', '', $baslik);
    $baslik = trim($baslik, '-');
    return $baslik;
}

$baslik     = html_turkce_karakter(temizlikYap($_POST['baslik']));
$seolink   = SEOLink($baslik);

//Hatta aynısından varmı yokmu diye de kontrol etmen gerekir. O zaman şu şekilde ilerlersin. PDO olarak örnek vericem

$ara = $db->query("SELECT seolink FROM urunler WHERE seolink = '$seolink'")->fetch(PDO::FETCH_ASSOC);
$seourl = $ara["seolink"] == $seolink ? $seolink . "-" . uniqid() : $seolink;

//Eğer posttan gelen başlığın seolinki aynısından varsa sorun çıkarmasın uniqid() fonksiyonuyla benzersiz bir kimlik eklesin yani camasir-makinesi-9532679 gibi.

//Sonra insert ..... $baslik, $seourl, .....

//Veriyi yazdırıken 

$seourl = $urunler["seolink"];
$baslik = $urunler["baslik"];

echo '<a href="urunler-'.$seourl.'">'.$baslik.'</a>';

//umarım bu konuyla alakalı sorunlarınıza derman olur.

BEYAZMASTER

kişi bu mesajı beğendi.

bytokca bytokca WM Aracı Kimlik Onayı
  • Üyelik 29.11.2012
  • Yaş/Cinsiyet 39 / E
  • Meslek Yazılım
  • Konum Konya
  • Ad Soyad H** T**
  • Mesajlar 48
  • Beğeniler 1 / 26
  • Ticaret 1, (%100)

Bu arada ben veritabanına seourl diye bir kayıt açamayacağım diyorsanız. o zaman verileri okuturken seolink fonksiyonunu kullanırsınız. Ama get değerini product_head olarak değil id olarak .htaccese ve veritabanına gönderirsiniz. O id ye bağlı olan ürünü size geri gönderir.

BEYAZMASTER

kişi bu mesajı beğendi.

BEYAZMASTER BEYAZMASTER YÜCE ALLAH'IN aciz 1 kulu Kullanıcı
  • Üyelik 04.02.2020
  • Yaş/Cinsiyet 43 / E
  • Meslek Yazılım...
  • Konum Diğer
  • Ad Soyad O** B**
  • Mesajlar 597
  • Beğeniler 154 / 153
  • Ticaret 0, (%0)

@bytokca üstadım CEVABINIZ VE EMEĞİNİZ İÇİN ÇOK TEŞEKKÜR EDİYORUM...



Fakat ne kadar denediysem çalışmadı...

"Eğer belirttiğiniz GET adı htaccessde tanımlı değilse okuyamaz." 
Haklısınız ama htaccesten doğru şekilde ve temizlenerek geliyor TÜRKÇE başlık...
Sizin temizlik fonksiyonunu da kullandım ama dediğim gibi zaten temizlenerek geliyor...
Sayfanın en üst satırında eko ile gelen veriyi doğru şekilde ekrana yazdırdım...

Sanırım sorun tam şurada;

 

$sorgu = "SELECT * FROM table_products WHERE product_head = ? LIMIT 0,1"; 

Tercümesi şu sanırım;

 WHERE Çamaşır Makinası = camasir-makinasi

Eşitin sol ve sağ tarafın eşit olmadığı için örtüşme gerçekleşmiyor ve veriler çekilemiyor...
Eşitin sol tarafını temizlersem eşitlik oluşacak ve sayfaya veriler yansıyacak...
Diye tahmin ediyorum...


 WHERE  temizlikYap(product_headet) = ? LIMIT ...

Fakat bir türlü sorgu içinde temizlik kodunun doğru yazılışını bulamadım...

 

 

ÖNCE "İYİ,DOĞRU,GÜZEL BİR İNSAN" OLMAK (VEFA,TEVAZZU,NAİFLİK,SAYGI,...) GEREK!
Sonra wm oluruz.
wmaraci
wmaraci

bytokca bytokca WM Aracı Kimlik Onayı
  • Üyelik 29.11.2012
  • Yaş/Cinsiyet 39 / E
  • Meslek Yazılım
  • Konum Konya
  • Ad Soyad H** T**
  • Mesajlar 48
  • Beğeniler 1 / 26
  • Ticaret 1, (%100)

Tamam baştan yapalım. PDO kullandığınızı varsayıyorum. Umarım öyledir.

SQL sorgumuzu gözden geçirelim. Gelen veriyi fonksiyonla temizleyerek veritabanından bağlı olan veriyi isteyelim.

<?php

$gelen_veri = temizlikYap($_GET["product_head"]); // GET ile gelen veriyi temizleyerek değişkene tanımladık.

$query = $db->prepare('SELECT * FROM table_products WHERE product_head = ? ORDER BY id DESC'); 

$query->execute(array($gelen_veri));

$veri = $query->fetch(PDO::FETCH_OBJ); //Tablodan bu $gelen_veri ' ye en son id'ye sahip veriyi çektik. 

echo = $veri->baslik."<br>";

echo = $veri->icerik;

?>

Tek bir veriyi çektik. Limit vermemize gerek yok. Eğer bütün listeyi taramak ve sadece son eklenen 3 tanesini getirmek isteseydik limit belirlerdik. Bu sefer biraz daha farklı çekelim. prepare ile verileri kontrol ettirelim.

<?php

$gelen_veri = temizlikYap($_GET["product_head"]); 

$query = $db->prepare("select * from table_products where product_head =:product_head ORDER BY id DESC LIMIT 3");

    $query ->execute(array(

        "product_head" => $gelen_veri

 

    ));

$veriler = $query->fetchAll(PDO::FETCH_OBJ);

foreach ($veriler as $veri):

      echo = $veri->baslik."<br>";

      echo = $veri->icerik."<br>";

endforeach;

//Sadece son eklenen 3 tanesini ekranda döndürdük.

?>

Şimdi bunu biraz daha şekillendirelim. product_head verisi bir STRING ifadesi ise sanırım camasir_makinesi diye yolculuk yapıyor.

<?php

if(!empty($_GET['product_head'])) {
  $gelen_veri = filter_input(INPUT_GET,"product_head",FILTER_SANITIZE_STRING);
  $query = $db->prepare("select * from table_products where product_head =:product_head ORDER BY id DESC LIMIT 3");
      $query ->execute(array(
          "product_head" => $gelen_veri
      ));
  $veriler = $query->fetchAll(PDO::FETCH_OBJ);

  foreach ($veriler as $veri):
        echo = $veri->baslik."<br>";
        echo = $veri->icerik."<br>";
  endforeach;

 

 

  exit;

} else {
        die("GET ile gelen veri yok");
}

?>

SQL sorugusu içerisine fonksiyon tanımlaması yapılmaması gerekiyor. Sorununuz muhtemelen orda. Sorgu çekerken değişken gönderilir. bu değişkene ait verileri ver denilir. 

BEYAZMASTER

kişi bu mesajı beğendi.

BEYAZMASTER BEYAZMASTER YÜCE ALLAH'IN aciz 1 kulu Kullanıcı
  • Üyelik 04.02.2020
  • Yaş/Cinsiyet 43 / E
  • Meslek Yazılım...
  • Konum Diğer
  • Ad Soyad O** B**
  • Mesajlar 597
  • Beğeniler 154 / 153
  • Ticaret 0, (%0)

@bytokca ek katkınız için teşekkür ederim üstadım...

Pdo kullanıyorum.

İlk fırsatta deneyip sonucu paylaşacağım...

***

Saatlerce denedim ama olmadı bir türlü maalesef...
(Paylaştığınız kodların üçünde de çıkan syntax hatasını bir şekilde aşmama rağmen...)
 
Seo sütunu kullanrak idare edeceğim şimdilik.
Ustalaştıkça sorunun çözümünü anlamaya çalışacağım...

Tekrar teşekkürler...

Mesaj 2 defa düzenlendi. Son düzenleyen: BEYAZMASTER (23.05.2022 09:23)

 

 

ÖNCE "İYİ,DOĞRU,GÜZEL BİR İNSAN" OLMAK (VEFA,TEVAZZU,NAİFLİK,SAYGI,...) GEREK!
Sonra wm oluruz.
Site Ayarları
  • Tema Seçeneği
  • Site Sesleri
  • Bildirimler
  • Özel Mesaj Al