Yazdır 21 Mart 2011 Pazartesi (Hit: 120931)

Kayıt Ekleme 2 (Menü Kayıt)

Web sayfamızdaki yatay menü olarak kullanıcak linklerin veritabanından alındığını düşünelim. Bu menülere yenilerini eklemek için menü kayıt sayfasını hazırlamaya çalışalım. Örneğimizde temel güvenlik önlemlerini de almaya çalışacağız. Veritabanımız envai, tablomuz ise menuler olsun. menuler tablosundaki alanlar ve özellikleri aşağıdadır.

CREATE TABLE menuler(
id tinyint unsigned not null auto_increment primary key,
menu varchar(50) not null,
link varchar(255) default '#',
sira tinyint unsigned
) CHARACTER SET UTF8 COLLATE UTF8_GENERAL_CI ENGINE=MYISAM;

 

Veritabanı bağlantısı için baglan.php sayfası aşağıdadır.

<?php
// bu sayfa baglan.php sayfasıdır.
$host="localhost";
$user="root";
$password="123";
$db="envai";
  
if(@!mysql_connect($host, $user, $password)){
   $mesaj="Veritabanı bağlantısı yapılamadı!<br>";
   $mesaj.="Hata açıklaması: ".mysql_error();
   die($mesaj);
}
  
if(@!mysql_select_db($db)){
   $mesaj="$veritabani veritabanı seçilemedi!<br>";
   $mesaj.="Hata açıklaması: ".mysql_error();
   die($mesaj);
}
mysql_query("set names utf8"); // veritabanı işlemlerinde kullanacağımız karakter seti utf8
?>


 

Ana sayfamız index.php aşağıdadır.

Menüler

<!--bu sayfa index.php sayfasıdır-->
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Ana Sayfa</title>
<style>
body{
	margin:10px;
}
.menu{
	display:inline-block;
	border:#FF5FAA thin solid;
	background-color:#FFDFFF;
	font-family:Tahoma, Geneva, sans-serif;
	font-weight:bold;
	margin-left:3px;
	padding:5px 10px;
	/*width:150px;*/
	text-decoration:none;
	text-align:center;
}
.menu:hover{
	background-color:#D41FAA;
	color:#FFF;
}
</style>
</head>

<body>
<?php
require_once("baglan.php");
$sonuc=mysql_query("select * from menuler order by sira asc");
while($menu=mysql_fetch_array($sonuc)){
	echo "<a href=\"".$menu["link"]."\" class=\"menu\">".$menu["menu"]."</a>";
}
?>
<a href="menukayit.php" style="margin-left:10px"><img src="add.png" border="0" align="absmiddle"></a>
</body>
</html>

 

Menülerin kaydedildiği menukayit.php sayfası ise aşağıdadır.

Menü Kayıt

<!--bu sayfa menukayit.php sayfasıdır-->
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>Menü Kayıt</title>
<style>
table{
	border:#808080 1px solid;
}
table th{
	border:#808080 thin solid;
	background-color:#FFDFAA;
	font-weight:bold;
	text-align:center;
}
table td{
	border:#808080 thin solid;
	padding:5px;
	background-color:#FFA;
}
</style>
</head>

<body>
<?php
//------------------Güvenlik amaçlı kullanılan fonksiyon---------------
function temizle($veri){
    $veri=trim($veri);
    $veri=stripslashes($veri);
    $veri=mysql_real_escape_string($veri);
    return $veri;
}
//-----------------------------------------------------------------------

require_once("baglan.php");

if (!$_POST){ // POST olayı yoksa yani sayfa ilk kez açılıyorsa 
	$menu="";
	$link="#";
	$sira=0;
	$mesaj="";
}
else{ // POST olayı varsa yani menü kaydı yapılmak isteniyorsa
	$durum=true;
	$mesaj="";
	
	$menu=temizle($_POST["menu"]);
	$link=temizle($_POST["link"]);
	$sira=(int)$_POST["sira"];
	
	if($menu==false){
		$durum=false;
		$mesaj.="Lütfen menü adı giriniz.";
	}
	
	if($durum==true){
		if(mysql_query("insert into menuler(menu, link, sira) values ('$menu','$link',$sira)")){
			$mesaj="<b>Menü başarıyla kaydedilmiştir. </b>";
			$menu="";
			$link="#";
			$sira=0;
		}
		else{
			$mesaj="<b>Hata:</b> ".mysql_error();
		}
	}
}

