• 03-01-2018, 02:46:43
    #1
    Merhaba, 1 haftadır yabanci sitelerden ve r10'da bulduğum tüm yöntemleri denedim ama beceremedim.

    Yapmak istediğim şey bir kişi oluştururken, sorumlu olacağı ilçeleri de eklemek. Bu ilçeler daha önceden oluşturulan table'dan çekilip eklenecek. Ama şuan ilçeler manuel olarak ekli. Her neyse ilçeleri göstermek için checkbox kullandım. Dreamweaver ile oluşturulan kodlar şu şekilde;

    $editFormAction = $_SERVER['PHP_SELF'];
    if (isset($_SERVER['QUERY_STRING'])) {
      $editFormAction .= "?" . htmlentities($_SERVER['QUERY_STRING']);
    }
    
    if ((isset($_POST["MM_insert"])) && ($_POST["MM_insert"] == "uye")) {
      $insertSQL = sprintf("INSERT INTO cokluilce (IlceAdi) VALUES (%s)",
                           GetSQLValueString($_POST['IlceAdi'], "text"));
    
      mysql_select_db($database_databasebaglan, $databasebaglan);
      $Result1 = mysql_query($insertSQL, $databasebaglan) or die(mysql_error());
    }
                    <form method="POST" action="<?php echo $editFormAction; ?>" name="uye" id="uye" class="form-horizontal" enctype="multipart/form-data">
    
    
                     
                                                     <div class="control-group">
                                        <label class="control-label">Checkbox</label>
                                        <div class="controls">
                                            <label class="checkbox">
                                                <input name="IlceAdi" type="checkbox" id="IlceAdi" value="Buca"> Buca
                                            </label>
                                            <label class="checkbox">
                                                <input name="IlceAdi" type="checkbox" id="IlceAdi" value="Gaziemir"> Gaziemir
                                            </label>
                                        </div>
                                    </div>
                     
                     
                     
                     
                     
                     
                     
                     <div class="form-actions">
                                  <button type="submit" class="btn btn-success">Submit</button>
                               </div>
                     <input type="hidden" name="MM_insert" value="uye">
                     
                     
                     </form>
    Başka kaynaklardan bulup denediğim bazı kodlar ile aynı ilçe adını seçilen checkbox sayısı kadar ekledim, en çok yakşaltığım çözüm yolu buydu ama istediğim bu değil.

    Bu kodlar ile sadece tek ilce ekleniyor. Şuan deneme amaçlı sadece aynı id ye sahip birden fazla IlceAdi eklemeye çalışıyorum. Tabloların nasıl olması gerektiği mantığını anlayamadım. Mantık olarak veya kod ile yardımcı olabilir misiniz?
  • 03-01-2018, 12:34:54
    #2
    Kimlik doğrulama veya yönetimden onay bekliyor.
    Yaptığın hataları ve yapacaklarını söyleyeyim
    öncelikle input name="IlceAdi" değil name="IlceAdi[]" olmalı.
    POST kısmında ise sana array() olarak bu veri gelecektir, bunu 2 türlü veritabanına ekleyebilirsin.
    1. array()' ı direk serialize edip veritabanına ekleyebilirsin.
    $ilceadi = serialize($_POST['IlceAdi']);
    2. implode() kullanıp aralarına virgül ekleyerek veritabanına ekleyebilirsin.
    $ilceadi = $_POST['IlceAdi'];
    $ilceadi = implode(',', $ilceadi);
  • 03-01-2018, 14:59:41
    #3
    Doğru mu anladım bilmiyorum ama bir kişiye birden çok ilçede yetki vermek istiyorsun sanırım. Bence bunun en kolay yolu, yetkilendirmeler için ayrı bir tablo oluşturup, orada kisiID ve ilceAdi gibi iki sütunda sıralama yapmak. Ardından da okuma esnasında o kişiyle ilişkili tüm ilçeleri listeleyebilirsin. Ben buna benzer bir kodu kullanıyorum, ne kadar doğru yanlış bilmiyorum ama bende işe yarıyor.
      $islemUserID = $_POST['kisiID']; // bu değeri hidden olarak çekebilirsiniz
      $islemOnay = "1";
      if ( isset($_POST['ilceAdi']) ) { // herhangi bir ilçe seçilmiş mi diye bakalım
        $delete = $db->exec("DELETE FROM ilceYetkiler WHERE kisiID='{$islemUserID}'"); // aynı satır tekrar oluşmasın diye önce bu kişiye ait kayıtları silelim.
        $array = $_POST['ilceAdi']; 
        foreach ($array as $yenideger) { // şimdi checkbox da işaretlenmiş her ilçe için yeni bir satır oluşturalım.
          $ilceYetki = $db->prepare("INSERT INTO ilceYetkiler SET
            ilceAdi = :yeni_ilceAdi,
            kisiID = :yeni_kisiID,
            onay = :yeni_onay
          ");
          $ilceYetki->execute(array(
               "yeni_ilceAdi" => $yenideger,
               "yeni_kisiID" => $islemUserID,
               "yeni_onay" => $islemOnay
          ));
        }
        if($ilceYetki->rowCount()){
          echo 'İşlem tamam';
        }
      } else {
        echo 'En az bir ilçe seçmelisin';
      }
  • 03-01-2018, 15:35:01
    #4
    coder16 adlı üyeden alıntı: mesajı görüntüle
    Yaptığın hataları ve yapacaklarını söyleyeyim
    öncelikle input name="IlceAdi" değil name="IlceAdi[]" olmalı.
    POST kısmında ise sana array() olarak bu veri gelecektir, bunu 2 türlü veritabanına ekleyebilirsin.
    1. array()' ı direk serialize edip veritabanına ekleyebilirsin.
    $ilceadi = serialize($_POST['IlceAdi']);
    2. implode() kullanıp aralarına virgül ekleyerek veritabanına ekleyebilirsin.
    $ilceadi = $_POST['IlceAdi'];
    $ilceadi = implode(',', $ilceadi);
    Cevabınız için teşekkür ederim. Verdiğiniz iki çözümü de denedim ama sorunu çözemedim. İki kod da aynı sonucu veriyor. Seçtiğim iki ilçeyi farkli id'lerle ve aynı isimle kaydediyor. Yani iki ilçe seçtiğimde şu şekilde ekliyor;

    IlceID--IlceAdi
    1------Gaziemir
    2------Gaziemir



    ozraksy adlı üyeden alıntı: mesajı görüntüle
    Doğru mu anladım bilmiyorum ama bir kişiye birden çok ilçede yetki vermek istiyorsun sanırım. Bence bunun en kolay yolu, yetkilendirmeler için ayrı bir tablo oluşturup, orada kisiID ve ilceAdi gibi iki sütunda sıralama yapmak. Ardından da okuma esnasında o kişiyle ilişkili tüm ilçeleri listeleyebilirsin. Ben buna benzer bir kodu kullanıyorum, ne kadar doğru yanlış bilmiyorum ama bende işe yarıyor.
      $islemUserID = $_POST['kisiID']; // bu değeri hidden olarak çekebilirsiniz
      $islemOnay = "1";
      if ( isset($_POST['ilceAdi']) ) { // herhangi bir ilçe seçilmiş mi diye bakalım
        $delete = $db->exec("DELETE FROM ilceYetkiler WHERE kisiID='{$islemUserID}'"); // aynı satır tekrar oluşmasın diye önce bu kişiye ait kayıtları silelim.
        $array = $_POST['ilceAdi']; 
        foreach ($array as $yenideger) { // şimdi checkbox da işaretlenmiş her ilçe için yeni bir satır oluşturalım.
          $ilceYetki = $db->prepare("INSERT INTO ilceYetkiler SET
            ilceAdi = :yeni_ilceAdi,
            kisiID = :yeni_kisiID,
            onay = :yeni_onay
          ");
          $ilceYetki->execute(array(
               "yeni_ilceAdi" => $yenideger,
               "yeni_kisiID" => $islemUserID,
               "yeni_onay" => $islemOnay
          ));
        }
        if($ilceYetki->rowCount()){
          echo 'İşlem tamam';
        }
      } else {
        echo 'En az bir ilçe seçmelisin';
      }
    Cevabınız için teşekkür ederim. Doğru anlamışssınız. Doktor ve hemşirelere ilçeler atamak istiyorum. Bunlar için doktorlar ve hemsireler tablolarini oluşturdum. Örnek olarak DoktorID DoktorAdi ve IlceID şeklimde oluşturdum. Ek olarak İlçeler tablosunu da oluşturdum.IlceID ve IlceAdi şeklinde. Doktor ve hemşirelere nasıl birden çok ilçe ekleyeceğimin mantığını tam anlayamadım. Tabloları oluşturuken mi hata yaptım aceba. Verdiğiniz kodu da tam anlayamadım.
  • 04-01-2018, 10:14:59
    #5
    old_boy adlı üyeden alıntı: mesajı görüntüle
    Cevabınız için teşekkür ederim. Verdiğiniz iki çözümü de denedim ama sorunu çözemedim. İki kod da aynı sonucu veriyor. Seçtiğim iki ilçeyi farkli id'lerle ve aynı isimle kaydediyor. Yani iki ilçe seçtiğimde şu şekilde ekliyor;

    IlceID--IlceAdi
    1------Gaziemir
    2------Gaziemir





    Cevabınız için teşekkür ederim. Doğru anlamışssınız. Doktor ve hemşirelere ilçeler atamak istiyorum. Bunlar için doktorlar ve hemsireler tablolarini oluşturdum. Örnek olarak DoktorID DoktorAdi ve IlceID şeklimde oluşturdum. Ek olarak İlçeler tablosunu da oluşturdum.IlceID ve IlceAdi şeklinde. Doktor ve hemşirelere nasıl birden çok ilçe ekleyeceğimin mantığını tam anlayamadım. Tabloları oluşturuken mi hata yaptım aceba. Verdiğiniz kodu da tam anlayamadım.
    Merhabalar,
    Öncelikle oluşturduğunuz tablolara ek bir yetki tablosu oluşturmanız gerekmekte;
    Tablo 1 : doktorlar (doktorID - doktorAdi - vb.)
    Tablo 2 : ilceler (ilceID - ilceAdi - vb.)
    Tablo 3 : yetkilendirmeler (yetkiID - doktorID - ilceID)
    Burada benim gönderdiğim kod betiği, yalnızca yetkilendirmeler tablosu üzerinde işlem yapıyor. Mantık olarak, her yeni satırda bir doktorun bir ilçeyle olan ilişkisini gösteriyor. Kod öncelikle, eğer varsa geçmiş yetkilendirmeleri siliyor, ardından checklist ten gelen her değer için tekrar yetkilendirme yapıyor.
    Yine takıldığınız bir nokta olursa elimden geldiğince yardımcı olmaya çalışırım.
  • 04-01-2018, 19:28:12
    #6
    ozraksy adlı üyeden alıntı: mesajı görüntüle
    Merhabalar,
    Öncelikle oluşturduğunuz tablolara ek bir yetki tablosu oluşturmanız gerekmekte;
    Tablo 1 : doktorlar (doktorID - doktorAdi - vb.)
    Tablo 2 : ilceler (ilceID - ilceAdi - vb.)
    Tablo 3 : yetkilendirmeler (yetkiID - doktorID - ilceID)
    Burada benim gönderdiğim kod betiği, yalnızca yetkilendirmeler tablosu üzerinde işlem yapıyor. Mantık olarak, her yeni satırda bir doktorun bir ilçeyle olan ilişkisini gösteriyor. Kod öncelikle, eğer varsa geçmiş yetkilendirmeleri siliyor, ardından checklist ten gelen her değer için tekrar yetkilendirme yapıyor.
    Yine takıldığınız bir nokta olursa elimden geldiğince yardımcı olmaya çalışırım.
    İlgilendiğiniz için öncelikle tekrardan teşekkür ederim. Şuan son kıvama getirdim. Tek sıkındı kaldı. Dropdowndan dokturu seçiyorum, sonrasında checboxdan kaç tane ilçe seçtiysem o sayıda kayıt tabloya ekleniyor. Sıkıntı ise eklenenlerin ilçeleri aynı id numarasına sahip. Yani aynı ilceid ye sahip seçtiğim checkbox kadar kayıt ekleniyor. For each döngüsü ile yapmaya çalıştım ama bu sıkıntı çekti. Önerebileceğiniz başka yöntem var mı?
    if ((isset($_POST["MM_insert"])) && ($_POST["MM_insert"] == "uye")) {
    foreach($_POST['IlceID'] as $index => $val){
    
      $insertSQL = sprintf("INSERT INTO yetki (DoktorID, IlceID) VALUES (%s, %s)",
                           GetSQLValueString($_POST['DoktorID'], "int"),
                           GetSQLValueString(implode(',', $_POST['IlceID']), "int"));
    
    
     }
    for each yerine for kullandım sonuç aynı;

    	for($i = 0; $i < count($_POST['IlceID']); ++$i) {
    Bu arada implode fonksiyonu sanırım işlevini yerine getirmiyor. yetkiIDleri farklı ama aynı ilceid ve doktorid'leri aynı kayıtlar oluşuyor bu kodla.
    Edit:implode işlevsiz değilmiş. Sildiğimde ilçe id'ler null olarak ekleniyor.
  • 04-01-2018, 22:21:34
    #7
    if ((isset($_POST["MM_insert"])) && ($_POST["MM_insert"] == "uye")) {
    foreach($_POST['IlceID'] as $val){
     
      $insertSQL = sprintf("INSERT INTO yetki (DoktorID, IlceID) VALUES (%s, %s)",
                           GetSQLValueString($_POST['DoktorID'], "int"),
                           GetSQLValueString($val, "int"));
     }
    şu şekilde dener misin ?
  • 04-01-2018, 23:35:48
    #8
    coder16 adlı üyeden alıntı: mesajı görüntüle
    if ((isset($_POST["MM_insert"])) && ($_POST["MM_insert"] == "uye")) {
    foreach($_POST['IlceID'] as $val){
     
      $insertSQL = sprintf("INSERT INTO yetki (DoktorID, IlceID) VALUES (%s, %s)",
                           GetSQLValueString($_POST['DoktorID'], "int"),
                           GetSQLValueString($val, "int"));
     }
    şu şekilde dener misin ?
    Mükemmel şekilde çalıştı. Düzenleme ve silme işlemi için de benzer döngüyü kullanmam gerekiyor sanırım. Halledebileceğimi düşünüyorum. İkinize de çok teşekkür ederim zaman ayırdığınız için.
  • 05-01-2018, 00:23:26
    #9
    Kısa bir kod işe yarar...
    ilçeler hücresinde ilçeler; ilçe1,ilçe2 şelinde araya virgül koyarak vt ye ekleniyor.
    Listeleme yaparken explode ile parçalayabilirsin.
    $ilceler = explode(",",$SQLSorgu['ilcenu']);
    gibi...
    //form..
    <form name="doktor" method="post" action="" enctype="multipart/form-data">
    <select name="ilcenu[]" multiple="multiple">
    <option value="1">ILCENu1</option>
    <option value="2">ILCENu2</option>
    </form>
    
    //post...
    foreach ($_POST['ilcenu'] as $ilceler){
    $sorumluilce .= $ilceler.',';
    }