Mesajlar etiketlendi PHP

PHP Nedir?

HTML kodu içerisine gömülebilir,
Web Sunucu tarafından yorumlanır,
Taşınabilir,
JavaScript, C, Perl dillerinden ilham alınarak yapılmıştır,

<html>

<head>

<title>Example</title>

</head>

<body>

<? echo “Merhaba ben bir PHP betigiyim”; ?>

</body>

</html>

Burada PHP, HTML kodu içerisinde “<?” ve “?>” etiketleri arasına gömülmüş; “<?” işaretleri ile PHP betiğine atlanacaği, “?>”; işaretleri ile de PHP betiğinin sonlandığı belirtilmiştir.

Yorum bırakın »

PHP’nin Yetenekleri

Php’nin çok geniş yetenekleri mevcuttur. Bunları sıralamak gerekirse;

*Unix, Win32, QNX, Mac, OS/2 platformlarında çalışabilir,
*Sunucu Arabirimi olarak;

****CGI,
****fhttpd modülü,
****Apache modülü

*Bir CGI programının veri toplama, dinamik sayfa içerikleri yükleme, cookie alma, gönderme gibi *yapabilecegi herşeyi yapar,
*Network soketleri açabilir, diğer protokoller ile etkileşimde bulunabilirsiniz,
*PHP’nin en önemli özelliği çok geniş yelpazede VTYS’leri desteklemesidir.

Veri Tabanları

*SQL

****Adabas
****Empress
****IBM DB2
****Interbase
****mSQL
****mySQL
****ODBS
****Oracle
****Postgresql
****Solid
****Sybase

*Diğerleri

****dBase
****filePro
****dbm

*Apache Web Sunucuya özgü işlevler,
*Matematiksel işlevler,
*Tarih ve Zaman işlevleri,
*Sıkıştırmaya özgü işlevleri,
*Veri Kodlamaya özgü işlevleri,
*Kütük yapısı işlevleri,
*Grafik işlevleri,
*FTP, HTTP, URL, Mail işlevleri,
*IMAP, NIS, LDAP işlevleri,
*SNMP,
*Semaforlara ve ayrılmış belleğe özgü işlevler,
*PDF işlevleri,
*Oturum yönetimine (Session Handling) özgü işlevleri,
*Katar (String) islevleri

Yorum bırakın »

Neden PHP?

Eğer bir web sunucusunu php destekli yapılacak ise bunun nedenleri nelerdir? Daha doğrusu PHP’yi tercih edecek isek bunun sebebi nedir? Bunlar;

*PHP’nin daha önce anlatılan geniş yetenekleri,
*Her zaman açık kod mantığıyla geliştirilmeye devam edilmesi (siz de geliştirebilirsiniz!),
*Desteklediği çok sayıda platform,
*Web tabanli olmasi,
*Güçlü bir web sunucu ile çalışabilmesi (Apache Server),
*Betik Dili(Scripting Language) olması ve söz dizim esnekliği,
*Beleş olması.

alıntıdır.

Yorum bırakın »

Apache ve php’nin derlenme öncesi

Apache sunucunun Linux tabanlı bir sunucuda php destekli derlenmesi ve yapılandırılması öncesinde bir takım tedbirlerin alınması gerekiyor;


*Eğer daha önce rpm paketleri olarak apache sunucu php destekli kurulmuşsa bu paketlerin kaldırılması gerekir. Aşağıda kurulu olan rpm paketlerinin tam ismi alınıyor.

rpm -qa | grep apache

rpm -qa | grep php

rpm -e php-x.x.x.rpm ile php paketi silinir.

rpm -e Apache_1.x.x.rpm apache paketi silinir; varsa apache paketine bagimli diger paketler de ayni yolla silinir.

*Apache sunucunun yerleştirileceği dizin belirlenir ve php’nin apache sunucuya DSO olarak mı yoksa modül olarak mı derleneceğine karar verilir. (DSO destekli olması için önce apache derlenir; php daha sonra derlenir)

Kaynak: phpkaynak.com

Yorum bırakın »

Php ile Rss programlama

RSS (Really Simple Syndicatio) NEDİR?

Rss kısaca internet siteleri tarafından yayınlanan haber, duyuru vb. içeriğin topluca görüntülenmesine olanak sağlayan yöntemdir.

RSS’ler channel ve item lerden oluşur. Şimdi aşağıda channel ve item yapılarını inceleyelim.

CHANNEL

Gerekli channel elementleri: title, link, description
Opsiyonel channel elementleri: language, copyright, managingEditor, webMaster, pubDate, lastBuildDate, category, generator, docs, cloud, ttl, image, rating, textInput, skipHours, skipDays

<title>…</title>
Rss başlığını gösterir.

Kod:
<title>Ceviz.net</title>

<link>…</link>
Site adresini gösterir.

Kod:
<link>http://www.ceviz.net</link>

<description>…</description>
Site hakkında bilgi verilir.

Kod:
<description>Ceviz.net Programlama, Makaleler, Kodlar vb.</description>

<language>…</language> ( Rss’nin yayınlandığı dil kodu )

Kod:
<language>tr</language>

<copyright>…</copyright> ( Copyriht bilgisini içerir )

Kod:
<copyright>Copyright 2006, ceviz.net</copyright>

<managingEditor>…</managingEditor> ( İçerikle ilgili konulara cevap verecek yetkilinin email adresi )

Kod:
<managingEditor>editorr@ceviz.net</managingEditor>

<webMaster>…</webMaster> ( Teknik konulara cevap verecek yetkilinin email adresi )

Kod:
<webMaster>webmasterr@ceviz.net</webMaster>

<pubDate>…</pubDate> ( Rss nin oluşturulma tarihi )

Kod:
<pubDate>Mon, 07 May 2005 11:25:42 GMT</pubDate>

<lastBuildDate>…</lastBuildDate> ( Rss nin son değiştirilme tarihi )

Kod:
<lastBuildDate>Mon, 07 May 2005 11:25:42 GMT</lastBuildDate>

<category>…</category> ( Rss kategorisini gösterir. Birden fazla seçilebilir )

Kod:
<category>Haberler</category>

ITEM

Gerekli item elementleri: title, link, description
Opsiyonel item elementleri: author, category, comments, enclosure, guid, pubDate, source

<title>…</title> ( Item başlığını gösterir )

Kod:
<title>Ceviz.net Haberleri</title>

<link>…</link> ( Item adresini gösterir )

Kod:
<link>http://www.ceviz.net/rssnedir.html</link>

<description>…</description> ( Item hakkında kısa açıklama)

Kod:
<description>Rss kısaca internet siteleri tarafından yayınlanan ...</description>

<author>…</author> ( Itemi yazan kişi )

Kod:
<author>Emre Çevik</author>

<category>…</category> ( Item kategorisi )

Kod:
<category>Makaleler</category> <category domain="http://www.ceviz.net/makaleler">Makaleler</category>

<comments></comments> ( Item yorumları )

Kod:
<comments>http://www.ceviz.net/rssnedir/yorumlar</comments>

<pubDate>…</pubDate> ( Itemin oluşturulma tarihi )

Kod:
<pubDate>Mon, 07 May 2005 11:25:42 GMT</pubDate>

<source>…</source> ( Itemin kaynağı )

Kod:
<source url="http://www.php.net/rss.xml">Ceviz XML</source>
Yukarıdaki bilgileri öğrendikten sonra şimdi rss dosyamızı oluşturmaya başlıyabiliriz.

RSS dosyaları 4 ana başlıktan oluşur.

1- XML İFADESİ
2- RSS ve CHANNEL ETİKETLERİ AÇILIR
3- İTEM BİLGİLERİ
4- CHANNEL VE RSS ETİKETLERİ KAPATILIR

Kod:

