23
Aralık
2009

PHP ve ezSQL

ezSQL, PHP üzerinden veri tabanına erişimi kolaylaştıran hazır bir sınıftır. PHP’nin 4. ve 5. sürümleriyle uyumludur. Justin Vincent tarafından yazılan bu sınıfın kendi sitesine buradan erişilebilir. Eğer kendi sitesine girmek istemezseniz bu yazının yazıldığı dönemdeki son sürümü olan 2.05′i buradan indirebilirsiniz.

Yakuter, ezSQL sınıfının kullanımı ile ilgili çok kapsamlı bir yazı hazırladığından bir daha anlatmayı gereksiz buluyorum.

Bu yazıdaki kod örneğinde ezSQL sınıfı kullanılarak veri tabanına ekleme yapma ve basit sorgularla bilgi çekme örnekleri bulabilirsiniz. Daha önemlisi, veri tabanına erişimde ve web sayfasına çıktı yaparken Türkçe karakterlerde çıkabilecek sorunların nasıl giderilebileceğine dair ipuçları bulabilirsiniz.

Örnekte karakter kodlaması konusunda birkaç şey yapılmıştır:

  1. PHP belgesi UTF-8 without Byte Order Mark (BOM) karakter kodlaması ile kaydedilmiştir.
  2. Asıl çıktıya başlamadan önce HTTP headerında karakter kodlaması ve mime-type doğru olarak belirtilmiştir.
  3. Doğru bir DOCTYPE belirtilmiştir.
  4. HTML meta tagları ile sayfanın kodlanmış olduğu kaynak kodlaması olan UTF-8 belirtilmiştir.
  5. MySQL veri tabanı oluşturulurken karakter seti olarak UTF-8 tercih edilmiştir.
  6. Veri tabanına bağlandıktan hemen sonra, yapılacak sorgular ile alakalı karakter tipi belirtilmiştir. (SET NAMES UTF-8)

Örnekte yukarıda yazan maddelerin tamamının uygulamalarını görebileceksiniz. Kendi projelerinizde bu adımları uyguladığınız zaman herhangi bir karakter problemi yaşamamanız gerekmektedir.

Örnekte aynı zamanda SQL injection güvenlik açıklarına da örnek bulabilirsiniz. Örnekteki güvenlik açığının uygulanabilmesi için php.ini dosyasındaki magic_quotes_runtime değerinin Off olması gerekmektedir. (Dediğim sadece bu örnek için, yoksa magic_quotes_runtime on olunca her şey büyülü bir şekilde güvenli olmuyor.)

Örnek, normalde index.php?id=INTEGERDEGER seklinde bir GET parametresi ile veri tabanından bir bilgi çekmek üzere tasarlanmışken, güvenlik açığından dolayı index.php?id=1′ OR 1=’1 gibi bir değer için de çalışacak ve veri tabanı tablosundaki tüm bilgileri ekrana yazdıracaktır.

Gerekli ezSQL dosyaları ile birlikte kodları bilgisayarınıza indirmek için buraya tıklayabilirsiniz. Kodları doğrudan buradan incelemek için yazının devamına bakmanız yeterlidir.

Veritabanı Yapısı: localhost.sql

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
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO";
 
 
/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8 */;
 
--
-- Database: `ticaret`
--
CREATE DATABASE `ticaret` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;
USE `ticaret`;
 
-- --------------------------------------------------------
 
--
-- Table structure for table `kullanici`
--
 
