PHP ile ziyaretçi defteri yazalım.
Ziyaretçi defterimiz üç dosyadan oluşacaktır:
1) defter.php
2) defter2.php
3) veri.php
Başlarken
Ziyaretçi defteri adının uzunluğu sizi ürkütmesin. PHP ve MySQL manuallerini okurken, internet kaynaklarında yer alan PHP derslerini incelerken sıfır bilgiyle gerçekten bir şeyler yapılabileceğinden emin olun. Siz de azimle çalışarak bu işi öğrenebilirsiniz. Ayrıca bu sayfaların hiçbirisinde sayfa düzenine dikkat edilmemiş; sadece kodlama yapılmıştır. Geliştirmek size kalır.
Neler yapacağız?
- defter.php ile sitemize giren kişinin ziyaretçi defterimize görüş eklemesini sağlayacağız.
- defter2.php ile ziyaretçi defterimize görüşünü eklemiş olacak ve diğer görüşleri okuyabilecek.
- veri.php ile de, defter2.php'de gösterilen görüşlerin dökümünü alacağız.
Önce aşağıdaki MySQL sorgularını phpMyAdmin aracılığıyla çalıştırıyoruz.
CREATE DATABASE zdefter CHARACTER SET utf8 COLLATE utf8_turkish_ci;
CREATE TABLE defter (isoyis text, eposta text, site text, tarih date, gorus text, primary key (isoyis))
Yukarıdaki iki sorguyu çalıştırdıktan sonra veritabanının açıldığından ve defter tablosunun yaratıldığından emin olun. Eğer eminseniz bir sonraki adıma geçebilirsiniz.
Bir dosya açın ve aşağıdaki kodları kopyaladıktan sonra defter.php adıyla kaydedin:
<html>
<head>
<meta http-equiv="Content-Language" content="tr">
<meta http-equiv="Content-Type" content="text/html; charset=windows-1254">
<title>Ziyaretçi Defteri</title>
</head>
<body>
<form method="POST" action="defter2.php">
<table border="1" cellpadding="0" cellspacing="0" style="border-collapse: collapse; border-width: 0" bordercolor="#111111" width="100%" id="AutoNumber1">
<tr>
<td width="19%" style="border-style: none; border-width: medium" valign="top">
İsim Soyisim:</td>
<td width="81%" style="border-style: none; border-width: medium" valign="top">
<input type="text" name="isoyis" size="31"></td>
</tr>
<tr>
<td width="19%" style="border-style: none; border-width: medium" valign="top">
E-posta Adresi:</td>
<td width="81%" style="border-style: none; border-width: medium" valign="top">
<input type="text" name="eposta" size="31"></td>
</tr>
<tr>
<td width="19%" style="border-style: none; border-width: medium" valign="top">
Web Site:</td>
<td width="81%" style="border-style: none; border-width: medium" valign="top">
<input type="text" name="site" size="31"></td>
</tr>
<tr>
<td width="19%" style="border-style: none; border-width: medium" valign="top">
Görüşler</td>
<td width="81%" style="border-style: none; border-width: medium" valign="top">
<textarea rows="10" name="gorus" cols="34"></textarea></td>
</tr>
</table>
<p> </p>
<p> </p>
<p><input type="submit" value="Gönder" name="B1"><input type="reset" value="Sıfırla" name="B2"></p>
</form>
</body>
</html>
Burada, kullanıcımızın bilgisini eklemesini sağlıyoruz. "<form method="POST" action="defter2.php">" koduyla, eklenen bilginin defter2.php'ye gönderilmesi gerektiğini sunucuya iletiyoruz. Herhalde boşlukları doldurmayı beceremeyecek kadar zır cahil bir kullanıcı değildir ziyaretçimiz.
Bir dosya açın ve aşağıdaki kodları kopyaladıktan sonra defter2.php adıyla kaydedin:
<?php
$tarih = date("Y-m-d");
$baglan = mysql_connect('localhost', 'kullaniciadi', 'sifre');
$dbsec = mysql_select_db('zdefter', $baglan);
if (!$dbsec)
{
echo 'veritabani secilemedi: ' . mysql_error();
}
else {
$ekle = "INSERT INTO defter VALUES('$isoyis', '$eposta', '$site', '$tarih', '$gorus')";
$sorgu = mysql_query($ekle, $baglan);
if (!$sorgu)
{
echo 'bilgiler eklenemedi: ' . mysql_error();
}
}
include("veri.php");
?>
Yukarıda verilen kodlar ile defter.php'den gelen verileri hafızaya alıp, MySQL aracılığıyla veritabanına ekliyoruz. Arada bunun olmadığı da olabilir. Dert etmeyelim, sabredelim, bekleyelim, sonucu görelim. Belki de kodlarımızdan kaynaklanmıyordur. Şimdi kodları tek tek inceleyelim:
$tarih = date("Y-m-d"); -> Hatırlarsanız, mysql'da tablo açarken tarih alanı da açmıştık, açtığımız bu tarih alanına tarih ekleyebilmemiz için tarih biçiminin yıl-ay-gün şeklinde olması gerek. date() fonksiyonu ile tarih bilgilerini alabiliriz. daha fazla bilgi için php manualinde date and time functions kısmını incelemelisiniz.
$baglan = mysql_connect('localhost', 'kullaniciadi', 'sifre');
$dbsec = mysql_select_db('zdefter', $baglan);
$baglan değişkeniyle belirtilen kullanıcı adı, şifre ve host ile mysql'a bağlanıyoruz.
$dbsec değişkeniyle belirtilen veritabanını seçiyoruz.
if (!$dbsec)
{
echo 'veritabani secilemedi: ' . mysql_error();
}
kodu, sunucuya eger $dbsec değişkeni çalışmazsa (if(!$değişken) şeklindeki kodlarda baştaki ünlem işareti çalışmazsa, olmazsa anlamı taşımaktadır) yani $dbsec değişkeninde yapmak istediğimiz veritabanı seçme işlemi olmazsa, veritabanının seçilemediğini bildir ve mysql_error(); fonksiyonu ile veritabanının seçilememesinin nedenini göster anlamına gelmektedir.
else {
koduyla yukarıda belirttiğimiz veritabanı seçme işlemi başarıyla tamamlandıysa devam ediyoruz.
$ekle = "INSERT INTO defter VALUES('$isoyis', '$eposta', '$site', '$tarih', '$gorus')";
$sorgu = mysql_query($ekle, $baglan);
$ekle değişkeni ile açmış olduğumuz "zdefter" veritabanındaki "defter" tablosuna değerlerini ekliyoruz. Buradaki INSERT INTO komutu VALUES() kısmının içerisindeki bilgileri "defter" tablosuna eklememizi sağlamakta. Values komutu değerler anlamına gelmektedir. $sorgu değişkeni ile $ekle değişkenindeki mysql sorgusunu çalıştırıyoruz. Ayrıca, buradaki $eposta, $site, $gorus değişkenleri, ziyaretçinin doldurduğu boşlukların değerlerinin POST komutu ile aldığımız verileridir. Yani görüş boşluğuna yazdıkları POST metodu ile $gorus değişkeni olarak bize iletildi.
if (!$sorgu)
{
echo 'bilgiler eklenemedi: ' . mysql_error();
}
}
if(!$sorgu) kodu yukarıdaki if(!$dbsec) kodu ile aynı işlevi görmektedir, kod ve devamı, $sorgu yani veritabanına bilgi ekleme sorgusu çalışmazsa bunu bildirecek ve hatayı gösterecektir.
include("veri.php"); kodu da veri.php dosyasını defter2.php sayfasında gösterecektir. include fonksiyonunun görevi, bir sayfada, başka bir sayfanın gösterilmesini sağlamaktır.
Bir dosya açın ve aşağıdaki kodları kopyaladıktan sonra veri.php ismiyle kaydedin:
<?php
function mysqlislem()
{
mysql_connect('localhost', 'root', 's') or die("mysqla bağlanamıyor.");
mysql_select_db('zdefter') or die("veritabanı seçilemiyor.");
$sorgu = mysql_query('SELECT * FROM defter');
while ($goster = mysql_fetch_array($sorgu))
{
echo "<b>İsim Soyisim:</b> " . $goster["isoyis"] . "<br>";
echo "<b>E-Posta:</b> " . $goster["eposta"] . "<br>";
echo "<b>Web Site:</b> " . $goster["site"] . "<br>";
echo "<b>Tarih:</b> " . $goster["tarih"] . "<br>";
echo "<b>Görüş:</b> " . $goster["gorus"] . "<br><hr>";
}
}
call_user_func(mysqlislem);
?>
burada fonksiyon ile çalışmamızın sebebi, bir script içerisinde birden fazla komutu (fonksiyonu) kavrayabilmemiz için.
function mysqlislem()
{
kodu ile mysqlislem() fonksiyonunu başlatıyoruz.
mysql_connect('localhost', 'root', 's') or die("mysqla bağlanamıyor.");
mysql_select_db('zdefter') or die("veritabanı seçilemiyor.");
fonksiyonları ile belirtilen hosta, belirtilen şifre ve kullanıcı adı ile bağlanıp, belirtilen veritabanını seçiyoruz. hatırlarsanız yukarıda bunları, $baglan ve $dbsec değişkenleri ile yapmıştık. burada göstermek istediğim, bu fonksiyonların değişkenler aracılığıyla veya kendi başlarına yapılabilmeleridir. yani yukarıda $baglan ve $dbsec değişkenleri ile yaptığımız işlemleri, tek başına da yapabiliyoruz. buradaki or bir bakıma, -kesinlikle böyle diyemeyiz, bu doğru olmaz- yukarıdaki if(!$baglan) ve if(!$dbsec) fonksiyonlarının görevini üstlenmekte.
$sorgu = mysql_query('SELECT * FROM defter');
buradaki SELECT komutu seçmeye yarar, * işareti hepsi anlamına gelir, FROM tabloismi tabloismi'nden anlamına gelir, yani burada, defter tablosundaki bütün bilgileri seçiyoruz.
while ($goster = mysql_fetch_array($sorgu))
bildiğiniz üzere while bir şey böyleyken şu işlemi yap anlamına gelmektedir. daha fazla bilgiyi php manualine bakarak alabilirsiniz. mysql_fetch_array fonksiyonu, $sorgu ile seçtiğimiz tablonun dökümünü almamızı sağlar, $goster değişkeni de buradaki her bir veriyi simgeler.
echo "<b>İsim Soyisim:</b> " . $goster["isoyis"] . "<br>";
buradaki echo komutu bildiğiniz üzere, elimizdekileri göstermeye yarar. hepimiz echo "hello world"; olayına girmişizdir. hatta ben hatırlarım, hello world'den sonra echo "vay a.k"; yazmıştım. neyse, devam edelim, $goster['alan'] ile de mysql_fetch_array fonksiyonu ile elde ettiğimiz verileri gösteriyoruz.
call_user_func(mysqlislem);
ile de mysqlislem fonksiyonumuzu çalıştırıyoruz. buradaki call_user_func() fonksiyonu, php'nin içinde olmayan, coderın kendi yazmış olduğu fonksiyonu göstermeye yarar.
Umarım, PHP bilginizin ilerlemesine bu anlatımla küçücük de olsa katkım olmuştur. Dediğim gibi, buradaki kodları geliştirmek tamamen size bağlıdır. Tasarım adına hiçbir şey olmadığını zaten anlamışsınızdır, amacımız kodlamak olduğu için tasarıma pek gerek duymadım. Daha sonraki anlatımlarımda dikkat etmeye çalışırım. Ya da etmesem mi? Neyse, bakarız. Kodlar üzerinde oynama hakkına sahipsiniz, tamamen benim emeğim olsa bile gönlünüzce üzerinde tepinebilir, yastık kavgası yapabilirsiniz veya kodlar üzerinde gitar kırabilirsiniz. hatta yönetici girişi yapıp, eklenen görüşleri düzenleme ve silme imkânınız bile olabilir ileride geliştirirseniz; güzel de olur. Hadi bakalım..
Aklınıza takılan kısımları konu altından sorabilirsiniz. Vaktim elverdikçe yardımcı olmaya çalışırım.
saygılar, sevgiler.
Ziyaretçi defterimiz üç dosyadan oluşacaktır:
1) defter.php
2) defter2.php
3) veri.php
Başlarken
Ziyaretçi defteri adının uzunluğu sizi ürkütmesin. PHP ve MySQL manuallerini okurken, internet kaynaklarında yer alan PHP derslerini incelerken sıfır bilgiyle gerçekten bir şeyler yapılabileceğinden emin olun. Siz de azimle çalışarak bu işi öğrenebilirsiniz. Ayrıca bu sayfaların hiçbirisinde sayfa düzenine dikkat edilmemiş; sadece kodlama yapılmıştır. Geliştirmek size kalır.
Neler yapacağız?
- defter.php ile sitemize giren kişinin ziyaretçi defterimize görüş eklemesini sağlayacağız.
- defter2.php ile ziyaretçi defterimize görüşünü eklemiş olacak ve diğer görüşleri okuyabilecek.
- veri.php ile de, defter2.php'de gösterilen görüşlerin dökümünü alacağız.
Önce aşağıdaki MySQL sorgularını phpMyAdmin aracılığıyla çalıştırıyoruz.
CREATE DATABASE zdefter CHARACTER SET utf8 COLLATE utf8_turkish_ci;
CREATE TABLE defter (isoyis text, eposta text, site text, tarih date, gorus text, primary key (isoyis))
Yukarıdaki iki sorguyu çalıştırdıktan sonra veritabanının açıldığından ve defter tablosunun yaratıldığından emin olun. Eğer eminseniz bir sonraki adıma geçebilirsiniz.
Bir dosya açın ve aşağıdaki kodları kopyaladıktan sonra defter.php adıyla kaydedin:
<html>
<head>
<meta http-equiv="Content-Language" content="tr">
<meta http-equiv="Content-Type" content="text/html; charset=windows-1254">
<title>Ziyaretçi Defteri</title>
</head>
<body>
<form method="POST" action="defter2.php">
<table border="1" cellpadding="0" cellspacing="0" style="border-collapse: collapse; border-width: 0" bordercolor="#111111" width="100%" id="AutoNumber1">
<tr>
<td width="19%" style="border-style: none; border-width: medium" valign="top">
İsim Soyisim:</td>
<td width="81%" style="border-style: none; border-width: medium" valign="top">
<input type="text" name="isoyis" size="31"></td>
</tr>
<tr>
<td width="19%" style="border-style: none; border-width: medium" valign="top">
E-posta Adresi:</td>
<td width="81%" style="border-style: none; border-width: medium" valign="top">
<input type="text" name="eposta" size="31"></td>
</tr>
<tr>
<td width="19%" style="border-style: none; border-width: medium" valign="top">
Web Site:</td>
<td width="81%" style="border-style: none; border-width: medium" valign="top">
<input type="text" name="site" size="31"></td>
</tr>
<tr>
<td width="19%" style="border-style: none; border-width: medium" valign="top">
Görüşler</td>
<td width="81%" style="border-style: none; border-width: medium" valign="top">
<textarea rows="10" name="gorus" cols="34"></textarea></td>
</tr>
</table>
<p> </p>
<p> </p>
<p><input type="submit" value="Gönder" name="B1"><input type="reset" value="Sıfırla" name="B2"></p>
</form>
</body>
</html>
Burada, kullanıcımızın bilgisini eklemesini sağlıyoruz. "<form method="POST" action="defter2.php">" koduyla, eklenen bilginin defter2.php'ye gönderilmesi gerektiğini sunucuya iletiyoruz. Herhalde boşlukları doldurmayı beceremeyecek kadar zır cahil bir kullanıcı değildir ziyaretçimiz.
Bir dosya açın ve aşağıdaki kodları kopyaladıktan sonra defter2.php adıyla kaydedin:
<?php
$tarih = date("Y-m-d");
$baglan = mysql_connect('localhost', 'kullaniciadi', 'sifre');
$dbsec = mysql_select_db('zdefter', $baglan);
if (!$dbsec)
{
echo 'veritabani secilemedi: ' . mysql_error();
}
else {
$ekle = "INSERT INTO defter VALUES('$isoyis', '$eposta', '$site', '$tarih', '$gorus')";
$sorgu = mysql_query($ekle, $baglan);
if (!$sorgu)
{
echo 'bilgiler eklenemedi: ' . mysql_error();
}
}
include("veri.php");
?>
Yukarıda verilen kodlar ile defter.php'den gelen verileri hafızaya alıp, MySQL aracılığıyla veritabanına ekliyoruz. Arada bunun olmadığı da olabilir. Dert etmeyelim, sabredelim, bekleyelim, sonucu görelim. Belki de kodlarımızdan kaynaklanmıyordur. Şimdi kodları tek tek inceleyelim:
$tarih = date("Y-m-d"); -> Hatırlarsanız, mysql'da tablo açarken tarih alanı da açmıştık, açtığımız bu tarih alanına tarih ekleyebilmemiz için tarih biçiminin yıl-ay-gün şeklinde olması gerek. date() fonksiyonu ile tarih bilgilerini alabiliriz. daha fazla bilgi için php manualinde date and time functions kısmını incelemelisiniz.
$baglan = mysql_connect('localhost', 'kullaniciadi', 'sifre');
$dbsec = mysql_select_db('zdefter', $baglan);
$baglan değişkeniyle belirtilen kullanıcı adı, şifre ve host ile mysql'a bağlanıyoruz.
$dbsec değişkeniyle belirtilen veritabanını seçiyoruz.
if (!$dbsec)
{
echo 'veritabani secilemedi: ' . mysql_error();
}
kodu, sunucuya eger $dbsec değişkeni çalışmazsa (if(!$değişken) şeklindeki kodlarda baştaki ünlem işareti çalışmazsa, olmazsa anlamı taşımaktadır) yani $dbsec değişkeninde yapmak istediğimiz veritabanı seçme işlemi olmazsa, veritabanının seçilemediğini bildir ve mysql_error(); fonksiyonu ile veritabanının seçilememesinin nedenini göster anlamına gelmektedir.
else {
koduyla yukarıda belirttiğimiz veritabanı seçme işlemi başarıyla tamamlandıysa devam ediyoruz.
$ekle = "INSERT INTO defter VALUES('$isoyis', '$eposta', '$site', '$tarih', '$gorus')";
$sorgu = mysql_query($ekle, $baglan);
$ekle değişkeni ile açmış olduğumuz "zdefter" veritabanındaki "defter" tablosuna değerlerini ekliyoruz. Buradaki INSERT INTO komutu VALUES() kısmının içerisindeki bilgileri "defter" tablosuna eklememizi sağlamakta. Values komutu değerler anlamına gelmektedir. $sorgu değişkeni ile $ekle değişkenindeki mysql sorgusunu çalıştırıyoruz. Ayrıca, buradaki $eposta, $site, $gorus değişkenleri, ziyaretçinin doldurduğu boşlukların değerlerinin POST komutu ile aldığımız verileridir. Yani görüş boşluğuna yazdıkları POST metodu ile $gorus değişkeni olarak bize iletildi.
if (!$sorgu)
{
echo 'bilgiler eklenemedi: ' . mysql_error();
}
}
if(!$sorgu) kodu yukarıdaki if(!$dbsec) kodu ile aynı işlevi görmektedir, kod ve devamı, $sorgu yani veritabanına bilgi ekleme sorgusu çalışmazsa bunu bildirecek ve hatayı gösterecektir.
include("veri.php"); kodu da veri.php dosyasını defter2.php sayfasında gösterecektir. include fonksiyonunun görevi, bir sayfada, başka bir sayfanın gösterilmesini sağlamaktır.
Bir dosya açın ve aşağıdaki kodları kopyaladıktan sonra veri.php ismiyle kaydedin:
<?php
function mysqlislem()
{
mysql_connect('localhost', 'root', 's') or die("mysqla bağlanamıyor.");
mysql_select_db('zdefter') or die("veritabanı seçilemiyor.");
$sorgu = mysql_query('SELECT * FROM defter');
while ($goster = mysql_fetch_array($sorgu))
{
echo "<b>İsim Soyisim:</b> " . $goster["isoyis"] . "<br>";
echo "<b>E-Posta:</b> " . $goster["eposta"] . "<br>";
echo "<b>Web Site:</b> " . $goster["site"] . "<br>";
echo "<b>Tarih:</b> " . $goster["tarih"] . "<br>";
echo "<b>Görüş:</b> " . $goster["gorus"] . "<br><hr>";
}
}
call_user_func(mysqlislem);
?>
burada fonksiyon ile çalışmamızın sebebi, bir script içerisinde birden fazla komutu (fonksiyonu) kavrayabilmemiz için.
function mysqlislem()
{
kodu ile mysqlislem() fonksiyonunu başlatıyoruz.
mysql_connect('localhost', 'root', 's') or die("mysqla bağlanamıyor.");
mysql_select_db('zdefter') or die("veritabanı seçilemiyor.");
fonksiyonları ile belirtilen hosta, belirtilen şifre ve kullanıcı adı ile bağlanıp, belirtilen veritabanını seçiyoruz. hatırlarsanız yukarıda bunları, $baglan ve $dbsec değişkenleri ile yapmıştık. burada göstermek istediğim, bu fonksiyonların değişkenler aracılığıyla veya kendi başlarına yapılabilmeleridir. yani yukarıda $baglan ve $dbsec değişkenleri ile yaptığımız işlemleri, tek başına da yapabiliyoruz. buradaki or bir bakıma, -kesinlikle böyle diyemeyiz, bu doğru olmaz- yukarıdaki if(!$baglan) ve if(!$dbsec) fonksiyonlarının görevini üstlenmekte.
$sorgu = mysql_query('SELECT * FROM defter');
buradaki SELECT komutu seçmeye yarar, * işareti hepsi anlamına gelir, FROM tabloismi tabloismi'nden anlamına gelir, yani burada, defter tablosundaki bütün bilgileri seçiyoruz.
while ($goster = mysql_fetch_array($sorgu))
bildiğiniz üzere while bir şey böyleyken şu işlemi yap anlamına gelmektedir. daha fazla bilgiyi php manualine bakarak alabilirsiniz. mysql_fetch_array fonksiyonu, $sorgu ile seçtiğimiz tablonun dökümünü almamızı sağlar, $goster değişkeni de buradaki her bir veriyi simgeler.
echo "<b>İsim Soyisim:</b> " . $goster["isoyis"] . "<br>";
buradaki echo komutu bildiğiniz üzere, elimizdekileri göstermeye yarar. hepimiz echo "hello world"; olayına girmişizdir. hatta ben hatırlarım, hello world'den sonra echo "vay a.k"; yazmıştım. neyse, devam edelim, $goster['alan'] ile de mysql_fetch_array fonksiyonu ile elde ettiğimiz verileri gösteriyoruz.
call_user_func(mysqlislem);
ile de mysqlislem fonksiyonumuzu çalıştırıyoruz. buradaki call_user_func() fonksiyonu, php'nin içinde olmayan, coderın kendi yazmış olduğu fonksiyonu göstermeye yarar.
Umarım, PHP bilginizin ilerlemesine bu anlatımla küçücük de olsa katkım olmuştur. Dediğim gibi, buradaki kodları geliştirmek tamamen size bağlıdır. Tasarım adına hiçbir şey olmadığını zaten anlamışsınızdır, amacımız kodlamak olduğu için tasarıma pek gerek duymadım. Daha sonraki anlatımlarımda dikkat etmeye çalışırım. Ya da etmesem mi? Neyse, bakarız. Kodlar üzerinde oynama hakkına sahipsiniz, tamamen benim emeğim olsa bile gönlünüzce üzerinde tepinebilir, yastık kavgası yapabilirsiniz veya kodlar üzerinde gitar kırabilirsiniz. hatta yönetici girişi yapıp, eklenen görüşleri düzenleme ve silme imkânınız bile olabilir ileride geliştirirseniz; güzel de olur. Hadi bakalım..
Aklınıza takılan kısımları konu altından sorabilirsiniz. Vaktim elverdikçe yardımcı olmaya çalışırım.
saygılar, sevgiler.