Jump to content

PHP 'de dosya kullanarak anket yapımı


Recommended Posts

Bu dökümanda size artık internet üzerindeki web sitelerininin olmazsa olmazlarından biri anket ler üzerinde basit uygulamalar yapmayı göstermeye çalışacam. Eskiden buna benzer dökümanları okurken hep '' bu uygulamayı geliştiirmek sizin elinizde '' satırlarını okurken çok kızardım. Fakat ne yazıkki bende size en basit yoluyla anlatıcam ve bu uygulamayı geliştirmek sizin elinizde olucak

Zira bir uygulama büyüdükçe ve geliştikçe daha karmaşık ve kalıpsal bir hale gelir. Esnekliği dahada azalır. Fazla lakırdı yapmadan konuya girelim.

Normalde gelişmiş bir anket yapmak istesem mysql kullanırdım fakat bu işe yeni başlayan ve mysql ortamında sıkıntı çeken yada bulamayan kişiler için daha basit bir yöntem olan dosya yöntemi ni kullanmayı tercih ettim.

Öncelikle anket imizin şeklini ve şemalini belirleyelim ;

<form method=''get'' action=''anket.php''>
<table width=''100%'' border=''0''>
<tr> <td>Anket Sorusu </td> </tr>
<tr> <td> <input type=''radio'' name=''secim'' value=''1''> Secim 1 %<? echo $sonuc1; ?></td> </tr>
<tr> <td> <input type=''radio'' name=''secim'' value=''2''> Secim 2 %<? echo $sonuc2; ?></td> </tr>
<tr> <td> <input type=''radio'' name=''secim'' value=''3''> Secim 3 %<? echo $sonuc3; ?></td> </tr>
<tr> <td> <input type=''submit'' name=''olay'' value=''Gönder''> </td> </tr>
</table>
</form> [/CODE]

Yukarıdaki kodları notepad yada pico gibi bir editore kopyaladıktan sonra '' anket.php '' adıyla kaydedin. Normal olarak bu dosyayı şuanda açarsanız. Çok basit bir anket formu göreceksiniz. Ancak şuan için seçim gönderme ve % den sonraki anket sonuçlarını gösteren bölümler hazır diil şimdi o bölümleri hazırlayalım.

İlk olarak hazırladığım anket.php dosyasının bizi ilgilendiren satırlarını inceleyelim diğer satırlar zaten html kodları ile oluşturmuş tablolar.

[CODE]<form method=''get'' action=''anket.php''>[/CODE]

bu satırda get metodu ile anket.php dosyasına formun içeriğini yolluyoruz.

[CODE]<? echo $sonuc1; ?> , <? echo $sonuc2; ?> , <? echo $sonuc3; ?>[/CODE]

bu satırlarda Secimlerin % değerlerini ekrana getiriyoz. % değerlerini; echo komutnu kullanarak sonuc değişkenlerini ekrana bastırarak gösteriyoruz.

<input type=''submit'' name=''olay'' value=''Gönder''>

bu satırda olay adında bir değişken olduğunu söylüyoruz ve bu değişkenin değeri Gönder oluyor.

Şimdi anket.php dosyasının beynini oluşturalım. Öle bir sistem yapalımki. anket.php dosyası normal bir şekilde açıldığında bize sonuçları göstersin, anket.php dosyasına olay adında ve Gönder değerinde bir değişken gönderdiğimizde gerekli işlemleri yapsın.

İlk olarak anketp.php dosyasını açtığımızda bize sonuçları gösteren kodu yapalım

[CODE]<?
$dosya = ''sonuc.php'';
if(!file_exists($dosya)) {
$ilk=fopen($dosya,'w') or die(''Dosya açılamıyor!!!'');
fwrite($ilk,''0n0n0n0n'');
fclose($ilk);
};
$tut = fopen($dosya,'r') or die(''Dosya açılamıyor!!!'');
$toplam = 0;
for($i=0;$i<=3;$i++) {
$satir[$i]=trim(fgets($tut,150));
$toplam += $satir[$i];
}
$sonuc1 = ($satir[0]/$toplam*100);
$sonuc1 = number_format($sonuc1);
$sonuc2 = ($satir[1]/$toplam*100);
$sonuc2 = number_format($sonuc2);
$sonuc3 = ($satir[2]/$toplam*100);
$sonuc3 = number_format($sonuc3);
?> [/CODE]

