Döngü Kullanmadan 1’den 10’a Kadar Saydırmak (Mantık Yürütmek)

Yazılım dillerinin esnekliği yazan kişinin mantığına bağlıdır.. Sadece örnek vermek için böyle bir konu yazma gereği duydum.. Ben harika bir yazılımcı değilim, ama yerinde mantık kullanabilen birisiyim.. En basit örneğinide size bu konuda göstereceğim.. Normal şartlarda 1’den 10’a kadar saydırmak istersek ne yapmamız gerekir? Bir döngü ile yapabiliriz mesela..

<?php
	for ( $i = 1; $i <= 10; $i++ ) echo $i.'
'; ?>

Peki şimdi aynı işlemi döngü kullanmadan yapmak istersek nasıl yapacağız? Eminim daha bir çok farklı yolu vardır ancak en basit 2. farklı yolu şöyle olabilir;

<?php
	function sayi($sayi){
		echo $sayi.'<br />';
		if ( $sayi < 10 ) sayi(++$sayi);
	}
	sayi(1);
?>

Sonuç olarak her iki örnekte 1’den 10’a kadar sayacaktır.. Yani demem o ki, yapamadığınız noktalarda mantığınızı zorlayın.. Herşeyin mantıklı bir çözümü muhakkak vardır, önemli olan o çözüme nasıl ulaşabileceğinizi bilmenizdir.. Bu bir nasihat değil, sadece naçizane bir tavsiyedir ????

Aynı Sayfada Birden Fazla Form İşlemi

Bazen tek sayfada birkaç formumuz oluyor.. Örneğin giriş sayfasında giriş ve hızlı kayıt ol gibi 2 form.. Böyle durumlarda hangisini post edersek edelim, biz doğru şekilde post kontrolü yapmadığımız için işler karışıyor.. Bunu biliyorum çünkü zamanında bende yaptım ve uzman cevap’ta sorulan sorulara göre hala yapanlar var ???? Peki böyle bir senaryoda ne yapmak gerekir? Öncelikle bu senaryonun html yapısı şöyle olsun;

<form action="" method="post">
	<h1>Giriş Yap</h1>
	Kullanıcı Adı: <input type="text" name="kadi" /><br />
	Şifre: <input type="password" name="sifre" /><br />
	<button type="submit">Giriş Yap</button>
</form>

<form action="" method="post">
	<h1>Hızlı Kayıt</h1>
	Kullanıcı Adı: <input type="text" name="kadi" /><br />
	Şifre: <input type="password" name="sifre" /><br />
	E-posta: <input type="text" name="eposta" /><br />
	<button type="submit">Kayıt Ol</button>
</form>

Evet normal şartlarda biz genelde şöyle bir kontrol yapıyoruz..

<?php
	if ( $_POST ){
		// işlemler..
	}
?>

Yani eğer post edilmişse diyoruz, ancak birden fazla form olunca her form için geçerli oluyor bu bölüm.. Bu yüzden yukarıdaki iki form için ayrı ayrı tanımlamamız gerek.. Ya da içerisinde de yazabiliriz ancak gerek yok.. Bunu yapmanın çokça yöntemlerinden en temeli, submit butonlarına name atamaktır.. Örneğin form1 ve form2 diye name’ler atıyalım..

<form action="" method="post">
	<h1>Giriş Yap</h1>
	Kullanıcı Adı: <input type="text" name="kadi" /><br />
	Şifre: <input type="password" name="sifre" /><br />
	<button type="submit" name="form1">Giriş Yap</button>
</form>

<form action="" method="post">
	<h1>Hızlı Kayıt</h1>
	Kullanıcı Adı: <input type="text" name="kadi" /><br />
	Şifre: <input type="password" name="sifre" /><br />
	E-posta: <input type="text" name="eposta" /><br />
	<button type="submit" name="form2">Kayıt Ol</button>
</form>

Evet şimdi php tarafında kontrollerimiz şöyle yapabiliriz;

