lostyazilim
tr.link

PHP=veri kayıt + veri güncelleme formlarında sunulan seçenekler beğenilmez ise manuel değer girişi!

20 Mesajlar 2.819 Okunma
acebozum
tr.link

BEYAZMASTER BEYAZMASTER YÜCE ALLAH'IN aciz 1 kulu Kullanıcı
  • Üyelik 04.02.2020
  • Yaş/Cinsiyet 43 / E
  • Meslek Yazılım...
  • Konum Diğer
  • Ad Soyad O** B**
  • Mesajlar 597
  • Beğeniler 154 / 153
  • Ticaret 0, (%0)

Merhabalar...

Başlığı şu şekilde açmaya çalışayım;

1) Veri tablosunda category adında bir sütunumuz olduğunu düşünelim.

2) Veri kayıt yada güncelleme formunda category sütunu için önce bir takım hazır seçenekler sunmak istiyorum

* ya select içinde
* ya input radio ile
* ya input checkbox ile

3) Kullanıcı üstte kendine sunulan seçeneklerin dışında kendi özgün kategori adını yazmak isterse içine yazması için altına da

<input type="text" name="category"> koyuyorum.

Fakat formda birden fazla name="category" bulunduğu için hata oluşuyor!

İnput içine veri yazılmışsa ===> önceki öğede (select vs ile)  seçim yapılmışsa bile bu seçimi yok farzetmesi 


select vs ile seçim yapılmışsa + input boş bırakılmışsa ===> inputu yok farzetmesi için

NE YAPMALIYIZ?


Şimdiden teşekkürler...

Mesaj 1 defa düzenlendi. Son düzenleyen: BEYAZMASTER (22.03.2023 18:06)

 

 

ÖNCE "İYİ,DOĞRU,GÜZEL BİR İNSAN" OLMAK (VEFA,TEVAZZU,NAİFLİK,SAYGI,...) GEREK!
Sonra wm oluruz.
wmaraci
reklam

darkcoder darkcoder WM Aracı Kullanıcı
  • Üyelik 05.10.2020
  • Yaş/Cinsiyet 30 / E
  • Meslek Yazılım
  • Konum İstanbul Anadolu
  • Ad Soyad H** Y**
  • Mesajlar 161
  • Beğeniler 2 / 54
  • Ticaret 3, (%100)

Merhaba; 

Select ve radio aynı anda mı kullanılacak tam anlayamadığım için şu şekilde bir örnek vereyim.

Selectbox seçenekleri ; https://prnt.sc/EpvCnvvvMZVB

Veritabanında bulunan sayfa seçilirse; https://prnt.sc/nCvP02iH2Cdu

Harici bağlantı seçilirse açılan input; https://prnt.sc/FfRykpF3QCTb

Bu şekilde işinize yarayacaksa front kısımda on change fonksiyonunu kullanarak selectboxdan gelen değere göre input göster / gizle yapılır.  

Backend kısımda yine selectden gelen değere göre işlem yapılır. Harici Bağlantı select değerini örnek 99999 yaparak, gelen değer 99999 ise inputdaki değerini veritabanına insert eder, eğer değilse selectboxdan gelen değeri insert edersiniz.

 

 

darkcoder darkcoder WM Aracı Kullanıcı
  • Üyelik 05.10.2020
  • Yaş/Cinsiyet 30 / E
  • Meslek Yazılım
  • Konum İstanbul Anadolu
  • Ad Soyad H** Y**
  • Mesajlar 161
  • Beğeniler 2 / 54
  • Ticaret 3, (%100)

Merhaba; 

Select ve radio aynı anda mı kullanılacak tam anlayamadığım için şu şekilde bir örnek vereyim.

Selectbox seçenekleri ; https://prnt.sc/EpvCnvvvMZVB

Veritabanında bulunan sayfa seçilirse; https://prnt.sc/nCvP02iH2Cdu

Harici bağlantı seçilirse açılan input; https://prnt.sc/FfRykpF3QCTb

Bu şekilde işinize yarayacaksa front kısımda on change fonksiyonunu kullanarak selectboxdan gelen değere göre input göster / gizle yapılır.  

Backend kısımda yine selectden gelen değere göre işlem yapılır. Harici Bağlantı select değerini örnek 99999 yaparak, gelen değer 99999 ise inputdaki değerini veritabanına insert eder, eğer değilse selectboxdan gelen değeri insert edersiniz.

BEYAZMASTER

kişi bu mesajı beğendi.

