PHP ile Dinamik Form İşlemleri (Bölüm 1 / 3)

Bu dersimizde dinamik form işlemlerini göreceğiz.. Ders boyunca ilk olarak dinamik form yapısını kurup daha sonra sadece input elemanı için işlemlerimizi yapacağız. Diğer bölümlerde select, multi select, textarea ve file upload için işlemlerimizi gerçekleştireceğiz.

Mantık Nedir?

Form elemanlarını oluşturmak için bir diziye ihtiyacımız var.. Oluşturduğumuz form elemanlarının değerlerini tutmak içinde farklı bir diziye daha.
Daha sonra ise bu dizi elemanlarını işleyip değerlerini bir dosyaya kayıt ettirip istediğimiz herhangi bir yerde kullanabiliriz.

JavaScript – concat()

Concat() metodu, dizileri birleştirmek için kullanılır.
Birden fazla diziyi tek bir dizi haline getirir yani birleştirir.
Birleştirmek için dizi sınırı yoktur ancak en az 1 dizi diğer bir dizi ile birleştirilebilir.

Örnek kullanımı;

var diller = ["türkçe","ingilizce"];
var meyveler = ["muz","çilek","armut","ayva"];
var hayvanlar = ["at","ayı","arı","aslan"];

var yeniDizi = diller.concat(meyveler, hayvanlar);

alert( yeniDizi );

Örnekte de gördüğünüz gibi birleştirmek için önce birleştirilecek dizi daha sonra birleşecek diziler tanımlanıyor. Birden fazlası için virgül ile ayırma işlemi yapabilirsiniz.

JavaScript: select()

Select() yöntemi, form nesneleri içerisindeki yazıyı seçmek için kullanılır.
Kullanıma göre tıklanınca ya da doğrudan nesne içerisinde ki değerler seçili halde olabilir.

Tıklanınca Yazıyı Seçtirmek

Bunun için onclick=”” niteliğini kullanacağız. İstersek bir fonksiyon çalıştırabiliriz ancak bu basit bir örnek olacağı için doğrudan this.select()dememiz yeterli olacaktır. Burada this o an ki nesneyi temsil etmektedir.

<input type="text" name="test" value="Tayfun Erbilen" onclick="this.select()" />

Doğrudan Yazıyı Seçtirmek

Herhangi bir işlem yapmadan doğrudan yazıyı seçtirmek istersek öncelikle form nesnesini javascript ile seçmeli ve daha sonra select() metodunu uygulamalıyız.
Nesneyi kolayca seçebilmek için bir id atayalım ve daha sonra örneğimizi tamamlayalım.

<script type="text/javascript">
document.getElementById('test').select(); // doğrudan yazıyı seçtik
</script>

<input type="text" id="test" name="yazi" value="Tayfun Erbilen" />

Geolocation Kullanımı [HTML5] [Google Maps Örneği ile]

Geolocation ile bulunduğunuz yerin konumunu alabiliyorsunuz. Böylece en basitinden herhangi bir harita servisi ile bulunduğunuz yeri doğrudan haritada görüntüleyebilirsiniz. Öncelikle bunun çalışma mantığını anlayalım, daha sonra ise google maps ile entegreli bir örnek hazırlayalım sizinle.Geolocation ile bulunduğunuz yerin konumunu alabiliyorsunuz. Böylece en basitinden herhangi bir harita servisi ile bulunduğunuz yeri doğrudan haritada görüntüleyebilirsiniz. Öncelikle bunun çalışma mantığını anlayalım, daha sonra ise google maps ile entegreli bir örnek hazırlayalım sizinle.

İlk olarak tarayıcının bu özelliği destekleyip desteklemediğini şu şekilde anlıyoruz;

if ( navigator.geolocation ){
    // sorun yok devam edebiliriz..
} else {
    // özellik desteklenmiyor
}

Eğer destekliyorsa buradan devam ediyoruz. Ve konumumuzu almak için işlemi başlatıyoruz, zaten bunu yaparken kullanıcı izin vermediği taktirde konumunu alamıyoruz.

navigator.geolocation.getCurrentPosition(function(pos){
     alert("Enlem: " + pos.coords.latitude + "\nBoylam:" + pos.coords.longitude);
});

Sonuç olarak kodlarımızın son hali şöyle olmalı;

if ( navigator.geolocation ){
	navigator.geolocation.getCurrentPosition(function(pos){
		alert("Enlem: " + pos.coords.latitude + "\nBoylam:" + pos.coords.longitude);
	});
} else {
	alert('Tarayıcınız bu özelliği desteklemiyor.');
}