Bu kodları anket.php dosyasının en üstüne ekleyip kaydedin. Dikkat edin az önce oluşturduğunuz dosyanın üst satırlarına ekliyeceksiniz . şimdi anket.php dosyasını açıp bakalım.

Gördüğünüz gibi bütün sonuçlar %0 olarak çıktı şimdi az önce eklediğimiz kodları inceleyelim.

$dosya = ''sonuc.php''; bu satırda dosya adında bir değişken oluşturduk. Bu değişkenin değeri sonuc.php oldu. sonuc.php aynı zamanda anket sonuçlarını kaydının tutulacağı dosyazımız oluyor.

if(!file_exists($dosya)) { bu satırda php nin if fonksiyonu ile $dosya değişkeni nin değeri olan sonuc.php adında bir dosya olup olmadığını kontrol ettik. Eğer böle bir dosya yok sa { << nin içindeki leri uygula dedik.

$ilk=fopen($dosya,'w') or die(''Dosya açılamıyor!!!''); bu satırda $ilk adında bir değişken yarattık ve bu değişkenin değeri php nin fopen fonksiyonu nu kullanarak $dosya adında ( değeri sonuc.php idi ) bir dosyayı 'w' modunda yani yazılır modda açtık. Eğer açılmasaydı ( muhtemelen *nix sistemlerde dizinin chmod larından kaynaklanır bize or die ile dosyanın açılamadığını söliyecekti.

fwrite($ilk,''0n0n0n0n''); bu satır ile php nin fwrite komutnu kullanarak $ilk değişkenin içeriği olan sonuc.php dosyasına 0n lerden 4 tane satır yolladık. Aslında 3 tane yeter ama fazla satır göz çıkarmaz Şaka bir yana ilerde lazım olacak size.

fclose($ilk);

}; bu iki satır ilede dosyanın kullanımını bıraktık. Eğer php de bir dosyayı kullandıktan sonra fclose ile kapatmassanız başkaları dosyayı açamayabilir ve hata oluşabilir. Son olarakta sonuc.php dosyasının olmadığını varsayan if denetimini } <<< ile bitirdik.

Eğer sonuc.php dosyası olsaydı bu satırların hiç biri kotarılmayacaktı. ( kotarılmak << bakınız sözlük :) )

$tut = fopen($dosya,'r') or die(''Dosya açılamıyor!!!''); bu satır ile $tut adında bir değişken oluşturduk. phpnin fopen fonksiyonu ile $dosya değişkenini ( değeri sonuc.php idi ) açtık. Araken bu sefer okuma tarzı olan r yi kullandık. Eğer açılmasaydı or die ile belirttiğimiz açılmıyor yazısını ekrana çıkartıcaktı.

$toplam = 0; bu satırı açıklamama gerek varmı bilmiyom ama söliyim yinede $toplam değişkenine 0 değerini verdik

for($i=0;$i<=3;$i++) { burada php nin yineleme fonksiyonlarından for ile i değişkeni oluşturduk ve değeri 0 oldu. i değişkeninin değeri 3 olana kadar bir artırdık. Bu sayede dosyamızdaki 3 satırıda okuması için for fonksiyonuna komut vermiş olduk.

$satir[$i]=trim(fgets($tut,150)); bu satır ile fgets fonksiyonu yani dosyadan satır okuma fonksiyonunu çalıştırdık. for döngüsü i değerini 3 olana kadar çalıştıracağı için 3 satır bilgi okuyacak. trim ilede satır boşluklarını kestik.

$toplam += $satir[$i];

} bu satırlar ilede toplam değişkenine her satırı toplamasını söledik. Sonrada } ile for döngüsünü bitirdik.

