Php Dosya Yükleme Sorunu ve Çözümü

Uzman Cevap’da sıkça sorulan sorulardan bir tanesi, aynı sayfada dosya yükleme işleminin nasıl yapıldığıydı.. Yani sorun şu ki, başka bir sayfaya gönderince dosya yükleme işlemi oluyor ama aynı sayfada yapınca olmuyor.. En azından bilmeyenlerin düşündüğü durum budur 🙂 Peki aslı astarı nedir bu olayın?

Şimdi büyük ihtimalle sizde böyle bir sorunla karşılaştıysanız yaptığınız işlem şudur;

if ($_POST)
{
     // dosya yükleme işlemi
}

Ve html kodunuzda şöyle olsun;

<form action="" method="post" enctype="multipart/form-data">
	Dosya: <input type="file" name="dosya" /> <button type="submit">Yükle</button>
</form>

Burada siz dosyaları seçip gönderseniz bile işlem yapmayacaktır.. Çünkü herhangi bir değer göndermiyorsunuz, yani tipi file olan input dışında bir değer göndermiyorsunuz..

Çözümü;
En basit olarak submit butonuna name vermeniz yeterli olacaktır 🙂

<form action="" method="post" enctype="multipart/form-data">
	Dosya: <input type="file" name="dosya" /> <button name="submit" type="submit">Yükle
</form>

Bu şekilde çözüme ulaşabilir, aynı dosya içerisinde upload işlemini sorunsuz bir şekilde yapabilirsiniz.. Elbette her upload sorunu bu olacak değil ama bu sorunla çok fazla karşılaşıldığı için bilgilendirme amaçlı yazıyorum bu yazımı 🙂 görüşmek üzere.

Php Tırnak Sorunu ve Çözümü

Merhaba arkadaşlar, php’de tırnak sorunu olduğu bir gerçek.. Ve bu sorunla uzun süredir karşılaşıyorum, bir şekilde görmezden gelsem de son hazırladığım sistemde artık kesin bir çözüm bulmalı dedim ve o kadarda zor olmayan bir çözüm buldum 🙂 Şimdi ne yapacağız bir inceleyelim..

İlk olarak sorunu tanımlayalım;
Yazılarımız içerisinde (özellikle input içine yazdırdığımız değerlerde) tırnak olursa, o tırnaktan sonraki kısım gözükmüyor.. Yani kısaca input’da value=”” şeklinde yazarsak çift tırnaktan sonrası value=” şeklinde yazarsak da tek tırnaktan sonrası gözükmüyor..

Sorunun çözümü;
Verileri kayıt ederken içerisindeki tek ve çift tırnakları replace edeceğiz.. Tırnak kodları aşağıdadır;
Tek Tırnak (‘) => &#39;
Çift Tırnak (“) => &quot;

Replace edeceğimiz fonksiyonu oluşturalım..

