Asp-Access

Kodla Büyü

subversaa

Seçkin Üye
Seçkin Üye
Mesajlar
699
Asp'yi yeni yeni denemeye başladım.
Üzerinde uğraştığım bir konu var.
Kişilerin kullanıcı adları ve parolaları ile giriş yaparak ulaşacakları bir anket olacak ve anketteki bilgileri veritabanına oradan da spss'e alacağım.
Üye girişini anlayabildim bazı derslerden. Anketteki bilgileri veritabanına işime yarayabilecek şekilde almayı ve export etmeyi de anladım sanırım.

Ancak takıldığım 2 yer var, kimlerin kayıt olabileceği ve katılımcıların veritabanındaki bir sütunda bulunan özelliğine göre anketle karşılaşmaları.
Katılımcılar 150-160 civarı bir sayıda belli bir grup, o yüzden öncelikle herkesin üye olmasını engellemek istiyorum. Üye Kayıt sistemi olursa herşey otomatik olacak ancak sınırını nasıl belirleyebilirim, yoksa sayı bu aşamada az olacağı için teker teker mi gireyim ya da sadece UYELER tablosunda sadece TCKimlik no girip üye olurken karşılaştırma yaparak üye kaydına izin verebilir miyim?

2. ve daha önemli olan ise kayıt olanlar veritabanında 4 gruba ayrılacak. Öğrenci, öğretmen, veli, idareci gibi...
Karşılaşacakları 4 çeşit anket var ama kriter şu olmalı. Öğrenciler ve öğretmenler sadece öğretmenler için hazırlanmış soruların bulunduğu anketi görmeleri gerekiyor. Seviye olarak düşünürsek Grup1,Grup2,Grup3 ve Grup4 var. Grup1 birdeki bir kimse kendisi haricindeki grup1 üyelerinin adının yer alacağı anket formunu ve grup2 üyelerinin adının yer alacağı anket formunu görmesi gerekiyor.
Pek çok video ve ders buldum ama bu sorunu aşamadım şimdilik. Kişi kendi hesabına ulaşınca bir listeden değerlendirmesi gereken kişilerin adlarını görüp seçtikten sonra seçtiği kişiye yönelik hazırlanmış anketi görmeli.

Umarım anlatabilmişimdir, amatör olduğum için teknik ifadeleri yalınca açıklayabilirseniz çok sevinirim.
 
1)
üye kaydı sırasında email aktivasyonu ya da referans alma yöntemleriyle kayıt kabul edebilirsin. mesela üye kaydı tamamlanınca üyenin mailine aktivasyon linki yollanır, onu tıklayınca üye için senin yönetim paneline onaylama isteği düşer, sen de onaylarsın duruma göre. ya da birkaç üyeyi kaydet, onların referans hakkı olur, mesela her üyenin 3 referansı olur. referansları mail adresi olarak ekler üyeler, o maili kullananlar da sitene üye olabilirler o referans sayesinde.
tc no doğrulama demişsin de kimin kim olduğunu nerden anlayacaksın ? bildiğim kadarıyla xml web servisi tc kimlik no sorgulama ücretli. http://tckimlik.nvi.gov.tr/Web/WebServices.aspx
ama tc kimlik no'nun gerçek bir tc no olup olmadığını javascript ile kontrol ettirebilirsin http://www.fatihhayrioglu.com/javascrip ... dogrulama/
2)
bu sorunu rahatlıkla çözersin. üye tablosunda grup adında bir alan aç, değerleri 1 ve 2 olsun(öğretmen=1,öğretmen=2) mesela. üye girişi yaptığında session değerine üyenin ID alanını aktarırsın. o ID'ye göre kimin kim olduğunu bilirsin. anket sayfasına gelince sorgulama yaparsın, grup=1(öğretmen) ise if kontrolü ile öğretmen anketlerini gösterirsin. tabi anketle ilgili tablonda da tip adında bir alan aç, orada da değerlerin 1 ve 2 olsun (öğretmen anketi=1,öğrenci anketi=2) ayrıca oy kullanma sayfasında da bu kontrolleri yapmalısın.
 
