PHP ile hızlı basit anket sistemi
Murat Süzgün 30 Ocak 2010 tarihinde yazdı.
Etiketler: , , , , ,

Geçenlerde hazırladığımız bir web sayfasına çok acil olarak bir anket sistemi eklememiz gerekti. Hazır anket sistemi bulup eklemenin yenisi yazmaktan daha çok vakit alacağını düşündüğümden 30 dk da bir anket sistemi oluşturdum. Bunuda sizinle paylaşmak isterim.

PHP programlaya yeni başlayanlar örnek olarak ta kullanabilir. Zira bahsettiğim sistem 4 seçenekli basit bir anket sistemidir.

Öncelikle veritabanı tablolarımızı oluşturmakla işe başlıyoruz.

Veritabanı Tabloları

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
CREATE TABLE `anket` (
  `id` int(11) NOT NULL auto_increment,
  `anket_metni` varchar(255) NOT NULL,
  `soru1` varchar(100) NOT NULL,
  `soru2` varchar(100) NOT NULL,
  `soru3` varchar(100) NOT NULL,
  `soru4` varchar(100) NOT NULL,
  `tarih` date NOT NULL,
  PRIMARY KEY  (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=7 DEFAULT CHARSET=utf8 AUTO_INCREMENT=7 ;
 
 
CREATE TABLE `anket_secenek` (
  `id` int(11) NOT NULL auto_increment,
  `anket_id` int(11) NOT NULL,
  `secenek` enum('1','2','3','4') NOT NULL,
  PRIMARY KEY  (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=10 DEFAULT CHARSET=utf8 AUTO_INCREMENT=10 ;

anket ve anket_secenek adında iki tane tablomuzu yukarıdaki kodları yazarak oluşturuyoruz. Bu kodları direk phpmyadminde sql komutu olarak çalıştırısanız çalıştırdığınız veritabanı içerisinde oluşturulurlar.

Örneğimizi anlatmadan önce veritabanı bağlantısını yaptığınızı farzediyorum.

1
2
mysql_connect("localhost","kullanici_adi","ÅŸifre");
mysql_select_db("veritabani_adi");

Yukarıdaki kodda kullanıcı adı şifre ve veritabanı adı yazan yere kendi veritabanı ayarlarınızı girmeniz gerekmektedir.

Kayıt Formu

Bu tablolardan ilki anket metnini ve en fazla 4 tane olan anket seçeneklerini tutacaktır. Diğer tablomuz ise verilen cevapları tutmamıza yarayacaktır. Şimdi bu tablolarımıza veri girişi ve listeleme yapacak php kodlarımızı yazmaya başlayalım. Öncelikle anket tablomuza kayıt yapabilmek için bir kayıt formu hazırlayalım.

anket.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
<form name="anket" method="post" action="<?=$_SERVER['PHP_SELF'];?>">
<table width="650" border="0" cellspacing="0" cellpadding="0">
  <tr>
    <td width="110" align="left" valign="top">Anket Metni</td>
    <td width="540">
    <textarea name="anket_metni" id="anket_metni" cols="50" rows="5"></textarea></td>
  </tr>
  <tr>
    <td>1. Seçenek</td>
    <td><input name="soru1" type="text" id="soru1" size="90" maxlength="100"></td>
  </tr>
  <tr>
    <td>2. Seçenek</td>
    <td><input name="soru2" type="text" id="soru2" size="90" maxlength="100"></td>
  </tr>
  <tr>
    <td>3. Seçenek</td>
    <td><input name="soru3" type="text" id="soru3" size="90" maxlength="100"></td>
  </tr>
  <tr>
    <td>4. Seçenek</td>
    <td><input name="soru4" type="text" id="soru4" size="90" maxlength="100"></td>
  </tr>
  <tr>
    <td colspan="2" align="center">
     <input type="submit" name="anket_btn" id="anket_btn" value="Kaydet">
    </td>
  </tr>
</table>
</form>

Veritabanı İşlemleri

Yukarıdaki kodu anket.php isimli sayfamıza kaydediyoruz. Şimdi formdan gönderilen verileri veritabanına kaydeden kodumuzu yazalım.

anket.php

1
2
3
4
5
6
7
8
9
10
11
12
13
<?php
if ($_POST['anket_btn'] && $_POST['anket_metni']!=""){
	$sonuc=mysql_query("INSERT INTO anket (anket_metni,soru1,soru2,soru3,soru4)
		VALUES ('".$_POST['anket_metni']."',
		'".$_POST['soru1']."',
		'".$_POST['soru2']."',
		'".$_POST['soru3']."',
		'".$_POST['soru4']."')");
	if($sonuc) $mesaj="Anketiniz başarıyla eklenmiştir.";
	else $mesaj="Anket oluÅŸturulurken bir hata oluÅŸtu!";
 
}
?>

Formdan verilerin gönderilip gönderilmediğini $_POST['anket_btn'] değişkeniyle kontrol ediyoruz ve anket metni boş kayıt gönderilmesin diye de $_POST['anket_metni'] anket metnimizin boş olup olmadığını kontrol ediyoruz. Daha sonra formdan gönderilen verilerimizi tablomuza kaydeden sql cümlesini yazıyorum ve sonuca gör mesaj adlı değişkenime durum hakkında bilgi veriyorum ki daha sonra kullanabileyim.

Kayıt işlemimizide yaptıktan sonra silme işlemimizi de ekleyerek kayıtlarımızı listeleme işlemine geçelim. Listeleme yapmadan önce silme komutunu yazmalıyız ki listemiz güncel olsun. Daha doğrusu listeleme işlemimizi kayıt ile ilgili diğer işlemlerden daima sonra yapmalıyız aksi taktirde sildiğiniz veya eklediğiniz kayıt o anki sayfada gözükmeyebilir.

anket.php

1
2
3
4
5
<?php
if($_GET['sil_id']){
	mysql_query("DELETE FROM anket WHERE id=".$_GET['sil_id']);
}
?>

Evet silme kodumuz bu kadar silme işlemi için listeleme tablomuzdaki her satıra sil şeklinde bir link yerleştireceğim ve get metoduyla sil_id değişkeniyle silinecek kaydın id (kimlik) bilgisini gönreceğim.

Listemizi oluşturalım

anket.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
<table width="650" border="1" cellspacing="1" cellpadding="4">
<thead>
<tr>
  <td colspan="7">Anket Listesi</td></tr>
</thead>
  <tr>
    <th width="3%"> No</th>
    <th width="40%">Anket </th>
    <th width="12%">1. </th>
    <th width="12%">2. </th>
    <th width="13%">3. </th>
    <th width="13%">4. </th>
    <th width="7%">İşlem</th>
  </tr>
<?php 
$sorgu=mysql_query("SELECT * FROM anket");
while($veri=mysql_fetch_assoc($sorgu)){
 $icerik='
  <tr>
    <td>'.$veri['id'].'&nbsp;</td>
    <td>'.$veri['anket_metni'].'&nbsp;</td>
    <td align="center">'.$veri['soru1'].'&nbsp;</td>
    <td align="center">'.$veri['soru2'].'&nbsp;</td>
    <td align="center">'.$veri['soru3'].'&nbsp;</td>
    <td align="center">'.$veri['soru4'].'&nbsp;</td>
    <td><a href="anket.php?sil_id='.$veri['id'].'">sil</a></td>
 </tr>';		
print $icerik;
}
?>
</table>

Böylece anketimizin yönetim işlemlerini bitirişim bulunuyoruz. Son yaptığımız eklemelerle kaydettiğimiz anketlerimizi listeleyerek görüntüleme ve istediğimiz anketi silme işlemlerini yapmış olduk. Buraka kadar yaptıklarımızla anket ekleyebilir, görüntüleyebilir, silebiliriz. Düzeltmeyi bilerek koymadım çünkü bu yaptığımız anket sistemi en basit ve hızlı olması gerekiyor.

Son eklediğimiz kodları inceleyecek olursak tablomuzun başlık satırını oluşturduktan sonra veritabanımızdan çektiğimiz verileri listeleyeceğimiz bir satır oluşturarak bunu while döngüsü içerisinde kayıt listeleme sona erene kadar tekrar tekrar oluşturulmasını sağladık. Son sütunda bulunan sil linki ile sil_id değişkenine o anki listelenen kaydın id numarasını atadık ki daha önceden eklemiş olduğumuz sil komutumuz bu id ye göre veritabanından silme işlemini gerçekleştirsin.

Kullanıcı bölümünü oluşturuyoruz

Sıra anketimizin sitede yayınlanacak kısmını hazırlayama geldi. Öncelikle bundan sonra yazacağımız kodları index.php yada sizin belirlediğiniz kullanıcıların erişebileceği bir sayfada olmasında fayda var. Unutmayın ki anket.php adında bir dosyamız var zaten yeniden aynı isimde bir dosya oluşturmayın yada anketimizin yönetim kısmını farklı bir klasör içerisine kaldırabilirsiniz.

index.php

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
@session_start();
 
<?php
// veritabanı bağlantıları buraya yazılacak mysql_connect ve mysql_select_db
 
if($_POST['anket_btn'] && $_SESSION['anket']!='Gönderdi'){
  mysql_query("INSERT INTO anket_secenek (anket_id,secenek) 
                      VALUES('".$_POST['anket_id']."','".$_POST['secenek']."')");
  $_SESSION['anket']='Gönderdi';
  $uyari='<p>Anketimize katıldığınız için teşekkür ederiz.</p>
          <p><a href="index.php?anket=sonuc">Anketin sonucu için tıklayınız</a></p>';
} else if ($_SESSION['anket']=='Gönderdi'){ 
  $uyari='<p>Daha önceden cevaplandırdığınız için cevabınızı kayıt edemiyoruz. <p/>
            <p> <a href="index.php?anket=sonuc">Anketin sonucu için tıklayınız</a></p>';
}
?>

Sayfamızın en tepesine eklediğimiz bu kod daha önceden de yaptığımız gibi veritabanı ile ilgili işlemleri gerçekleştiriyor. Bir kullanıcı istediği seçeneği işaretledikten sonra gönder tuşuna bastığında ilgili seçeneğin kayıt edilmesini sağlıyor. Konumuzun başında belirttiğim üzere burada verilen cevaplar anket_secenek tablosuna kayıt ediliyor.

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
<?php
$sorgu=mysql_query("SELECT * FROM anket ORDER BY id DESC");
$veri=mysql_fetch_assoc();
?> 
<div class="baslik">anket</div>
<div class="ozet">
<?php 
if($_GET['anket']=='sonuc'){
  print '<p>'.$veri['anket_metni'].'</p>';
  $sorgu=mysql_query("SELECT * FROM anket_secenek WHERE anket_id=".$veri['id']);
  $toplam=mysql_num_rows($sorgu);
  for($i=1;$i<5;$i++){
    $sorgu=mysql_query("SELECT * FROM anket_secenek 
                                  WHERE anket_id=".$veri['id']." and secenek='".$i."'");
    $sonuc=mysql_num_rows($sorgu);
    print '<div id="anket_secenek">'.$veri['soru'.$i].' ('.$sonuc.') oy</div>';
    print '<div id="secenek'.$i.'" style="width:'.((100*$sonuc)/$toplam).'px" ></div>';
  }
}else if ($uyari) {
  print $uyari;
}else{?>
  <p><?= $veri['anket_metni'];?></p> 
  <form id="anket" name="anket" method="POST" action="index.php">
  <input type="radio" name="secenek" id="secenek" value="1" />
  <label><?= $veri['soru1'];?></label>
  <br />
  <input type="radio" name="secenek" id="secenek" value="2" />
  <label><?= $veri['soru2'];?></label>
  <br />
  <input type="radio" name="secenek" id="secenek" value="3" />
  <label><?= $veri['soru3'];?></label>
  <br />
  <input type="radio" name="secenek" id="secenek" value="4" />
  <label><?= $veri['soru4'];?></label>
  <input type="hidden" name="anket_id" value="<?=$veri['id'];?>" />
  <br />
  <input name="anket_btn" id="oyla" type="submit" value="Oyla" />
  </form>
<?php } ?>
</div>

Böylece anket uygulamamızı bitirmiş bulunuyoruz, bu kod parçasını istediğiniz sayfaya ekleyebilirsiniz, dikkat etmeniz gereken sayfa içerisindeki linklerdir. Birde bu uygulama için oluşturmuş olduğum stil kodlarını index.php sayfasının en başına yada harici bir stil sayfasına eklerseniz anket sonuçlarının grafiksek sonuçları görüntülenecektir.

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
<style>
a{
	color:#606060;
	font-family:Tahoma, Geneva, sans-serif;
	font-size:11px;
	text-decoration:none;
}
#secenek1{
	margin-left:75px;
	background-color:#00F;
	height:5px;
	margin-top:5px;
}
#secenek2{
	margin-left:75px;
	background-color:#0F0;
	height:5px;	
	margin-top:5px;
 
}
#secenek3{
	margin-left:75px;
	background-color:#F00;
	height:5px;
	margin-top:5px;
 
}
#secenek4{
	margin-left:75px;
	background-color:#FF0;
	height:5px;
	margin-top:5px;
 
}
#anket_secenek{ 
	margin-top:5px;
	margin-left:75px;
}
</style>

Buraya kadar yaptıklarımızı toparlarsak index.php ve anket.php dosyalarını aşağıda birleştirilmiş halde bulabilirsiniz. Dosyaları aldıktan sonra veritabanı ile ilgili ayarlamaları yapmayı unutmayın.

anket.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
80
81
82
83
84
<?php 
mysql_connect("localhost","root","3141592654");
mysql_select_db("rclient");
?>
 
<form name="anket" method="post" action="<?=$_SERVER['PHP_SELF'];?>">
<table width="650" border="0" cellspacing="0" cellpadding="0">
  <tr>
    <td width="110" align="left" valign="top">Anket Metni</td>
    <td width="540">
    <textarea name="anket_metni" id="anket_metni" cols="50" rows="5"></textarea>
   </td>
  </tr>
  <tr>
    <td>1. Se&ccedil;enek</td>
    <td><input name="soru1" type="text" id="soru1" size="90" maxlength="100"></td>
  </tr>
  <tr>
    <td>2. Se&ccedil;enek</td>
    <td><input name="soru2" type="text" id="soru2" size="90" maxlength="100"></td>
  </tr>
  <tr>
    <td>3. Se&ccedil;enek</td>
    <td><input name="soru3" type="text" id="soru3" size="90" maxlength="100"></td>
  </tr>
  <tr>
    <td>4. Se&ccedil;enek</td>
    <td><input name="soru4" type="text" id="soru4" size="90" maxlength="100"></td>
  </tr>
  <tr>
    <td colspan="2" align="center">
   <input type="submit" name="anket_btn" id="anket_btn" value="Kaydet"></td>
  </tr>
</table>
</form>
<?php
if ($_POST['anket_btn'] && $_POST['anket_metni']!=""){
	$sonuc=mysql_query("INSERT INTO anket (anket_metni,soru1,soru2,soru3,soru4)
		                  VALUES ('".$_POST['anket_metni']."',
				     '".$_POST['soru1']."',
				     '".$_POST['soru2']."',
			                  '".$_POST['soru3']."',
				     '".$_POST['soru4']."')");
	if($sonuc) $mesaj="Anketiniz başarıyla eklenmiştir.";
	else $mesaj="Anket oluÅŸturulurken bir hata oluÅŸtu!";
 
}
 
if($_GET['sil_id']){
	mysql_query("DELETE FROM anket WHERE id=".$_GET['sil_id']);
}
 
?>
<table width="650" border="1" cellspacing="1" cellpadding="4">
<thead>
<tr>
  <td colspan="7">Anket Listesi</td></tr>
</thead>
  <tr>
    <th width="3%"> No</th>
    <th width="40%">Anket </th>
    <th width="12%">1. </th>
    <th width="12%">2. </th>
    <th width="13%">3. </th>
    <th width="13%">4. </th>
    <th width="7%">İşlem</th>
  </tr>
<?php 
$sorgu=mysql_query("SELECT * FROM anket");
while($veri=mysql_fetch_assoc($sorgu)){
 $icerik='
  <tr>
    <td>'.$veri['id'].'&nbsp;</td>
    <td>'.$veri['anket_metni'].'&nbsp;</td>
    <td align="center">'.$veri['soru1'].'&nbsp;</td>
    <td align="center">'.$veri['soru2'].'&nbsp;</td>
    <td align="center">'.$veri['soru3'].'&nbsp;</td>
    <td align="center">'.$veri['soru4'].'&nbsp;</td>
    <td><a href="anket.php?sil_id='.$veri['id'].'">sil</a></td>
 </tr>';		
print $icerik;
}
?>
</table>

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
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
<style>
 a{
	color:#606060;
	font-family:Tahoma, Geneva, sans-serif;
	font-size:11px;
	text-decoration:none;
}
#secenek1{
	margin-left:75px;
	background-color:#00F;
	height:5px;
	margin-top:5px;
}
#secenek2{
	margin-left:75px;
	background-color:#0F0;
	height:5px;	
	margin-top:5px;
 
}
#secenek3{
	margin-left:75px;
	background-color:#F00;
	height:5px;
	margin-top:5px;
 
}
#secenek4{
	margin-left:75px;
	background-color:#FF0;
	height:5px;
	margin-top:5px;
 
}
#anket_secenek{ 
	margin-top:5px;
	margin-left:75px;
}
</style>
<?php
@session_start();
 
