BEYAZMASTER adlı üyeden alıntı

@DarkCodder üstadım şimdi desteğinizi rica edebilirim...

Yazdığınız kodun mantığı çok güzel fakat finalde bir takılma söz konusu...


Select ile seçilen yada input içine yazılan değeri veri tabanı bağlantısı olmadan sadece ekrana yazdırırken hiçbir sorun yok.


Fakat işin içine veri tabanını dahil edince iş biraz karmaşıklaşıyor...


Veri tabanı bağlantısı olduğunda select içindeki hazır option'lardan biri seçildiğinde de sorun yok doğal olarak.



<option value="Diğer">Diğer</option> seçilince olanlar ise şunlar;


1.Sorun => İnput'un name değerinin farklı olması!

input'un name değeri farklı olduğunda yani ===> name="ozel" olduğunda

veri tablosunda bu isimde bir sütun olmadığı için

=> input'un içine yazılan değeri dikkate almıyor

=> veri tablosundaki category sütununa seçmiş olduğumuz option'un değeri olan "Diğer" ifadesini yazdırıyor.

=> özetle: input'u tamamen yok sayıp tamamen select'i baz alıyor.


Siz kodunuzu paylaşmadan önce öngördüğüm ve paylaştığım algoritma taslağında & senaryoda;

Hem select'in hem de input'un name değeri ===> name="category" olmalı doğrultusundaydı...

(Atladığım, yanıldığım, bilmediğim durumlar olabilir...)

 

2.Sorun => Mükerrer name değeri olması!

Üstteki sorunu ortadan kaldırmak için input'un name değerini  ===> name="category" yaptığımda ise şunlar oluyor;

=> input'un içine bir değer yazılırsa o değeri category sütununa kayıt ediyor.

=> input'un içine bir değer yazılmaz ise boş değer kayıt ediyor, yani select içindeki required hükümsüz hale geliyor.
      
      Halbuki mutlaka bir seçim yapılması gerekiyor...

      İnput isteğe bağlı bir öğe olduğu için ona da required kuralı eklemek işin mantığına ters olur...



Tam çözüme ulaşmaya çok yakın olduğumuzu sanıyorum...


(Üzerinde çalıştıkça güncelliyorum...)

 Merhaba; 

Backend tarafta category sütünuna category_son isminde bir değişken atayıp, ozel isimli input boş ise category_son değişkenine category selectinden gelen değeri, boş değilse category_son değişkenine ozel isimli inputdan gelen değeri yazdırarak, veritabanındaki category sütununa category_son değişkeninin değerini yazdırırsanız, istediğinizi alırsınız diye düşünüyorum. Kodda veritabanı bağlantısı olmadan düzenleme yaparak INSERT kodlarını ekledim, kendinize göre güncelleyebilirsiniz.

    <!DOCTYPE html>
    <html>
    <head>
        <title></title>
    </head>
    <body>
                        <form method="post" action="">
                <select id="category" name="category" required>
    
    <option value=""> Lütfen birini seçiniz </option>
    <option value="Sarı"> Sarı </option>
    <option value="Kırmızı"> Kırmızı </option>
    <option value="Diger">Özel Olarak Belirteceğim</option>
    
</select>
<br><br>

<input id="ozel" type="text" placeholder="Özel seçimi bu alana yazınız" name="ozel">
<br><br>
                        <input type="submit" value="Gönder">

                        </form>

                                        <?php 
                                        if(isset($_POST['category'])){
                                if($_POST['category']!="Diger"){
                            $secilen_cat=$_POST['category'];
                                }else{
                            $secilen_cat=$_POST['ozel'];
                                }
                              $kayit=$db->prepare("INSERT INTO tablo_adi SET category=?");
                              $kayit->execute(array("$secilen_cat"));
                                echo "<br><br> Seçilen kategori $secilen_cat";
                                        }

                                         ?>

    <script
  src="https://code.jquery.com/jquery-3.6.4.min.js"
  integrity="sha256-oP6HI9z1XaZNBrJURtCoUT5SUnxFr8s3BzRl+cbzUq8="
  crossorigin="anonymous"></script>

  <script type="text/javascript">
        $("#ozel").hide();
       $('#category').on('change', function() {  
        var catdeger = $(this).val();
       if(catdeger=="Diger"){
        $("#ozel").show();
       }else{
        $("#ozel").hide();
       }
    })
  </script>
    </body>
    </html>