lostyazilim
tr.link

Değerlendirme Anketi

6 Mesajlar 754 Okunma
acebozum
tr.link

rehacan rehacan WM Aracı Kullanıcı
  • Üyelik 23.05.2017
  • Yaş/Cinsiyet 42 / E
  • Meslek PHP Developer
  • Konum Bursa
  • Ad Soyad R** D**
  • Mesajlar 8
  • Beğeniler 1 / 1
  • Ticaret 0, (%0)
Merhaba,

Yanlışlıkla PHP dersleri alanı içerisine açtığım konu pek dikkat edilmedi ve buraya da taşınmamış durumdaydı. Ben de daha düzgün toparlanmış haliyle buraya yazayım dedim.

Şimdi yapmak istediğim şu şekilde bir anket gibi düşünün.

4-5 farklı kategoride soru grupları var. 30 sabit soru, kategoriye göre de 30 un üzerine ilave 3 ile 15 arası değişen soru ilavesi var. x bir kategori seçilince 30 soru + kategori soruları ile karşımıza sorular geliyor.

Cevaplar sadece radio button ile seçilecek şekilde evet, hayır, açıklama olacak şekilde hazırladım. soruları veritabanından 30 sabiti ve seçtiği kategorinin soruları alıp listeliyorum. bunu bir döngüyle yazarken cevap alanını da bu döngüye dahil ederek yazdırıyorum. Her radio buttonun name alanını cevap_(döngü değişkeni) şeklinde cevap_1 cevap_2 gibi aldırıyorum - ki her soru için farklı verilmezse tüm şıklar arasında 1 seçim yapabilmiş oluyorum- ve bunu veritabanına yazdırmak istiyorum.

veritabanına geçmeden önce ilk olarak post işlemi yaptırıp değişkenleri ekrana bastırmayı denedim.

kodları şu şekilde yazdım..