Hocam bu dediklerini bir yere alıyorum, takıldığım yerlerde okur okur çözmeye çalışırım. Yapılabileceğini anlatmışsın o zaman nasıl yapılır onu öğreneyim ben güzelce. Söylediğin mantığı anladım sanırım. Referans yerine mail aktivasyon işi sanırım daha güzel olur ama dediğim gibi amatörlükten dolayı öncelikle hazır scriptini aramam gerekicek. Kurcalayıp öğrenince umarım onu da uygulayabilirim.
2. maddede biraz daha açıklama istesem,
şöyle ki; uye tablosunda Grubu alanında öğretmen öğrenci vs 4 başlık var. Ben, kişi hesabına giriş yaptığında session değerine ID değişkenini atayıp, anket sayfasına yönlendireceğim de şöyle hesaplamıştım ben. site kök dizininde default.asp ve 4 klasör olacak gruplara göre oluşturulmuş. Kişi hesabına giriş yapınca karşısına değerlendirmesi gereken üyelerin listesi gelecek. Bu listeden birinin ismine tıkladığında örneğin öğrenci hesabı açıkken, bir öğretmenini seçtiğinde, site dizinindeki .../öğretmen/anket.asp açılsın, değerlendiren kişinin birtakım bilgileri ve değerlendirilen kişinin birtakım bilgileri veritabanından çekilerek anket formu karşısına gelsin. Ya da öğretmen hesabı açıkken ise, karşısına diğer öğretmenlerin(kendisi hariç) ve müdürün olduğu seçenekler gelsin bunlardan müdüre tıklayınca gideceği sayfa .../mudur/anket.asp olsun. Bu seçime göre açılacak sayfanın üstünde, değerlendiren kişi bilgileri, değerlendirilen kişi bilgileri ile anket form kontrolleri yer alacak. Gonder dediğinde de yıla ve aya göre veritabanına kaydedicek.
Hocam kusura bakmayın, belki aynı şeyi anlattınız ama bu düşünceme göre tekrar yorumlayabilirseniz daha da yerine oturacak. Siz sanırım sayfa açıldığında anketi seçtirmeyi belirttiniz ama onu beceremeyebilirim. Şimdilik uzun yoldan öğrensem sırayla daha güzel hale dönüşü umarım. Fikirleriniz için teşekkür ediyorum, iyi çalışmalar.
 
hocam dediğin gibi bu uzun yol olur. istersen tek sayfada kontrollerle yaparsın ya da bu şekilde yaparsın.
dizin adlarında türkçe karakter olmasın.
üye giriş yaptığında $_SESSION[id]=UyeId; eşitlemesi yapacaksın. bu session değerine göre üyeyi tanıyabilirsin.
 
hocam çok tesekkur ediyorum ,kurcalamaya basladım ben ,takıldığım yerlerde rahatsız etmem de sakınca yoktur umarım, iyi çalısmalar kolay gelsin....
 
Yeni başlık olmaması için buradan devam ediyorum.

Asp - MS Access ile bir değerlendirme sitesi hazırladım. Üyeler hesaplarını açıyor ve karşısında değerlendirmesi gereken kişilerin listesini buluyor, ardından kişi seçip değerlendirme yapacağı anket sayfasına yöneliyor.
VT'de anket tablosunda "id, değerlendiren_adi, değerlendirilen_adi ve madde1, madde2, madde3" diye alanlar bulunuyor.

Ben Vt'den istediğim kişinin değerlendirme sonuçlarını alabiliyorum ancak asıl yapmam gereken, kullanıcı hesabına giriş yaptığında sonuclar sayfasına yönlendirilsin ve örneğin;

anket tablosunda 100 kayıt var, bunlardan değerlendirilen_adi alanında kendisi olan kayıtları filtreleyip, her bir maddenin ortalamasını ve madde toplamlarının ortalamasının yazdırmak istiyorum.

Resimle şöyle;

Kullanıcı id'si 10 olan kişi hesabını açtığında sonuclar sayfasında
soru sayısı kadar satırdan ve bir de toplam ortalamanın verileceği bir satırdan oluşan tablo sonuclarını görmeli.
Sonuçlar sayfasındaki tabloda 1. satırda, Vt'ye bakarak "yapilan_id"'si 10 olan kayıtların m1 değerlerini toplayıp, kaç tane kayıt varsa o sayıya bölerek ortalamasını alıp tabloda ilk satırda göstermeli.
Bunu her anket maddesi için yaparak, bir de en altta toplam maddelerin ortalamasını görmek istiyorum.


Oldukça uzun ama açık anlatmaya çalıştım. Kaynak gösterebilirseniz oradan inceleyip yapmak isterim. Ya da nasıl yapılabileceğini anlatan, gösteren olursa daha bir mutlu olurum.
 

Ekli dosyalar

  • anket.jpg
    anket.jpg
    28.6 KB · Görüntüleme: 975
