JavaScript için queryString fonksiyonu

Bugün ofisteki bir arkadaşıma lazım oldu. Ben de şöyle bir şey yazdım.

 function queryString() {
	var qs = location.search.substring(1,location.search.length).replace(/(%20|\+)/g," ");
	if(arguments.length == 0 || qs == "") return qs; else qs = "&" + qs + "&";
	return qs.substring(qs.indexOf("=", qs.indexOf("&" + arguments[0] + "=") + 1) + 1, qs.indexOf("&", qs.indexOf("&" + arguments[0] + "=") + 1));
}

Örnek Kullanım:

// http://www.site.com/index.php?str1=Merhaba+Dunya&str2=Test
// Şeklindeki bir adresten str1 ya da str2 bölümünü almak için
var str1 = queryString('str1');
var str2 = queryString('str2');
// Adresteki QueryString'in tamamını almak için
var qStr = queryString();

Google’da JavaScript ve QueryString kelimelerini arattığınızda da bir çok sonuç karşınıza çıkıyor. Problemin çözümü için bir çok farklı yol var. Temel olarak Regular Expressions kullanılarak oluşturulmuş bu fonksiyon ya da Split kullanılarak hazırlanmış bu fonksiyon gibi bir çok örneğe ulaşabilirsiniz.

Protoculous – Prototype + Script.aculo.us, hem de sıkıştırılmış

Her ne kadar son zamanlarda jQuery‘ye doğru oldukça meyil almış olsam da henüz jQuery’ye geçirmediğim Script.aculo.us kullanarak hazırladığım çalışmalarım var.

Script.aculo.us Samplr‘daki örnekleri incelerken sayfadaki Extra Tip ibaresi ilgimi çekti. İlgili siteye girip baktığımda bir de ne göreyim. Sen git Prototype‘ı ve Script.aculo.us‘u birleştir, bir de üstüne basıp sıkıştır, 54,6 KB’lık Protoculous ortaya çıksın.

Şu an 1.0.2 sürümüne ulaşmış olan Protoculous, Prototype 1.5.1 ve Script.aculo.us 1.7.1 Beta 3 sürümlerini içinde bulunduruyor ve daha önce de dediğim gibi sadece 54,6 KB.

JavaScript – parseInt() başınızı ağrıtmasın

JavaScript parseInt() fonksiyonunu nasıl bilirdiniz? Parametre olarak aldığı değerden bir tam sayı ortaya çıkartmaya çalışan güzide bir JavaScript fonksiyonu olan parseInt() geçen gün beni hayretler içerisinde bıraktı. Buyrun başıma geleni kendiniz görün. (Firebug kullananlar direkt console’da kodları çalıştırabilirler.)

parseInt('06');
// 6
parseInt('07');
// 7
parseInt('08');
// 0
parseInt('09');
// 0

Okumaya devam et JavaScript – parseInt() başınızı ağrıtmasın

PHP ile uygulama geliştirmek – Bölüm 2’ye Ek

Bu makale < ?PHP echo “Merhaba Türkiye”; ?> gruplarında yazmaya başladığım PHP ile uygulama geliştirmek yazı dizisinin ikinci bölümüdür. Halen gelecek vaat etmeyebileceği konusunda ısrarcıyım. Taslaktır, geliştirilebilir.

Araya baya uzunca bir süre girdi ama bu yazı dizisine devam etmeye kararlıyım. Kaldığımız yerden devam edelim. Bir önceki yazımın sonunda da belirttiğim gibi önceki yazıda constantlardan da bahsetmeyi planlamış fakat unutmuştum. Bir önceki yazıyı güncellemek yerine yeni bir yazı yazarak constantları daha derinlemesine incelemeye karar verdim. Yazının geri kalanında constant kelimesi yerine sabit kelimesini kullanacağım.

Şimdi düşününce önceki yazıda sabitlerden bahsetmemek isabet olmuş. Neden diye soracak olursanız, değişkenlerden, değişken değişkenlerden bahsederken sabitlerden bahsetmek kafa karıştırabilirdi. Neyse lafı fazla uzatmadan konuya girelim.

Değişkenlerle karşılaştırıldığında çok daha az özelliğe sahip olan sabitlerin en önemli özelliği global tanımlayıcılar olmalarıdır. Bir kere tanımladıktan sonra isterseniz fonksiyon içinde isterseniz sınıf içinde rahatça kullanabilirsiniz. Sabitlerde saklayabileceğiniz veri tipleri sınırlıdır(metin(string), tamsayı (integer), mantıksal(boolean) ve ). Global olmaları ve sınırlı veri tipi gibi sebeplerden genellikle uygulamaların ayar bilgilerini saklamak için kullanılır ve bu işte oldukça iyidirler.

Sabitleri tanımlamak değişkenlere nazaran oldukça farklılık gösterir. Sadece define() fonksiyonu ile tanımlanabilirler ve bir kere tanımlandıktan sonra içeriği değiştirilemez ya da yok edilemez (Sihirli sabitler (Magic Constants) haricinde (ki onlar da aslında sabit sayılmazlar)). Değişkenleri tanımlarken değişken isminin başına konan $ işareti sabitlerde kullanılmaz. İsimlendirme konusunda değişkenlerle hemen hemen aynı kurallara tabidir. Büyük/Küçük harf duyarlıdırlar ama bir zorunluluk olmasa da sabit isimleri genelde tamamıyla büyük harflerden oluşur. Geçerli bir sabit ismi bir harf ya da alt çizgi ile başlar ve devamında istenildiği kadar harf, sayı ya da alt çizgi kullanılabilir.

