• 13-12-2012, 18:03:26
    #1
    Başlığı doğrumu açtım yanlışmı açtım bilemiyorum ancak günlerdir çözemediğim problemle ilgili bir kaç konu açtım foruma. Daha doğrusu denediğim her başarılı olmayan yöntem için diyebilirim.

    Sorunum şu aslında, bir sınav formum var. Sorulardan bazıları çoktan seçmeli, bazıları ise klasik diye tabir ettiğimiz manuel doldurulacak.

    Ben çoktan seçmeliler için combobox kullandım. bu comboboxların "value" kısmınada kayıt için lazım olacak değerleri atadım. Şöyleki : values="sinav_id,soru_id,cevap_id,cevap_deger" gibi.

    Klasik olan sorularda ise textarea koydum. Bunların tamamı dizi ve cevap olduğu için isimler cevap[] şeklinde.

    Sorun buradan sonra başlıyor.Formdan gelen bütün verileri kayıt etmek için yönlendirdiğim sayfada şu işlemi yaptırıyorum :

        $results = array();
        foreach ($_POST['cevap'] as $cevaplar)
        {
            $cevap_explode = explode(",", $cevaplar);
            $results[] = array(
                'value' => trim($cevap_explode[1]),
                'id' => trim($cevap_explode[0]),
                'sinav_id' => trim($cevap_explode[2]),
                'bolum_id' => trim($cevap_explode[3]),
                'soru_id' => trim($cevap_explode[4]),
                'birey_id' => trim($cevap_explode[5]),
                'kullanici_id' => trim($cevap_explode[6]),
                'test_no' => trim($cevap_explode[7]),
                'tarih' => trim($cevap_explode[8])
            );
        }
        
    
        foreach($results as $result)
        {
            mysql_query("insert into CRM9001(CRM9107,CRM9106,CRM9102,CRM9103,CRM9105,CRM9109,CRM9108,CRM9110,CRM9111) values ('".$result['value']."','".$result['id']."','".$result['sinav_id']."','".$result['bolum_id']."','".$result['soru_id']."','".$result['birey_id']."','".$result['kullanici_id']."','".$result['test_no']."','".$result['tarih']."') ");
        }
    comboboxta virgül ile ayırdığım bana lazım olan değerleri explode edip foreach ile sorunsuz kayıt ediyorum. İş burdan sonra farklı bir hal alıyor ve içinden çıkamıyorum bir türlü.

    Şimdi yukarıdaki kodla comboboxları alıyorum ancak textareaları alamıyorum. Çünkü textareaların değerleri kullanıcı tarafından manuel olarak girilecek, comboboxta olduğu gibi veritabanından çekilmeyecek. Bunun dışında diğer değerler var tabi. İyice karıştı sizin anlayacağınız. Aşağıyada formdaki kodlarımı yazıyorum.

    										<select name="cevap[]" id="cevap">
    											<option value="x">Lütfen Cevap Seçiniz</option>
    <?include('module_includes/sessions.php')?>
    <?php
    while ($cevap_list = mysql_fetch_array($cevap_sorgu)) {
    $birey_bilgi = mysql_query("select * from CRM3001 where CRM3102 LIKE '".$bireytc."'") or die("Hata Olustu!");
    $birey_esle = mysql_fetch_array($birey_bilgi);
    
    ?>
    											<option value="<?PHP echo $cevap_list['CRM7101']; ?>,<?PHP echo $cevap_list['CRM7105']; ?>,<?PHP echo $testadi['CRM4101']; ?>,<?PHP echo $bolum_list['CRM5101']; ?>,<?PHP echo $soru_list['CRM6101']; ?>,<?PHP echo $birey_esle['CRM3101']; ?>,<?PHP echo $session_list['CRM1101']; ?>,<?PHP echo $test_numarasi; ?>,<?PHP echo $tarih; ?>"><?PHP echo $cevap_list['CRM7103']; ?></option>
    <? } ?>	
    									
    										</select>
    									</div>		
    								</div> <!-- .field-group -->
    										<p></p>
    										
    										
    <?php
    }
    else
    {
    ?>
    <?php
    while ($cevap_list = mysql_fetch_array($cevap_sorgu)) {
    ?>
    
    										<textarea name="cevap[]" id="cevap" rows="5" cols="100"></textarea>	
    										<input type="text" name="sinavad[]" value="<?PHP echo $testadi['CRM4101']; ?>"><input type="text" name="bolum_name[]" value="<?PHP echo $bolum_list['CRM5101']; ?>"><input type="text" name="soru_name[]" value="<?PHP echo $soru_list['CRM6101']; ?>"><input type="text" name="birey_name[]" value="<?PHP echo $birey_esle['CRM3101']; ?>"><input type="text" name="kullanici_name[]" value="<?PHP echo $session_list['CRM1101']; ?>"><input type="text" name="test_no[]" value="<?PHP echo $test_numarasi; ?>"><input type="text" name="tarih[]" value="<?PHP echo $tarih; ?>"><input type="text" name="cevap_adi[]" value="<?PHP echo $cevap_list['CRM7101']; ?>">
    <? } ?>
    formdaki kodlarda bu şekilde. Bir türlü beceremedim.

    Konu biraz uzun oldu farkındayım ama sizden rica gerçekten yardımcı olabilecek arkadaşlardan yardım bekliyorum. Günlerdir uğraşıyorum ancak bi sonuca ulaşamadım. Bu şekilde nasıl yapılacağını bilen yada farklı bir yöntemle de olur diyen arkadaşlardan yardım bekliyorum.
  • 13-12-2012, 22:09:35
    #2
    Kimlik doğrulama veya yönetimden onay bekliyor.
    dj_nuz adlı üyeden alıntı: mesajı görüntüle
    Başlığı doğrumu açtım yanlışmı açtım bilemiyorum ancak günlerdir çözemediğim problemle ilgili bir kaç konu açtım foruma. Daha doğrusu denediğim her başarılı olmayan yöntem için diyebilirim.

    Sorunum şu aslında, bir sınav formum var. Sorulardan bazıları çoktan seçmeli, bazıları ise klasik diye tabir ettiğimiz manuel doldurulacak.

    Ben çoktan seçmeliler için combobox kullandım. bu comboboxların "value" kısmınada kayıt için lazım olacak değerleri atadım. Şöyleki : values="sinav_id,soru_id,cevap_id,cevap_deger" gibi.

    Klasik olan sorularda ise textarea koydum. Bunların tamamı dizi ve cevap olduğu için isimler cevap[] şeklinde.

    Sorun buradan sonra başlıyor.Formdan gelen bütün verileri kayıt etmek için yönlendirdiğim sayfada şu işlemi yaptırıyorum :

        $results = array();
        foreach ($_POST['cevap'] as $cevaplar)
        {
            $cevap_explode = explode(",", $cevaplar);
            $results[] = array(
                'value' => trim($cevap_explode[1]),
                'id' => trim($cevap_explode[0]),
                'sinav_id' => trim($cevap_explode[2]),
                'bolum_id' => trim($cevap_explode[3]),
                'soru_id' => trim($cevap_explode[4]),
                'birey_id' => trim($cevap_explode[5]),
                'kullanici_id' => trim($cevap_explode[6]),
                'test_no' => trim($cevap_explode[7]),
                'tarih' => trim($cevap_explode[8])
            );
        }
        
    
        foreach($results as $result)
        {
            mysql_query("insert into CRM9001(CRM9107,CRM9106,CRM9102,CRM9103,CRM9105,CRM9109,CRM9108,CRM9110,CRM9111) values ('".$result['value']."','".$result['id']."','".$result['sinav_id']."','".$result['bolum_id']."','".$result['soru_id']."','".$result['birey_id']."','".$result['kullanici_id']."','".$result['test_no']."','".$result['tarih']."') ");
        }
    comboboxta virgül ile ayırdığım bana lazım olan değerleri explode edip foreach ile sorunsuz kayıt ediyorum. İş burdan sonra farklı bir hal alıyor ve içinden çıkamıyorum bir türlü.

    Şimdi yukarıdaki kodla comboboxları alıyorum ancak textareaları alamıyorum. Çünkü textareaların değerleri kullanıcı tarafından manuel olarak girilecek, comboboxta olduğu gibi veritabanından çekilmeyecek. Bunun dışında diğer değerler var tabi. İyice karıştı sizin anlayacağınız. Aşağıyada formdaki kodlarımı yazıyorum.

    										<select name="cevap[]" id="cevap">
    											<option value="x">Lütfen Cevap Seçiniz</option>
    <?include('module_includes/sessions.php')?>
    <?php
    while ($cevap_list = mysql_fetch_array($cevap_sorgu)) {
    $birey_bilgi = mysql_query("select * from CRM3001 where CRM3102 LIKE '".$bireytc."'") or die("Hata Olustu!");
    $birey_esle = mysql_fetch_array($birey_bilgi);
    
    ?>
    											<option value="<?PHP echo $cevap_list['CRM7101']; ?>,<?PHP echo $cevap_list['CRM7105']; ?>,<?PHP echo $testadi['CRM4101']; ?>,<?PHP echo $bolum_list['CRM5101']; ?>,<?PHP echo $soru_list['CRM6101']; ?>,<?PHP echo $birey_esle['CRM3101']; ?>,<?PHP echo $session_list['CRM1101']; ?>,<?PHP echo $test_numarasi; ?>,<?PHP echo $tarih; ?>"><?PHP echo $cevap_list['CRM7103']; ?></option>
    <? } ?>	
    									
    										</select>
    									</div>		
    								</div> <!-- .field-group -->
    										<p></p>
    										
    										
    <?php
    }
    else
    {
    ?>
    <?php
    while ($cevap_list = mysql_fetch_array($cevap_sorgu)) {
    ?>
    
    										<textarea name="cevap[]" id="cevap" rows="5" cols="100"></textarea>	
    										<input type="text" name="sinavad[]" value="<?PHP echo $testadi['CRM4101']; ?>"><input type="text" name="bolum_name[]" value="<?php echo $bolum_list['CRM5101']; ?>"><input type="text" name="soru_name[]" value="<?php echo $soru_list['CRM6101']; ?>"><input type="text" name="birey_name[]" value="<?PHP echo $birey_esle['CRM3101']; ?>"><input type="text" name="kullanici_name[]" value="<?PHP echo $session_list['CRM1101']; ?>"><input type="text" name="test_no[]" value="<?PHP echo $test_numarasi; ?>"><input type="text" name="tarih[]" value="<?phpP echo $tarih; ?>"><input type="text" name="cevap_adi[]" value="<?PHP echo $cevap_list['CRM7101']; ?>">
    <? } ?>
    formdaki kodlarda bu şekilde. Bir türlü beceremedim.

    Konu biraz uzun oldu farkındayım ama sizden rica gerçekten yardımcı olabilecek arkadaşlardan yardım bekliyorum. Günlerdir uğraşıyorum ancak bi sonuca ulaşamadım. Bu şekilde nasıl yapılacağını bilen yada farklı bir yöntemle de olur diyen arkadaşlardan yardım bekliyorum.
    Arkadaşım sen baştan mantığı yanlış kurmuşsun. Bu şekilde hem mantık hatalı , hem de dışarıdan istenmeyen değer eklenebilir. Senin cevap sayın belli olmadığı için ben istediğim sayıda post gönderebilirim ve veritabanına eklersin, çünkü kontrol yok.

    Halbu ki yapman gereken çok basit formda gösterirken id ile gösterirsin. Post ettikden sonra tekrar veritabanından sorguyu alıp, döngüye sokarsın:

    misal:

    formda:
    <select name="cevap_<?php echo $cevap_list['cevap_id']; ?>" id="cevap_<?php echo $cevap_list['cevap_id']; ?>"> 
    <option value="<?php echo $cevap_list['CRM7103']; ?>"><?php echo $cevap_list['CRM7103']; ?></option> 
    </select>
    
    <textarea name="cevap_<?php echo $cevap_list['cevap_id']; ?>" id="cevap_<?php echo $cevap_list['cevap_id']; ?>" rows="5" cols="100"></textarea>
    Gibi kullanıp

    postta da:

    while ($cevap_list = mysql_fetch_array($cevap_sorgu)) {
     $secilen = $_POST[$cevap_list['cevap_id']; //gerekli temizlemeleri yapmayı unutma real_escape_string vs.
      //vb. kendne göre uyarla gerekenleri
    }
    Bu şekilde hem foreach vs. diye uğraşıp kafan karışmaz, hem de doğrulama yapmış olursun eklemeden.
  • 13-12-2012, 22:49:19
    #3
    Şu anda bilgisayar başında olmadığımdan deneyemiyorum bu mantığı ama en kısa zamanda denicem. Peki diğer verileri nasıl almalıyım hocam. Sınav_id, bölüm_id falan gibi verileri nasıl almalıyım en sağlam şekilde hocam.
  • 13-12-2012, 23:27:52
    #4
    dj_nuz adlı üyeden alıntı: mesajı görüntüle
    Şu anda bilgisayar başında olmadığımdan deneyemiyorum bu mantığı ama en kısa zamanda denicem. Peki diğer verileri nasıl almalıyım hocam. Sınav_id, bölüm_id falan gibi verileri nasıl almalıyım en sağlam şekilde hocam.
    Arkadaşım önceki mesajımda belirttiğim gibi, nasıl şimdi formda göstermek için alıyorsan, post etmeden önce tekrar alacaksın. Hatta formda bazı yerleri sadece posta gelsin diye almışsındır. Onları da form gösterimi sırasında almana gerek olmaz.

    Yani formda sadece kullanıcıya göstereceğin kısımları alıp gösterirsin. Post sırasında da gerekli yerleri alıp, kontrolünü yapar eklersin.
  • 14-12-2012, 13:43:04
    #5
    <select name="cevap_<?php echo $cevap_list['cevap_id']; ?>" id="cevap_<?php echo $cevap_list['cevap_id']; ?>">  
    <option value="<?php echo $cevap_list['CRM7103']; ?>"><?php echo $cevap_list['CRM7103']; ?></option>  
    </select> 
    
    <textarea name="cevap_<?php echo $cevap_list['cevap_id']; ?>" id="cevap_<?php echo $cevap_list['cevap_id']; ?>" rows="5" cols="100"></textarea>

    yukarıdaki şekilde ekrana çıktı alamıyorum çünkü comboboxtaki değerler çoktan seçmeli yani bir tane cevap bulunmuyor.dolayısıyla name kısmında cevap_id boş geliyor birden fazla cevap olduğu için.

    Önerisi olan arkadaşlardan yardım bekliyorum.
  • 15-12-2012, 04:19:28
    #6
    dj_nuz adlı üyeden alıntı: mesajı görüntüle
    <select name="cevap_<?php echo $cevap_list['cevap_id']; ?>" id="cevap_<?php echo $cevap_list['cevap_id']; ?>">  
    <option value="<?php echo $cevap_list['CRM7103']; ?>"><?php echo $cevap_list['CRM7103']; ?></option>  
    </select> 
    
    <textarea name="cevap_<?php echo $cevap_list['cevap_id']; ?>" id="cevap_<?php echo $cevap_list['cevap_id']; ?>" rows="5" cols="100"></textarea>

    yukarıdaki şekilde ekrana çıktı alamıyorum çünkü comboboxtaki değerler çoktan seçmeli yani bir tane cevap bulunmuyor.dolayısıyla name kısmında cevap_id boş geliyor birden fazla cevap olduğu için.

    Önerisi olan arkadaşlardan yardım bekliyorum.
    Arkadaşım form buradaki gibi ise yanlış kullanmışsın. Hem select hem de textarea ya name olarak cevap_<?php echo $cevap_list['cevap_id']; ?> vermişsin. Onu düzeltirsen ve forma doğru girdiyse postta sorunsuzca alman lazım.

    yani select ise $_POST['cevap_3'] deyince seçilen option değeri textarea ise yazılan yazı gelir.Eğer hem select hem de textarea aynı soru için kullanılacaksa farklı isim verip alman gerekli. Tam olarak senin neye göre formda gösterdiğin buradan anlaşılamadığı için kesin yazamıyorum.
  • 15-12-2012, 10:27:34
    #7
    hocam anlattığım gibi bazı sorularda cevaplar çoktan seçmeli yani combobox ile veritabanından çekiliyor ama bazı sorularda klasik yani textarea olarak geliyor. Veri tabanına kayıtlı çoktan seçmeli cevapların sayısal bir değeri bulunuyor kullanıcıya gösterilmeyen. Textarea olan cevapların ise veri tabanında kayıtlı bir değeri yok kullanıcı gireceği için sınav esnasında. Şimdi selectlerin name kısmına cevap id olarak isim atayamıyorum çünkü cevaplar 1den fazla o yüzden name kısmına hangi cevabın idsi gelsin. Boş geliyor o yüzden. Bu cevaplar yapılan testler adında bir tabloya kayıt edilecek ve cevap değeri kısmına eğer soru çoktan seçmeliyse seçilen cevabın veritabanındaki değeri kayıt edilecek eğer textarea ise kullanıcının girdiği değer kayıt edilecek. Hal böyle olunca mantığı oturtup yapamadım. Şimdi selectlerin name kısmına cevap id sini vremiyorum. Sizin dediğinizide yapamadım bu yüzden. Eğer ikisine ayrı isim verirsem veritabanında aynı tabloya nsaıl kayıt edicem onuda bilmiyorum. sorunum bu açıkcası.
  • 15-12-2012, 14:20:09
    #8
    dj_nuz adlı üyeden alıntı: mesajı görüntüle
    hocam anlattığım gibi bazı sorularda cevaplar çoktan seçmeli yani combobox ile veritabanından çekiliyor ama bazı sorularda klasik yani textarea olarak geliyor. Veri tabanına kayıtlı çoktan seçmeli cevapların sayısal bir değeri bulunuyor kullanıcıya gösterilmeyen. Textarea olan cevapların ise veri tabanında kayıtlı bir değeri yok kullanıcı gireceği için sınav esnasında. Şimdi selectlerin name kısmına cevap id olarak isim atayamıyorum çünkü cevaplar 1den fazla o yüzden name kısmına hangi cevabın idsi gelsin. Boş geliyor o yüzden. Bu cevaplar yapılan testler adında bir tabloya kayıt edilecek ve cevap değeri kısmına eğer soru çoktan seçmeliyse seçilen cevabın veritabanındaki değeri kayıt edilecek eğer textarea ise kullanıcının girdiği değer kayıt edilecek. Hal böyle olunca mantığı oturtup yapamadım. Şimdi selectlerin name kısmına cevap id sini vremiyorum. Sizin dediğinizide yapamadım bu yüzden. Eğer ikisine ayrı isim verirsem veritabanında aynı tabloya nsaıl kayıt edicem onuda bilmiyorum. sorunum bu açıkcası.
    Arkadaşım 2-3 mesajdır yazıyorum anlatamıyorum sanırım

    sen posttan gelen cevabı neye göre değerlendiriyorsun ? Hangi soruya ne cevap verildiğine göre değil mi ?
    Şimdi diyelim ki soru 1. Bu select mi olacak yani çoktan seçmeli mi, yoksa cevap mı yazılacak.
    Diyelim ki çoktan seçmeli, veritabanı yapını bilmediğimden misalen yazıyorum:

    <select name="soru_1"><!-- soru idini yazıyoruz-->
    <option value="secenek_1">Seçenek 1</option><!-- seçenek idini yazıyoruz-->
    </select>
    Postta da:
    $cevap_1 = $_POST['soru_1']; //escape vs. temizlemeyi unutma ben öylesine yazıyorum.
    yazınca soru 1 de adam hangi seçeneği seçmişse onun idi geliyor.
    Sen de veritabanına eklemeden zaten çekeceksin tekrar soru ve seçenekleri önceki mesajımda dediğim gibi.
    Kontrol edeceksin böyle bir seçenek varsa ekleyeceksin. Textarea ise zaten direk temizleyip yazılan cevabı almış oluyorsun.
    Bu kadar basit yani mantığını anladıktan sonra.
  • 16-12-2012, 12:17:03
    #9
    İşin açığı ben kayıt sayfasında sorgu ile çekme kısmında takılmışım.şimdi gayet iyi anladım? Bunu denicem. Mantık anlaşılmıştır. Saolun.