:o bilmece gibi :)
tam anlamadım ama sanırım sadece mesela id si 10 olan kullanıcı sisteme girdiği zaman yapılanid 10 olan anketlerin özetini istiyorsun
eger böyleyse kolay sql de where yapılan id = 10 (misal) deyip 10.ncu kaydı çektikten sonra do while döngüsüyle bütün kayıtları birer değişkende toplata bilirsin
do while not vt.eof
soru1=soru1+cint(vt("a1"))
soru2=soru2+cint(vt("a2"))
...
toplam=toplam+1
vt.movenext
loop

gibi
sonrada tabloda yazdırısın
 
Düşünce olarak böyle, hatta verdiğiniz örnek de benim dediğim sisteme tam uygun.
"soru1=soru1+int(vt("a1"))" ifadesinde INT ile sanırım metin değerini, sayı değerine çevirdik. Bu da benim denemelerimde çıkan bir sorundu. Ölçüt ya da veri uyuşmazlığı diyordu. Zannedersem bu kod ile çevirebileceğim
Kaç tane kayıt olduğunu da ayrı bir değişkende saklarsak değil mi hocam, çünkü sonunda ortalama almak için kayıt sayısına bölmem gerekecek.
Örneğinizi akşam güzelce bir anlayıp, deneme yapayım durumu bildiririm hocam, teşekkürler.
 
Hocam eve girdim de siteye bir bakayım derken, sizin uyarınızı gördüm. Denemek için zaman arıyorum ama şimdi de çıkmammgerekicek, en kısa zamanda dediğiniz yöntemi deneyeceğim. Bİraz daha inceledim, mesela toplam 700 anket kaydı yapılmışsa, bunların 12 tanesi 10 id'li kullanıcıya ait olanlar.

Ortalama bulmak için sanırım örneğinizdeki "toplam" değişkenini kullanacağım. Peki Değerlerin toplamını nasıl alacağım orayı tam çıkaramadım.

Şöyle ki....

koda birdaha baktım sanırım anladım hocam. Soru1 kişi için filtreden sonraki m1 değerlerinin toplamını verecek, soru2 kişi için filtreden sonraki m2 değerlerinin toplamını verecek galiba. Son olarak her m1,m2 toplam değerlerini, "topla değişkenine bölerek ortalamayı buluruz sanırım. Neyse hocam ben kafanızı daha karıştırmıyım, deneyip görmek en iyisi. İyi akşamlar sizlere, kolay gelsin.
 
<%response.write (madde1/toplam)*20 %>

şu ifadede madde1: 5lik sistemde anket cevaplarının örneğin; 3,5,2,1,4,2 gibi rakamlarının toplamı
toplam değişkeni ise kaç tane değer varsa onların sayısı üst satırdaki "3,5,2,1,4,2" yani 6 olduğunu bulup bölüyorum.
Ardından yüzde alıyorum, sonucu yazırıyorum.

Ancak kimi yerde 60, kimi yerde 40 çıkıyorken, küsüratlı değerlerde, 66,66666666666, veya 52,525252525 gibi sayılar çıkıyor.

2 haneye kadar yuvarlaması için ne yazmalıyım?
 
Teşekkür ederim, halloldu.

Şimdi de şu sorun çıktı ama bu sefer çözüm için bir fikir de oluşmadı.

Localde, anket maddeleri kontrolünde sıkıntı yaşamadım, ancak hostta madde kontrolü yapmadan kayıt alıyor.

Kontrolü ise anket formunun olduğu sayfada, javascript ile fonksiyon ile yapmıştım yani uyarlamıştım. Hostta bu sıkıntıyı yaşamamanın nedeni ne olabilir acaba?
Localde çalışıp hostta çalışmaması şaşırttı.
 
hocam sorunu anlamadım daha açık anlatırsanız yardımcı olmaya çalışırız
kullanıcıya gelen anketlerde bi karısıklıkmı var onu session değişkenleriyle yapmalısın
 
Şöyle ki;
Elimde "anket.asp" var, bu sayfada "değerlendirilen.id", "değerlendiren.id" gibi birtakım değişkenler ile anket maddelerinin yer alması gerekiyor.

Üstteki kişisel bilgileri, include ile "anketust.asp" den sorunsuz cekiyorum.
Anket maddeleri ve kayıt butonunu da bir anket formuyla oluşturdum. Normal şartlarda anket bilgileri vt'ye sorunsuz bir şekilde kayıt ediliyor. Anketteki sorular için 5 cevap bulunuyor ancak bunlardan en azından bir tanesi seçili olmalı. Çünkü boş değer gönderdiğinde "sonuclar.asp" de kişi ile ilgili madde ortalamaları alınırken, null değer sorun çıkarttı.