mysql_connect("localhost","root","ÅŸifre");
mysql_select_db("veritabani_adi");
 
 
if($_POST['anket_btn'] && $_SESSION['anket']!='Gönderdi'){
  mysql_query("INSERT INTO anket_secenek (anket_id,secenek) 
                      VALUES('".$_POST['anket_id']."','".$_POST['secenek']."')");
  $_SESSION['anket']='Gönderdi';
  $uyari='<p>Anketimize katıldığınız için teşekkür ederiz.</p>
          <p><a href="index.php?anket=sonuc">Anketin sonucu için tıklayınız</a></p>';
} else if ($_SESSION['anket']=='Gönderdi'){ 
  $uyari='<p>Daha önceden cevaplandırdığınız için cevabınızı kayıt edemiyoruz. <p/>
            <p><a href="index.php?anket=sonuc">Anketin sonucu için tıklayınız</a></p>';
}
 
$sorgu=mysql_query("SELECT * FROM anket ORDER BY id DESC");
$veri=mysql_fetch_assoc($sorgu);
?> 
<div class="baslik">anket</div>
<div class="ozet">
<?php 
if($_GET['anket']=='sonuc'){
  print '<p>'.$veri['anket_metni'].'</p>';
  $sorgu=mysql_query("SELECT * FROM anket_secenek WHERE anket_id=".$veri['id']);
  $toplam=mysql_num_rows($sorgu);
  for($i=1;$i<5;$i++){
    $sorgu=mysql_query("SELECT * FROM anket_secenek 
                                 WHERE anket_id=".$veri['id']." and secenek='".$i."'");
    $sonuc=mysql_num_rows($sorgu);
    print '<div id="anket_secenek">'.$veri['soru'.$i].' ('.$sonuc.') oy</div>';
    print '<div id="secenek'.$i.'" style="width:'.((100*$sonuc)/$toplam).'px" ></div>';
  }
}else if ($uyari) {
  print $uyari;
}else{?>
  <p><?= $veri['anket_metni'];?></p> 
  <form id="anket" name="anket" method="POST" action="index.php">
  <input type="radio" name="secenek" id="secenek" value="1" />
  <label><?= $veri['soru1'];?></label>
  <br />
  <input type="radio" name="secenek" id="secenek" value="2" />
  <label><?= $veri['soru2'];?></label>
  <br />
  <input type="radio" name="secenek" id="secenek" value="3" />
  <label><?= $veri['soru3'];?></label>
  <br />
  <input type="radio" name="secenek" id="secenek" value="4" />
  <label><?= $veri['soru4'];?></label>
  <input type="hidden" name="anket_id" value="<?=$veri['id'];?>" />
  <br />
  <input name="anket_btn" id="oyla" type="submit" value="Oyla" />
  </form>
<?php } ?>
</div>

Bu yazı Cumartesi, 30 Ocak 2010, 18:36 tarihinde EĞİTİM, PROGRAMLAMA, İNTERNET kategorisi altında yayınlandı.
Bu yazıya yapılacak yorumlardan haberdar olmak için RSS 2.0 beslemesini kullanabilirsiniz.
Yorum yapabilirsiniz, veya kendi sitenizden geri izleme yapabilirsiniz.

“PHP ile hızlı basit anket sistemi” için 7 Yorum

  1. yasemin diyor ki:

    anlatımız için tşkler.fakat anket kodları hata veriyor.mysql ile nasıl yapıldıgını videolu anlatsanız seviniriz.

  2. Murat Süzgün diyor ki:

    index.php ve anket.php doyalarının tümü anlatımın sonunda verilmiştir üstteki kodlar anlatım için. Nasıl bir hata aldığınızı yazarsanız yardımcı olabilirim. Veritabanı ayarlarnını kendinize göre ayarlamalısınız başlangıçta.

  3. yasemin diyor ki:

    Warning: mysql_num_rows() expects parameter 1 to be resource, boolean given in C:\xampp\htdocs\aknet\index.php on line 79

    () oy
    buna benzer hatalar var ne yapmalıyım

  4. yasemin diyor ki:

    Warning: Division by zero in C:\xampp\htdocs\aknet\index.php on line 81

  5. yasemin diyor ki:

    sizden ricam bir aanket hazırlmak istiyorum bir türlü yapamadım.bana yardımcı olrsanız sevinirim

  6. Murat Süzgün diyor ki:

    kodlarda problem yok sadece db de kayıtlı oy bulunmadığından sıfıra bölünme hatası vermiÅŸ. index.php’nin (yukarıdaki) 67. satırında bulunan
    $toplam=mysql_num_rows($sorgu); satırını şu şekilde değiştirin problem kalkar.

    if (mysql_num_rows($sorgu)>0){
    $toplam=mysql_num_rows($sorgu);
    }else{
    $toplam=1;
    }

  7. aziz bayraktar diyor ki:

    Baba cok tsk ederim bende mesaiden cıkmıs vahım bır halde pc basına otururken 4 sırada cıkdın ıyıkı ugrasmadan sayende 5 dk anket fena deıl

    ıyı calısmalar

Yorum yapın