echo "<p><a href=\"index.php\">Ana Sayfa</a> | $mesaj</p>";
?>
<form name="form1" method="post" action="menukayit.php">
<table width="250">
    <tr>
   		<th>Menü:</th><td><input type="text" name="menu" value="<?php echo $menu; ?>" />*</td>
    </tr>
    <tr>
	    <th>Link:</th><td><input type="text" name="link" value="<?php echo $link; ?>" /></td>
    </tr>
    <tr>
	    <th>Sıra:</th><td><input type="text" name="sira" value="<?php echo $sira; ?>" /></td>
    </tr>
    <tr>
	    <th>&nbsp;</th><td><input type="submit" name="kaydet" value="Kaydet" /></td>
    </tr>
</table>
</form>
<br>
<table>
<tr>
<th>No</th><th>Menü</th><th>Link</th><th>Sıra</th>
</tr>
<?php
$sonuc=mysql_query("select * from menuler order by sira asc");
while($menu=mysql_fetch_array($sonuc)){
	echo "<tr>";
	echo "<td>".$menu["id"]."</td>";
	echo "<td>".$menu["menu"]."</td>";
	echo "<td><a href=\"".$menu["link"]."\">".$menu["link"]."</a></td>";
	echo "<td>".$menu["sira"]."</td>";
	echo "</tr>";
}
?>
</table>
</body>
</html>

Menü kaydı aynı sayfada yapılmaktadır. action="menukayit.php"

Eğer POST olayı yoksa if(!$_POST) , formların ilk değerleri (value) olarak kullanılacak değişkenlerin ilk değer ataması yapılıyor.

POST olayı varsa, POST ile gelen değerler alınıyor. String ifadeler temizle() fonksiyonu ile temizleniyor. Integer değerlerin önüne ise (int)  ön eki konularak sayıya dönüştürülüyor.

SQL Injection'a karşı temizle isimli fonksiyon kullanılmaktadır. Bu fonksiyon önce;

  • Verinin başındaki ve sonundaki boşlukları temizliyor.
    $veri=trim($veri);
  • Sonra eklenmiş olan ters bölüleri kaldırıyor.
    $veri=stripslashes($veri);
  • Son olarak verideki özel karakterlerin önüne ters bölü koyarak etkisiz hale getiriyor.
    $veri=mysql_real_escape_string($veri);
  • Temizlenen veri gönderiliyor.
    return $veri;

$durum değişkeni verilerin kayda hazır olup olmadığını kontrol amaçlı kullanılmaktadır.

Boş olmaması gereken değerler kontrol edildikten sonra $durum değişkenine göre veritabanına kayda geçiliyor. Kaydın gerçekleşip gerçekleşmediğini if yapısı ile kontol ediyoruz. Kayıt olmaz ise mysql_error() fonksiyonuyla hata mesajı alınıyor ve formun hemen üzerinde yazdırlıyor.

Unutmayınız; formlardan gelen değerlerin boş olup olmadığı çoğu zaman javascript ile kontrol edilir. Bunun gibi basit işlemler için sunucu meşgul edilmez. Biz javascript bilmediğimizi kabul ederek bu kontrolü php ile yapıyoruz.

 


Bu site meslek liselerinde bilişim bölümü web programcılığı dalında okutulan internet programcılığı dersine yardımcı olması için tasarlanmıştır. İletişim için iletisim@phpdefteri.com
Apache PHP MySQL PhpMyAdmin EasyPHP Xampp AppServ Wamp W3School

www.phpdefteri.com © 2010