<?php

	if ( isset($_POST['form1']) ){
		// 1. form işlemleri..
	}
	else if ( isset($_POST['form2']) ){
		// 2. form işlemleri..
	}

?>

Böylece aynı sayfada birden fazla form işlemini yapabiliriz.

PHP ve JSON

Bugün sizlere PHP ve JSON ilişkisini anlatacağım.. JSON’ı temel olarak öğrendikten sonra, PHP’de bulunan JSON fonksiyonlarını ve ne işe yaradıklarını öğreneceğiz..Öncelikle JSON nedir sorusuna basit bir cevap verelim.. JSON, javascript Object Notation’ın kısaltması olup tıpkı XML gibi bir veri değişim formatıdır.

JSON Yapısı

jSON, object (nesne) ve array (dizi) olmak üzere 2 temel yapı içerir. Bu temel yapılar evrensel yapılardır ve tüm modern programlama dillerinde mevcuttur.

Object Yapısı

Bir nesne (object), { (süslü parantez) ile başlar ve } (süslü parantez) ile biter. Anahtar ve değer şeklinde tanımlanırlar.. Her anahtardan sonra : (iki nokta üstüste)kullanılır.. Anahtar/değer çiftleri birbirinden , (virgül) ile ayrılırlar.

Aşağıdaki resim object yapısını temsil etmektedir.

PHP ve JSON

Gördüğünüz gibi o kadarda karmaşık bir yapı değil.. Daha iyi pekiştirmek için hemen ilk örneğimizi yapalım ve bir nesne oluşturalım.

{
    "yeniNesne" : "nesne değeri"
}

Tebrikler, ilk json nesnemizi oluşturduk ???? Şimdi diğer yapıya (array) göz atalım..

Array Yapısı

Bir dizi (array), [ (köşeli parantez) ile başlar ve ] (köşeli parantez) ile biter. Sadece değer şeklinde tanımlanır.. Değerler birbirinden , (virgül) ile ayrılır.

Aşağıdaki resim array yapısını temsil etmektedir.

PHP ve JSON

Gördüğünüz gibi object yapısından biraz farklı.. Köşeli parantezlerle başlayıp bittiği gibi bir anahtar tanımlaması yok.. Yani dizi yapısında sadece değerleri bir arada tutuyoruz.. Bununla ilgili küçük bir örnek yapalım hemen.

["test1","test2"]

Örnekte gördüğünüz gibi dizi içerisinde 2 değer ve bu değerleri virgül ile ayırdık.

Value

Bir değer, çift tırnak içinde şu türleri barındırabilir.
string (yazı), true, false, null (boş değer), number (sayı), object (nesne) ve array (dizi)

PHP ve JSON

Bizim için şimdilik bu kadar bilgi yeterli.. Daha fazla bilgi edinmek için resmi adresine başvurabilirsiniz;
http://json.org/json-tr.html

PHP’de JSON Fonksiyonları

PHP bize JSON ile ilgili 2 fonksiyon sunuyor.. Bunların ilki json_encode()yani bir json formatı dönüştürücüsü ve ikincisi ise json_decode() yani bir json formatı çözücüsü.. Zaten temelde json işlemi içinde bu 2 fonksiyon yeterlidir.

json_encode()

Bir dizi ifadeyi json formatına dönüştürür.. Küçük bir örnek ile kullanımını görelim;

$array = array(
    "kadi" => "tayfun erbilen",
    "sifre" => "123456"
);
$json = json_encode($array);

echo $json;

Bu örneğin çıktısı aşağıdaki gibi olacaktır;

{
    kadi: "tayfun erbilen,
    sifre: "123456"
}

Bu fonksiyona ait birde 2. parametre vardır ancak zorunlu değildir.. 2. parametre değerleri parse etmek için kullanılan tip atamalarıdır.. Sırasıyla aşağıda inceleyelim;

JSON_HEX_TAG
Bütün < ve > karakterleri \u003C ve \u003E karakterlerine dönüştürülürler.