Bunu bir fonksiyon içerisine alalım, işin içine hiç jquery katmadan bir butona bastığımızda çalıştıralım.

function getCoords(){
	if ( navigator.geolocation ){
		navigator.geolocation.getCurrentPosition(function(pos){
			alert("Enlem: " + pos.coords.latitude + "\nBoylam:" + pos.coords.longitude);
		});
	} else {
		alert('Tarayıcınız bu özelliği desteklemiyor.');
	}
}

Ve bir buton oluşturup, onclick içerisinde bu fonksiyonu tanımlayalım.

<button onclick="getCoords()">Koordinatları Getir</button>

Google Maps ile Bulunduğumz Yeri Haritada Göstermek

Evet artık enlem ve boylam değerlerine sahibiz.. Şimdi bu değerleri kullanarak google maps ile bulunduğumuz yeri haritada gösterelim.

İlk olarak yine mevcut script kodlarımızı yazıyoruz.. Ancak bu sefer enlem ve boylam değerlerini değişkenlere aktaralım;

function getMapCoords(){
	
	if ( navigator.geolocation ){
		
		navigator.geolocation.getCurrentPosition(function(pos){
			
			var enlem = pos.coords.latitude,
				boylam = pos.coords.longitude;
			
			// harita kodları buraya gelecek
			
		});

	} else {
		alert('Tarayıcınız bu özelliği desteklemiyor.');
	}
	
}

Evet şimdi sıra geldi harita kodlarımıza.. İlk olarak harita ayarlarımızı yapalım;

var haritaAyarlari = {
	center: new google.maps.LatLng (enlem, boylam),
	zoom: 15
};

Burada zoom değeri ne kadar çok olursa o kadar yakınlaşacaktır. enlem ve boylam değerlerinide LatLng() metodu içerisinde belirttik.

Şimdi harita id’li nesnemizi gösterelim ve daha sonra haritayı içerisine gömelim.
(Bu nereden geldi diyebilirsiniz ???? Birazdan html oluşturduğumuzda id’si harita olan ve genişlik yükseklik değerleri belirlenmiş bir nesne oluşturacağız)

document.getElementById("harita").style.display = 'block';
var harita = new google.maps.Map(document.getElementById("harita"), haritaAyarlari);

Ve son olarak bulunduğumuz yeri haritada işaretleyelim ????

/**
 * Bulunduğumuz Yeri İşaretleyelim
 */
new google.maps.Marker({
	position: harita.getCenter(),
	map: harita,
	title: 'Sen Buradasın!'
});

Evet şimdi son olarak google maps’in script dosyasını dahil etmemiz gerekiyor;

<script src="http://maps.googleapis.com/maps/api/js?key=AIzaSyDY0kkJiTPVd2U7aTOAwhc9ySH6oHxOIYM&sensor=false"></script>

Siz burada kendi key’iniz kullanmak isterseniz buradan google hesabınızla giriş yapın ve google maps 3’ü aktif edin. Daha sonra oradan create project deyip gerekli key’leriniz alın ve kendinizinkini kullanın ????

Yapamayanlar olursa ing. anlatımı: http://www.w3schools.com/googleAPI/google_maps_api_key.asp

Neyse efendim, son olarak kodlarımız şöyle olmalı;

<!DOCTYPE HTML>
<html lang="en-US">
<head>

	<meta charset="UTF-8">
	<title>Erbilen.NET</title>
	
	<script src="http://maps.googleapis.com/maps/api/js?key=AIzaSyDY0kkJiTPVd2U7aTOAwhc9ySH6oHxOIYM&sensor=false"></script>
	<script type="text/javascript">
	function getMapCoords(){
		
		if ( navigator.geolocation ){
			
			navigator.geolocation.getCurrentPosition(function(pos){
				
				var enlem = pos.coords.latitude,
					boylam = pos.coords.longitude;
				
				/**
				 * Harita Ayarları
				 */
				var haritaAyarlari = {
					center: new google.maps.LatLng (enlem, boylam),
					zoom: 15
				};
				document.getElementById("harita").style.display = 'block';
				var harita = new google.maps.Map(document.getElementById("harita"), haritaAyarlari);
				
				/**
				 * Bulunduğumuz Yeri İşaretleyelim
				 */
				var marker = new google.maps.Marker({
					position: harita.getCenter(),
					map: harita,
					title: 'Sen Buradasın!'
				});
				
			});

		} else {
			alert('Tarayıcınız bu özelliği desteklemiyor.');
		}
		
	}
	</script>
	
</head>
<body>

<div id="harita" style="display: none; width: 500px; height: 300px; background: #eee"></div>
<button onclick="getMapCoords()">Haritada Yerimi Bul</button>

