İyinet'e Hoşgeldiniz!

Türkiye'nin En Eski Webmaster Forum'una Hemen Kayıt Olun!

Kayıt Ol!

PHP' ye giriş

*siber*

0
İyinet Üyesi
Katılım
20 Temmuz 2005
Mesajlar
2,014
Reaction score
1
Konum
about:blank
PHP-El kitapları

İçinde hem döküman hemde örnekler mevcut
http://rapidshare.com/files/65098646/iyinet-php-kitap1.zip

Makale halinde verilmiş bir php el kitabı
http://rapidshare.com/files/65099173/iyinet-php-kitap2.zip

Örneklerle verilmiş oldukça açıklayıcı bir php el kitabı
http://rapidshare.com/files/65099540/iyinet-php-kitap3.zip


PHP ' ye Giriş

Bu dökümanda PHP ye yeni başlamış ve muhtemelen daha önce benzer dillerle ilgisi olmuş BT ' ci arkadaşlara temel anlamda bilgiler vermeye çalışacam. Bilinen ifade ile; " Temelde her programlama dili birbirine benzer ", doğru ifade ile; " Programlama dilleri genelde İngilizce kelimeler üzerine kurulmuştur. " diyebiliriz. Yani bir programlama dilini öğrenmek için illede daha önceden bir programlama dili ile uğraşmanız gerekmiyor. Ben kendi adıma Programlama dillerini bir çok kritere göre değerlendiririm. Sonuç olarak en sağlam ve kullanıcı dostu dil üzerinde yoğunlaşırım. İşte size sağlam dillerden bir tanesi...

PHP 'nin Yolları Taştan...

Bu başlıkta nedir böyle deyip şaşırmayın; birazdan PHP nin bitmek bilmeyen yolunda, sırasıyla önemli taşları tanıyacaz... Bir programlama dilinin en önemli giriş noktaları, çıktı fonksiyonları, değişkenler ve operatörlerdir. Zira bunları anladıktan sonra o dilden zevk almaya başlar basit uygulamar ile kendinizi tatmin eder ve bilinen şekilde " artık bende program yazarım ", doğru şekilde " artık bende azimle daha geniş uygulamara geçebilirim. " diyebilirsiniz.

> Sen Çıkardın Beni Baştan...

Bir programlama dilini diğerlerinden üstün tutan ve sizin için değerli olmasını sağlayan, size zevk veren her şey PHP ' de var...

>> Bir Dünya Klasiği, " Merhaba Dünya" örneği..

Ne ilginçtir ki, programlama dilleri üzerine yazılmış tüm kitaplarda, ilk uygulama her zaman ekrana " Merhaba Dünya " yazısını çıkartmaktır. Bunun nedenini bir ara düşünmüş ve dünyadaki ilk programlama dilini bir uzaylının bulmuş olacağı kanaatine varmıştım. Her neyse...

Bizde buna benzer bir uygulama yapalım...

