AJAX Kullanarak Veri Almak

AJAX, MySQL, PHP 6 yorum »

Bu makalemizde HTML, PHP, AJAX ve MySQL ortak çalışması sonucu anlık yanıt veren bir sayfa tasarlamayı öğrenelim. Bunun için verdiğimiz harf ya da kelime ile başlayan veritabanında kayıtlı isimleri bize listeleyen bir öneri kutusu yapmaya ne dersiniz? Böylelikle Ajax’ı yakından inceleme fırsatı bulacağız.

Öncelikle verilerimizi alacağımız bir veritabanı ve çeşitli kayıtlar oluşturuyoruz:

1
2
3
4
5
6
7
8
9
10
11
CREATE TABLE `ajax_veri` (
`id` int(5) unsigned NOT NULL auto_increment,
`isim` varchar(45) NOT NULL default '',
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
 
INSERT INTO `ajax_veri` VALUES("1", "Ali");
INSERT INTO `ajax_veri` VALUES("2", "Veli");
INSERT INTO `ajax_veri` VALUES("3", "Cavit");
INSERT INTO `ajax_veri` VALUES("4", "Cavidan");
INSERT INTO `ajax_veri` VALUES("5", "Alara");

ajax_veri adını taşıyan bu tabloya ilk etapta 5 isim yükledik. Şimdi verilerimizi almamıza yarayacak bir PHP dosyası yazmalıyız. Bunu yaparken verilerin GET metoduyla alınmasını sağlamalıyız. Bu dosyamızın ismini ornek.php yapalım. İçerisinde ise ornek.php?kelime=A şeklinde eklendiğinde o harfle ilgili verileri bize listelemesini sağlayalım:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<?php
if ( isset( $_GET['kelime'] ) &amp;&amp; strlen( $_GET['kelime'] ) > 0 ) {
   $kelime = strtolower( str_replace( "'", "\'", $_GET['kelime'] ) );
   mysql_connect('localhost', 'user', 'pass');
   mysql_select_db('ajax_veri');
   $sorgu = mysql_query( "SELECT * FROM ajax_veri WHERE isim LIKE '" . $kelime . "%';" );
   if ( !$sorgu || mysql_num_rows( $sorgu ) == 0 )
      echo '---';
   else
   {
      while( $kayit = mysql_fetch_array( $sorgu ) )
      echo $kayit['isim'] . ',';
   }
   mysql_close();
}
else
   echo '---';
?>

Buradaki veritabanı bağlantı için gerekli host, kullanıcı ve şifreyi değiştirmeyi unutmayın. Kullandığımız strlen() en az 1 karakter için sorgu yapılmasını sağlamak için. strtolower() ise gelen veriyi tamamen küçük harfe çevirip sorgulamamızı sağlar. str_replace ile üst ayraçlara güvenlik önlemi olarak taksim ekledik. Diğer kısımlar daha önceki yazımda MySQL bağlantısı kısmında anlatılanlardan farklı değil.

PHP dosyamızı yarattıktan sonra sıra HTML dosyamızı ve JavaScript’imizi oluşturmaya geliyor.

1
2
3
4
5
6
7
8
9
10
<html><head>
<title>Ajax Ornek</title>
<script type="text/javascript" src="ornek.js"></script>
</head>
<body></code>
 
<form><input type="text" id="txt1" onkeyup="ipucuGoster(this.value)"></form>
<p>Oneriler: <span id="ipucu"></span></p> </body>
 
</html>

Bu şekil hazırladığımız HTML belgemizde txt1 ismini taşıyan kutucuğumuzda herhangi bir karakter yazıldığında ipucuGoster() fonksiyonunun çalışmasını sağlarız. Üst tarafta ornek.js ye link verdik. Böylelikle son işlem olarak javascript dosyamızı hazırlamaya geldik. “ornek.js” olarak adlandıracağımız bu dosyaya şunlar yazılmalı: 1. Bölüm XMLHTTP objemizi seçmek.

?View Code JAVASCRIPT
1
2
3
4
5
6
7
8
9
10
function GetXmlHttpObject()
{
   var xmlHttp=null;
   try { xmlHttp=new XMLHttpRequest(); }
   catch (e) {
      try { xmlHttp=new ActiveXObject("Msxml2.XMLHTTP"); }
      catch (e) { xmlHttp = new ActiveXObject("Microsoft.XMLHTTP"); }
   }
   return xmlHttp;
}

Bu fonksiyon bize tarayıcının uyumluluğunu denetleme şansı verir. Dönen değer null ise Ajax desteği yok demektir. 2. Kısım ise İşlevselliği sağlayacaktır:

?View Code JAVASCRIPT
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
var xmlHttp
function ipucuGoster( str )
{
   if ( str.length == 0 )
   {
      document.getElementById("ipucu").innerHTML="";
      return;
   }
   xmlHttp = GetXmlHttpObject();
   if ( xmlHttp == null )
   {
      alert ("Tarayiciniz AJAX destekli degil!");
      return;
   }
 
   var url="ornek.php";
   url = url + "?kelime=" + str;
   url = url + "&amp;sid=" + Math.random();
 
   xmlHttp.onreadystatechange=stateChanged;
   xmlHttp.open("GET", url, true);
   xmlHttp.send( null );
}
function stateChanged()
{
   if ( xmlHttp.readyState == 4 )
      document.getElementById("ipucu").innerHTML=xmlHttp.responseText;
}

Burada “xmlHttp” bir değişken olup 1. kısımdaki fonksiyonun bize verdiği cevaptır. Cevap olumluysa belirtilen url açılarak (belirtilen kriterlerle) veri alınır ve “id” özelliği “ipucu” olan yere yazılır. Bu işlem her kelime eklendiğinde yazılır. “readyState == 4″ bize işlem tamamlandıktan sonra yapılacakları bildirir. Dikkatinizi çektiyse ornek.php’nin sonuna bir SID= eklemesi yaptık. Bunun nedeni bize hep aynı bilgiyi göndermemesini sağlamak yani sürekli güncel olarak veriyi almak. Bunu header() de dosyanın sürekli eski tarihli olmasını sağlayarak da yapabiliriz.

Farklı örnekleri yine yorumlamak dileklerimizle…


MySQL Komutları

MySQL Yorum yapılmamış »

Açık kaynak veritabanı sistemi MySQL ile anlaşabilmek için çeşitli komutlar kullanmaktayız. Bunlar bir veritabanı yaratmaya, silmeye, tablo oluşturmaya, seçmeye, düzenlemeye ve silmeye yaramaktadır. Şimdi bunlardan en çok kullanılanları ve en önemlileri burada sizlerle paylaşalım.

Öncelikle bir veritabanı (database) yaratmak için kullandığımız CREATE komutu. Bu komut, eğer yetkiliyseniz belirtilen isimde veritabanı yaratmanızı sağlar. Veritabanı, tabloları kapsayan en büyük depolama birimidir.

CREATE DATABASE veritabani;

Bir veritabanı, içindeki tabloları ve tüm bilgilerini silmek içinse DROP DATABASE’yi kullanmaktayız. Yarattığımız “veritabani” isimli veritabanını silmek istersek:

DROP DATABASE veritabani;

Komutu ile bu işlemi gerçekleştiririz. Veritabanının küçük depolama birimleri olan tabloları da CREATE ve DROP ile oluşturur, fakat bu kez DATABASE yerine TABLE deyimi kullanırız.

CREATE TABLE tabloadi (
'id' INTEGER(5) UNSIGNED NOT NULL AUTO_INCREMENT,
`kategori` INTEGER(4) UNSIGNED NOT NULL,
`isim` VARCHAR(45) NOT NULL,
`detaylar` TEXT NOT NULL,
PRIMARY KEY(`id`)
)
TYPE = MYISAM;

Burada parantez içerisinde tablomuzu oluşturan sütunlar ile ilgili bilgileri gireriz. Tek tırnak içindekiler sütun adlarıdır. Sonraki kullanılanlar ise o sütunun özellikleri. INTEGER(Boyut) sayısal bir değer, VARCHAR(boyut) ya da TEXT ise alfasayısal bir değeri ifade eder. DOUBLE ise ondalıklar ve negatifleri de kullanabildiğimiz sayısal ifadelerdir. NOT NULL, sütunun asla tanımsız olamayacağını, AUTO_INCREMENT her yeni kayıtla değerin artacağını (bu işlem otomatik yapılır), PRIMARY KEY hangi anahtarın öndeğer olduğunu (öncelikli) belirtir. En sonda kullanılan MyISAM (ya da InnoDB) ise tablo türünü belirtmemize yarar. Tabloyu silmek içinse DROP kullanılır:

DROP TABLE tabloadi;

Ve şimdi nasıl kayıt ekleyip, düzenlediğimizden ve sildiğimizden bahsedelim. Kayıt eklemek için INSERT INTO deyimini kullanırız.

INSERT INTO tabloadi (sutun1, sutun2) VALUES('deger1', 'deger2');

Burada ilk parantezde sütun adları, VALUES() içerisinde ise o sütuna karşılık gelecekleri yazdık. Eğer tüm sütunları içeren bir komut kullanıyorsanız sütunların sırasına göre yazabilirsiniz.

INSERT INTO tabloadi VALUES('deger1', 'deger2');

Bir kayıttaki değeri UPDATE komutu ile değiştiririz:

UPDATE tabloadi SET sutun1='deger1', sutun2='deger2' WHERE kosul1='kosul2';

Buradaki koşul belirtilirken klasik IF – ELSE deyimlerinde olduğu gibi eşleştirmelere gidilir. Mesela id anahtarı 4 olan veride güncelleme yapacaksak koşulumuz id=’4′ olacaktır. Birden fazla koşul belirtiyorsak ve için AND, veya için OR kelimelerini aralarına getiririz, örneğin id=’4′ AND kategori=’2′ gibi.

Bir kaydı silmek için koşul belirterek aşağıdaki komutu kullanırız:

DELETE FROM tabloadi WHERE sutun1='kosul';

Eğer tüm kayıtları sileceksek WHERE ve sonrasını yazmayarak bu işlemi yaparız. Böylece o tablodaki tüm kayıtlar silinecektir.

Kayıtları seçmek, listelemek içinse SELECT komutu kullanırız. Bu kodun kullanımı aşağıdaki gibidir:

SELECT sutun1, sutun2 FROM tabloadi WHERE sutun1='kosul' ORDER BY sira LIMIT 0, 10;

Belirtilen komuttaki SELECT sutun1, sutun2 hangi sütunların seçime dahil edileceğini belirler. WHERE ile hangi koşula bağlı kayıtları listeleyeceğimizi anlatırız. ORDER BY sira, kayıtların neye göre sıralanacağını. Buraya bir sütun adı gelir. Eğer sayısal ise küçükten büyüğe, ORDER BY sutun1 DESC dersek büyükten küçüğe. Alfasayısal ise A’dan Z’ye, DESC varsa sonunda Z’den A’ya sıralar. LIMIT 0, 10 olarak belirttiğimiz ise kaç kayıt listeleneceği ve nerden başlanacağı. Burada ilk kayıttan başlanıp 10 kayıt listelenir. LIMIT 10, 20 dersek. 10. kayıttan başlar ve 20 tane sıralar.

Sevgilerimizle…
Venus Programlama

MySQL Bağlantısı Yapmak

ASP, MySQL, PHP 1 yorum »

Bu yazımızda MySQL veritabanına ASP ve PHP’de nasıl bağlantı sağlanacağımızı ve veri çekebileceğimizi öğreneceğiz. Öncelikle ASP ile başlayalım. ASP’de bir MySQL bağlantısı için ADODB objesinden yararlanırız.

Set Baglanti = Server.CreateObject("ADODB.Connection")
Baglanti.Open "Driver={MySQL ODBC 3.51 Driver};Server=sunucu_adres;Database=db_adi;Port=3306;Uid=kullanici;Password=sifre;"

Set Kayitlar = Baglanti.Execute( "SELECT * FROM tablo_adi ORDER BY id DESC LIMIT 0, 10;" )
Do While Not Kayitlar.Eof
Response.Write Kayitlar("alinacak_veri") + "<br>"
Kayitlar.MoveNext
Loop

Baglanti.Close

Yukarıda geçen “Baglanti” ve “Kayitlar” birer değişken olup. Biri bize bağlantımız hakkında bilgi verir, diğeri ise Baglanti.Execute() ile istediğimiz kayıtları barındırır. Bağlantıyı Baglanti.Close() ile kapatmayı unutmayın. Yukarıda yer alan Kayitlar.EOF bir mantıksal değer olup ancak kayıt listelemeleri bittikten sonra true (doğru) karşılığını verir. Kayitlar.MoveNext ise bir sonraki kaydı istemek için kullanacağımız koddur. Yukarıda bağlantıyı sağlarken kullanılan sunucu_adresi, db_adi, kullanıcı, şifre bilgilerini doğru yazmazsanız bağlantı sağlanamaz. Bunlar MySQL’e bağlantı için gereklidir.

Peki PHP’de MySQL’e nasıl bağlanırız? Yukarıda yazdığımız ASP kodunu birebir PHP’ye dönüştürecek olursak aşağıdaki gibi bir kodlamaya gideriz.

mysql_connect('sunucu_adresi','kullanici','sifre');
mysql_select_db('db_adi');

$sorgu = mysql_query( "SELECT * FROM tablo_adi ORDER BY id DESC LIMIT 0, 10;" );
while( $kayitlar = mysql_fetch_array( $sorgu ) )
echo $kayitlar['alinacak_veri'] . '<br>';

mysql_close();

Yukarıda göreceğimiz gibi bağlantımızı mysql_connect() ile sağlıyoruz. Parantez içine sırasıyla sunucu adresi, kullanıcı adı ve şifresi yazılır. mysql_select_db() ile hangi veritabanını kullanacağımızı seçtikten sonra bağlantıyı sağlamış oluruz. Eğer birden fazla veritabanı ile işlem yapacaksanız mysql_select_db’den sonra bir de bağlantı için atayacağınız bir değişken kullanmalısınız.

Sorgu cümlemizi mysql_query() komutuyla yazdıktan sonra kayıtları mysql_fetch_array ya da mysql_fetch_assoc ile alırız. Sıralama için kolaylık olması açısından while() döngüsü kullandık. Burada başka bir değişken olarak kayıtların depolanacağı arraylist (dize) yi belirttik ($kayitlar) ve finalde mysql_close() ile veritabanı bağlantısını kapattık.

(NOT: Bir PHP belgesi mutlaka “<?” ile başlar ve “?>” ile biterken, ASP belgesi “<%” ile başlar ve”%>” ile biter. Kodlar ile ilgili alıştırma yaparken bunu dikkate almayı unutmayın.


Wordpress'in katkılarıyla hazırlandı ve ndesign teması kullanıldı.
Venus © 2008
Konular RSS Yorumlar RSS Giriş