<?php
// Geçerli sabit tanımlamaları
define("MEYVA", "Elma");
define("SEBZE3", "Patlıcan");
define("_ARABA", "Şahin");

// Geçersiz sabit tanımlamaları
define("3SEBZE", "Patlıcan");
define("SEBZE-3", "Patlıcan");
?>

Ufak bir uyarı; aşağıdaki kullanım doğru ve geçerli olmakla beraber kullanılmaması tavsiye edilir. PHP gelecekte sizin verdiğiniz isimle aynı isimde bir sihirli sabit tanımlarsa uygulamanızda problemler ortaya çıkabilir.

<?php 
define("__SEBZE__", "Patlıcan");
?>

PHP’de önceden tanımlanmış bir çok sabit vardır. Bunları Öntanımlı Sabitler(Predefined Constants) başlığı altında PHP Manual‘da bulabilirsiniz. (PHP_OS, PHP_VERSION vb.) Bir çok öntanımlı sabit bulunmasına rağmen her zaman bunların hepsini kullanamayabilirsiniz. Bazı öntanımlı sabitler belli uzantıların (extension) yüklü olmasını gerektirir. (PEAR_INSTALL_DIR vb.) Değişken yaratırken ve kullanırken bunları aklınızdan çıkarmayın.

Gelelim yazıda da bir kaç kez adı geçen sihirli sabitlere. Şu an için 5 adet olan bu sabitlerin isimleri sabit olsa da belirli durumlarda değerleri değişebilir.

İsim Açıklama
__LINE__ O an PHP derleyicisi tarafından İşlenen satır numarası
__FILE__ Çalışmakta olan sayfanın tam adresi
__FUNCTION__ İşletilmekte olan fonksiyonun ismi
__CLASS__ İşletilmekte olan sınıfın ismi
__METHOD__ Sınıfa ait metodun ismi

Evet, bir bölümün (daha doğrusu ara bölümün) daha sonuna geldik. Önceki yazıda bahsettiğim gibi, gelecek yazıda veri tipleri ve operatörler hakkında karalayacağım.

Mutlu kodlamalar!

Veritabanındaki bir tablodan nasıl rastgele satır(lar) seçerim?

Ürünlerin arasından bir kaç tanesini rastgele göstermek istiyorsunuz ya da makalelerinizin hep aynı sırada çıkmasını istemiyorsunuz. Aşağıda bir kaç değişik veritabanında nasıl rastgele satır(lar) çağırabileceğinizi gösteren kod örnekleri var. Aşağıdaki yöntemleri kullanırken çok fazla kayıt olan tablolardan veri çekerken performans problemleriyle karşılaşabilirsiniz. Rastgele alan anlık olarak yaratıldığından ORDER ya da WHERE şartlarını kullandığınızda indeks olmayan bir alanda sorgu yaptığınız için tablodaki satır miktarı ne kadar fazlaysa performans o kadar düşecektir. Aklınızın bir köşesinde bulunsun.

SQLite

SELECT sutun FROM tablo
 WHERE rowid >= (abs(random()) % (SELECT max(rowid) FROM tablo))
 LIMIT 5;

MSSQL

SELECT TOP 5 sutun FROM tablo
 ORDER BY NEWID()

MySQL

SELECT sutun FROM tablo
 ORDER BY RAND()
 LIMIT 1

ORACLE

SELECT sutun FROM
  (SELECT sutun FROM tablo
    ORDER BY dbms_random.value )
 WHERE rownum = 1

PostgreSQL

SELECT sutun FROM tablo
 ORDER BY RANDOM()
 LIMIT 1

IBM DB2

SELECT sutun FROM tablo
 ORDER BY RAND()
 FETCH FIRST 1 ROWS ONLY

Şurada PHP ve MySQL için rastgele satır seçimi konusunda alternatif bir çözüm var. Ben de örnekteki kodu temel alarak şöyle bir kod ürettim.

< ?php
/*
* Fonksiyon      : rastgeleSatir
*
* Geliştirici   : İzzet Emre Erkan , 
* URL            : https://www.karalamalar.net
*       
* Versiyon      : 1.0
* Tarih          : 09.05.2007
* Amaç           : MySQL veritabanı kullanarak belli bir tablodan rastgele bir satır döndürmek
*
* Parametreler
*  $tablo        : Veri çekilecek olan tablo
*  $rowid        : Tablodaki satır tanımlayıcı otomatik artan sütun
*  $secilecekler : (Seçime bağlı) Fonksiyonun döndüreceği satırda seçilecek sütunlar.
*                  (Parametre belirtilmezse tüm sütunlar döner.)
*/
function rastgeleSatir($tablo, $rowid, $secilecekler = "*") {
	$maks = mysql_result(mysql_query("SELECT max($rowid) FROM $tablo"),0,0);
	$rastgeleSayi = mt_rand(1,$maks);
	$rastgeleSatir = mysql_fetch_array(mysql_query("SELECT $secilecekler FROM $tablo WHERE $rowid >= $rastgeleSayi ORDER BY $rowid ASC LIMIT 1"));
	if(!is_array($rastgeleSatir))
		$rastgeleSatir = mysql_fetch_array(mysql_query("SELECT $secilecekler FROM $tablo WHERE $rowid < $rastgeleSayi ORDER BY $rowid DESC LIMIT 1"));
	return $rastgeleSatir;
}
?>

Kullanımı

< ?php
// Tüm sütunlarla beraber rastgele bir satır döndürmek için
print_r(rastgeleSatir("tablo_adi", "tanimlayici_sutun"));

// Belirli sütunlarla beraber rastgele bir satır döndürmek için
print_r(rastgeleSatir("tablo_adi", "tanimlayici_sutun", "sutun1, sutun2, sutun3"));
?>