Not : Ben bilgisayarınızda PHP kodlarını çalıştırabileceğiniz azda olsa html bilgisine sahip olduğunuzu düşünerek anlatıyorum. ( Eğer sisteminizde PHP kurulu değil ise ; Windows sistemler üzerinde kurulum için - http://www.zeb.biz/btkaynak.php?bolum=2&olay=goster&no=14 - ve Linux sistemlerde kurulum için - http://www.zeb.biz/btkaynak.php?bolum=4&olay=goster&no=35 - , adreslerini kullanabilirsiniz. )

Not : Dosya olarak kaydediceğiniz, inceleyeceğiniz tüm kodlar kırmızı ile belirtilmiştir. Php kodları ise koyu şekilde gösterilmiştir. PHP dosya uzantıları .php şeklindedir. ( Eski vesiyonlarda .php3 idi... )
 

*siber*

0
İyinet Üyesi
Katılım
20 Temmuz 2005
Mesajlar
2,014
Reaction score
1
Konum
about:blank
PHP:
<html><title> PHP 'ye Giris </title><body><? echo " Merhaba Uzayli " ; ?></body></html>

Yukarıdaki kodları, bir metin editoru ile ( ör : notepad, pico ) kaydedip ( ör : 1.php ) çalıştırdığınız zaman , Browser pencerenizin ekranında " Merhaba Uzaylı " yazdığını göreceksiniz... Kaynak koduna baktığınız zaman ise;



PHP:
<html><title> Temel PHP </title><body>Temel PHP Bilgisi</body></html>

görülür...

Dikkat edeceğiniz üzere sizin yazdığınız ve kaydedip çalıştırdığınız 1.php dosyasının içeriği ile browser pencerenize yansıyan içerik farklıdır.
Bunun nedeni PHP nin yapısı nedeni ile sizin ona gönderdiğiniz dosya içerisinde kendine özgü tag ( TR : etiket ) ' ları bulup içindeki komutları ve bilgileri işleyip kullanıcıya salt html sunmasıdır.
 

*siber*

0
İyinet Üyesi
Katılım
20 Temmuz 2005
Mesajlar
2,014
Reaction score
1
Konum
about:blank
Not : PHP ' nin kodları işlemesi için gereken tag <? ve ?> ' dir. PHP kodlara işlemeye <? işareti ile başlar ve ?> işareti ile bitirir.

Merhaba Uzaylı örneğine bakacak olursanız <? echo " Merhaba Uzaylı " ; ?> satırında bunu görebilirsiniz. Tabi burada tag içerisine yazılacak komutları öğrenmek büyük zaman alacaktır. Çünkü PHP son zamanlarda geliştirilmekte olan bir dil olduğu için aynı komutlar içerisinde fonksiyonlar sunmaktadır. ( Komut, fonksiyon gibi terimleri şimdilik dert etmeyin ileride yeterince anlıyacaksınız. )

Burada PHP de öğreneceğimiz ilk komutu görüyorsunuz. echo komutu... Bu komut ekrana çıktı yapmamızı sağlayan komuttur.

Kullanımı : echo "Çıktı Değeri"

Kullanımdan anlıyacağınız gibi PHP de komutların kullanımı , o komutun karakteristiğine göre kolay ve zordur, PHP de en basit komutlardan biri echo komutudur. Echo komutunu kullanırken ekrana basılacak değerin " ( çift tırnak ) işaretleri ile belirlenmiş olması gerekmektedir. ( çift tırnak kullanımı ekrana basılacak değere bağlıdır ve olmayabilirde, ileride değişkenler konusunda bunu öğrenicez. )
Bizde bu komutu kullanarak ;
 

*siber*

0
İyinet Üyesi
Katılım
20 Temmuz 2005
Mesajlar
2,014
Reaction score
1
Konum
about:blank
PHP:
<html><title> PHP 'ye Giris </title><body> // Ilk basta standart HTML kodlari ile //Basligi ( title ) " PHP 'ye Giris " olan bir sayfa yaptik.
//daha sonra;
<? echo " Merhaba Uzayli " ; ?>



PHP nin işlemesi gereken kodların başladığını belirttiğimiz <? tagı ile echo komutunu kullanarak ekrana Merhaba Uzaylı yazısını yazdırdık. Echo komutunun bitimindeki/sonundaki noktalı virgül ( ; ) işareti dikkatinizi çekmiştir. Bu işaret ( noktalı virgül ) PHP de her satırın sonuna koyulması gereken bir işarettir. ( bazı durumlar haricinde... ) Bu sayade PHP o kod satırının bittiğini anlar.

ve nihayetinde ?> tagı ile PHP kodunun bittiğini belirttik.

Not : Kullanıcılar için en zor durumlardan biri, en çok yapılan hatalardan biri olan Parse Error hatalarıdır. Bu hata genellikle noktalı virgül işaretinin yanlış yada hiç kullanılmamasından kaynaklanır. ( İleride 500 satırın üzerinde kod yazdığınız zaman bunun önemini daha iyi anlıyacaksınız. )

Son iki satırdada

</body>
</html>
 

*siber*

0
İyinet Üyesi
Katılım
20 Temmuz 2005
Mesajlar
2,014
Reaction score
1
Konum
about:blank
standart HTML kodları ile sayfamızı bitirdik. Şuana kadar kafanızda bir soru işareti oluşmadı ise, muhtemelen bir çok şeyi anlıyamamışsınızdır. Size önerim kafanızda soru işaretleri belirene kadar şuana kadar olan kısmı tekrar tekrar okuyun. :)