BEYAZMASTER BEYAZMASTER YÜCE ALLAH'IN aciz 1 kulu Kullanıcı
  • Üyelik 04.02.2020
  • Yaş/Cinsiyet 43 / E
  • Meslek Yazılım...
  • Konum Diğer
  • Ad Soyad O** B**
  • Mesajlar 597
  • Beğeniler 154 / 153
  • Ticaret 0, (%0)

darkcoder adlı üyeden alıntı

Merhaba; 

Select ve radio aynı anda mı kullanılacak tam anlayamadığım için şu şekilde bir örnek vereyim.

Selectbox seçenekleri ; https://prnt.sc/EpvCnvvvMZVB

Veritabanında bulunan sayfa seçilirse; https://prnt.sc/nCvP02iH2Cdu

Harici bağlantı seçilirse açılan input; https://prnt.sc/FfRykpF3QCTb

Bu şekilde işinize yarayacaksa front kısımda on change fonksiyonunu kullanarak selectboxdan gelen değere göre input göster / gizle yapılır.  

Backend kısımda yine selectden gelen değere göre işlem yapılır. Harici Bağlantı select değerini örnek 99999 yaparak, gelen değer 99999 ise inputdaki değerini veritabanına insert eder, eğer değilse selectboxdan gelen değeri insert edersiniz.

 

Üstadım öncelikle ilginiz ve cevabınız için teşekkür ederim.

Paylaştığınız örneklere baktım, eğer yanlış anlamadıysam birbirini tetikleyen öğeler bunlar...

(Tam anlayamamış olabilirim.)

 

Benim ifade etmek istediğim daha düz bir yapı aslında.

Sadece çift post işlemini tek posta indirgemem gerekiyor sanıyorum...

Ya da ona benzer birşeyler...

 

Yeterince sade ifade edemediğimi kabul edip daha basit bir tarif yapmaya çalışayım;

<select 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>
	
</select>


Üsttekilerden birini seçmek istemeyen kullanıcı alttaki inputa BEYAZ yazarak ve bu değeri kayıt edebilmeli...

<input type="text" name="category">


Eğer inputa birşey yazılmaz ise select içinde seçilen değer sütuna kayıt edilmeli...

(Select elamanına alternatif olarak ortaya koyduğum radio ve checkbox inputlarını unutabiliriz.)

Hepsi bu üstadım...

Mesaj 1 defa düzenlendi. Son düzenleyen: BEYAZMASTER (22.03.2023 19:21)

 

 

ÖNCE "İYİ,DOĞRU,GÜZEL BİR İNSAN" OLMAK (VEFA,TEVAZZU,NAİFLİK,SAYGI,...) GEREK!
Sonra wm oluruz.
wmaraci
wmaraci

darkcoder darkcoder WM Aracı Kullanıcı
  • Üyelik 05.10.2020
  • Yaş/Cinsiyet 30 / E
  • Meslek Yazılım
  • Konum İstanbul Anadolu
  • Ad Soyad H** Y**
  • Mesajlar 161
  • Beğeniler 2 / 54
  • Ticaret 3, (%100)

BEYAZMASTER adlı üyeden alıntı

 

Üstadım öncelikle ilginiz ve cevabınız için teşekkür ederim.

Paylaştığınız örneklere baktım, eğer yanlış anlamadıysam birbirini tetikleyen öğeler bunlar...

(Tam anlayamamış olabilirim.)

 

Benim ifade etmek istediğim daha düz bir yapı aslında.

Sadece çift post işlemini tek posta indirgemem gerekiyor sanıyorum...

Ya da ona benzer birşeyler...

 

Yeterince sade ifade edemediğimi kabul edip daha basit bir tarif yapmaya çalışayım;

<select 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>
	
</select>


Üsttekilerden birini seçmek istemeyen kullanıcı alttaki inputa BEYAZ yazarak ve bu değeri kayıt edebilmeli...

<input type="text" name="category">


Eğer inputa birşey yazılmaz ise select içinde seçilen değer sütuna kayıt edilmeli...

(Select elamanına alternatif olarak ortaya koyduğum radio ve checkbox inputlarını unutabiliriz.)

Hepsi bu üstadım...

 Merhaba;

Bu kodu deneyip onun üzerinden isteklerinizi söyleyebilir misiniz? 

 

  <!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'];

                                }

                                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>

Mesaj 2 defa düzenlendi. Son düzenleyen: darkcoder (22.03.2023 19:41)

BEYAZMASTER

kişi bu mesajı beğendi.

BEYAZMASTER BEYAZMASTER YÜCE ALLAH'IN aciz 1 kulu Kullanıcı
  • Üyelik 04.02.2020
  • Yaş/Cinsiyet 43 / E
  • Meslek Yazılım...
  • Konum Diğer
  • Ad Soyad O** B**
  • Mesajlar 597
  • Beğeniler 154 / 153
  • Ticaret 0, (%0)