JSON_HEX_AMP
Bütün & karakterleri \u0026 karakterlerine dönüştürülürler.

JSON_HEX_APOS
Bütün ‘ karakterleri \u0027 karakterlerine dönüştürülürler.

JSON_HEX_QUOT
Bütün “ karakterleri \u0022 dönüştürülürler.

JSON_FORCE_OBJECT
İlişkisel olmayan dizi kullanıldığında çıktıların dizi yerine nesne olmasını sağlar.

json_decode()

JSON formatındaki veriyi çözer ve php’de kullanabileceğimiz hale getirir.. Yapısal olarak obje ve dizi halinde çevrilir. 3 parametre alır ancak sadece ilk parametre zorunludur. Bir örnek ile daha anlaşılır hale getirelim;

$json = '{"kadi" : "tayfun erbilen", "sifre" : "123456"}';
var_dump( json_decode($json) );

Yani biz bu değerlere tam olarak şu şekilde erişebiliriz;

$json = '{"kadi" : "tayfun erbilen", "sifre" : "123456"}';
$data = json_decode($json)
echo $data->kadi; // tayfun erbilen
echo $data->sifre; // 123456

Fonksiyona 2. parametreyi true olarak atarsak nesne değil dizi olarak çözme işlemi yapacaktır.. O zamanda veriye erişimimiz yukarıdaki gibi değil aşağıdaki gibi olacaktır.

$json = '{"kadi" : "tayfun erbilen", "sifre" : "123456"}';
$data = json_decode($json, true)
echo $data['kadi']; // tayfun erbilen
echo $data['sifre']; // 123456

json_last_error()

JSON işleminde bir hata oluşup oluşmadığını bu fonksiyon ile kontrol edebiliriz. Bir hata olduğunda sayısal değer döndürecektir.. Bu sayısal değerler sırasıyla aşağıdaki sabitleri temsil etmektedir.

JSON_ERROR_NONE – Hata bulunamadı
JSON_ERROR_DEPTH – Azami yığın derinliği aşıldı (?)
JSON_ERROR_CTRL_CHAR – Denetim karakteri hatası, muhtemelen yanlış kodlanmış
JSON_ERROR_SYNTAX – Sözdizimi hatası
JSON_ERROR_UTF8 – UTF-8 karakter kodlama hatası, muhtemelen yanlış kodlanmış (Geçerlilik : PHP 5.3.1)

JSONView Eklentisi

PHP ve JSON

Tarayıcılarınız için JSON görüntüleme eklentisini kullanabilirsiniz.

Chrome: https://chrome.google.com/webstore/detail/jsonview/chklaanhfefbnpoihckbnefhakgolnmc
Firefox: https://addons.mozilla.org/en-US/firefox/addon/jsonview/

Örnekler

İlk olarak bu sitedeki rss.xml’in json halini yazalım..
http://www.erbilen.net/rss.xml