Şuana kadar öğrendiklerimizi kısaca hatırlayalım...

PHP ' de , html ile php nin işleyeceği kodları ayırmak için <? ?> tagları kullanılır. ( <php ?> taglarıda vardır, aynı işi görürler... )

PHP ' de ekrana çıktı yapmak için kullanılan komutlardan en kolayı echo komutudur.

PHP ' de her komut satırının sonuna ; ( noktalı virgül ) işareti getirilir. ( bazı durumlar dışında. )

>> Diğer Yararlı Bilgiler...

Buraya kadar öğrendikleriniz dışında size bir iki kısa dip notla yararlı bilgiler sunmayı uygun gördüm.

Mesala ; Her tasarımcı kodlar arttıkça bazı dizayn notlarını gerekli satırlara ekleme gereği hisseder. Böylece üzerinden bir süre geçmiş kodlar konusunda yabancılık hissetmez. Bu bilinen adıyla " kaçış karakterleri ( escape char. ) " , doğru adıyla ayıraç/belirteç ' lerdir.
 

*siber*

0
İyinet Üyesi
Katılım
20 Temmuz 2005
Mesajlar
2,014
Reaction score
1
Konum
about:blank
Zira PHP ' nin hiç bir şeyden korkusu yoktur, o kaçmaktan öte kullanıcılara dinlenmesi ve önemli yerleri belirtmesi için imkanlar veren bir dildir. Şimdi aşağıdaki kodları bir metin editoru yardımıyla 2.php adıyla kaydedelim.



PHP:
<?echo " Merhaba Uzayli" ; // echo kullanimiecho "<br>"; // alt satira geçecho " Merhaba Dünyali"; // echo kullanimi// echo " Tamam... ";?>



Çalıştırdığımız zaman alt alta iki satırda " Merhaba Uzaylı " ve " Merhaba Dünyalı " cümlelerini göreceksiniz.

İlk satırda " echo " Merhaba Uzaylı" ; // echo kullanımı " ile az önce öğrendiğimiz gibi echo komutu ile ekrana bir çıktı bastırdık. ; ( noktalı vürgül ) işareti ile komutumuzu bitirdik. daha sonra // işareti ve devamında bir yazı yazdık.

PHP de herhangi bir satır üzerinde eğer bir dizayn notu yada herhangi bir bilgi ekliyeceksek // işaretlerini kullanırız. PHP // işaretini gördüğü zaman daha sonraki işleme geçecektir.