<!-- XML İFADESİ -->
<?xml version="1.0" encoding="utf-8"?>
<!-- RSS ETİKETİ AÇILIR -->
<rss version="2.0">
<!-- CHANNEL ETİKETİ AÇILIR -->
<channel>
<title>RSS BAŞLIĞI</title>
<link>http://www.siteadresi.com/</link>
<description>Bu sitede rss anlatılmaktadır.</description>
<lastBuildDate>Mon, 12 Mon 2006 12:33:00 GMT</lastBuildDate>
<managingEditor>editor@siteadresi.com</managingEditor>
<webMaster>webmaster@siteadresi.com</webMaster>
<copyright>Copyright 2006, siteadresi.com</copyright>
<language>tr</language>
<!-- ITEM BİLGİLERİ BAŞLANGIÇ -->
<item>
<title>BAŞLIK 1</title>
<link>http://www.siteadresi.com/yazi/1</link>
<category>Makaleler</category>
<pubDate>Mon, 12 Mon 2006 13:23:00 GMT</pubDate>
<description>Başlık 1 konulunu makalenin içeriği</description>
<author>Emre</author>
</item>
<!-- ITEM BİLGİLERİ SON -->
<!-- ITEM BİLGİLERİ BAŞLANGIÇ -->
<item>
<title>BAŞLIK 2</title>
<link>http://www.siteadresi.com/yazi/1</link>
<category>Makaleler</category>
<pubDate>Mon, 12 Mon 2006 13:25:00 GMT</pubDate>
<description>Başlık 2 konulunu makalenin içeriği</description>
<author>Emre</author>
</item>
<!-- ITEM BİLGİLERİ SON -->
</channel>
<!-- CHANNEL ETİKETİ KAPTILIR -->

Şimdi php ile nasıl rss oluşturacağımızı öğrenelim.

Kod:

<?

include "config.php"; // mysql bağlantı bilgilerinin bulundugu ayar dosyası
header("Content-type: text/xml\n\n");

echo "<?xml version=\"1.0\" encoding=\"ISO-8859-1\"?>
<rss version=\"2.0\">
<channel>
<title>rss basligi</title>
<description>rss aciklamasi</description>
<link>http://www.example.com/</link>
<language>en-us</language>";

$yazilar = mysql_query("SELECT * FROM yazilar where kategori='REQUEST[cat]'");
while($yazi = mysql_fetch_assoc($yazilar)) {
$link = "http://www.example.com/yazi?id=".$yazi[id];
echo "
<item>
<title>".$yazi[baslik]."</title>
<description>".$yazi[icerik]."</description>
<link>".$link."</link>
</item>";
}

echo "
</channel>
</rss>";

?>

Yukarıdaki kodda rss.php?cat=5 olarak seçildiğinde 5. kategorideki yazıları listeler. Bu kod üzerinde biraz değişiklik yaparak sitenizde kullanabilirsiniz. Geliştirmek sizin elinizde.

Kolay Gelsin
Emre Çevik – info@internet.com.tr

Yorum bırakın »

Php Alışveriş Sitesi Scripti

Aslında bir alış veriş sepeti tasarlamak veritabanındaki ürün bilgilerine göre olur. Yani ilk önce ürünlerle ilgili veritabanın tasarlanması en iyisi.
Örnek bir veritabanındaki ürün tablosunda neler olabilir acaba:

istediklerim:

  • Ürün adı
  • fiyatı
  • Ürün detayı
  • Stok durumu
  • indirim oranı


v.s

gibi daha geniş bir veritabanı tablosu tasarımıda istenebilir.

Tablomuzu oluşturalım:

CREATE TABLE `urunler` (
`id` int(11) NOT NULL auto_increment,
`urunadi` varchar(250) NOT NULL default ”,
`fiyat` int(11) NOT NULL default ‘0′,
`resim` varchar(200) default ”,
`detay` text NOT NULL,
`stok` int(11) default ‘0′,
`indirim` int(4) default ‘0′,
`goster` char(1) default ‘1′,
`tarih` datetime default ‘0000-00-00 00:00:00′,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin5;

Tabloyu veritabanına kaydettikten sonra içine ürünlerimizi ekleyelim:

INSERT INTO `urunler`(`urunadi`,`fiyat`,`resim`,`detay`) VALUES(‘Buz dolabı’,'400′,’abcd1.jpg’,'Bu buzdolabı ile yazı rahat geçirin’);
INSERT INTO `urunler`(`urunadi`,`fiyat`,`resim`,`detay`) VALUES(‘Televizyon’,'200′,’abcd2.jpg’,'Bu televizyon ile rahatsız olabilirsiniz’);
INSERT INTO `urunler`(`urunadi`,`fiyat`,`resim`,`detay`) VALUES(‘Kiatap’,'10′,’abcd3.jpg’,'Son yılların en çok okunan Kitabı’);
INSERT INTO `urunler`(`urunadi`,`fiyat`,`resim`,`detay`) VALUES(‘incik boncuk’,'4′,’abcd4.jpg’,'Sevgilinize bir küpe alın onu mutlu edin’);

Ben stok,indirim,goster,tarih gibi değerleri girmedim. Ama siz isterseniz sorguyu kendinize göre yeniden düzenleyebilirsiniz. Şimdilik bu kadarı benim için yeterli.

Sıra geldi sanal mağazamıza gelecek olan hasan ağanın ürünlerimizden birisini nasıl alacağına.

Hasan ağa,ahamet ağa ve daha birçok değerli müşterimiz rahatça ve kapkaççılardan korunsun diye onlara yüksek mertebeden bir üyelik vereceğiz. Bir nevi sanal pasaport.
Mağaza öyle sokak ortasında olmadından her gelen malı elleyemiyor yani.
Üyeler tablomuzu ben aşağıdaki gibi tasarladım ,eğer eksikse siz kendinize göre daha genişini tasarlayın ;)