{
"rss" : {
"version" : "2.0",
"channel" : {
"title" : "Tayfun Erbilen",
"link" : "http://www.erbilen.net/",
"language" : "tr",
"item" : [
{
"title" : "ComarSever.Net",
"link" : "http://www.erbilen.net/projeler/482-comarsevernet.html",
"description" : "
	

Verot.net Çoklu Upload Sorunu

Sizde benim gibi resim upload işlemleri için verot.net’de bulunan upload sınıfını kullanıyorsanız bu sorun (daha doğrusu sorunda denemez buna) sizinde başınıza gelmiştir.. Normal tekli yüklemede sorun yok ama çoklu yüklemede? işte orada bir mantıksızlığa düşüyoruz.. Çözümü ise şöyle.. Önce html yapımız şöyle olsun;

<form method="post" action="" enctype="multipart/form-data">
<input type="file" name="resim[]" multiple />
<input type="submit" name="submit" value="Yükle" />
</form>

Bu şekilde dosyaları birden fazla seçip yükle dediğimizde ise aşağıdaki php kodumuz çalışacak;

$images = array();
foreach ($_FILES['resim'] as $k => $l) {
  foreach ($l as $i => $v) {
	if (!array_key_exists($i, $images))
	  $images[$i] = array();
	$images[$i][$k] = $v;
  }
}

foreach ($images as $image){

	$handle = new Upload($image);
	if ($handle->uploaded) {
		
		/* Resmi Yeniden Adlandır */
		$handle->file_new_name_body = substr(base64_encode(uniqid(true)), 0, 20);

		/* Resmi Yeniden Boyutlandır */
		$handle->image_resize = true;
		$handle->image_x = 150;
		$handle->image_ratio_y = true;
		
		/* Resim Yükleme İzni */
		$handle->allowed = array('image/*');
		
		/* Resmi İşle */
		$handle->Process(realpath("../")."/upload/resim/");
		if ($handle->processed) {
		      echo 'ok\n';
		} else {
                   echo $handle->error;
		}

		$handle-> Clean();

	} else {
		echo $handle->error;
	}

}

Olay bu şekilde çözüm buluyor, böylece çoklu yükleme işlemini kolayca yapabiliyorsunuz.. Kolay gelsin.

Db Show Sınıfı (php)

Çoğu zaman oluşturduğum tabloların ve tablolara ait alanların isimlerini unutuyorum.. Girip phpmyadmin’e bakmakta zor geliyor ???? Bundan dolayı kendime veritabanıma ait tablo ve alanları görebileceğim küçük bir sınıf hazırladım, sizlerle de paylaşayım işinizi görecektir eminim (Özellikle benim gibi üşengeç biriyseniz)
Not: Sınıf hazırlamakta yeniyimdir, ondan dolayı sınıfı inceleyipte artislik yapacaklara şeker verilmiyor bilginiz olsun ????

İndir;
http://yadi.sk/d/Kfnwk7B_2_-dd

Metodlar ve Kullanımları;

show_tables()
Veritabanınıza ait tabloları listeler.. true değerini parametre olarak gönderirseniz aşağıdaki gibi html çıktısı alırsınız, göndermezseniz dizi halinde geriye değer döndürür.

show_fields()
Tabloya ait alanları listeler.. 2 parametre alır, tablo adı ve html çıktısı olacaksa 2. parametre olarak true değeri.. Eğer 2. parametre girilmez ise dizi olarak geriye değer döndürülür.. 2. parametre girilir ise aşağıdaki gibi çıktı verir;

show_tables_and_fields()
Tablo ve tabloya ait alanları bir arada gösterir. Sadece html çıktısı verir, yukarıdaki görsellerin birleşmiş halidir.

Örnek Kullanımı;

<?php

	// sınıfı dahil edelim
	require "db.show.class.php";
	
	// sınıfı başlatalım
	$db_show = new db_show("host","user","pass","db");
	
	// tabloları dizi halinde görelim
	$db_show->_dump( $db_show->show_tables() );
	
	// tabloya ait alanları dizi halinde görelim
	$db_show->_dump( $db_show->show_fields("tablo_adi") );
	
	// tablo ve alanları bir arada html olarak görelim
	echo $db_show->show_tables_and_fields();
	
	// sadece tabloları html olarak görelim
	echo $db_show->show_tables(true);
	
	// sadece tabloya ait alanları html olarak görelim
	echo $db_show->show_fields("tablo_adi", true);
	
?>

Php Yönlendirme Fonksiyonu

Aslında zaten yönlendirme işlemi için header() fonksiyonunu kullanıyoruz. Ancak duruma bağlı olarak öze bir fonksiyonda daha hızlı kullanım kolaylığı elde edebiliriz. Aşağıdaki örnekte olduğu gibi.

<?php

function go ($url, $time = 0){
    if ($time) header("Refresh: {$time}; url={$url}");
    else header("Location: {$url}");
}

// Kullanımı
go("siteadi.com", 10);

// Ya da
go("siteadi.com");