Sonraki satırlarda ise ( echo "<br>"; // alt satıra geç ) html nin <br> kodunu ekrana bastırarak alt satıra geçtik. Sonra tekrar ekrana Merhaba Dünyalı yazdırıp, son olarakta // echo " Tamam... "; satırı ile echo komutunu kullandık. Bu komut satırının başında // işareti olduğu için PHP ekrana Tamam yazısını yazdırmadı.

Bazen 4-5 satırı bir anda işlevsiz bırakmamız gerekebilir. İşte ozaman /* */ işaretlerini kullanırız.

Ör :



PHP:
<?/*echo " Merhaba Uzayli" ; // echo kullanimiecho "<br>"; // alt satira geçecho " Merhaba Dünyali"; // echo kullanimi// echo " Tamam... ";*/?>



Yukarıdaki kodu çalıştırdığımızda ekranda hiç bir çıktının olmadığını görürüz.

Bazende HTML kodları ile PHP kodları karışabilir. ör : Verdana fontu ile 1p büyüklüğünde bir yazıyı php de nasıl yacağımızı düşünün?

Bilmeyenler bunun aşağıdaki şekilde olacağını düşünebilirler.



PHP:
<?echo "<font face="Verdana" size="1">1p büyüklügünde Verdana</font>";?>


Tabi bunu düşünenler yanıldıklarını ancak, kodu çalıştırdıklarında anlarlar, ve alacakları hata baştan sölediğim parse error hatasıdır. ( Parse error: parse error, expecting `','' or `';'' in xxxxx on line 2 )

Size daha önce PHP 'de echo komutunun kullanımı hakkında bilgi vermiştim, haztırlayacağınız gibi echo komutunda ekrana bastıralacak değerin " ( çift tırnak ) işaretleri arasında olması gerektiğiydi. ( özel durumlar dışında... )

Yukadırdaki hatanın nedeni.. php nin satırın sonunadek yani ; işareti gelene kadar bir çok tırnak işaretinin olmasındadır. Yani html kodunun " ( çift tırnak ) ları ile echo komutununkiler karışmaktadır.

İşte burada biz html ile echo komutunun işaretlerini bir birinden ayıracaz ve bu hatanın önüne geçmiş olucaz. Aşağıdaki gibi...



PHP:
<?echo "<font face=\"Verdana\" size=\"1\">1p büyüklügünde Verdana</font>";?>

Burada anlıyacağınız gibi \ işareti php nin o işaretten sonra gelen karakteri taki önemsenecek değere kadar önemsemiyeceğini gösteriyor. :) biraz ilginç oldu ama mantığını anlarsanız çok basit bir şey olduğunu görecekseniz.

Normalde bu kodu echo "<font face='Verdana' size='1'>1p büyüklüğünde Verdana</font>"; şeklinde yani ' ( tek tırnak ) ilede kullanabilirdik. Ama bu php nin değil html nin bir özelliği olurdu.

Zira php " ( çift tırnak ) işareti olmadığı için hata vermiyecek, browserımızda html kodundaki bu tek tırnağı doğru kullanacaktı. Ancak gelişmiş html kodlarında özellikle java script in girdiği noktalarda bunu kullanmak yararsız olacaktır.


ALINTIDIR
 

Caesar

0
İyinet Üyesi
Katılım
5 Haziran 2006
Mesajlar
1,894
Reaction score
7
PHP:
funtion phpye_giris($izin_iste) {
       if ($izin_iste=="merhaba+php+girebilir+miyim?") {
       echo "PHP'ye giriş başarılı";
       } else {
       echo "Sen değil PHP'ye ahıra bile giremezsin";
       }
}
...
PHP:
$giris="ehehe aç kapını bengeldim php";
$girismetni=str_replace(" ","+",$giris);
$girismetni=strtolower($girismetni);
phpye_giris($giris_metni);
yada
PHP:
$giris="merhaba PHP girebilir miyim?";
$girismetni=str_replace(" ","+",$giris);
$girismetni=strtolower($girismetni);
phpye_giris($giris_metni);
 
K

kepche

Misafir
Giriş seviyesindekilerin bana sıkça sorduğu sorulardan birisi:
echo ile ekrana yazdırırken tek tırnak (') ve çift tırnak (") karakterleri arasındaki fark nedir?
Bir örnekle

PHP:
<?php
$degisken = "Selam";

echo "$degisken, nasılsın?"; //çıktısı : Selam, nasılsın?

echo '$degisken, nasılsın?'; //çıktısı : $degisken, nasılsın?
?>

php, çift tırnak (") içerisine girerek, orda da değişken var mı diye kontrol eder, değişken varsa, değerini yazdırır. tek tırnakta (') böyle birşey yoktur, içerisi neyse, aynen ekrana yazdırılır.

Not: Giriş dersi olduğu için, ders ilerlerse detaylarına girerim, şimdiden kafa karıştırıcı olmasın :)
 

*siber*

0
İyinet Üyesi
Katılım
20 Temmuz 2005
Mesajlar
2,014
Reaction score
1
Konum
about:blank
İşleç isimleri.
&& Ve
|| Veya
== Eşittir
! Değil
!= Eşit değil
> Büyüktür
< Küçüktür
>= Büyük ya da eşittir
<= Küçük ya da eşittir

örnek
PHP:
<?
$a = 1;
$b = 2;
$c = 3;
if ($c <= $a) {
 echo "$c küçüktür $a den";
}
else {
 echo "$c $a den küçük değildir.";
}
?>
Bu örnekte "<=" küçük eşitse işlecini kullan dedik. $c $a dan büyük olduğu için else değeri devreye girecek ve
3 1 den küçük değildir.
şeklinde olacaktır.

başka bir örnek.

PHP:
<?
$a = 1;
$b = 2;
$c = 3;
if ($a < $b && $c > $b) {
  echo "$a $b den küçüktür ve $c $b den büyüktür.";
}
else {
 echo "$a $b den büyüktür ve $c $b den küçüktür.";
}
?>
Bu örnekte $a küçükse $b den ve $c büyükse $b den işleçlerini kullandık. Buradaki if deki örnek doğru olduğu için ekrana çıkacak yazı.

1 2 den küçüktür ve 3 2 den büyüktür.

olacaktır..
 
K

kepche

Misafir
basit POST kullanımı:
--------------------
gonderen.html
HTML:
<form method="post" action="alan.php">
İsminizi Girin <input type="text" name="gidenText" />
<br />
<input type="submit" name="gonder" value="Gönder" />
</form>

alan.php
PHP:
<?
//form değerleri <form method="post"> ile gelen veriler $_POST dizisine atanır.
$gelenText = $_POST['gidenText'];	//önceki sayfadan gönderilen ve kullanmak istediğimiz textbox ın adı gidenText..

echo 'İsminiz : ' . $gelenText; 

//alternatif metodlar (echo nun yazım kurallarıyla ilgili, echo kullanımından bahsetmiştim yukarda)
//echo "İsminiz $gelenText";
?>



basit GET kullanımı:
--------------------
getKullanimi.php (sayfaya getKullanimi.php?isim=bişeyler şeklinde değişken gönderdiğinizi varsayıyorum)
PHP:
<?
//adresden gelen bilgiler, ve <form method="get"> şeklinde gelen veriler $_GET dizisine atanır.
$gelenIsim = $_GET['isim'];

echo 'İsminiz : ' . $gelenIsim;
?>

register_globals:
--------------------
register_globals in on olması durumu ile ilgili olarak söylemek istediğim birkaç şey var.
öncelikle benim tavsiyem, register_globals değerini off yapıp, elinizi $_POST ve $_GET kullanmaya alıştırın.
verilerinizi daha kontrollü almış olursunuz böylece, güvenliği de bir nebze olsun arttırmış olursunuz.

mesela ( daha önceden de forumda verilmiş olması lazım , php.net den alıntı )

ornekRG.php
PHP:
<?php
// eğer, fonksiyon kontrolünü geçerse $authorized = true oluyor, yani yetkili olunuyor.
if (authenticated_user()) {
   $authorized = true;
}

//eğer yetkili olunursa, gizli bilgi ekrana bastırılıyor.
if ($authorized) {
   include "/highly/sensitive/data.php";
}
?>

Bu tip bir kodda, register_globals değeri on olduğu zaman, mesela ornekRG.php?authorized şeklinde girilirse, direk olarak kullanıcı her kim olursa olsun bilgiye ulaşabilir.

register_globals le ilgili güvenlik sorunlarını, google dan basit aramalarla bulabilirsiniz.
Sıfırdan yazdığınız her kod için, register_globals değerini off yapıp, kodunuzu ona göre yazmanızı tavsiye ederim.
 

Hobichat

0
İyinet Üyesi
Katılım
26 Ekim 2006
Mesajlar
336
Reaction score
1
hocam ya birde if, else, elseif fonsiyonlarıyla ilğili örneklerde paylaşabilirmisiniz.
 

Grafix

0
İyinet Üyesi
Katılım
16 Aralık 2006
Mesajlar
1,153
Reaction score
0
Konum
Bursa
insan olarak kararlarımızı hemen hemen daima "bir şey öyle ise böyle, öyle değilse şöyle davranmak" üzere almaz mıyız? PHP programında if deyimi bunu sağlar.

if ( koşullar ) {

koşullar doğru ise yapılacak işlere ilişkin komutlar

}

elseif (diğer koşullar) {

diğer koşullar doğru ise yapılacak işlere ilişkin komutlar

}

else {

diğer her durumda yapılacak işlere ilişkin komutlar

}

kullanımı yukarıdaki gibidir,aşağıdaki örneği de incelerseniz mantığını kavrayabilirsiniz..

PHP:
<?php 

$sarki = "Güneş Doğacak"; 

if ( $sarki == "Güneş Doğacak" ) { 

echo ("Seçtiğiniz şarkının adı: Güneş Doğacak!"); 

} 

elseif ($sarki == "Beklerim Ben") { 

echo ("Seçtiğiniz şarkının adı: Beklerim Ben!"); 

} 

else { 

echo ("Lütfen bir şarkı seçiniz!"); 

} 

?>
bir başka örnek;

PHP:
<?php 

$formdangelenuser = $_POST["kullanici"];
$formdangelenpass = $_POST["parola"];

if(($formdangelenuser=="") or ($formdangelenpass=="")){

echo "Lütfen boş alan bırakmayınız";
header("refresh: 2; url=index.php");

}else{

echo "Kullanıcı girişi başarılı Hoşgeldiniz..";
header("refresh: 2; url=hesabiniz.php");

}

?>
 

Hobichat

0
İyinet Üyesi
Katılım
26 Ekim 2006
Mesajlar
336
Reaction score
1
çok tşkler hocam devamını bekliyorum swict ve while gibi fonsiyonlarında yapabilirseniz çok makbule geçer anlatımız çok iyi o açıdan sölüyorum :) yani boş zamanınızda olabilir.
 

Grafix

0
İyinet Üyesi
Katılım
16 Aralık 2006
Mesajlar
1,153
Reaction score
0
Konum
Bursa
switch fonksiyonunuda şu örnekle açıklayabiliriz,

index.php diye bir dosya oluşturalım,içine bir form yapalım ve action kısmı post metodu ile gelen.php dosyasına gitsin

bir text alanı yapalım adını "meyve" koyalım,
birde submit butonumuzu koyup index.php dosyamızı kaydedelim


index.php
PHP:
<form action="gelen.php" method="post">

<div align="center">

<table border="0" cellspacing="0" cellpadding="0">
	<tr>
		<td>Lütfen Bir Meyve Adı Girin</td>
		<td>:</td>
		<td><input type="text" name="meyve" size="20"></td>
	</tr>
	<tr>
		<td> </td>
		<td> </td>
		<td><input type="submit" value="Gönder"></td>
	</tr>
</table>
</div>
</form>

gelen.php

PHP:
<?php

/*Formdan gelen değerimizi çektik*/
$meyve = $_POST["meyve"];

/*Aşağıda yapmış olduğumuz if kontrolü ile text alanına boş bir değer girilmesi halinde hata verip index.php ye geri yönlendirmesini sağladık*/
if($meyve==""){

echo "Lütfen boş alan bırakmayınız";
header("refresh: 2; url=index.php");
}

switch($meyve){
/*girilen değer limon ise echo ile meyvenin özelliklerini yaz ve dur*/
case "limon":
	echo "Girilen meyve sarıdır,tadı çok ekşidir,yemeklere sıkılır";
	break;
	
/*girilen değer karpuz ise echo ile meyvenin özelliklerini yaz ve dur*/
case "karpuz":
	echo "Girilen meyve elips şeklinde tatlımı tatlı yiye yiye doyamadığımız bir meyvedir<br>";
	break;
	
/*girilen değer elma ise echo ile meyvenin özelliklerini yaz ve dur*/

case "elma":
	echo "Girilen meyvenin kırmızısıda olur,yeşilide çok faydalı bir meyvedir ";
	break;
/*yukarda tanımladığımız meyvelerin dışında bir kelime girilirse echo ile hatayı ver ve dur*/

default;
	echo "Böyle bir meyve bulunamadı";
	break;
}
?>

umarım faydalı olmuştur..
 

Hobichat

0
İyinet Üyesi
Katılım
26 Ekim 2006
Mesajlar
336
Reaction score
1
hocam gerçekden çok faydası oldu çok saolun allah razı olsun :) hatta ben bunu js coduyla yapdım php de yapılabildiğini bilmiyordum sayenizde ögrenmiş oldum.
header("refresh: 2; url=index.php");
}
 