CREATE TABLE `uyeler` (
`id` int(11) NOT NULL auto_increment,
`ad` varchar(30) NOT NULL default ”,
`soyad` varchar(30) NOT NULL default ”,
`kullaniciadi` varchar(30) NOT NULL default ”,
`Email` varchar(60) NOT NULL default ”,
`sifre` varchar(32) NOT NULL default ”,
`sesid` varchar(70) NOT NULL default ”,
`onay` varchar(30) default ‘0′,
`il` varchar(100) NOT NULL default ”,
`ilce` varchar(100) NOT NULL default ”,
`semt` varchar(100) NOT NULL default ”,
`mahalle` varchar(100) NOT NULL default ”,
`adres` varchar(100) NOT NULL default ”,
`ceptel` varchar(100) NOT NULL default ”,
`tarih` date NOT NULL default ‘0000-00-00′,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin5;

INSERT INTO `uyeler`(`ad`,`soyad`,`kullaniciadi`,`Email`,`sifre`,`onay`) VALUES(‘Gökçe’,'ÇİFTÇİ’,'gciftci’,'gciftci@gmail.com’,MD5(‘1234′),’1′);
Üye girişi için PHP koldarımızı yazalım.

form.html

<FORM method=”POST” action=”giris.php” method=post>
Kullanıcı adı: <INPUT type=text name=”kullaniciadi” value=”">
Şifre: <INPUT type=”password” name=”sifre” value=”">
<INPUT type=hidden name=”durum” value=”giris”>
<INPUT type=”submit” value=”Giriş Yap”>
</FORM>

giris.php programımızı yazalım:

<?php
session_start();
$conn = mysql_connect(“localhost”, “kullanıcıadı”, “şifre”);
if (!$conn) {
echo “veritabanına ulaşılamadı,kullanıcıadı,şifre yada localhost bilgisi yanlış olabilir: ” . mysql_error();
exit;
}
if (!mysql_select_db(“veritabanıadı”)) {
echo “Veritabanı adı doğru değil, yada yok: ” . mysql_error();
exit;
}

if($_POST['durum'] == ‘giris’){
$kullaniciadi=htmlentities(mysql_real_escape_string($_POST['kullaniciadi']));
$result = mysql_query(“SELECT kullaniciadi,sifre FROM uyeler WHERE kullaniciadi=’{$kullaniciadi}’”) or die(mysql_error());
$row = mysql_fetch_array($result);
if($row['kullaniciadi'] == “”){
echo “<b>Kullanıcı adınız yada şifreniz hatalı.</b>”;
}else{
if($row['onay'] == “0″){
echo “Hesabınızı aktive etmek için Eposta adresinize gönderilen adresi tıklayarak giriş yapmanız gerekir”; exit;
}
$sifre = $_POST['sifre'];
if($row['sifre'] == md5($sifre)){
$_SESSION['kullaniciadi'] = $_POST['kullaniciadi'];
$_SESSION['uye'] = ‘uyemiz’;
header(“Location: hesap.php”);
exit;
}
else{
echo “<b>Kullanıcı adınız yada şifreniz hatalı.</b>”;
}
}
}else{
header(“Location: form.html”);
}
mysql_close($conn);
?>

kullanıcımızın bilgileri şayet doğru ise onu hesap.php programına yönlendiriyoruz. Böylece bilgilerini ve siparişini görebilecek.
hesap.php programımızı yazalım ama önce program içinde kullanacağımız sparis tablosunu oluşturalım

Üye tablomuz tamam.Üye girişi için programımızda tamam, Şimdi sıra geldi üyelerimizin bize vereceği sparişi kaydetmeye. Bunun içinde bir tablo oluşturalım. Ben siparis adını vereceğim bu tabloyu aşağıdaki gibi tasarladım.

CREATE TABLE `sparis` (
`id` int(11) NOT NULL auto_increment,
`uyeid` int(11) NOT NULL default ‘0′,
`sparis` varchar(100) NOT NULL default ”,
`fiyat` varchar(32) NOT NULL default ”,
`adet` int(10) default ‘1′,
`durumu` int(1) default ”,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin5;

şimdilik sipariş tablomuz boş. Yukarıda bir kayıtlı kullanıcımız var onun adına bir sipariş vereceğiz zaten.Ozaman sipariş tablomuza nasıl kayıt yapıldığını göreceğiz.
hesap.php programımızı şimdi yazabiliriz.

<?php
session_start();
$conn = mysql_connect(“localhost”, “kullanıcıadı”, “şifre”);
if (!$conn) {
echo “veritabanına ulaşılamadı,kullanıcıadı,şifre yada localhost bilgisi yanlış olabilir: ” . mysql_error();
exit;
}
if (!mysql_select_db(“veritabanıadı”)) {
echo “Veritabanı adı doğru değil, yada yok: ” . mysql_error();
exit;
}
if($_SESSION['kullaniciadi'] == ” || $_SESSION['uye'] == ”){
header(“Location: giris.php”);
exit;
}
$kullaniciadi=$_SESSION['kullaniciadi'];
$result1 = mysql_query(“SELECT * FROM uyeler WHERE kullaniciadi=’{$kullaniciadi}’”);
if (!$result1) {
echo “Sorguda hata var ($sql) sorguyu gözden geçirin: ” . mysql_error();
exit;
}
$row1 = mysql_fetch_assoc($result1);
$uyeid=$row1['id'];
$result = mysql_query(“SELECT * FROM sparis WHERE uyeid=’{$uyeid}’”);
if (mysql_num_rows($result) == 0) {
echo “<h2>Hiç siparişiniz yok.</h2>”;
echo “Sipariş vermek için lütfen <a href=’sepet1.php’>Sipariş sayfası</a> nı tıklayın.”;
exit;
}
while ($row = mysql_fetch_assoc($result)) {
echo $row['sparis'] . “- ” . $row['fiyat'] . “- ” . $row['adet']. “<br>\n”;
}
mysql_free_result($result);
mysql_close($conn);
?>

Gelelim veritabanımızda bulunan urunler adlı tablomuzda kayıtlı olan ürünleri ekrana yazdırmaya. Bunun için aşağıdaki kodları yazdım. Sade ve anlaşılır olmasına çalıştım. Ama dileyen dahada karmaşık hale getirebilir ;)

sepet1.php

<?php
$conn = mysql_connect(“localhost”, “root”, “1234″);
if (!$conn) {
echo “veritabanına ulaşılamadı,kullanıcıadı,şifre yada localhost bilgisi yanlış olabilir: ” . mysql_error();
exit;
}
if (!mysql_select_db(“proje”)) {
echo “Veritabanı adı doğru değil, yada yok: ” . mysql_error();
exit;
}
$sql = “SELECT urunadi, fiyat, resim,detay FROM urunler”; # sorguda DESC ve ORDER BY, GROUP BY ve LIMIT kullanılabilir. Bu size kalmış birşey.
$result = mysql_query($sql);
if (!$result) {
echo “Sorguda hata var ($sql) sorguyu gözden geçirin: ” . mysql_error();
exit;
}
if (mysql_num_rows($result) == 0) {
echo “Kayıtlı hiçbir bilgiye rastlanmadı.”;
exit;
}
include(“sepet2.php”);
echo “<table>”;
while ($row = mysql_fetch_assoc($result)) {
echo ‘<tr><TD>
<img src=”‘.$row["resim"].’” border=0><br>’.$row["urunadi"].’ <br>’.$row["detay"].’<br>’.$row["fiyat"].’</TD>
<TD>
<FORM method=”POST” action=”sepet1.php” method=post>
<INPUT type=hidden name=”durum” value=1>
<INPUT type=”hidden” name=”urun” value=”‘.$row["urunadi"].’”>
<INPUT type=”hidden” name=”fiyat” value=”‘.$row["fiyat"].’”>
<INPUT type=”text” name=”adet” size=”3″ value=”1″>
<INPUT type=”submit” value=”Sepete Ekle”>
</FORM>
</TD></tr>’;
}
echo “</table>”;
mysql_free_result($result);
mysql_close($conn);
?>

Kodlarımızı sepet1.php olarak kaydettim ve çalıştırdım. Herşey yolunda. Yani istediğim gibi ürünlerimi ekran fiyat bilgisi ile birlikte ekrana yazdı.
Sipariş için tablomuzu okuttuk ve gereklibilgiler sayfaya yazdırıldı bu tamam. Sıra geldi sepet temin etmeye. Yüksek mertebedeki üyelerimize sepet vermesek ayıp olur. Mallar elde taşınmaz karizmaya zarar. Sonra pişman olup birdaha mağazaya gelmezler. Müşteri veli nimetmizdir.

Capiyto arkadaşımızın yazdığı class kullanacağım. Çünkü gayet kullanışlı.
bu kodlarıda sepet2.php olarak kaydedelim.

<?
session_start();
class sepet {
var $sepetteki_urunler;

function sepet () {
if (isset($_SESSION["sepetteki_urunler"])) {
$this->sepetteki_urunler = $_SESSION["sepetteki_urunler"];
}
}

function sepete_ekle ($urun_no,$adet) {
$this->sepetteki_urunler[$urun_no] = $adet;
}

function sepetten_cikar ($urun_no,$adet) {
if (isset($this->sepetteki_urunler[$urun_no])) {
if ($this->sepetteki_urunler[$urun_no] > $adet) {
$this->sepetteki_urunler[$urun_no] = $adet;
} else {
unset($this->sepetteki_urunler[$urun_no]);
}
}
}

function sepeti_kaydet () {
if (isset($this->sepetteki_urunler)) $_SESSION["sepetteki_urunler"] = $this->sepetteki_urunler;
}

function sepeti_listele () {
if (isset($_SESSION["sepetteki_urunler"])) {
return $_SESSION["sepetteki_urunler"];
} else {
return false;
}
}

function oturum_kapat () {
#session_destroy();
$_SESSION["sepetteki_urunler"]=”;
header(“Location: sepet2.php”);
}
}

?>

<?php
#şimdi yukarıdaki class ile nasıl çalışacağız onu ele alalım.

$yeni_sepet = new sepet;
if ($_POST["durum"]==1) {
$yeni_sepet->sepete_ekle($_POST["urun"],$_POST["adet"].”-”.$_POST["fiyat"]);
$yeni_sepet->sepeti_kaydet();
}

if ($_POST["durum"]==2) {
$yeni_sepet->sepetten_cikar($_POST["urun"],$_POST["adet"]);
$yeni_sepet->sepeti_kaydet();
}

if ($_POST["durum"]==3) {
$yeni_sepet->oturum_kapat();
}

if ($_POST["durum"]==4) {

$conn = mysql_connect(“localhost”, “root”, “1234″);
if (!$conn) {
echo “veritabanına ulaşılamadı,kullanıcıadı,şifre yada localhost bilgisi yanlış olabilir: ” . mysql_error();
exit;
}

if (!mysql_select_db(“proje”)) {
echo “Veritabanı adı doğru değil, yada yok: ” . mysql_error();
exit;
}

if($_SESSION['kullaniciadi'] == ” || $_SESSION['uye'] == ”){
header(“Location: giris.php”);
exit;
}

$kullaniciadi=$_SESSION['kullaniciadi'];

$result1 = mysql_query(“SELECT * FROM uyeler WHERE kullaniciadi=’{$kullaniciadi}’”);

if (!$result1) {
echo “Sorguda hata var ($sql) sorguyu gözden geçirin: ” . mysql_error();
exit;
}

$row1 = mysql_fetch_assoc($result1);

$uyeid=$row1['id'];

$urunler = $yeni_sepet->sepeti_listele();
while (list($anahtar,$deger) = each($urunler)) {

$tutar=explode(“-”, $deger);
$result= mysql_query(“INSERT INTO `sparis`(`uyeid`,`sparis`,`fiyat`,`adet`) VALUES(‘{$uyeid}’,'{$anahtar}’,'{$tutar[1]}’,'{$tutar[0]}’)”) or die(mysql_error());

}

if (!$result) {
echo “Sorguda hata var ($sql) sorguyu gözden geçirin: ” . mysql_error();
exit;
}else{
echo “bilgileriniz ve siparişleriniz alındı,en kısa zamnda sizinle kontak kurup bilgileri doğruluyacağız.Teşekkür ederiz.”;
exit;
}
}

$urunler = $yeni_sepet->sepeti_listele();
$durum=0;
$sepet=’<table border=1>’;
$toplamtutar=0;

if($urunler){
while (list($anahtar,$deger) = each($urunler)) {

$tutar=explode(“-”, $deger);
$toplam=$tutar[0]*$tutar[1];
$sepet.= “<tr><td>Ürün “.$anahtar.”</td><td>”.$toplam.” YTL “.$tutar[0].’ adet </td>
<td> <FORM method=”POST” action=”sepet1.php” method=post>
<INPUT type=”hidden” name=”urun” value=”‘.$anahtar.’”>
<INPUT type=”hidden” name=”adet” size=”9″ value=”‘.$deger.’”>
<input type=hidden name=”durum” value=2>
<INPUT type=”submit” value=”Sepeten Sil”>
</form></td></tr>’;
$durum=1;
$toplamtutar +=$toplam;
}
}else{
echo “<h2>sepetiniz boş</h2>”;
}

if($durum){
$bosalt= ‘<tr><td>&nbsp;</td><td><FORM method=”POST” action=”sepet1.php” method=post>
<input type=hidden name=”durum” value=3>
<INPUT type=”submit” value=”Sepeti boşalt”>
</form></td><td><FORM method=”POST” action=”sepet1.php” method=post>
<input type=hidden name=”durum” value=4>
<INPUT type=”submit” value=”Gönder”>
</form></td></tr>’;
$sepet.=’<tr><td>Toplam Tutar:</td><td>’.$toplamtutar.’</td><td></td></tr>’;
}
$sepet.=$bosalt;
$sepet.=”</table>”;
echo $sepet;
?>

Bütün kodları indirip test edebilirsiniz. Burayı tıklayın.
Kolay gelsin.

Yorum bırakın »

Proxy den bıkkınlık mı geldi? Proxy Engelleme

Banner değişim programlarında, anket türü yazılımlarda ve bir çok alanda çerez+ip guvenlik sistemini kullanan webmasterların ortam sorunu genellikle;

-çerezleri silip, proxy ile sahte tıklama yapabiliyorlar.

E o zaman bu proxy olayına bir çare bulunamaz mı? Tabiki bulunur. Forumlarımızda PHP -> Kütüphane bölümünde GI-IOST adli uyemiz tarafından küçük çaplı bir fonksiyon Proxy altına gizlenen gerçek ip yi tespit edebiliyor ve böylece proxy kullananan sahte tıklamalar engellenmiş oluyor..

Fonksiyonumuz:
<– Fonksiyon başlangıcı ->
function GetOrjIP(){
global
$HTTP_SERVER_VARS;
$private_net_ip_masks = array( '10.0.0.', '192.168.', '127.0.0.', '172.16.0.' );
if( isset(
$_SERVER['HTTP_X_FORWARDED_FOR']) && $_SERVER['HTTP_X_FORWARDED_FOR'] != '' ){
$ipStrings = explode( ',',$_SERVER['HTTP_X_FORWARDED_FOR']);
foreach(
$ipStrings as $k => $v){if( empty($v) ){unset( $ipStrings[$k] ); }else {if(!isset($ipString)) { $ipString = $v; } } }
}
if( isset(
$_SERVER['REMOTE_ADDR']) && $_SERVER['REMOTE_ADDR'] != '' ){
$ipStrings[] = $_SERVER['REMOTE_ADDR'];
if(!isset(
$ipString)) {$ipString = $_SERVER['REMOTE_ADDR'];}
}
foreach(
$ipStrings as $k1 => $ip){ foreach($private_net_ip_masks as $k2 => $pip){ if(strpos($ip, $pip) === 0) { unset($ipStrings[$k1]); break; } } }
if(!empty(
$ipStrings) ){ foreach( $ipStrings as $v ){if(!empty($v)){ $ipString = $v; $is_local_ip = false; break; } }}
else {
$is_local_ip = true; }
return
$ipString;
}

<– Fonksiyon bitişi ->

Kullanımı da:

$GercekIP = GetIP();
echo
$GercekIP;

Bu yöntem sayesinde artık sahte tıklamalara son veriyoruz.

Yorum bırakın »

PHP+SOAP kullanılarak TC Kimlik No Doğrulatma(web servisleri)

Arkadaşlar merhaba
PHP+SAOP uygulamalarını kullanabilmek için apache web serverda bazı değişiklikler yapmamız gerekmektedir.php.ini dosyası içinde extension=”php_soap.dll” yazısının olup olmadığını kontrol edin.eğer başında “;” varsa onu silin.eğer yoksa siz yazın.ve apache yi restart edin.böylece aşağıdaki kodları browserinizde açabilirsiniz.Ben herkes anlayabilsin diye baya bir yardım açıklaması yaptım.
PHP+SOAP konusuna yeni başlayan arkadaşara çok yardımcı olacak diye düşünüyorum.Sayfanın  çoğu yardım açıklamalarından oluşuyor.Direk dreamweaver ‘a kopyala yapıştır yapın..Bu yardım açıklamaları eminim sizin anlamanızda etkili olucaktır.bu kodları ben yaptım denemiştir ve çalışyo arkadaşalar.Size kolay gelsin

<?php
/*
** Copyright (c) 2006 Kadir GÜLAĞIZ

** Bu sayfa PHP+Soap uygulamasıdır.Bu sayfada http://tckimlik.nvi.gov.tr(Nufus Müdürlüğü) adresinin web servisi
** kullanılarak TC kimlik Doğrulaması yapılmaktadır.Bunun için nüfus müdürlüğünün web servis hizmeti kullanılmıştır.

** Bu sayfadaki bilgiler tamamen serbest dolaşabilir.İstenildiği gibi değiştirilebilir.
** İstenildiği gibi yayınlanabilir.Bu tamamiyle size kalmış.

** Bu sayfa PHP+Soap kullanımını öğrenmek isteyenlere başlangıç kaynağı olarak kullanılabilir.Kodlar içinde
** hiçbir hazır kütüphane kullanılmamıştır.

** Bu sayfayla ilgili tüm önerilerinizi ve eleştirilerinizi
** kadir_glz@yahoo.com adresine bekliyorum.

** Sakarya Üniversitesi Bilgisayar Mühendisliği 3 .sınıf
** http://kGlznet.kayyo.com
*/
?>
<!DOCTYPE html PUBLIC “-//W3C//DTD XHTML 1.0 Transitional//EN” “http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd”>
<html xmlns=”http://www.w3.org/1999/xhtml”>
<head>
<meta http-equiv=”Content-Type” content=”text/html; charset=iso-8859-9″ />
<title>T.C. Kimlik Sorgulama…</title>
<style type=”text/css”>
<!–
.style2 {
font-size: 14px;
font-family: Verdana, Arial, Helvetica, sans-serif;
font-weight: bold;
}

.style3 {
font-size: 12px;
font-family: Verdana, Arial, Helvetica, sans-serif;
font-weight: bold;
}
–>
</style>
</head>

<body>
<?php
/* Öncelikle Nüfus  Müdürlüğünün web servis hizmetini kullanabilmek için gereken adresi bilmeliyiz.
** soruişareti(?)’den sonra “wsdl” uzantısı olmalı.
** bu adresi öğrendikten sonra bir SOAP nesnesi oluşturmalıyız.aşağıdaki tek satırlık kod bir
** SoapClient nesnesi oluşturmaktadır.Soap Nesnesi oluşturalım ki,nüfus müdürlüğünün web servisi
** içindeki fonksiyonları kullanabilelim.
*/
$soap=new SoapClient(“http://tckimlik.nvi.gov.tr/kpsPublic.asmx?wsdl”);
?>
<div align=”center”>
<form id=”form1″ name=”form1″ method=”post” action=”">

<table width=”350″ border=”1″ cellpadding=”0″ cellspacing=”0″ bordercolor=”#FF0000″>
<tr>
<td><div align=”center”>
<table width=”300″ border=”0″>
<tr>
<td><div align=”center” class=”style2″>T.C. Kimlik Numaranızı Giriniz..: </div></td>
</tr>
<tr>
<td><div align=”center”>
<input name=”txtkno” type=”text” id=”txtkno” size=”20″ />
</div></td>
</tr>
<tr>
<td><div align=”center”>
<input type=”submit” name=”Submit” value=”Sorgula…” />
</div></td>
</tr>
</table>
</div></td>
</tr>
</table>
</form>

<?php
/*
**Buradaki kodlar sayfa post edildikten sonra kullanaılabilecekler.
*/
if($_POST)
{
/*
** Aşağıdaki fonksiyon türkçe karakterler dönüştürme fonksiyonudur.
** biz Nüfüs müdürlüğünün web servisini kullanarak verileri çektiğimizde , o veriler utf-8 formatındadırlar.
** yani bizim “İ” olmasını beklediğimiz harfimiz “İ” şeklinde gelmektedir.
** Bunu  düzeltebilmek için bir fonksiyon kullanıyoruz.Böylece yanlış gelen harfler
** düzeltilerek kullanıcıya doğru bir şekilde gösterilmektedir.
*/
function turkce_karakterler($tck)
{
$tck=str_replace(“İ”,”İ”,$tck);
$tck=str_replace(“Ü”,”Ü”,$tck);
$tck=str_replace(“Äž”,”Ğ”,$tck);
$tck=str_replace(“Å?”,”Ş”,$tck);
$tck=str_replace(“Ç”,”Ç”,$tck);
$tck=str_replace(“Ö”,”Ö”,$tck);
return $tck;
}
/*
**Aşağıdaki tek satrılık kod ,nufus müdürlüğünün(“http://tckimlik.nvi.gov.tr”) web servisinin bize sunmuş olduğu
** fonksiyonlardan biridir.”TCKimlikNoDogrula” fornksiyonu sayfamızdaki tckimlik numaramızı yazdığımız text kutusunun
** degerini alır.Böylece biz tckimlik numarasının aranması işlemini nufus müdürlüğünün web servisi
** üzerine atarız.Böylece gönderdiğimiz numara nufus müd. web servisinde aranır.XML verisi halinde olduğu içinde
** array kullanmamız gerekmektedir.
** peki neden *1(bir ile çarptık)?
** Çünkü “TCKimlikDogrula” fonksiyonu long veri tipindedir.
** bizim text kutumuz string bir değer gönderir.biz onu *1 ile sayısal hale getiririz.
**Eğer *1 i silersek , sorgulama çalışmaz.isterseniz deneyin!!!
*/
$tc=$soap->TCKimlikNoDogrula(array(“tcKimlikNo”=>$_POST['txtkno']*1));
/*
** Aşağıdaki array yapısı şunun içindir.Şimdi hemen http://tckimlik.nvi.gov.tr/Web/WebServices.aspx adresine gidin.
** aşağıda çıkan linki tıklayın.(XML web servisleri dokumantasyonu)
** Orada web servisinin bize kullanmamız için free olarak fonksiyonları görülmektedir.
** biz “TCKimlikNoDogrula” fonksiyonunu kullanmaktayız.O fonksiyonu tıklayınca karşınıza XML sayfası gelir.
** O XML sayfasında “TCKimlikNoDogrula” etiketi vardır.biz onu yukarıdaki tek satrılık kod ile kullandık.
** Aşağıya inerseniz orada birde “TCKimlikNoDogrulaResult” etiketini göreceksiniz.Oranın içeriğine bakınca
** aşağıdaki array yapısının etiketlerini göreceksiniz.
** yani biz “TCKimlikNoDoğrula” etiketine text kutumuzdaki numarayı gönderdiğimizde
** bize “TCKimlikNoDogrulaResult” etiketi geri bildirim yapıp , o tckimlik numarasının bilgilerini bize geri döndürür.
** Böylece nufus müdürlüğünün web servisini kullanmış oluruz.
*/
$bilgiler=array(“TCKimlikNo” => “T.C. Kimlik Numaranız..:”,
“Ad” => “Adınız..:”,
“Soyad”=>”Soyadınız..:”,
“DogumYil”=>”Doğum Yılınız..:”);
/*
** Şimdi gelelim  verileri ekrana yazdırmaya.
** bir foreach döngüsü kullanrak “TCKimlikNoDogrulaResult” fonksiyonu vasıtasıyla
** bilgileri ekrana yazıyoruz.hemde utf-8 formatında gelen verileri turkce_karakterler fonksiyonunu
** kullanarak iso-8859-9 formatındaymış gibi ekrana basıyoruz.
** işte bu kadar.
*/
echo “<table border=\”1\” width=\”350\” cellpadding=\”0\” cellspacing=\”0\” bordercolor=\”#FF0000\”>”;
foreach($bilgiler as $deger => $metin)
{
echo “<tr><td><div align=\”left\” class=\”style3\”>”.$metin.”</div></td>
<td>”.turkce_karakterler($tc->TCKimlikNoDogrulaResult->$deger).”</td></tr>”;
}
echo “</table>”;

}

/*
** Bu kodlar PHP+SOAP uygulamalarına yeni başlayan arkadaşlara iyi bir
** başlangıç kaynağı olaağına inanıyorum.Bu sayfadaki kodlar denemiştir
** ve çalışıyo arkadaşlar.İnşallah yardımım olmuştur.Sizlere başarılar
** ve kolay gelsin…
*/
?>
</div>
</body>
</html>

Yazar:Kadir Gülağız
web Sayfası:http://kGlznet.kayyo.com

Yorum bırakın »

Ajax Ve Php ile Tab tuşuyla Sorgu Yaparak Form Kontrol !

İlk Önce Çook İyi Anlaşılabilmesi tek tek ve cook acıklayıcı bır sekılde yazmaya ozen gosterecegım .
İlk Adım
Kontrol Yapacağımız Bir Form yazıyoruz .

<from action=”islem.php” method=”get” name=”form1″>
<input type=”text” name=”kullanici_adi”>
<br>
<input type=”submit” name=”gonder” value=”Kontrol”>
</form>

Bu Şekilde Bir Form Ayarladık dıyelım sımdi kontrol butonuna bastıgımızda hıc bısey yook aynen çalışacak . Biz Burda yapacağımız şey kontrol butonuna basılmadan kullanici adı inputuna bir değer yazılıdıgında diğer inputa geçerken örneğin password inputuna geçerken o kullanıcı adını dbde kontrol etmesi ve var olup olmadıgına bakmasını var ıse bu kullanıcı adı kullanımda diye kullanıcıya bir uyarı vermesini istiyoruz . Öncelikle Eburhan Arkadaşımızın ejeyks.js adlı ajax ile veri gönderimine yarayan kütüphanesını indiriyoruz .

ejeyks.js kütüphanesini bu adresten indirebilirsiniz tıklayın ve indirin.

İkinci Adım  :
Sonra ejeyks.js içindeki kodları ya form kontolu yapacagımız form sayfasına cagırıyoruz yada içindekileri acıp dırek form kontrol sayfasına yazıyoruz .

Çağırma  :
<script language=”javascript” src=”ejeyks.js”></script>

İçine direk yazma  :

function AJAX() {
var ajax = false;

// Internet Explorer (5.0+)
try {
ajax = new ActiveXObject(“Msxml2.XMLHTTP”);
} catch (e) {

try {
ajax = new ActiveXObject(“Microsoft.XMLHTTP”);
} catch (e) {
ajax = false;
}

}

// Mozilla veya Safari
if ( !ajax && typeof XMLHttpRequest != ‘undefined’ ) {

try{
ajax = new XMLHttpRequest();
}catch(e) {
ajax = false;
}

}

// Diger
if ( !ajax && window.createRequest ) {

try{
ajax = window.createRequest();
}catch(e) {
ajax = false;
}

}

return ajax;
}

function JXG(yukleniyor, yer, dosya) {
ajax = new AJAX();

if ( ajax ) {
ajax.onreadystatechange = function () {};
ajax.abort();
}

ajax.open(‘GET’, dosya, true);
ajax.setRequestHeader(“If-Modified-Since”, “Sat, 1 Jan 2000 00:00:00 GMT”);
ajax.setRequestHeader(“Connection”, “close”);
ajax.send(null);

ajax.onreadystatechange = function () {
if( yukleniyor == 1 && yer != ‘no_id’ ) {
if( ajax.readyState == 1 || ajax.readyState == 2 || ajax.readyState == 3 ) {
var loading = ‘Kulanilabilirligine Bakiliyor  . . . ‘
document.getElementById(yer).innerHTML = loading;
}
}

if( ajax.readyState == 4 && yer != ‘no_id’ ) {
document.getElementById(yer).innerHTML = ajax.responseText;
function AJAX() {};

}
}
}

Şimdiye kadar formumuzdaki kullanici adı verisini userkontrol.php ye gondermek ıcın lazım olan kodları ayarladık .
Sıra Tab Tuşuna bastıgımızda işlemesi gereken kodlar ve forma eklenecek kodlarda …
Üçüncü Adım

function checkuser(){
var user = document.form1.kullanici_adi.value
var sc     = ‘userkontol.php?user=’+ user
JXG(1,’ warning ‘, sc)
document.form1.kullanici_adi.className = ‘classdegis’;
}

İşte bu kodlarla tabtuşuna basılıp password inputuna gecerken eyeks.js kutuphanesınıde kullanarak userkontrol.php dosyasına kullanıcı adı valuesını  ” GET ” olarak yolladık . Sıra Formdakii değişiklerlede ama o zaten o kadar cok bı degısıklık yok sadece forma onblur=’checkuser()” ozellıgını eklıcez ve bır warning diye div acıp uyarıyı o divde gostertecegiz . onu da direk şu şekilde yazabiliriz .
Dördüncü Adım :

<from action=”islem.php” method=”get” name=”form1″>
<input type=”text” name=”kullanici_adi” onblur=”checkuser()”><div id=”warning”></div>
<br>
<inpu type=”submit” name=”gonder” value=”Kontrol”>
</form>

İşte Formumuzun Sonhali şimdide checkuser() fonksiyonumuzu yazarken son satıra yazdıgımız   document.form1.kullanici_adi.className = ‘classdegis’; satırının ne olduguna bu satır  kullanıcı adında sorgu yapıldıgında ve sorgunun cıktısı alındıgında ınputun class degerını degıstırmesı ıcın konulmus bır satır.Bunun Etkin olabilmesi için bu script kodlarının en altına sole bır style kodu eklersenız estetık acısından guzel olabılır

<style type=”text/css”>
.classdegis {
border: 1px solid black;
background-color: #fff;
}
</style>

Son adım İse userkontol.php

userkontrol.php ‘yi istediğimiz şekilde düzenleyebiliriz . Ben sadece kullanıcı adının var olup olmadıgına baktım ve ona gore uyarılar verdım  .Siz bu mantıkla degısık uyarılar yapabılırsınız . userkontol.php yi acıklama yapmıyacagım dırek kodlarını yazacagım umarım yazımı begenmısınızdır  ?.

userkontol.php

<?
echo “<meta http-equiv=\”Content-Type\” content=\”text/html; charset=iso-8859-9\” />”;
$user = $_GET["user"];
include(‘baglanti.php’);
$user_varmi = mysql_query(“select user from user WHERE user=’$user’”);
if(mysql_num_rows($user_varmi) != 0){
echo “<font face=\”Arial,Verdana\” style=\”font-size:10px\” color=\”red\”><b>Bu Kullanici      Adi Kullaniliyor !    </b></font>”;
}elseif($user == “”){
echo “<font face=\”Arial,Verdana\” style=\”font-size:10px\” color=\”red\”><b>Kullanici Adı Yazmalısınız</b></font><br>”; }
else{
echo “<font face=\”Arial,Verdana\” style=\”font-size:10px\” color=\”green\”><b>Bu Kullanici Adini Kullanabilirsiniz !</b></font>”;
}
?>

Umarım Anlayabilmişinizdir ve umarım bir faydam dokunmuştur.

UMUT ÇETİNKAYA (mail adresim )

AJAX Tab Kontrol uygulamasını buradan test edebilirsiniz.
Kaynak kodları da buradan indirebilirsiniz.

Yorum bırakın »

PHP+PEAR Aplikasyonlarının Kullanımı ve Örnek bir Veritabanı Uygulaması

Merhaba Arkadaşlar

Php sürekli gelişmeye ve kendini yenilemeye devam ediyor.Php5 versiyonuyla birlikte OOP(Nesneye dayalı programlama) desteğide oldukça geliştirildi.Artık nesneye dayalı mimariler php kodlarımız içerisinde daha fazla kullanılmaya başlandı.Php diliyle birlikte kullanmamız için geliştirilen hazır kütüphaneler mevcut.Bu kütüphanelerin genel adı PEAR kütüphaneleri olarak adlandırılmış.İşte bu makalemizde PEAR kütüphanelerini işleyeceğiz.

Bu makalede öğreneceklerimiz.
1-PEAR kütüphaneleri nedir ve ne işe Yarar.
2-PEAR kütüphanelerinin kurulumu
3-Örnek bir Veritabanı işlemlerinin olduğu uygulama yapacağız.

PEAR kütüphaneleri nedir ve ne işe Yarar.
Php5 versiyonu ile OOP mantığı kodlarımıza daha fazla girmeye başladı.Ayrıca da OOP programcılığının tüm programlama dillerindeki hakimiyetinin giderek artması PHP geliştiricilerinide buna kayıtsız bırakmadı.

Bildiğiniz gibi php açık kaynak kodlu bir programlama dili olduğundan dünyanın her köşesindeki programcılar kendi ihtiyaçlarına göre sınıf(Class) kütüphanelerini yazdılar.işte bu kütüphanelerin toplandığı alan yada Havuza “PEAR (PHP Extension and Application Repository )“ adı verilmiştir.PEAR aplikasyonları belirli uygulamaları yapmak için hazırlanmış OOP kodlarıdır.PEAR aplikasyonları ile yapılabilecek belli başlı uygulamaları şu şekilde sıralayabiliriz.

  • CACHING
  • HTML
  • DATABASE
  • MAIL
  • NETWORK
  • TEMPLATE

Olarak belli başlı şekilde sıralayabiliriz.Yukarıdaki saydığımız ve daha pek çok işlemi yapan nesneye dayalı kodlar mevcuttur.Bu kodları bilgisayarınıza indirip web siteniz içinde çok rahat bir şekilde kullanabilirsiniz.Ayrıca arkadaşlar PEAR aplikasyonlarının şöyle de bir özelliği vardır.PEAR aplikasyonları profesyonel programcılar tarafından geliştirilir ki bu da Php de olmayan bazı kendine ait özel kodların olmasını sağlamıştır.Yani PHP de olmayan özel PEAR kodları mevcuttur.Bu makalede ayrıca onlarıda öğreneğiz.Yapacağımız örnek uygulamada da göreceksiniz ki PEAR kullanarak JAVA Prog. Dilinin yapısına benzer kodlar yazacağız.Şimdilik bu kadar bilgi yeter sanıyorum.Daha fazla bilgi almak isteyen arkadaşlarımız http://pear.php.net adresine de bakabilirler.

PEAR Aplikasyonlarının kurulumu
Arkadaşlar iki şekilde kurulum yapılabilir.
1-Php prog. Dilini kurduğumuz dizin içerisinde “go-pear.bat “ dosyası mevcut.o dosyayı çift tıklayalım.kurulum için sadece Enter tuşuna basalım.Gereken kurulumu kendisi yapıyor zaten.Daha sonra php klasörümüz içinde “Pear” adında bir klasör oluşacaktır.o klasörü birde php.ini dosyası içinde tanımlamamız gerekmektedir.Bu nedenle php.ini dosyasını açalım ve

aşağıdaki satırı herhangi bir yere ekleyelim.

include_path=”.;C:\php\php5\pear”

yani pear aplikasyonlarının kurulduğu dizin.Bu şu nedenle önemli.Çünkü o dizindeki “pear.php” dosyasını kullanacağız da ondan. Daha sonra Apache ‘yi restart ediyoruz ve Pear kurulumu tamam.Şu ana kadar PEAR kurulumunu yaptık.Oysa daha işimiz bitmedi.Çünkü şimdi hangi PEAR kütüphanesini kullanacağımızı şeçmedik.Ben sizinle birlikte Database uygulaması yapacağım.Bu nedenle de PEAR Aplikasyonlarının DATABASE http://pear.php.net/search.php?q=database sınıflarını kullanacağım.Bu nedenle arkadaşlar DATABASE sınıflarından DB sınıfını kullanacağım.DB sınıfını indirmek için http://pear.php.net/package/DB adresine gidin ve Download bölümünden bilgisayarınıza indirin.

Arkadaşlar DB sınıfı DB-1.7.11.tgz şeklindeki sıkıştırılmış dosya olarak gelecektir.O dosyayı açalım.Şimdilik burada keselim.Çünkü devamını örnek uygulama ile anlatacağım.

2-PEAR aplikasyonlarının kurulumunun diğer şekli ise bence hepimiz için önemli.Diyelim ki siz tüm sitenizi yaptınız localde çok iyi çalışıyo ama hosting firmanızda PEAR desteği yoksa ne olacak.Tüm çabanız heba olmuş olacak.Çünkü hosting firmanızdan PEAR desteği istesenizde size olumlu cevap vermeleri çok düşük bir ihtimal.Bu nedenle arkadaşlar indirdiğimiz DB sınıfının bize gerekli olan kısmını ve Burası önemli “PEAR.php” dosyasını hosting alanımıza aynı dizine atacağız.Şimdi bu anlattıklarımı bir örnek uygulamaya çevirelim.Böylece daha net anlayacaksınız.

Örnek bir Veritabanı işlemlerinin olduğu Uygulama

Şimdi arkadaşlar
İndirdiğimiz DB-1.7.11.tgz dosyasını açtığımızda birkaç tane klasörün olduğunu görürüz.Burada bizim için önemli olan “DB” klasörü ve “DB.php” dosyasıdır.Bu dosyaları sunucumuza gönderelim.

İşte Önemli NOT: Eğer localde çalışıyorsak ve php.ini dosyası içinde gereken değişiklikleri yapabildiysek herhangi bir değişikliğe ihtiyaç yok.Ama sitemiz hosting alanında ise ve hosting firması PEAR desteği vermiyorsa “DB” klasörü “DB.php” dosyası ve localde PEAR kurulumu yapılması sonucunda oluşan “PEAR.php” dosyasını hosting alanının aynı klasörüne taşımalıyız.Tekrarlarsak “DB” klasörü ,”DB.php” dosyası ve “PEAR.php” dosyası sunucumuzun aynı klasörü içinde olacak şekilde olmalı.Böylece PEAR desteği kazanmış oluruz.ve PEAR aplikasyonlarından DB sınıfını kullanabiliriz.

Şimdi arkadaşlar
PEAR Aplikasyonlarından DB sınıfıyla bir Veritabanı uygulaması yapalım.
PEAR Aplikayonlarının kendine özel kodları(fonksiyonları) olduğunu daha önce söylemiştik.DB sınıfınıda kullandığımıza göre DB sınıfıyla veritabanı erişimi yapalım.Bu şu şekildeki tek satırlık kod ile yapılıyor.

Sqladi://user:password@host:port/databaseadı

Dikkat ettiyseniz bu satır her veritabanı sunucusuna destek vermekte.yani yaptığımız bu uygulama için Mysql yerine PgSql yada MSSql,Access vs. kullanabilirsiniz.vede Sadece satırın başındaki “Sqladi” bölümünü değiştirerek.Daha fazla bilgi için. http://pear.php.net/manual/en/package.database.db.php

Önce bir veritabanı oluşturalım ve içine deneme adında şu yapıda bir tablo oluşturalım.

CREATE TABLE `deneme` (
`userid` int(11) unsigned NOT NULL auto_increment,
`userad` varchar(20) NOT NULL,
`usersoyad` varchar(30) NOT NULL,
`usertakim` varchar(20) NOT NULL,
PRIMARY KEY (`userid`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;

Aşağıdaki kodları deneme.php olarak diğer dosyalarımızın olduğu klasöre(DB.php,DB klasörü,PEAR.php yanına) kaydedelim.

<?php
// PEAR paketimizi sayfamıza ekliyoruz.
require_once(“DB.php”);

// Veritabanı Bilgilerimimizi Giriyoruz.
$host=”localhost”;
$user=”root”;
$psw=”123″;
$dbname=”dbpear”;//db adınız
$port=3306;//dilersek yazmayabiliriz.
$dbtype=”mysql”;

$con=”$dbtype://$user:$psw@$host:$port/$dbname”;
$db=DB::connect($con);

if(DB::isError($db))
{
die($db->getmessage().”<br />”);
}
else
{
echo “Pear kullanarak Mysql Sunucuma Bağlandım.”;
}
?>

Gördüğünüz gibi ilk olarak “DB.php” dosyamızı sayfamıza ekliyoruz.Daha sonra veritabanı sunucumuzun bilgilerini giriyoruz. Ve “$con“ değişkenimize bağlantı parametrelerimizi giriyoruz.Burada “DB::connect()” kodumuz ile aynı “mysql_connect” olduğu gibi gerekli bağlantıyı yapıyor.Buradaki önemli ayrıntı bu satırdaki “$dbtype” değişkenini “mssql,sqlite,odbc..” yaptığımız anda tüm sistemimiz o veritabanı sistemine uygun olarak davranıyor.yani tek satırlık değişiklikle tüm veritabanı sistemimiz değişiyor.Diğer kodları ise php bilen herkes ne yapmaya çalıştığımı anlamıştır.

Şimdi arkadaşlar deneme tablomuza veri ekleyelim.
<?
$sql=”insert into deneme(userad,usersoyad,usertakim) values(‘ceviz’,’net’,’Beşiktaş’)”;
$result=$db->query($sql);
?>

yukarıdaki kodlarıda arkadaşlar hemen anlamışsınızdır.mysql_query() ile yaptıklarımızın aynısı.
Şimdi de listeleme yapalım.

<?
$sql=”select * from deneme”;
$result=$db->query($sql);

if(DB::isError($result))
{
die($result->getmessage());
}
while($row=$result->fetchRow(DB_FETCHMODE_ASSOC))
{
echo “<pre>”;
echo $row['userid'];
echo $row['userad'];
echo $row['usersoyad'];
echo $row['usertakim'];
echo “</pre>”;
}
?>

Yukarıda ise listeleme yapmaktayız.Listeleme sırasında fetchRow ( http://pear.php.net/manual/en/package.database.db.db-result.fetchrow.php ) komutunu(fonksiyonunu) kullanmaktayız.Bu kod sayesinde mysql_fetch_Assoc biçiminde listeleme yapıyoruz.Eğer istersek “DB_FETCHMODE_ARRAY” yazarakta listeleme olur.O zamanda “echo $row[0]” şeklinde listeleme yapacağız.

:: PHP+PEAR Aplikasyonlarının Kullanımı ve Örnek bir Veritabanı Uygulaması

Sayfa 4
<!–
google_ad_client = “pub-9317856510830362″;
google_ad_width = 120;
google_ad_height = 90;
google_ad_format = “120×90_0ads_al”;
//2007-03-23: anasayfa – makale ici
google_ad_channel = “1957172888″;
google_color_border = “F2F2F3″;
google_color_bg = “F2F2F3″;
google_color_link = “354860″;
google_color_text = “000000″;
google_color_url = “354860″;
//–>

Sıra geldi benim en fazla anlatmak istediğim kısma.PEAR ile OOP kodlama getirildi demiştik.Hatta JAVA benzerliğinden bahsetmiştik.işte şimdi JAVA prog. Dili ile benzer bir yapıyı Php de kullanacağız.

Aşağıdaki yapıyı dikkatle inceleyelim.

<?
$sql=”insert into deneme(userad,usersoyad,usertakim) values(?,?,?)”;
$sorgu=$db->prepare($sql);
if(DB::isError($sorgu))
{
die($sorgu->getmessage());
}
$arr=array(
array(‘Ceviz’,'Net’,'Beşiktaş’),
array(‘Özhan’,'Canaydın’,'Galatasaray’),
array(‘Yıldırım’,'Demirören’,'Beşiktaş’),
array(‘Aziz’,'Yıldırım’,'Fenerbahçe’));
?>

Burada “?” işaretlerini bir elemanmış gibi kullandık.ve “$db->prepare” kodunu kullanarak sorgunun çalışmasını beklettik.bir array yapımız var.yani birden fazla elemanı veritabanımıza girmeye çalışacağız.bunun için şu kodu kullanacağız.

<?
Foreach( $arr as $ar)
{
$db->execute($sorgu,$ar);
}
?>

biçiminde birden fazla veriyi veritabanımıza girmiş olduk.Ama daha kolayıda var.hiç Foreach ile uğraşmadan.

<?
$db->executeMultiple($sorgu,$arr);
<?

Tek satırlık kod ile her şeyi halletmiş olduk.İşte PEAR aplikasyonlarından DB sınıfını kullanarak bir veritabanı işlemi yapmış olduk.Eğer bilgisayarınızda başka veritabanı sunucularınız varsa onlarla da sadece en baştaki satırı değiştirerek işlem yapabilirsiniz.yani

<?
$dbtype=”odbc”;//Access için
$dbtype=”mssql”;//MS SQL için
$dbtype=”sqlite”;//SQLite için
$dbtype=”pgsql”;//Pgsql için
?>

ve destek verilen tüm veritabanı sunucuları için Bknz: http://pear.php.net/manual/en/package.database.db.intro-dsn.php

ve sonra bu tek satırlık kod.

<?
$con=”$dbtype://$user:$psw@$host:$port/$dbname”;
?>

işte bu kadar.
Evet arkadaşlar
Sizlere PEAR Aplikasyonlarını ve DB sınıfını anlattım.İnşaallah anlatabilmişim ve sizlere bir şeyler öğretebilmişimdir.Sorunlarınızı ve görüşlerinizi bekliyorum.

Kadir Gülağız
http://kGlznet.kayyo.com // Şu an için ulaşılamıyor maalesef.
http://kGlz.110mb.com

kGlz 15.04.2007
Sayfalar : 1

2 3 4

co.mments del.icio.us digg Furl NewsVine Reddit Spurl TailRank Wists



Rating : 10 üzerinden 6.00 0 – Daha kötü olamazdı 1 – Çok kötü 2 – Kötü 3 – Kötüye yakın 4 – Vasattan kötü 5 – Vasat 6 – Vasattan iyi 7 – İyiye yakın 8 – İyi 9 – Çok iyi 10 – Daha iyi olamazdı

Tümünü Göster / Sadece Başlıklar Yorumlar

Ali Emre KAYGIN bekliyoruz
güzel bir konuya benziyor yakınlarda elime bir ebook geçmişti pear ile php programcılığı diye kitebın dili ingilizce pek anlamadığım için fazla ilgilenmedim ama bu makalenin devamı gelirse çok faydalı olacağına inanıyorum şimdiden teşekkürler

function FormGonder(islem){
if(islem == ’sil’){
hata = confirm(‘Seçtiğiniz kayıtları kaldırmak istediğinizden eminmisiniz?’);
if(!hata)
return;
}
document.forms.yorum.submit();
}

function TercihYenile(form,tercih){
var tercih = (typeof(document.forms[form].elements[tercih]) != ‘undefined’) ? document.forms[form].elements[tercih] : document.forms[form].elements[tercih];
var uzunluk = (typeof(tercih.length) != ‘undefined’) ? tercih.length : 0;

if(uzunluk){
for (var i = 0; i < uzunluk; i++){
tercih[i].checked = tercih[i].checked ? false : true;
}
} else {
tercih.checked = tercih.checked ? false : true;
}
}

function BlokKatla(id){
var katman = document.getElementById(id);
var buton = document.getElementById(id+’Buton’);

if(katman.style.display == ‘block’) {
buton.src = ‘ceviz_main/images/ceviz_ikon_ac.gif’;
katman.style.display = ‘none’;
}
else {
buton.src = ‘ceviz_main/images/ceviz_ikon_kapat.gif’;
katman.style.display = ‘block’;
}

return;
}

var blok_liste = new Array();
blok_liste[0] = ‘yorum0′;

function BlokDurum(durum){
for(i=0; i < blok_liste.length; i++) {
var katman = document.getElementById(blok_liste[i]);
var buton = document.getElementById(blok_liste[i]+’Buton’);
if(durum == ‘none’) {
buton.src = ‘ceviz_main/images/ceviz_ikon_ac.gif’;
katman.style.display = ‘none’;
}
else {
buton.src = ‘ceviz_main/images/ceviz_ikon_kapat.gif’;
katman.style.display = ‘block’;
}
}
}


» Yorum ekle
İsminiz:
Mailiniz:
Yorum Konu:
Güvenlik Kodu: güvenlik kodu
Bütün alanları doldurmanız gerekmektedir.

Yorumlar (1) »