|
|
| |||||||
![]() |
| | Seçenekler |
|
#1
| ||||||
| ||||||
CF MX ile Kullanıcı Anketi OluşturmakCF MX ile Kullanıcı Anketi Oluşturmak İnternette dolaşırken bir çok sayfada görürüz, bir çok konuda ziyaretçilerin belli konular hakkındaki görüşlerini yansıtan oylamalar vardır. İşte bu uygulamada da bu tarz bir anket çalışmasının nasıl hazırlandığını anlatacağız. Uygulamamız bittiğinde aşağıda gördüğünüz tarzda bir anket uygulaması hazırlamış olacağız. 1- Öncelikle uygulamamızda kullanacağımız verileri tutacağımız veri tabanını oluşturalım. Ben kendim uygulamayı hazırlarken veritabanı olarak Mysql'i kullandım. Ancak MS Access versiyonunuda kaynak kodlara ekledim. Veritabanımızındaki kullanacağımız tablonun adını cf_anket olarak belirledik ve bu tabloda kullanmak için 9 sütun oluşturduk. İlk 4 sütun anketimize verilen oyların sayısal değerlerini tutan secim1-secim2-secim3-secim4 adlı sütunlar (veri tipi sayı), sonraki 4 sütun ankette ki seçeneklerimizi barındıran secenek1-secenek2-senecek3-secenek4 (veri tipi metin)adlı sütunlar vesonuncu sütunda anketimizdeki sorumuzu barındırmakta olan baslik (veri tipi metin, Mysql için text MS Access için not) adlı sütun bulunmakta. Daha sonra ColdFusion MX'in Administrator panelinden yeni bir veri kaynağı (data source) ekleyelim. Admin sayfasını açalım ve sol tarafraki linklerden Data & Services altındaki Data Sources linkini seçelim. Daha sonra sağ bölümde açılan alandaki Add New Data Source altındaki forma veri kaynağımızın adını ve tipini belirtelim. Ben Mysql veri tabanı kullandığım için Driver alanında seçimimi bu şekilde yaptım. Eğer siz MS Access kullanacaksanız buradaki seçiminizi açılır listeden Microsoft Access yapmalısınız. Add butonuna tıkladığınızda veri kaynağının eklendiğini sayfanın alt bölümündeki Connected Data Sources bölümünde görebilirsiniz. Veri tabanımızı oluşturduğumuza ve ColdFusion'a tanıttığımıza göre uygulama için kodlarımız yazmaya başlayabiliriz. 2- Öncelikle anketimizdeki soruları gösterecek ve oy vermemizi sağlayacak anket.cfm isimli sayfamızı oluşturacağız. İlk olarak kullanıcının daha önce ankete oy verip vermediğini kontrol edelim. <cfif not isdefined("COOKIE.anket")> Bu satır kullanıcı ankete oy verdikten sonra oluşturulan çerezin kullanıcı bilgisayarında olup olmadığını kontrol eder. Yok ise bir kullanıcıya göstereceğimiz verileri veritabanımızdan alalım. <cfquery name="Secenekler" datasource="anket"> SELECT secenek1, secenek2, secenek3, secenek4, baslik FROM cf_anket </cfquery> Anketimizin içerdiği soruyu ve seçeneklerimizi veri tabanından çektikten sonra kullanıcıların oy verebilmesi için bir form oluşturarak bilgileri bu formun içinde gösterlim. <form action="anket_isle.cfm" method="post"> <table width="300" border="0" > <tr> <td colspan="2"><strong>Anket</strong></td> </tr> <cfoutput> <tr> <td colspan="2" >#Secenekler.baslik#</td> </tr> <tr> <td width="170" >#Secenekler.secenek1#</td> <td width="130"><input name="secim" type="radio" value="1"></td> </tr> <tr> <td >#Secenekler.secenek2#</td> <td><input name="secim" type="radio" value="2"></td> </tr> <tr> <td class="secenek">#Secenekler.secenek3#</td> <td><input name="secim" type="radio" value="3"></td> </tr> <tr> <td >#Secenekler.secenek4#</td> <td><input name="secim" type="radio" value="4"></td> </tr> <tr> <td colspan="2"><input name="Submit" type="submit" value="gönder"></td> </tr> </cfoutput> </table> </form> Bir form oluşturduk ve içine her satıra bir secenek ve karşısına bir radio buton gelecek çekilde tablomuzu olşturduk. Kullanıcı bu radio butonlardan birini seçerek anketimize oy verecek. radio butonlarımızın hepsinin ismi aynı secim ancak değerleri yani value özellikleri veri tabanından sectiğimiz seceneğe göre değişmekte. secenek1'e karşılık gelen radio butonun value değeri 1, ve diğerleri içinde bu şekilde devam ediyor. kullanıcı secenek1'e ait radio butonu seçim oy verdiğinde veritabanında ki secenek1'e ait secim1 değeri 1 artacaktır. Kullanıcı eğer daha önce anketimize oy vermiş ise direkt olarak kullanıcıya anketimizin sonuçlarının görüntülendiği sayfayı gösterlim <cfelse> <cfinclude template="anket_sonuc.cfm"> </cfif> 3- Kullanıcı seçeneklerden birini işaretleyerek gönder butonuna tıkladığında formumuz sayfayı anket_isle.cfm sayfasına yönlendirmekte. Bu sayfada kullanıcının işaretlediği seçeneğe karşılık gelen değer bir arttırılır. Örnek olarak, kullanıcı secenek4'e ait radio butonu işaretledi ve gönder butonuna tıkladı, anket_isle.cfm sayfası kullanıcın bu seçimini algılayarak sececek4'e ait secim4 değerini 1 arttıracaktır. <cfquery datasource="anket"> UPDATE cf_anket SET <cfif FORM.secim is 1> secim1 = secim1 + 1 <cfelseif FORM.secim is 2> secim2 = secim2 + 1 <cfelseif FORM.secim is 3> secim3 = secim3 + 1 <cfelseif FORM.secim is 4> secim4 = secim4 + 1 </cfif> </cfquery> Basit bir cfif yapısı ile kullanıcının seçimine karşılık gelen sütununun değeri bir arttırılır. Daha sonra kullnıcının anketimize oy verdiğini anlamak ve sonuçların şişmesini önlemek amacıyla kullanıcının bilgisayarında bir çerez oluştururuz. <cfcookie name="anket" value="#Now()#" expires="7"> Daha sonrada kullanıcıyı anketin sonuçlarının görüntülendiği anket_sonuc.cfm isimli sayfaya yönlendiririz. <cflocation url="anket_sonuc.cfm"> 4- Son olarak anket sonuçlarımızın görüntülendiği anket_sonuc.cfm isimli sayfayı oluşturacağız. Bu sayfadaki kodumuz veritabanındaki seçeneklere ait değerleri çekerek toplam oy miktarını hesaplamakta. Daha sonra her seceneğim bu toplam içindeki yüzdelik dilimini hesaplamak için seçeneklerdeki sayısal değerleri 100 ile çarpıp ardından toplam değerine bölerek sonuca ulaşmakta. Basit bir matamatiksel hesap yapacağız. <cfquery name="anketGoster" datasource="anket"> SELECT * FROM cf_anket </cfquery> <!--- anketteki toplam oy sayısını buluruz ---> <cfset toplam = anketGoster.secim1+anketGoster.secim2+anketGoster. secim3+anketGoster.secim4> <!--- daha sonra her seçeneğe ait yüzdeyi hesaplarız ---> <cfset secim1yuzde = (anketGoster.secim1 * 100) / toplam> <cfset secim2yuzde = (anketGoster.secim2 * 100) / toplam> <cfset secim3yuzde = (anketGoster.secim3 * 100) / toplam> <cfset secim4yuzde = (anketGoster.secim4 * 100) / toplam> Seçeneklermize ait yüzdeleri birer birer hesapladıktan sonra kullanıcıya anketimizin sonuçlarını küçük bir grafiği bar olarak kullanarak gösterlim. <cfoutput> <table width="350" border="0"> <tr> <td colspan="2"><strong>Anket</strong></td> </tr> <tr> <td colspan="2">#anketGoster.baslik#</td> </tr> <tr> <td width="170">#anketGoster.secenek1#</td> <td width="170"><img src="bar.gif" width="#secim1yuzde#" height="10"> <span class="prg">% #Round(secim1yuzde)#</span></td> </tr> <tr> <td>#anketGoster.secenek2#</td> <td><img src="bar.gif" width="#secim2yuzde#" height="10"> % #Round(secim2yuzde)#</td> </tr> <tr> <td>#anketGoster.secenek3#</td> <td><img src="bar.gif" width="#secim3yuzde#" height="10"> % #Round(secim3yuzde)#</td> </tr> <tr> <td>#anketGoster.secenek4#</td> <td><img src="bar.gif" width="#secim4yuzde#" height="10"> <span class="prg">% #Round(secim4yuzde)#</span></td> </tr> <tr> <td colspan="2" ><div align="right">Toplam <strong>#toplam#</strong> oy kullanılmıştır.</div></td> </tr> </table> </cfoutput> Burada kullandığımız Round(secim3Yuzde) şeklindeki ifade toplamda kalanlı çıkan sonucu yuvarlak olarak göstermemizi sağlamakta. Örneğin secim3Yuzde 'nin değeri 15,3347 ise bu değeri 15 olarak göstermekte kullanmış olduğumuz Round() fonksiyonu. Bu şekilde anket uygulamamızı bitirmiş olduk. Tekrar görüşmek dileğiyle güle güle kullannın ![]() |
![]() |
| Seçenekler | |
| |
Benzer Konular | ||||
| Konu | Konu Açanlar | Forum | Cevaplar | Güncel Mesajlar |
| Dünyanın 7 harikası anketi | W-S | Webmaster Genel Konular | 3 | 11-07-2008 09:59 |
| Bilgisayar anketi | cunobag | Geyik - Komik | 0 | 05-07-2008 09:42 |
| Süper kullanıcı olarak da adlandırılan root kullanıcı | kadınca | İşletim Sistemleri | 0 | 26-12-2007 02:03 |
| Kullanıcı Tanımlama (tr) | egitimbilgisi | Php kodları | 0 | 30-11-2007 07:39 |
| kullanıcı Rütbeleri | Nurullah_ | Vbulletin | 2 | 05-10-2007 11:19 |