Grafix

0
İyinet Üyesi
Katılım
16 Aralık 2006
Mesajlar
1,153
Reaction score
0
Konum
Bursa
PHP:
header("refresh: 2; url=yonleneceksayfa.php");

burda 2 nin anlamı,
2 saniye sonra beni yonleneceksayfa.php'ye yönlendir.

fakat beklemeden yönlendirmek istiyorsanız;

PHP:
header("location:yonleneceksayfa.php");
 

Angelo

0
İyinet Üyesi
Katılım
13 Aralık 2004
Mesajlar
9,603
Reaction score
111
Konum
AZ
Ek olarak Refresh, refere bilgisini resetler, header ise yönlendirirken refere bilgisini tutar.

foreach'den bahsetmek gerekirse biraz, foreach dizi içerisinde döngü yapmanızı sağlar. Dizideki indekslerin önemli olduğu kısımlarda daha çok kullanılır. Indeksten kasıt dizinin elaman ismi. Dizileri küme karşılıklı kümeler gibi düşündüğünüzde indeksler ve karşılığında aldıkları değerler vardır.

Örneğin:

Favorilerimizden oluşan bir dizimiz olsun.

$favori['araba'] = "maserati";
$favori['renk'] = "mavi";
$favori['icki'] = "votka";
$favori['takim'] = "fenerbahce";