CREATE TABLE IF NOT EXISTS `kullanici` (
  `ad` text NOT NULL,
  `soyad` text NOT NULL,
  `id` int(10) UNSIGNED NOT NULL AUTO_INCREMENT,
  PRIMARY KEY (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=13 ;
 
--
-- Dumping data for table `kullanici`
--
 
INSERT INTO `kullanici` (`ad`, `soyad`, `id`) VALUES
('Umut', 'Benzer', 1),
('Hayrullah', 'Çokbilmiş', 2),
('Sercan', 'Kırbaş', 3),
('Haydar', 'Dümen', 4),
('Müge', 'Çalışkan', 11),
('Şaban', 'Ağzıbozuk', 12);
 
-- --------------------------------------------------------
 
--
-- Table structure for table `urun`
--
 
CREATE TABLE IF NOT EXISTS `urun` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `urun_adi` text NOT NULL,
  `kullanici_id` int(11) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=5 ;
 
--
-- Dumping data for table `urun`
--
 
INSERT INTO `urun` (`id`, `urun_adi`, `kullanici_id`) VALUES
(1, 'Soba', 1),
(2, 'Batarya', 1),
(3, 'Batarya', 2),
(4, 'Projektör', 2);

index.php

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
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
<?php 
   header("Content-Type: text/html; charset=utf-8"); 
   header('X-Easter-Egg: Abidik Gubidik');
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" dir="ltr" lang="tr-TR">
<head profile="http://gmpg.org/xfn/1">
   <!-- EgeBK PHP Kursu Örnek Kaynak Kodları -->
   <title>Veri Tabanı Deneyi</title>
   <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
   <meta http-equiv="author" content="Umut Benzer" />
</head>
<body>
<form action="index.php" method="post">   
   <label for="name">Name</label> 
   <input type="text" id="name" name="name" size="30" />
   <label for="lastname">Lastname</label>
   <input type="text" id="lastname" name="lastname" size="30" />
   <button type="submit">Yallah</button>         
</form>
<?php
/* İnit */
 
// ezSQL
include_once "ez_sql_core.php";
include_once "ez_sql_mysql.php";
 
// Veritabanı yapılandırması
$vt_kullanici="root";
$vt_parola="";
$vt_isim="ticaret";
$vt_sunucu="localhost";
 
// ezSQL sınıfından bir nesne...
$db = new ezSQL_mysql($vt_kullanici,$vt_parola,$vt_isim,$vt_sunucu);
 
// Dil ayarlaması
$db->query("SET NAMES utf8");
 
/* Son Eklenen Kullanıcının Sistemden Çekilmesini Gösteren Bir Örnek */
// $kullanici = $db->get_row("SELECT ad,soyad FROM kullanici ORDER BY id DESC LIMIT 1");
// echo "Adı: ". $kullanici->ad . " Soyadı: " . $kullanici->soyad . "<br />\n";
 
if(isset($_POST["name"]) && isset($_POST["lastname"])) {
 
   // Güvenlik önlemleri
   $name = $db->escape($_POST["name"]);
   $lastname = $db->escape($_POST["lastname"]);
 
   // Aşağıdaki satırlar potansiyel güvenlik açıkları yaratır.
   // $name = $_POST["name"];
   // $lastname = $_POST["lastname"];
 
   // Asıl satır
   $db->query("INSERT INTO `kullanici` (`ad`, `soyad`) VALUES ('".$name."', '".$lastname."');");
 
   echo "Yeni kayıt eklendi.";
 
}
 
/* SORUMLULUK REDDİ: AŞAĞIDAKİ SATIR CİDDİ GÜVENLİK AÇIKLARI İÇERİR. */
if(isset($_GET["id"])) {
   ?><table><?php
   $sql = "SELECT * FROM `kullanici` WHERE id='".$_GET["id"]."'";
   echo "Yaratılan SQL cümleciği: " . $sql . "<br />\n";
   $sonuclar = $db->get_results($sql);
   //echo var_dump($sonuclar);
   if(!is_null($sonuclar)) {
      foreach($sonuclar as $sonuc) {
         echo "<tr>";
         echo "<td>".$sonuc->id."</td>"."<td>".$sonuc->ad."</td>"."<td>".$sonuc->soyad."</td>";
         echo "</tr>";
      }
   }
}
echo "</table>";
/* DENEYİN: index.php?id=1' OR 1='1 */
?>
</body>
bu yazı 2.191 defa okundu

Site hoşunuza gitti mi? Belki arkadaşlarınızın da gider.

İstekli

Aaa Reklam

Yorumunuzu Bırakın

Bu yazıya gönderilen yeni yorumları e-posta aracılığıyla bana bildir
Yeni gönderilenleri yorum yapmadan takip etmek için tıklayınız.

Yorumunuz başarıyla alındı. Onaylandıktan sonra yayımlanacaktır. Teşekkürler.

Twitler yükleniyor... 5 saniye sonra

Bıdı bıdı bıdı bıdı dıdı dıdı dudu dudu hıdı hıdı hödü hödü yüklüyoruz öhüm öhüm bıdı bıdı vs vs... 6 nanosaniye önce

Yüklenmenin geç olmasının sebebi ben değilim, Twitter API'sinin yavaş olması. Gudu gudu hıdı hödö büdü büdü... 25697 asır önce

Ha tabi bunları okumuşsan, bu sitenin çok gizli bir özelliğini bulmuşsun demektir. ;) Tebrikler. Bu "sürpiz yumurta"yı bulduğunu bana da haber verir misin? Tıkla! 6 dinazor önce

Geçen Yıllarda Bu Hafta

2011

Bunun Burada Ne İşi Var?

Bunun Burada Ne İşi Var?

Dün şehre inmek için Sayın Menderes Türel’in zamanında Hafif Metro ...

Windows 7’de Bilgisayarınızın Aldığı Puanı Değiştirin

Windows 7’de Bilgisayarınızın Aldığı Puanı Değiştirin

Biliyorsunuz Microsoft, Windows Vista’dan bu yana bilgisayarlar için bir performans ...

Dördüncü Sınıfın Birinci Döneminden Öğrenci Görüşleri

Dördüncü Sınıfın Birinci Döneminden Öğrenci Görüşleri

Dördüncü sınıfın yarısı bitti. Okuldan mezun olmak üzereyim. İyisiyle kötüsüyle bir ...

UBenzer’den Alın!

UBenzer’den Alın!

Ablam evdeki kullanılmayanları ayırmış, “Umut bunları sat.” dedi. Hazır elime ...

2009

Kısık Işık

Kısık Işık

Tavana asılmış tek beyaz floresan lambayı sevemedim bir türlü… “Ben ...

Antalya Toplu Taşıma Sisteminin Sorunları - 1

Antalya Toplu Taşıma Sisteminin Sorunları - 1

Antalya’da ulaşım bir ölüm. Trafik sıkışıklığı, haftada bir yönü değişen ...

2008

14 Şubat

14 Şubat

Biliyorsun bugün 14 Şubat. Daha iki gün öncesinden hazırdı zaten ...

Uyumadan Önce Son Boşluk

Uyumadan Önce Son Boşluk

Uykuya dalmadan önce düşünürüm… Kötü alışkanlıklarımdan biridir. Aklıma ne gelirse ......

NES Emulatörleri

NES Emulatörleri

Daha önceki şu iki yazımda (1.si, 2.si), çocukken bolca oynadığımız ...

Son Yorumlar