$sonuc1 = ($satir[0]/$toplam*100); bu satır ile sonuc1 değişkenin değerini; belirtilen satırı satırlardaki toplam değerlerin 100 ile çarpımına böldük. Matematikten biraz anlıyanlar için bunun % bulunumunda kullanıldığını anlıyacak.

$sonuc1 = number_format($sonuc1); bu satır ile sonuc1 değişkeninin formatını düzenledik. Normalde bu satır olmasaydı ondalıklı sayılar çıkardı.

sonuc2 ve sonuc3 değişkenleri sonuc1 değişkeni ile aynı mantıkla çalışır.

buraya kadar herşeyi anladıysanız sorun yok. Eğer anlamadıysanız dikkatlice bir daha okuyun ben zamanında çok okudum bu tür şeyleri

Şimdi anketimize nasıl secim göndereceğimizi anlatayım.

[CODE]<?
if($olay==''Gönder'') {
$dosya = ''sonuc.php'';
if(@$secim==''1'') {
$satir[0]++;
$bilgi=($satir[0].''n''.$satir[1].''n''.$satir[2].''n'');
$ilk=fopen($dosya,'w') or die(''dosya açılamıyor!!!'');
fwrite($ilk,$bilgi);
fclose($ilk);
}
if(@$secim==''2'') {
$satir[1]++;
$bilgi=($satir[0].''n''.$satir[1].''n''.$satir[2].''n'');
$ilk=fopen($dosya,'w') or die(''dosya açılamıyor!!!'');
fwrite($ilk,$bilgi);
fclose($ilk);
}
if(@$secim==''3'') {
$satir[2]++;
$bilgi=($satir[0].''n''.$satir[1].''n''.$satir[2].''n'');
$ilk=fopen($dosya,'w') or die(''dosya açılamıyor!!!'');
fwrite($ilk,$bilgi);
fclose($ilk);
}
}
?> [/CODE]

Yukarıdaki kodları az önce kopyaladığınız kodların altına kopyalayın. Sayfanın en altında tüm kodları copy paste ile anket.php ye kopyalarak ta halledebilirsiniz. Zira bunlar anket.php ye ekliyeceğimiz son kodlar. Şimdi kodları bir inceleyelim