Dizimiz bu şekilde set edilmiş olsun. Bu diziyi döndürmek istersem.

Örnek 1
--------
PHP:
foreach ($favori as $deger) {
echo $deger.'<br>';
}
--------

Bu örnek ekrana
maserati
mavi
votka
fenerbahce
basacaktır. Dikkat ederseniz sadece değerleri bastı indeksleri döndürmesini istemedik.


Örnek 2
--------
PHP:
foreach ($favori as $indeks => $deger) {
echo "$indeks = $deger<br>";
}
--------

Burada => operatoru ile hem indeks i hem değeri döndürmek istediğimiz için ekrana şu şekilde bir şey basacaktır.

araba = maserati
renk = mavi
icki = votka
takim = fenerbahce


Kısacası foreach'i iki şekilde kullanabilirsiniz, indeks değerleri size genelde indekslere göre değerlerin yeniden düzenlenmesi gerektiği yerlerde ya da indekslerin de kullanılacağı yerlerde lazım olacaktır. Sadece değer lazımsa birinci örnek şeklinde döndürebilirsiniz.



UYGULAMA
-----------
Klasik bir mysql update formu düşünelim. Kullanıcılarınızın profil güncelleme bölmesi olsun. Normalde yapacağınız şeyi düşünelim, bir çoğunuzun kullandığı metod şu şekilde oluyordur sanırım;