Aslında sorun buradan sonra cıktı. İnternetten anket maddelerinin dolu-boş kontrolü için script kodu buldum, kendime uyarlayıp "anket.asp" ye ekledim ve localde denediğimde, problem yok. Fakat hosta taşıdığımda anketten boş değer gönderebiliyor ve "sonuclar.asp"de hata veriyor.
Kontrol Kodu şöyle;
<script language="JavaScript">
function formdenetleme(){

if (!(anketformu.cmb_cevap1[0].checked || anketformu.cmb_cevap1[1].checked || anketformu.cmb_cevap1[2].checked || anketformu.cmb_cevap1[3].checked || anketformu.cmb_cevap1[4].checked)) {
alert('Eksik bilgi! Lütfen 1. soru için seçeneğinizi işaretleyiniz.');
event.returnValue=false;
}

else if (!(anketformu.cmb_cevap1[0].checked || anketformu.cmb_cevap1[1].checked || anketformu.cmb_cevap1[2].checked || anketformu.cmb_cevap1[3].checked || anketformu.cmb_cevap1[4].checked)) {
alert('Eksik bilgi! Lütfen 1. soru için seçeneğinizi işaretleyiniz.');
event.returnValue=false;
}
else {
event.returnValue=true;
}
}
</script>

DW'da asp sayfaları ile çalışırken. Gelen bir pencerede Asp-VB Script seçmiştim onunla ilgisi olabilir mi? Garibime giden localde, boş madde görünce hata uyarısı alıyorken, hostta aynı dosya ve kodlarla aynı uyarıyı almadan boş madde olsa bile vt kaydına geçmesi.
Eğer problem şudur diyemezseniz, ben hepsini localde tekrar deneyeyim, sonra hosta atıp tekrar kontrol edeyim. Gece geç denediğim için dalgınlığıma mı geldi acaba diyorum.
 
js fazla bilmiyorum emin değilim ama burda function da gelen değeri bi değişkene aktarmamış gibi yani burda
function formdenetleme(anketformu)
olması gerek gibime geldi ama emin değilim
olmazsa baska bi script deneyim derim
birde zaten siz bu kayıtları vt ye eklemeden önce bi filtreden gecirmelisiniz direk kayıt ederseniz güvenlik acığı verirsiniz
 
birde zaten siz bu kayıtları vt ye eklemeden önce bi filtreden gecirmelisiniz direk kayıt ederseniz güvenlik acığı verirsiniz

Set rcs=Server.CreateObject("ADODB.Recordset")
rcs.open "Select * from t_anket, baglanti, 1, 3
rcs.addnew
rcs("yapan_id")=aktar1("k_id")
rcs("yapilan_id")=aktar2("k_id")
rcs("a1")=request.form("cevap1")
rcs("a2")=request.form("cevap2")
rcs("a3")=request.form("cevap3")
rcs.update
rcs.close
baglanti.close

Kayıtları böyle alıyorum, güvenlik açığını kapatmak için nasıl bir filtreden bahsettiniz hocam. Yönlendirebileceğiniz bir örnek var mı acaba elinizde?
 
Nasıl olduğunu anlamadığım bir şekilde, bir kaç farklı denemeyle sorun çözüldü. Teşekkürler arkadaşlar, şimdi güvelik açıkları için biraz araştırma yapayım.
 
çok lüzumlumu bilemedim şimdi :)
sql injection a karşı tedbir kullanıcı girişlerine felanda yapmanız gerekir
nette sql injection diye aratırsanız çeşitli kaynaklara ulaşabilirsiniz
ortalam şöyle bişey
....
rcs("a1")=SQLTemizle(request.form("cevap1"))
....


Function SQLTemizle(byVal strVeri)

'// Eğer Değişken Boşsa Fonksiyondan Çıkıyor
If strVeri = "" Then Exit Function