function tirnak_replace ($par)
{
  return str_replace(
    array("'", "\""),
    array("'", """),
    $par
 );
}

Evet replace eden fonksiyonumuzu oluşturduk.. Bunu array_map ile post metodu ile gönderdiğimiz her veriye uygulayalım;

array_map("tirnak_replace", $_POST)

Tamamdır, artık post ile veri gönderirken, tırnaklarınız tırnak kodu olarak replace edilecek yani değiştirilecektir.Not: Sef link fonksiyonu kullanıyorsanız, bu şekilde replace ettiğinizde link yapısında bazı sorunlar olabilir.. Örneğin quot ya da 39 gibi değerler eklenebilir.. Bunun olmaması için sef link fonksiyonunuz içinde yukarıdaki iki kodu (&#39 ve &quot) null olarak replace etmelisiniz..


Örnek Sef Link Fonksiyonu;

function sef_link($baslik)
{
	$baslik = str_replace(array("&quot;","&#39;"), NULL, $baslik); // tırnaklar için replace
	$bul = array('Ç', 'Ş', 'Ğ', 'Ü', 'İ', 'Ö', 'ç', 'ş', 'ğ', 'ü', 'ö', 'ı', '-');
	$yap = array('c', 's', 'g', 'u', 'i', 'o', 'c', 's', 'g', 'u', 'o', 'i', ' ');
	$perma = strtolower(str_replace($bul, $yap, $baslik));
	$perma = preg_replace("@[^A-Za-z0-9\-_]@i", ' ', $perma);
	$perma = trim(preg_replace('/\s+/',' ', $perma));
	$perma = str_replace(' ', '-', $perma);
	return $perma;
}

Hadi hayırlı olsun, artık böyle bir derdiniz kalmadı 🙂

Php ile MySQL Sürümünü Bulmak

Projelerinizde lazım olabilecek bir konuyu sizlerle paylaşmak istiyorum.. Keyfi ya da sürüme göre işlem yapabileceğiniz zamanlar gelebilir.. Bu durumlarda tabi ilk olarak mysql sürümünü öğrenmeniz gerekir.. MySQL sürümünü öğrenmek için gerekli kodları aşağıda bulabilirsiniz;

<?php

	$query = mysql_query("select version() as versiyon");
	$row = mysql_fetch_object($query);
	
	$versiyon = $row->versiyon;
	echo $versiyon; // Örn: 5.1.65-cll

Php ile MySQL Sürümünü Bulmak

Projelerinizde lazım olabilecek bir konuyu sizlerle paylaşmak istiyorum.. Keyfi ya da sürüme göre işlem yapabileceğiniz zamanlar gelebilir.. Bu durumlarda tabi ilk olarak mysql sürümünü öğrenmeniz gerekir.. MySQL sürümünü öğrenmek için gerekli kodları aşağıda bulabilirsiniz;

<?php

$query = mysql_query("select version() as versiyon");
$row = mysql_fetch_object($query);
	
$versiyon = $row->versiyon;
echo $versiyon; // Örn: 5.1.65-cll

Php URL Regexleri

Merhaba arkadaşlar, bir proje için lazım oldu bu regexler bana.. Bir daha kaybetmemek için bloguma konusunu açayım dedim, eminim sizlerinde işine yarayacaktır bu regex’ler 🙂

Link yapısı içerisinden orjinal domaini bulmanızı sağlar;
(HTTPS desteği yoktu onu düzenledim çalışıyor sorun yok..)

$url = "http://www.uzmancevap.org/soru/653/backlink-konusunda";
preg_match('@^(?:http://|https://)?([^/]+)@i', $url, $matches);
$host = $matches[1];
echo $host;

Domain Doğruluk Kontrolü;

$url = "http://www.google.com";
if (preg_match('/^(http|https|ftp):\/\/([A-Z0-9][A-Z0-9_-]*(?:\.[A-Z0-9][A-Z0-9_-]*)+):?(\d+)?\/?/i', $url))
{
	echo "Geçerli Domain";
}
else
{
	echo "Hatalı Domain";
}

Extra: Herhangi bir kelimeyi renklendirmek için gerekli regex;

$text = "Bu basit bir örnektir ve bu örnek içinde erbilen ifadesi geçtiği sürece bu erbilen ifadesini regex sağolsun renklendirecektir..";
$text = preg_replace("/\b(erbilen)\b/i", '', $text);
echo $text;

Extra: String ifade içerisinde bulunan linkleri otomatik çevirir;

$text = "Burada linkler olabilir örneğin http://www.erbilen.net gibi ya da http://twitter.com gibi.. Bu linkleri regex otomatik link haline getirecek..";
$text = preg_replace('@(https?://([-\w\.]+)+(:\d+)?(/([\w/_\.]*(\?\S+)?)?)?)@', '<a href="$1">$1</a>', $text);
echo $text;

Hepsinide kullandım, hepsi işe yarar regexler 🙂 Kolay gelsin..

Php/jQuery ile Anlık Avatar Değişimi

Bu videoda sizlerle anlık olarak değişen avatar sisteminin nasıl yapıldığını öğreneceğiz.. Ben avatar için “gravatar” desteğini kullandım ama siz kendi sisteminizdeki kayıtlı kullanıcının avatarınıda getirip deneyebilirsiniz, mantık aynı 🙂

Kaynak Dosyaları İndirip İnceleyebilirsiniz;
http://yadi.sk/d/fVFFj6gKj6Ae