PHP:
$isim = $_POST['isim'];
$adres = $_POST['adres'];
$email = $_POST['email'];
//... böyle devam eder

mysql_query("UPDATE kullanici SET isim='$isim' , adres='$adres', email='$email' WHERE id='$_GET[id]'");

Yanlış mı? Hayır değil, bir yere kadar. Ancak bu sizin kullanıcı güncelleme sayfanız. Ondan sonra başka bir sayfada değişik değişkenlerle tekrar update yapacaksınız, başka sayfada değişik. Her seferinde yeni kod.. (Ben copy paste yapıyorum değişken adlarını değiştiriyorum diye içinizden söylenmeyin)

Peki genel bir fonksiyon olsa, html formlarinizdaki verileri otomatik olarak mysqlde güncellese. Şöyle ki

PHP:
function sqlhazirla() {

   foreach ($_POST as $indeks => $deger) {
   $sql .= "$indeks='$deger', ";
   }

$sql = rtrim($sql,", ");
return $sql;
}

Ne işe yaradı bu? Bütün post datalarınızın indeksleri ve değerlerini belirtilen formatta uc uca ekledi, ve en sonunda sonundaki fazlalık virgülü kesti. rtrim() sağdan string kesme işlemidir. Bu işlem sonunda ilk örneğimizdeki formdan gelen veriler nasıl biçimlendi $sql içinde