</body>
</html>

Harita Tipini Belirlemek

Şuan çizim şeklinde gözüküyor harita.. Bunu uydu görünümüne getirebiliriz. O zaman kodlarımızda harita ayarlarını şöyle değiştirmemiz gerekecek sadece;

var haritaAyarlari = {
	center: new google.maps.LatLng (enlem, boylam),
	zoom: 19,
	mapTypeId: google.maps.MapTypeId.SATELLITE
};

İNDİR

http://yadi.sk/d/_lKHKY029ZPGL

Not: Bu örneği çalışır test edebilmek için sunucu üzerinde deneyin.

TCMB’den Günlük Kurları Çekmek (PHP)

Her zaman günlük kurlar lazım olabilir, tcmb sağolsun bize xml formatında günlük kurları veriyor. Bizde php’nin simlexml kütüphanesi ile kolayca alıp işleyebilir, sitelerimizde gösterebiliriz.

XML Adresi;

http://www.tcmb.gov.tr/kurlar/today.xml

Gelelim nasıl çekeceğimize.. İlk olarak simplexml_load_file() fonksiyonu ile tcmb sitesine bağlanıp bilgileri alıyoruz. Daha sonra obje olarak dönen değerlerden istediklerimizi alabiliriz.

<?php

    $open = simplexml_load_file('http://www.tcmb.gov.tr/kurlar/today.xml');
    
    // dolar
    $usd_alis = $open->Currency[0]->BanknoteBuying;
    $usd_satis = $open->Currency[0]->BanknoteSelling;
    
    // euro
    $euro_alis = $open->Currency[11]->BanknoteBuying;
    $euro_satis = $open->Currency[11]->BanknoteSelling;

    echo 'USD: '.$usd_alis.'<br />EURO: '.$euro_alis;
    
?>

İşte bu kadar basit ???? Kolay gelsin.

jQuery ile Son Tweetleri Çekmek (REST API uyumlu)

Bildiğiniz gibi twitter api 1.1’e geçti ve artık izin almadan twitter’da işlem yapamıyoruz.. Dolayısı ile çalışan tüm twitter eklentileri patladı. Bu konuyla ilgili http://www.erbilen.net/513-twitter-rest-ap-11-ile-son-tweetleri-cekmek.html şu konuda zaten son tweet’leri çekmeyi anlattım. Şimdide bunu bir php dosyası haline getirip jquery ile bu php dosyasından çekmeyi göstereceğim. Böyle yapıyoruz çünkü php’yi dahil edip çalıştırdığımızda sitenin hızını etkiliyor, ancak böyle olduğunda yüklendiği zaman istek cevaplanıyor ve verileri yazdırılıyor, açılış hızına bir etkisi olmuyor.

Adım Adım İlerleylelim

Öncelikle twitter.php dosyası oluşturalım bir tane. Ve içerisine buradan indireceğiniz sınıf dosyalarını include delim.

require 'twitteroauth/twitteroauth.php';

Ancak bunun hemen öncesinde çıktıyı json olarak ayarlayalım;

header('Content-type: application/json; charset=utf8');

Şimdi consumer ve access keylerimizi elde ettikten sonra sınıfımızı başlatalım.

// consumer ve access
$consumer_key = 'BpyIHhw6GdvUnEu9ARwrHA';
$consumer_secret = 'OwKDNx4qtUqVbOtNuMJXusMldfXrlNqwG1GqSRZpSw';
$access_token = '24186944-9lI0G4BKEySlN4tMbcz5oTxrfmNam24J6VffbhzOs';
$access_token_secret = 'aLevlosLliXvSDYQVbKKJ7Wrmh2rGbqFSLsCU9BaY';

// sıfını başlatalım
$twitter = new TwitterOAuth($consumer_key, $consumer_secret, $access_token, $access_token_secret);

Bunları elde edebilmek için uygulama oluşturmanız gerekiyor. Nasıl uygulama oluşturacağınızı bilmiyorsanız aşağıdaki konuya göz atın;
http://www.erbilen.net/twitterda-uygulama-olusturmak

Sırada twitter kullanıcı adını almak var. Bunu get parametresi ile alalım. username olsun parametre adımız.

$username = isset($_GET['username']) ? htmlspecialchars($_GET['username']) : NULL;

Kaç tweet çekeceğimizi belirleyelim. Bunuda get ile yapalım. Eğer get yok ise default bir değer verelim. Örn: 5 gibi..

$count = isset($_GET['count']) ? (int) $_GET['count'] : 5;