'// Zararlı Kodlar Burada Ayıklanıyor
strVeri = Replace(strVeri, "<", "&lt;")
strVeri = Replace(strVeri, ">", "&gt;")
strVeri = Replace(strVeri, "[", "&#091;")
strVeri = Replace(strVeri, "]", "&#093;")
strVeri = Replace(strVeri, """", "", 1, -1, 1)
strVeri = Replace(strVeri, "=", "&#061;", 1, -1, 1)
strVeri = Replace(strVeri, "'", "''", 1, -1, 1)
strVeri = Replace(strVeri, "select", "sel&#101;ct", 1, -1, 1)
strVeri = Replace(strVeri, "join", "jo&#105;n", 1, -1, 1)
strVeri = Replace(strVeri, "union", "un&#105;on", 1, -1, 1)
strVeri = Replace(strVeri, "where", "wh&#101;re", 1, -1, 1)
strVeri = Replace(strVeri, "insert", "ins&#101;rt", 1, -1, 1)
strVeri = Replace(strVeri, "delete", "del&#101;te", 1, -1, 1)
strVeri = Replace(strVeri, "update", "up&#100;ate", 1, -1, 1)
strVeri = Replace(strVeri, "like", "lik&#101;", 1, -1, 1)
strVeri = Replace(strVeri, "drop", "dro&#112;", 1, -1, 1)
strVeri = Replace(strVeri, "create", "cr&#101;ate", 1, -1, 1)
strVeri = Replace(strVeri, "modify", "mod&#105;fy", 1, -1, 1)
strVeri = Replace(strVeri, "rename", "ren&#097;me", 1, -1, 1)
strVeri = Replace(strVeri, "alter", "alt&#101;r", 1, -1, 1)
strVeri = Replace(strVeri, "cast", "ca&#115;t", 1, -1, 1)

SQLTemizle = strVeri

End Function
......................

ikinci olarak bu javascript için temel yapı

<form name="form1" method="post" onsubmit="return formdenetleme(this);">
<script language="JavaScript">
function formdenetleme(anketformu){
if ( anketformu.adiniz.value == "" ) {
alert('Adınızı Boş Bırakamazsınız!');
return false;
}
}
</script>
<p>
<input type="text" name="adiniz" >
<br>
</p><input name="" type="submit" onclick="return formdenetleme(this);" >
</form>
..............

bu scripti geliştirebilirsiniz kolay gelsin
 
Kayıt sisteminde ilk yazdığınız önlemler yer alıyor, ancak anket sayfasında birdaha kullanmadım. Anketin kişisel bilgileri önceki sayfalardan çekiliyor ve otomatik yazdırıyorum, kullanıcı sadece şık işaretleyip "kaydet" demesi gerekiyor. Eğer bu durumda da güvenlik sorunları büyük tehlike ise, aynı korumyaı burda da kullanabilirim o halde.

İkinci kısımda bahsettiğiniz script'i biraz anladım gibi, evde tekrar bakayım ben güzelce. Şu an localde de bedava hostta da problem yok gibi ama ihtiyacım olursa örneğinizi uyarlamaya çalışacağım.

İlginiz için teşekkür ediyorum hocam, iyi çalışmalar.
 
Sorun, anket sayfasında soru maddeleri 5 er tane, kayıt alınması için her soru için 1 seçenek işaretlenmeli. Ne yazik ki, anket açıldığında "checked" seçeneği boş olmalı.

<script language="JavaScript">
function formdenetleme(){

if (!(anketformu.cmb_cevap1[0].checked || anketformu.cmb_cevap1[1].checked || anketformu.cmb_cevap1[2].checked || anketformu.cmb_cevap1[3].checked || anketformu.cmb_cevap1[4].checked)) {
alert('Eksik bilgi! Lütfen 1. soru için seçeneğinizi işaretleyiniz.');
event.returnValue=false;
}

else if (!(anketformu.cmb_cevap1[0].checked || anketformu.cmb_cevap1[1].checked || anketformu.cmb_cevap1[2].checked || anketformu.cmb_cevap1[3].checked || anketformu.cmb_cevap1[4].checked)) {
alert('Eksik bilgi! Lütfen 2. soru için seçeneğinizi işaretleyiniz.');
event.returnValue=false;
}
else {
event.returnValue=true;
}
}
</script>

bu şekidle anket.asp'de bir fonsiyon eklendi. Kullanıcı anket cevapları verdikten sonra,
<input name="b_Kaydet" type="submit" kl_id="btn_Kaydet" value="Kaydet" onClick="formdenetle()">

butona bastığında denetleme işlemi tetikleniyor. İnternet explorer(bende 8.0 var)'da bu kodlar çalışıyor, ancak firefox'da boş madde için uyarı alıyorum ama başka boş değerler olmasına rağmen veritabanına "null" değerlerle birlikte ekleniyor.

İnternette sorunla ilgili "event.returnValue=true" ve "event.returnValue=false" ifadelerini "return true" ve "return false" olarak değiştir demişler ama eksik bir şey mi yapıyorum anlayamadım. Bu soruna rastlayan oldu mu?
 
BBNET
Geri
Üst