$sql = "isim='ahmet',adres='levent',email='[email protected]'" oldu dimi. Yani mysql de istediğimiz format. Ve artık bu fonksiyonu istediğimiz forma uygularız teker teker değişkenleri yazmamıza gerek yok.

Tek yapmamız gereken bu yapı.
--
$sql = sqlhazirla();
mysql_query("UPDATE tablo SET $sql WHERE id='$_GET[id]'");
--


Bir derece ileri götürmek istersek, Postlarda bazen mysql e gitmeyecek alanlar oluyor, captcha gibi, submit butonu gibi, ya da canınızın istediği hidden alanlar gibi. Pekala onları döngüye nasıl aldırmayacağız. Çünkü aldırırsak onlar da döngüye girecek kod='819292' gibi ki mysql bunun karşılığı olmadı için sayfanızda hata verecektir. Bunun için sqlhazirla() fonksiyonuna bir girdi verelim, bu girdi de istemediğimiz alanlar olsun ki onlar sorguya katılmasın.


PHP:
function sqlhazirla($istemiyoruz) {

$alanlar = explode("-",$istemiyoruz);

   foreach ($_POST as $indeks => $deger) {
       
      if (!in_array($indeks,$alanlar)) {
      $sql .= "$indeks='$deger', ";
      }

   }

$sql = rtrim($sql,", ");
return $sql;
}

formatimiz
$sql = sqlhazirla("kod-submit-gizlialan1");
oldu.

Burada yaptığımız şey sqlhazirla() fonksiyonuna verdiğimiz girdiler sql ye katılmasını istemediğimiz veriler. Öncelikle ilk satırda bu veriyi "-" işaretine göre bölüp diziye attık explode() ile. Şimdi elimizde elemanları kod,submit,gizlialan1 olan bir dizi var. Şimdi post dizisi üzerinde dönerken, indeksleri kontrol ediyoruz her adımda, eğer indeksimize ait güncel değer, yasaklı diziye ait değilse döngüye katıyoruz.

Bu uygulamada dikkat edilmesi gereken nokta HTML formlarınızdaki form indekslerinin mysql alanlarıyla aynı olması. Ki zaten mantıken çoğu zaman aynıdır. MySQL'de ismi isim olan bir alana, formda da isim deyin.

foreach() için örnek olması açısından ekledim. Bunu kullanarak sitelere ait kontrol paneli hazırlamalarında artık güncelleme bölümleri problem olmaktan çıkıp her bir data alanının güncellemesi sayfası sadece html formlarının oluşturulmasına bakıyor.


inceleyin, örnek içinde kullanın.

www.php.net/foreach
www.php.net/in_array
www.php.net/explode
www.php.net/rtrim
 

Türkiye’nin ilk webmaster forum sitesi iyinet.com'da forum üyeleri tarafından yapılan tüm paylaşımlardan; Türk Ceza Kanunu’nun 20. Maddesinin, 5651 Sayılı Kanununun 4. maddesinin 2. fıkrasına göre, paylaşım yapan üyeler sorumludur.

Backlink ve Tanıtım Yazısı için iletişime geçmek için Skype Adresimiz: .cid.1580508955483fe5

Üst