if (@_POST){
$soru_sayisi = ("veritabanındaki soruları çekiyorum");
$toplam_soru = $soru_sayisi + 30;
echo $toplam_soru . "adet soru";

for ($x=1; $x <= $toplam_soru; $x++)
{
$cevap = post("cevap_".$x);
echo "cevap" . x$ . " " . $cevap . "
";
}


post işleminden sonraki işlemi de döngüye soktum. soru sayısı değişken olunca ne kadar cevap karşılayacağımı bilemedim. bu yönteme başvurdum. buraya kadar da sıkıntı yok. ekrana cevap_1 1 cevap_2 0 gibi seçenekleri göstermeye de sıkıntı yaşatmadı ama bunu veritabanına yazmak istediğimde yazamadım. döngünün içine insert into eklemeyi denedim, veritabanındaki tarafı da her soruya yetecek kadar soru1 aciklama1 soru2 aciklama2 gibi alanları da hazır.

mantık hatası yaptığım nokta neresi, bu işlemi en kolay nasıl halledebilirim? tüm önerilere açığım. daha önce bu tarz bir değerlendirme formu yapmadığımdan mantığı çözemiyorum. yardımlarınızı bekliyorum
 

 

wmaraci
reklam

MertTpz MertTpz merttopuz.com Kullanıcı
  • Üyelik 16.07.2015
  • Yaş/Cinsiyet 27 / E
  • Meslek Bilgisayar Müh. Öğrencisi
  • Konum İstanbul Anadolu
  • Ad Soyad M** T**
  • Mesajlar 215
  • Beğeniler 94 / 93
  • Ticaret 23, (%100)
Hocam sanırım isteğiniz kullanıcının doldurduğu formu her birini ayrı sütunlara olmak üzere yaklaşık 30 soru olarak veritabanına kaydettirmek..

Bu aşamada iki tavsiyem olacaktır;
- Array Kullanmak
- Sütunlara Parçalamak

İkinci yöntem veritabanında bir ton sütuna sebebiyet vereceğinden gereksiz görüyorum açıkçası. Bunun yerine bir array içerisine tüm verileri kaydettirmek ve veritabanına öyle kayıt yapmak daha mantıklı geliyor açıkçası..
 

 

rehacan rehacan WM Aracı Kullanıcı
  • Üyelik 23.05.2017
  • Yaş/Cinsiyet 42 / E
  • Meslek PHP Developer
  • Konum Bursa
  • Ad Soyad R** D**
  • Mesajlar 8
  • Beğeniler 1 / 1
  • Ticaret 0, (%0)
aldığım veriyi array atayıp, bir döngüyle o değişkene yükledim. kontrol aşamasında sıkıntı da yok. aşağıdaki kodla verileri de getirmekte. bir önceki haliyle de aynı durumu array yapmadan almıştım ama array gerekiyorsa array de sorunsuz çalıştı.

kodları da şöyle.

$cevap_dizi=array();

for($x=1; $x<=$toplam_soru; $x++)
{
$cevap_dizi[]=post("cevap_".$x);
}

for($i=1; $i<=$toplam_soru; $i++)
{
$cevap="cevap".$i;
print $cevap." ".$cevap_dizi[$i]."
";
}


şimdi bu ikinci döngüde cevapları yazdırıyorum. yazdırmak yerine direk veritabanına gömmeyi denedim. sıkıntı orada da baş gösterdi

sanırım benim en başından beri yaşadığım sorun burası. veritabanı içerisinde her soru cevabı için bir alan ayarlamıştım. çünkü bu cevaplara göre değerlendirme yapmam da gerekecek.

şöyle ki, cevapların olduğu tabloda cevap1 cevap2 cevap3 cevap4 diye 55 tane sütun var.

insert into satırında tablonun hangi sütununa hangi cevap yerleştirileceği satırında syntax hatası yapıyorum ki verileri ekletemedim.

yazdığım satır şöyle


$Ekle = Sor(" INSERT INTO deger_hizmeteozel_cevaplar SET '$cevap'='$cevap_dizi[$i]' ");


burada $cevap ile her sütun adını elde etmekteyim yani cevap1 dediğinde $cevap_dizi[1] in cevabını alıp o sütuna yazsın, sonraki dönüşünde bu 1 er 1 er artarak tüm cevaplara veriyi yazmış olsun istiyorum. hatalı yeri görmemde yardımcı olabilir misiniz?

araştırmayı doğru yapamıyorum sanırım ki, insert into örneklerinde sütun adını değişken kullanan bir örnek bulamadım.
 

 

HapyMan HapyMan Full Stack Developer Kullanıcı
  • Üyelik 14.05.2016
  • Yaş/Cinsiyet 32 / E
  • Meslek What do you do exactly ?
  • Konum İstanbul Avrupa
  • Ad Soyad T** T**
  • Mesajlar 561
  • Beğeniler 171 / 208
  • Ticaret 0, (%0)
hocam sağlam bi mantık hatası var . yapınca yorumu editleyeceğim.
 

 

wmaraci
wmaraci

rehacan rehacan WM Aracı Kullanıcı
  • Üyelik 23.05.2017
  • Yaş/Cinsiyet 42 / E
  • Meslek PHP Developer
  • Konum Bursa
  • Ad Soyad R** D**
  • Mesajlar 8
  • Beğeniler 1 / 1
  • Ticaret 0, (%0)
az önce phpmyadmin tarafında aynı kodu değerleri elle vererek denedim ve bir hata farkettim. veritabanı yapısından kaynaklanıyormuş. ilişkilendirme yapısını göz önüne almadan yaptığımdan dolayı sadece bir sütuna veri girmeyi denediğimden dolayı veriyi hiç ekletmiyormuş.

deneme için yeni bir sütun oluşturdum ve sütun adını değişken yerine sabit yaptım. bu şekilde verileri yazmada sorun olmadı ama sütun adları üstte de belirttiğim gibi her cevap için ayrı ayarlamıştım. yani cevap1 cevap2 cevap3 gibi sütunlar var. insert ederken sütun adını döngü içerisinde değişkenle beslemem mümkün değil sanırım..

bir adım daha ileri gittim, ekleme satırını şu şekilde düzenledim.


$cevap_dizi=array();

for($x=1; $x<=$toplam_soru; $x++)
{
$cevap_dizi[]=post("cevap_".$x);
}

for($i=1; $i<=$toplam_soru; $i++)
{
$cevap="cevap".$i;
print $cevap." ".$cevap_dizi[$i]."
";
$Ekle = Sor("INSERT INTO tablom (deger_firma,$cevap) VALUES ($tur,$cevap_dizi[$i])");
}


bu durumda veritabanında sonuç şu şekilde oluşmakta.

id deger_firma cevap1 cevap2 cevap3 cevap4 cevap5
1 2 1 0 0 0 0
2 2 0 1 0 0 0
3 2 0 0 1 0 0
4 2 0 0 0 1 0
5 2 0 0 0 0 1

veritabanına her defasında soru sayısı kadar veri basacak ve sorularım en az 33 en fazla 55 adet olan kategoriler içermekte. bu da veritabanını 2-3 değerlendirmede şişirmeye başlayacak demek. bu durumda verilerin tamamını tek id altında bir defada yazmak için nasıl bir mantık yürütmem gerek?

aynı anda verileri yazdırmanın yolunu bulamadım. bu nedenle array verilerini toparlayıp bir araya getirdim ama şimdiye kadar hiç bu şekilde kullanım yapmadığımdan ihtiyacım olunca o veriyi ayrıştırıp tekrar kullanma işlemini nasıl yapacağımı bilemiyorum. onu da araştırıp bir yol bulmaya çalışıcam artık. fikirleriniz ve yardımlarınız için teşekkürler.
 

 

MertTpz MertTpz merttopuz.com Kullanıcı
  • Üyelik 16.07.2015
  • Yaş/Cinsiyet 27 / E
  • Meslek Bilgisayar Müh. Öğrencisi
  • Konum İstanbul Anadolu
  • Ad Soyad M** T**
  • Mesajlar 215
  • Beğeniler 94 / 93
  • Ticaret 23, (%100)
Hocam özelden attığım sayfada yaptığımız gibi array verilerini veritabanında tek bir sütuna çekip sonrasında explode fonksiyonu ile veriler arasında atadığınız rastgele farklı bir karakterden ayırarak kullanmak istediğiniz yerde yeni bir array oluşturabilirsiniz.
 

 

Site Ayarları
  • Tema Seçeneği
  • Site Sesleri
  • Bildirimler
  • Özel Mesaj Al