@darkcoder üstadım, selam faslında 1 adım öne geçtiniz hemen eşitliği sağlayayım...

Merhaba tekrar...

Kafamdan flu şekilde geçen kodları net hale getirmişsiniz gene...

Zihninize sağlık...

Eminim çalışacaktır...

Farklı bir durum olursa desteğinize müracaat ederim...

İsteğimiz değil ricamız olur ancak...

 

 

ÖNCE "İYİ,DOĞRU,GÜZEL BİR İNSAN" OLMAK (VEFA,TEVAZZU,NAİFLİK,SAYGI,...) GEREK!
Sonra wm oluruz.

BEYAZMASTER BEYAZMASTER YÜCE ALLAH'IN aciz 1 kulu Kullanıcı
  • Üyelik 04.02.2020
  • Yaş/Cinsiyet 43 / E
  • Meslek Yazılım...
  • Konum Diğer
  • Ad Soyad O** B**
  • Mesajlar 597
  • Beğeniler 154 / 153
  • Ticaret 0, (%0)

@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...)

Mesaj 8 defa düzenlendi. Son düzenleyen: BEYAZMASTER (23.03.2023 16:35)

 

 

ÖNCE "İYİ,DOĞRU,GÜZEL BİR İNSAN" OLMAK (VEFA,TEVAZZU,NAİFLİK,SAYGI,...) GEREK!
Sonra wm oluruz.

darkcoder darkcoder WM Aracı Kullanıcı
  • Üyelik 05.10.2020
  • Yaş/Cinsiyet 30 / E
  • Meslek Yazılım
  • Konum İstanbul Anadolu
  • Ad Soyad H** Y**
  • Mesajlar 161
  • Beğeniler 2 / 54
  • Ticaret 3, (%100)

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>
BEYAZMASTER

kişi bu mesajı beğendi.

BEYAZMASTER BEYAZMASTER YÜCE ALLAH'IN aciz 1 kulu Kullanıcı
  • Üyelik 04.02.2020
  • Yaş/Cinsiyet 43 / E
  • Meslek Yazılım...
  • Konum Diğer
  • Ad Soyad O** B**
  • Mesajlar 597
  • Beğeniler 154 / 153
  • Ticaret 0, (%0)

darkcoder adlı üyeden alıntı

 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>

 Merhaba tekrar...

Üstadım çok teşekkür ederim...


Çözümün kenarlarında saatlerce uğraştım bugün ama bunu yapamadım bir türlü!

Bazen "ilerliyorum birazcık galiba" dediğim php  yolunun hala en başındayım demek ki! 

Mesaj 2 defa düzenlendi. Son düzenleyen: BEYAZMASTER (23.03.2023 20:29)

 

 

ÖNCE "İYİ,DOĞRU,GÜZEL BİR İNSAN" OLMAK (VEFA,TEVAZZU,NAİFLİK,SAYGI,...) GEREK!
Sonra wm oluruz.

OmerGunay OmerGunay https://omergunay.net Kullanıcı
  • Üyelik 15.05.2015
  • Yaş/Cinsiyet 33 / E
  • Meslek PHP Developer
  • Konum İstanbul Avrupa
  • Ad Soyad Ö** G**
  • Mesajlar 1207
  • Beğeniler 382 / 381
  • Ticaret 16, (%100)

Merhaba hocam soru ve cevapları okudum. darkcoder kardeşimiz cevabı vermiş ama kafanız karışmış anladığım. Hiç jquery vs uğraşmadan direk php tarafında bu işi çözebilirsiniz. Ufak bir kod parçası örnek olarak vereyim anlamazsanız yine üzerine devam edebiliriz.

 

<?php 

	
	if(isset($_POST)) {

		$category = $_POST["category"]; // select name den gelen değer
		$ozel     = $_POST["ozel"]; // input name ozel den gelen değer

		if($category=="Diğer") { // eğer select option Diğer seçildiyse
			$kayitCategory = $ozel; // kayıt edilecek alan inputtan gelen değer olacak.
		}else { // eğer select option Diğer değilse
			$kayitCategory = $category; // selectte seçilen değer kayıt edilecek 
		}


		$query = $db->prepare("INSERT INTO tablo SET category=?");
		$query->execute(array($kayitCategory));

	}



?>
BEYAZMASTER

kişi bu mesajı beğendi.

Herkes yediğinden ikram eder..(Yavuz Sultan Selim)
Site Ayarları
  • Tema Seçeneği
  • Site Sesleri
  • Bildirimler
  • Özel Mesaj Al