if($olay==''Gönder'') { bu satırda anket.php dosyasına olay adında ve değeri Gönder olan bir değişken olursa { << in içindekini yap anlamına gelen if fonksiyonunu yazdık.

$dosya = ''sonuc.php''; bu satırda $dosya değişkenin değerini sonuc.php yaptık. ( sonuc.php anket sonuçlarının tutulduğu dosya idi. )

if(@$secim==''1'') { bu satır ile eğer $secim değişkeninin değeri 1 ise { << in içindekileri yap dedik. Bu arada @ işareti dikkatinizi çekmiş olabilir. Bu sayede eğer secim1 değişkenin bir değeri yoksa php nin hata vermemesini sağladık.

$satir[0]++; bu satır ile secim1 in temsil ettiği dosyamızdaki 0. satıra ( php de ilk dize 0 ile başlar 1,2,3 diye devam eder ) yani anketimizin ilk seçimine verilen oyu 1 artırır.

$bilgi=($satir[0].''n''.$satir[1].''n''.$satir[2].''n''); bu satır ile bilgi adında bir değişken yarattık. Burada mantık çok önemli dosyaya kaydederken. Önce satır satır okuduk sonrada yine satır satır işledik. Sadece istenilen satırın değerini 1 artırdık. Php nin satırları anlıyabilmesi içinde; n karakterlerini kullandık.

Yazının sonunda anket.php nin mantığı üzerinde kısa bir açıklama yapıcam.

$ilk=fopen($dosya,'w') or die(''dosya açılamıyor!!!''); bu satır daha öncede sölediğim gibi fopen fonksiyonu ile w ( yazma ) modunda bir sonuc.php dosyasını açtı.

fwrite($ilk,$bilgi);

fclose($ilk);

} bu satırlar ile; fwrite ile dosyaya yazdık. fclose ile dosyayı kapattık. } << ilede secim1 in işlemlerini bitirdik.

Bu anlattıklarım secim2 ve secim3 içinde geçerli.

anket.php dosyasının mantığı hakkında kısa bir açıklama :

- anket.php dosyası normal bir şekilde açıldığı zaman sonuc.php dosyasından satır satır değerleri okur ve % sini hesaplayarak gerekli değişkenlere değerleri atar. Sonra echo komutu ile bu değerleri ekrana bastırır.

- anket.php dosyasına Gönder değerinde bir olay değişkeni gönderirsek secim değerinin sonuc.php deki satırında bulunan değeri 1 artırır.

- sonuc.php dosyasına yeni değeri atarken önce dosya satır satır okunur. Sonra istenilen satırın değeri 1 artırılır ve dosyaya satır satır tekrar yazılır.

- anket.php dosyası belirtilen satırı değiştirmez. Sadece önce okur sonra yeni şekliyle tekrar yazar.

- *nix sistemlerinde sonuc.php dosyasnın bulunduğu dizin 770 chmod unda olmalıdır.

anket.php dosyasının tüm kodları aşağıdadır.

[CODE]<?
$dosya = ''sonuc.php'';
if(!file_exists($dosya)) {
$ilk=fopen($dosya,'w') or die(''Dosya açılamıyor!!!'');
fwrite($ilk,''0n0n0n0n'');
fclose($ilk);
};
$tut = fopen($dosya,'r') or die(''Dosya açılamıyor!!!'');
$toplam = 0;
for($i=0;$i<=3;$i++) {
$satir[$i]=trim(fgets($tut,150));
$toplam += $satir[$i];
}
$sonuc1 = ($satir[0]/$toplam*100);
$sonuc1 = number_format($sonuc1);
$sonuc2 = ($satir[1]/$toplam*100);
$sonuc2 = number_format($sonuc2);
$sonuc3 = ($satir[2]/$toplam*100);
$sonuc3 = number_format($sonuc3);
?>
<?
if($olay==''Gönder'') {
$dosya = ''sonuc.php'';
if(@$secim==''1'') {
$satir[0]++;
$bilgi=($satir[0].''n''.$satir[1].''n''.$satir[2].''n'');
$ilk=fopen($dosya,'w') or die(''dosya açılamıyor!!!'');
fwrite($ilk,$bilgi);
fclose($ilk);
}
if(@$secim==''2'') {
$satir[1]++;
$bilgi=($satir[0].''n''.$satir[1].''n''.$satir[2].''n'');
$ilk=fopen($dosya,'w') or die(''dosya açılamıyor!!!'');
fwrite($ilk,$bilgi);
fclose($ilk);
}
if(@$secim==''3'') {
$satir[2]++;
$bilgi=($satir[0].''n''.$satir[1].''n''.$satir[2].''n'');
$ilk=fopen($dosya,'w') or die(''dosya açılamıyor!!!'');
fwrite($ilk,$bilgi);
fclose($ilk);
}
}
?>[/CODE]

[CODE]<form method=''get'' action=''anket.php''>
<table width=''100%'' border=''0''>
<tr> <td>Anket Sorusu </td> </tr>
<tr> <td> <input type=''radio'' name=''secim'' value=''1''> Secim 1 %<? echo $sonuc1; ?></td> </tr>
<tr> <td> <input type=''radio'' name=''secim'' value=''2''> Secim 2 %<? echo $sonuc2; ?></td> </tr>
<tr> <td> <input type=''radio'' name=''secim'' value=''3''> Secim 3 %<? echo $sonuc3; ?></td> </tr>
<tr> <td> <input type=''submit'' name=''olay'' value=''Gönder''> </td> </tr>
</table>
</form> [/CODE]

Yapmış olduğumuz bu anketi tablolarınızda kullanabilirsiniz böylece istediğiniz sayfalara ekliyebilirsiniz. Anket sonuc dosyalarını değiştirebilir ve birden fazla ankette kullanabilirsiniz. Yada anket sonuçlarını başka bir sayfada gösterebillirsiniz.

Link to comment
Share on other sites

  • 3 hafta sonra ...

Archived

This topic is now archived and is closed to further replies.

  • Recently Browsing   0 members

    No registered users viewing this page.

×
×
  • Create New...