Admin Kurucu / Root
Mesaj Sayısı : 552 Kayıt tarihi : 09/07/10 Yaş : 41 Nerden : Bursa
| Konu: Php de Alışveriş Sitesi C.tesi Eyl. 24, 2011 7:38 am | |
| Php de Alışveriş Sitesi 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 ek***se siz kendinize göre daha genişini tasarlayın [Linkleri görebilmek için üye olun veya giriş yapı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`,`sifr e`,`onay`) VALUES("Gökçe","ÇİFTÇİ","gciftci","gciftci@gmail.c om",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_strin g($_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> </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; ?> | |
|