Şimdi kullandığımız sınıfta bulunan get() metodu ile tweetleri çekelim.

$tweets = $twitter->get('https://api.twitter.com/1.1/statuses/user_timeline.json?screen_name='.$username.'&count='.$count);

Sıra geldi bu tweetleri json olarak çıktı verdirmeye.

Yapmamız gereken şey php’de bulunan json_encode() fonksiyonunu kullanmak ????

print json_encode($tweets);

Unutmadan, jquery ile çekmek için en üstte şu header tanımlamasını yapmamız gerekiyor;

header('access-control-allow-origin: *');

Evvet.. tamamdır ????

Kodlarımızın Son Hali

Eğer her şey yolunda ise yazdığınız kodlar son haliyle şöyle olmalı;

get('https://api.twitter.com/1.1/statuses/user_timeline.json?screen_name='.$username.'&count='.$count);

	print json_encode($tweets);
	
?>

Bunu sunucunuza twitter sınıf dosyaları ile birlikte bir klasöre ya da ana dizine atın.. Şimdi gelelim jquery ile nasıl kullanacağımıza..

jQuery ile Kullanımı

jQuery’de json değerlerini işlemek için $.getJSON() metodu bulunuyor. Yapmamız gereken önce sunucudaki twitter.php’ye bağlanmak ve dataları almak olacak.

$(function(){

	$.getJSON('http://www.erbilen.net/twitter.php?username=tayfunerbilen&count=10', function(data){
		// tweetler burada işlenecek..
	});

});

Artık data değerinde çektiğim son 10 tweet bulunuyor. Bu objeleri for ile işleyip herhangi bir div içerisine yazdırabiliriz.
Bu arada twitter tarih formatı biraz ilginç geliyor ???? Bu yüzden onu “x zaman önce” haline çevirmek için şuradaki cevaptan yararlanıyoruz;
http://stackoverflow.com/a/6549563

Ve devam edip, verileri bir nesne içerisine yazdırıyoruz..

$(function(){
	
	// twitter tarih formatını parse eden fonksiyon
	function parseTwitterDate(tdate) {
		var system_date = new Date(Date.parse(tdate));
		var user_date = new Date();
		var diff = Math.floor((user_date - system_date) / 1000);
		if (diff <= 1) {return "şuan";}
		if (diff < 20) {return diff + " saniye önce";}
		if (diff <= 3540) {return Math.round(diff / 60) + " dakika önce";}
		if (diff <= 5400) {return "1 saat önce";}
		if (diff <= 86400) {return Math.round(diff / 3600) + " saat önce";}
		if (diff <= 129600) {return "1 gün önce";}
		if (diff < 604800) {return Math.round(diff / 86400) + " gün önce";}
		if (diff <= 777600) {return "1 hafta önce";}
		return "on " + system_date;
	}
	
	// tweetlerin yer alacağı nesne
	var $twitter = $('#twitter');
	
	$.getJSON('http://www.erbilen.net/twitter.php?username=tayfunerbilen&count=10', function(data){
		var total = data.length,
			i = 0;
		$twitter.html(''); // önce içindekini temizle sonra tweetleri yazdır.
		for ( i; i < total; i++ ){
			var tweet = data[i].text; // tweet
			var date = parseTwitterDate(data[i].created_at); // tarih
			var url = 'https://twitter.com/' + data[i].user.screen_name +'/status/' + data[i].id_str;
			$twitter.append('<div class="tweet"><a href="' + url + '">' + tweet + '</a> (' + date + ')</div>');
		}
	});

});

Birazcıkta css kastınız mı bu iş tamamdır ???? Sonuç olarak benim demoya aşağıdaki linkten göz atabilirsiniz;

İndir

http://yadi.sk/d/-z84lvgj9GxfB

PHP’de Eşitlik Kontrol Fonksiyonu

Eğer bir takım verinin diğer bir takım veri ile eşleşip eşleşmediğini kontrol ediyorsanız if ifadesi ile tek tek kontrol ediyor olabilirsiniz. Bunun yerine basit bir fonksiyon yazıp daha kolay kontrol edebiliriz. Fonksiyonumuz şöyle olacak;

function esitlikKontrol($arg, $arg2){
    $result = array_diff($arg, $arg2);
    if ( empty($result) )
        return true;
}

Burada mantık şudur. array_diff() dizide aynı olan elemanları çıkartır. Dolayısı ile eğer boş ise verdiğimiz değerlerin hepsi birbirine eşit demektir. Böylece birçok if koşulundan da kurtulmuş olduk ???? Hemen bir kullanımını örnek ile göstereyim;

