• 21-01-2023, 21:39:24
    #1
    Selamlar,
    Bir duyuru sistemim var.
    Kullanıcıdan başlık ve içerik girmesini istiyorum.
    Bir şablon yaptım ve kullanıcıdan şablonda bulunan "Bölüm Adı" kısmını değiştirmesini istiyorum.
    İnsan hatasına yer vermemek için içeriği kontrol edip, içinde "Bölüm Adı" geçiyorsa uyarı vermesini istediğim bir if koşulu yazdım fakat çalıştıramıyorum. (Kullanıcının oluşturmuş olduğu duyuru yaklaşık 300 kişiye aynı anda mail gideceği için tüm kontrolleri göndermeden önce yapmak istiyorum.)
    Nerede hata yapıyorum çözemedim, bir kaç gündür uğraşıyorum fakat sonuç alamadım.

    Textarea;
        <textarea id="body" name="body">
          Sevgili Ailemiz,
          </br>
          </br>
          Sevgilerimizle,
          </br>
          <b>Bölüm Adı</b>
        </textarea>
    Javascript;

    <script>
        document.getElementById('post-form').addEventListener('submit', function(e){
          e.preventDefault();
          addAnnouncement();
        });
    
        function addAnnouncement(e) {
          CKEDITOR.instances['body'].updateElement();
          // Form verilerini alın
          var title = document.getElementById('title').value;
          var body = CKEDITOR.instances['body'].getData();
          var category_id = document.getElementById('category_id').value;
    
          // Eğer title 5 karakterden düşükse uyarı mesajı yazdır
          if (title.length < 5) {
              Swal.fire({
                icon: 'error',
                title: 'Hata!',
                text: 'Başlık minimum 5 karakterden oluşması gerekiyor.',
                confirmButtonText: 'Tamam',
              })
              return;
          }
    
          if (body.includes("Bölüm Adı")) {
              Swal.fire({
                  icon: 'warning',
                  title: 'Uyarı!',
                  text: 'Lütfen "Bölüm Adı" yerine gerçek bölüm adını kullanınız.',
                  confirmButtonText: 'Tamam',
              })
              return;
          }
    
          if (body.split(" ").length < 50) {
              Swal.fire({
                  icon: 'error',
                  title: 'Hata!',
                  text: 'İçerik minimum 50 karakterden oluşması gerekiyor.',
                  confirmButtonText: 'Tamam',
              })
              return;
          }
    
          Swal.fire({
            title: 'Dikkat!',
            text: 'Duyuru yayınlamak üzeresiniz. Bu yayınlayacağınız duyuru tüm kişilere E-Mail olarak gidecektir. İşlemi onaylıyor musunuz?',
            icon: 'warning',
            showCancelButton: true,
            confirmButtonColor: '#3085d6',
            cancelButtonColor: '#d33',
            confirmButtonText: 'Evet, gönder.',
            cancelButtonText: 'Hayır, iptal et!'
          }).then((result) => {
            if (result.value) {
              // Form verilerini alın
              var title = document.getElementById('title').value;
              var body = document.getElementById('body').value;
              var category_id = document.getElementById('category_id').value;
    
              // POST isteği gönderin
              $.ajax({
                url: "duyuru_ekle_islem.php",
                type: "POST",
                dataType: "JSON",
                data: {title: title, body: body, category_id: category_id},
                success: function(json){
                   toastr.success(json.post.msg);
                }
              });
            }
          });
          e.preventDefault();
        }
    </script>
  • 21-01-2023, 21:46:02
    #2
    if(!stristr($string,$aranan){
    //içinde yoksa kısmı
    } else {
    //içinde varsa
    }
    Mobildeyim kod olarak yazamadım
  • 21-01-2023, 21:55:00
    #3
    ErayEfe adlı üyeden alıntı: mesajı görüntüle
    if(!stristr($string,$aranan){
    //içinde yoksa kısmı
    } else {
    //içinde varsa
    }
    Mobildeyim kod olarak yazamadım
    Mantıken javascript içerisinde body.includes olarak çalışması gerekmez miydi?
    Aynı bölümde tutmak istiyorum kodları benden sonraki arkadaşların kodları düzgün anlayıp, düzeltebilmesi için.
    Bu kelime içeriyorsa bölümünü javascript'e dahil edemez miyim?
  • 21-01-2023, 21:56:43
    #4
    turansonkaya adlı üyeden alıntı: mesajı görüntüle
    Mantıken javascript içerisinde body.includes olarak çalışması gerekmez miydi?
    Aynı bölümde tutmak istiyorum kodları benden sonraki arkadaşların kodları düzgün anlayıp, düzeltebilmesi için.
    Bu kelime içeriyorsa bölümünü javascript'e dahil edemez miyim?
    Javascript tarafında bilgim yok. Fonksiyon ismleri her dilde aynı olmayabiliyor.
  • 21-01-2023, 21:59:33
    #5
    ErayEfe adlı üyeden alıntı: mesajı görüntüle
    Javascript tarafında bilgim yok. Fonksiyon ismleri her dilde aynı olmayabiliyor.
    Teşekkür ederim.
    Bu konuda bilgisi olan bir arkadaş varsa hatamızı söyleyebilir mi?
    Olmazsa PHP ile kontrol etmek durumunda kalacağız sanırım.
  • 28-01-2023, 10:17:50
    #6
    Hata yapmış olabilirsiniz. Öncelikle, "body" değişkeninin içerisinde "Bölüm Adı" aramak için "includes" yerine "indexOf" kullanabilirsiniz. Ayrıca, "CKEDITOR.instances['body'].getData();" kullanarak alınan içeriği kontrol etmelisiniz. Eğer hala çalışmıyorsa, "duyuru_ekle_islem.php" dosyasının kodlarını incelemeniz ve orada yaptığınız işlemleri kontrol etmeniz önerilir.
  • 28-01-2023, 10:36:17
    #7
    alit adlı üyeden alıntı: mesajı görüntüle
    Hata yapmış olabilirsiniz. Öncelikle, "body" değişkeninin içerisinde "Bölüm Adı" aramak için "includes" yerine "indexOf" kullanabilirsiniz. Ayrıca, "CKEDITOR.instances['body'].getData();" kullanarak alınan içeriği kontrol etmelisiniz. Eğer hala çalışmıyorsa, "duyuru_ekle_islem.php" dosyasının kodlarını incelemeniz ve orada yaptığınız işlemleri kontrol etmeniz önerilir.
    Bu konuyu açıktan sonra bir kaç güncelleme daha yaptım kodlarda fakat sonuç aynı.
    Şuan kontrol ediyor fakat "Bölüm Adı" ibaresini silsem dahi o uyarıyı vermeye devam ediyor, anlık kontrol etmiyor.
    Buradan detaylı görebilirsiniz;
    https://drive.google.com/file/d/1hu8...ew?usp=sharing
  • 28-01-2023, 10:44:12
    #8
    if (body.includes("Bölüm Adı")) kısmında includes yerine indexOf("Bölüm Adı") kullanmanız gerekebilir. Ayrıca, body değişkeni CKEDITOR.instances['body'].getData() ile alındığı için, document.getElementById('body').value ile almaya gerek yok. Ayrıca e.preventDefault() fonksiyonunu addAnnouncement(e) fonksiyonunun en sonunda çağırmak daha doğru olacaktır. Düzenlediğiniz kod şöyle olmalı:

    document.getElementById('post-form').addEventListener('submit', function(e){
    e.preventDefault();
    addAnnouncement();
    });

    function addAnnouncement() {
    CKEDITOR.instances['body'].updateElement();
    // Form verilerini alın
    var title = document.getElementById('title').value;
    var body = CKEDITOR.instances['body'].getData();
    var category_id = document.getElementById('category_id').value;

    // Eğer title 5 karakterden düşükse uyarı mesajı yazdır
    if (title.length < 5) {
    Swal.fire({
    icon: 'error',
    title: 'Hata!',
    text: 'Başlık minimum 5 karakterden oluşması gerekiyor.',
    confirmButtonText: 'Tamam',
    })
    return;
    }

    if (body.indexOf("Bölüm Adı") != -1) {
    Swal.fire({
    icon: 'warning',
    title: 'Uyarı!',
    text: 'Lütfen "Bölüm Adı" yerine gerçek bölüm adını kullanınız.',
    confirmButtonText: 'Tamam',
    })
    return;
    }

    if (body.split(" ").length < 50) {
    Swal.fire({
    icon: 'error',
    title: 'Hata!',
    text: 'İçerik minimum 50 karakterden oluşması gerekiyor.',
    confirmButtonText: 'Tamam',
    })
    return;
    }

    Swal.fire({
    title: 'Dikkat!',
    text: 'Duyuru yayınlamak üzeresiniz. Bu yayınlayacağınız duyuru tüm kişilere E-Mail olarak gidecektir. İşlemi onaylıyor musunuz?',
    icon: 'warning',
    showCancelButton: true,
    confirmButtonColor: '#3085d6',
    cancelButtonColor: '#d33',
    confirmButtonText: 'Evet, gönder.',
    cancelButtonText: 'Hayır, iptal et
  • 28-01-2023, 10:46:38
    #9
    alit adlı üyeden alıntı: mesajı görüntüle
    if (body.includes("Bölüm Adı")) kısmında includes yerine indexOf("Bölüm Adı") kullanmanız gerekebilir. Ayrıca, body değişkeni CKEDITOR.instances['body'].getData() ile alındığı için, document.getElementById('body').value ile almaya gerek yok. Ayrıca e.preventDefault() fonksiyonunu addAnnouncement(e) fonksiyonunun en sonunda çağırmak daha doğru olacaktır. Düzenlediğiniz kod şöyle olmalı:

    document.getElementById('post-form').addEventListener('submit', function(e){
    e.preventDefault();
    addAnnouncement();
    });

    function addAnnouncement() {
    CKEDITOR.instances['body'].updateElement();
    // Form verilerini alın
    var title = document.getElementById('title').value;
    var body = CKEDITOR.instances['body'].getData();
    var category_id = document.getElementById('category_id').value;

    // Eğer title 5 karakterden düşükse uyarı mesajı yazdır
    if (title.length < 5) {
    Swal.fire({
    icon: 'error',
    title: 'Hata!',
    text: 'Başlık minimum 5 karakterden oluşması gerekiyor.',
    confirmButtonText: 'Tamam',
    })
    return;
    }

    if (body.indexOf("Bölüm Adı") != -1) {
    Swal.fire({
    icon: 'warning',
    title: 'Uyarı!',
    text: 'Lütfen "Bölüm Adı" yerine gerçek bölüm adını kullanınız.',
    confirmButtonText: 'Tamam',
    })
    return;
    }

    if (body.split(" ").length < 50) {
    Swal.fire({
    icon: 'error',
    title: 'Hata!',
    text: 'İçerik minimum 50 karakterden oluşması gerekiyor.',
    confirmButtonText: 'Tamam',
    })
    return;
    }

    Swal.fire({
    title: 'Dikkat!',
    text: 'Duyuru yayınlamak üzeresiniz. Bu yayınlayacağınız duyuru tüm kişilere E-Mail olarak gidecektir. İşlemi onaylıyor musunuz?',
    icon: 'warning',
    showCancelButton: true,
    confirmButtonColor: '#3085d6',
    cancelButtonColor: '#d33',
    confirmButtonText: 'Evet, gönder.',
    cancelButtonText: 'Hayır, iptal et
    Sanırım aynı şeyleri düşünmüşüz, bende o şekilde düzelttim fakat sonuç aynıydı hatta dediğiniz gibi yaptığım zaman "Bölüm Adı" ibaresinin geçtiğini bile okuyamıyordu.
    En son şu şekilde bir kod ile hallettim bu seferde anlık olarak okumadığı için ibareyi silsem dahi hata almaya devam ediyorum.
    Şuan güncel kodlarım;

    <script>
        document.getElementById('post-form').addEventListener('submit', function(e){
          e.preventDefault();
          addAnnouncement();
        });
    
        function addAnnouncement(e) {
          CKEDITOR.instances['body'].updateElement();
          // Form verilerini alın
          var title = document.getElementById('title').value;
          var body = CKEDITOR.instances['body'].getData();
          var bodyBolumKontrol = document.getElementById("body").textContent;
          var category_id = document.getElementById('category_id').value;
    
          // Eğer title 5 karakterden düşükse uyarı mesajı yazdır
          if (title.length < 5) {
              Swal.fire({
                icon: 'error',
                title: 'Hata!',
                text: 'Başlık minimum 5 karakterden oluşması gerekiyor.',
                confirmButtonText: 'Tamam',
              })
              return;
          }
    
          // İçerik içerisinde "Bölüm Adı" ibaresini değiştirmemişse uyarı mesajı yazdır
          if (bodyBolumKontrol.match(/Bölüm Adı/g)) {
              Swal.fire({
                  icon: 'warning',
                  title: 'Uyarı!',
                  text: 'Lütfen "Bölüm Adı" yerine gerçek bölüm adını kullanınız.',
                  confirmButtonText: 'Tamam',
              })
              return;
          }
    
          // İçerik 50 karakterden düşükse uyarı mesajı yazdır
          if (body.split(" ").length < 30) {
              Swal.fire({
                  icon: 'error',
                  title: 'Hata!',
                  text: 'İçerik minimum 30 karakterden oluşması gerekiyor.',
                  confirmButtonText: 'Tamam',
              })
              return;
          }
    
          // Son uyarı, burada kullanıcıdan son onayı alıp mail göndertiyoruz
          Swal.fire({
            title: 'Dikkat!',
            text: 'Duyuru yayınlamak üzeresiniz. Bu yayınlayacağınız duyuru tüm kişilere E-Mail olarak gidecektir. İşlemi onaylıyor musunuz?',
            icon: 'warning',
            showCancelButton: true,
            confirmButtonColor: '#3085d6',
            cancelButtonColor: '#d33',
            confirmButtonText: 'Evet, gönder.',
            cancelButtonText: 'Hayır, iptal et!'
          }).then((result) => {
            if (result.value) {
              // Form verilerini alın
              var title = document.getElementById('title').value;
              var body = document.getElementById('body').value;
              var category_id = document.getElementById('category_id').value;
    
              // POST isteği gönderin
              $.ajax({
                url: "duyuru_ekle_islem.php",
                type: "POST",
                dataType: "JSON",
                data: {title: title, body: body, category_id: category_id},
                success: function(json){
                   toastr.success(json.post.msg);
                }
              });
            }
          });
          e.preventDefault();
        }
    </script>