$result = esitlikKontrol([1,2,3,4], [1,2,3,4]);
if ( $result ){
    // ilk dizideki elemanlar ikinci dizideki elemanlara eşit
} else {
    // eşit değiller!
}

Not: Dizi için kısa söz dizimini “[]” kullanacaksanız 5.4.0 ve üzeri bir php sürümünüz olması gerektiğini unutmayın.

Twitter’da Uygulama Oluşturmak

Merhaba arkadaşlar, twitter’ın yeni api servisini (rest api 1.1) yayına almasıyla birlikte, çalışan bir çok örnek çalışmaz hale geldi.. Bunun sebebi, twitter’ın kullanıcılardan oturum bilgisi istemesidir.. Bunun içinde öncelikle twitter’da bir uygulamanızın olması gerekir.. Bu makale’de sizlere twitter’da nasıl uygulama oluşturabileceğinizi anlatacağım..

Öncelikle uygulama oluşturmak için developer sayfasında twitter hesabınız ile giriş yapın.. Daha sonra aşağıdaki bağlantıyı kullanarak uygulama oluşturma sayfasına gidin.
https://dev.twitter.com/apps/new

Twitter'da Uygulama Oluşturmak

Yukarıda gerekli yerleri kendinize göre doldurduktan sonra uygulamanız oluşmuş ve aşağıdaki gibi bir sayfaya yönlendirilmiş olmanız gerekir..

Twitter'da Uygulama Oluşturmak

Evet buraya kadar bir sorun yok ise şimdi bize lazım olan 4 bilgi var.. Bunlar;
– consumer_key
– consumer_secret
– access_token
– access_token_secret

İlk ikisi yönlendiğiniz sayfada mevcut.. Ancak diğer 2’si ni aynı sayfada en altta bulunan create my access token butonuna basarak oluşturuyorsunuz..

Twitter'da Uygulama Oluşturmak

Bastığınızda aşağıdaki gibi token’lerin oluşması gerekir;

Twitter'da Uygulama Oluşturmak

Buraya kadarda sorun yoksa tebrikler, twitter uygulamanızı başarıyla oluşturdunuz..

Şimdi Ne Yapacağım?

Bu makale’de sadece uygulama oluşturmayı öğrendik.. Bu uygulama işlem yapmak için diğer makale/videolara göz atabilirsiniz.
Örn: http://www.erbilen.net/twitter-rest-ap-11-ile-son-tweetleri-cekmek

Gravatar Kullanımı


Gravatar
 dünyanın dört bir yanında kullanılan, son zamanlarda wordpress’inde bünyesine gravatar özelliğini dahil etmesi ile dahada popülerleşen evrensel bir avatar sistemidir.. Siteye e-posta adresinizle kayıt olup bir resim yüklüyorsunuz.. Ve gravatar destekleyen tüm sitelerde resminiz e-posta adresinize bağlı olarak gözüküyor.. Gravatar’ın sitesinden resminizi güncellediğinizde diğer tüm sitelerde de ortalama 1 saat içerisinde resminiz güncellenmiş oluyor.

Faydası Ne?

Projelerinizde üye resimleri gereksiz yere sunucunuzda yer kaplamasın.. Biraz daha globalleşmek için bu tür projelere sıcak bakmak gerekir.. Bende bu yüzden prototürk’de gravatar desteğini sunuyorum.. Sizinde sunmanızı tavsiye ederim..

Hangi Dilleri Destekliyor?

Gravatar bir çok programlama dilini destekliyor.. Php’de başta olmak üzere tüm listeye aşağıdaki bağlantıdan ulaşabilirsiniz;
http://tr.gravatar.com/site/implement/

Gravatar PHP Entegrasyonu

Bir e-posta adresine ait gravatar resmini php ile şu şekilde alabilirsiniz;

<?php

// eğer bunu tanımlamaz iseniz gravatar otomatik kendisi bir default resim gösterecektir
$default = "burası e-postaya ait gravatar yok ise gözükece default resim linki";
// gravatar için e-posta adresi
$eposta = "[email protected]";
// avatar boyutu
$boyut = 200;
// gravatar linkini oluşturalım
$gravatar = "http://www.gravatar.com/avatar/" . md5( strtolower( trim( $eposta ) ) ) . "?d=" . urlencode( $default ) . "&s=" . $boyut;
// ve şimdi img etiketi içerisinde resmi gösterebiliriz
echo "<img src='{$gravatar}' alt=''>"';

?>

Evet gördüğünüz gibi bu kadar basit ???? Gravatar için söylenebilecekler bu kadar, kullanmanız dileğiyle.. Kolay gelsin.