lostyazilim
tr.link

PHP=Veri kaydederken checkbox seçilmediğinde sorguda hatayı önlemenin + NULL değerini korumanın yolu!

9 Mesajlar 1.374 Okunma
lstbozum
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)

Merhaba...

Vaktinizi almadan başlığı kısaca açayım;

Kayıt formunda 1 adet checkbox var.
Seçildiğinde onay sütununu 1 yapıyor.
Seçilmediğinde ise sorguya veri gitmediği için alttaki hata oluşuyor;
"Notice: Undefined index:  uye_onay"
ve
Veri tablosunda null olan değer boş hale geliyor.

CHECKBOX SEÇİLMEDİĞİNDE => HATA VERMEMESİNİ + VERİ TABLOSUNDAKİ NULL DEĞERİN BOZULMAMASINI SAĞLAMAK İÇİN NEREYE VE NASIL DOKUNMALIYIZ?

Teşekkürler şimdiden...

Mesaj 1 defa düzenlendi. Son düzenleyen: BEYAZMASTER (26.05.2022 17:54)

 

 

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

bytokca bytokca WM Aracı Kimlik Onayı
  • Üyelik 29.11.2012
  • Yaş/Cinsiyet 39 / E
  • Meslek Yazılım
  • Konum Konya
  • Ad Soyad H** T**
  • Mesajlar 48
  • Beğeniler 1 / 26
  • Ticaret 1, (%100)
if(isset($_POST["checkbox"])){
  $checkboks = intval($_POST["checkbox"]);
} else {
  $checkboks = NULL;
}
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)

bytokca adlı üyeden alıntı

if(isset($_POST["checkbox"])){
  $checkboks = intval($_POST["checkbox"]);
} else {
  $checkboks = NULL;
}

Üstadım cevap sizden geldi gene, çok teşekkürler...
Siz, @ÖmerGünay  @ikodev  gibi sayılı bilgili ve bilgisini paylaşma cömertliğine, erdemine sahip az sayıdaki kişi de olmasa bugünlerde bazı çözümlerden mahrum kalırdık...
Forumda çok değerli üyeler, üstadlar vardı sizler gibi ama hiçbiri uğramıyor artık formun güncellenmesinden sonra... 


Koda değinecek olursam, mevcut kodum kısaca şöyle;

<?php
	if($_POST)
	{
		try
		{
			$sorgu = "INSERT INTO  ...
			...
		}
	}
?>

Sizin paylaştığınız kısmı nereye ve nasıl entegre etmemiz doğru olur üstadım?

Mesaj 3 defa düzenlendi. Son düzenleyen: BEYAZMASTER (26.05.2022 23:38)

OmerGunay

kişi bu mesajı beğendi.

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

ikodev ikodev Developer Kullanıcı
  • Üyelik 08.05.2015
  • Yaş/Cinsiyet 28 / E
  • Meslek Developer
  • Konum Samsun
  • Ad Soyad İ** Ş**
  • Mesajlar 1020
  • Beğeniler 321 / 320
  • Ticaret 19, (%100)

BEYAZMASTER adlı üyeden alıntı

bytokca adlı üyeden alıntı

if(isset($_POST["checkbox"])){
  $checkboks = intval($_POST["checkbox"]);
} else {
  $checkboks = NULL;
}

Üstadım cevap sizden geldi gene, çok teşekkürler...
Siz, @ÖmerGünay  @ikodev  gibi sayılı bilgili ve bilgisini paylaşak cömertliğine, erdemine sahip az sayıdaki kişi de olmasa bugünlerde bazı çözümlerden mahrum kalırdık...
Forumda çok değerli üyeler, üstadlar vardı sizler gibi ama hiçbiri uğramıyor artık formun güncellenmesinden sonra... 


Koda değinecek olursam, mevcut kodum kısaca şöyle;

<?php
	if($_POST)
	{
		try
		{
			$sorgu = "INSERT INTO  ...
			...
		}
	}
?>

Sizin paylaştığınız kısmı nereye ve nasıl entegre etmemiz doğru olur üstadım?

 

<?php
	if($_POST)
	{
		try
		{
			if(isset($_POST["checkbox"])) $checkbox = intval($_POST["checkbox"]);
			else $checkbox = NULL;
			
			$sorgu = "INSERT INTO  table_name (column1, checkboxSutunu) VALUES (value1, $checkbox)";
		}
	}
?>

 

Bu şekilde işinizi görür diye düşünüyorum :)

BEYAZMASTER

kişi bu mesajı beğendi.

wmaraci
wmaraci

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)

@ikodev üstadım takım çalışmanız ve katkınız için teşekkür ederim öncelikle... ; )

Fakat ben soruyu sorarken kod yapımı çok minimize ederek örneklendirdim.

Aslı oldukça uzun, içinde yaklaşık 50 civarı checkbox ve bunun haricinde text inputlar da var...

Ve kodları temizleyerek kaydediyorum, yapısı şöyle;

<?php
	if($_POST)
	{
		try
		{
		$sorgu = "INSERT INTO table_abc  SET 

		checkboxSutunu_1:checkboxSutunu_1, 
		checkboxSutunu_2:checkboxSutunu_2, 
		checkboxSutunu_3:checkboxSutunu_3, 
		checkboxSutunu_4:checkboxSutunu_4, 
		checkboxSutunu_5:checkboxSutunu_5, 
		....
		";

		$stmt = $connn->prepare($sorgu); 

		$checkboxSutunu_1=htmlspecialchars(strip_tags($_POST["checkboxSutunu_1"])); 
		...

		$stmt->bindParam(':checkboxSutunu_1', $checkboxSutunu_1); 
		...

		}

		catch(PDOException $exception)
		{
			die('ERROR: ' . $exception->getMessage());
		}
		
	}
?>


Bu durumda uyarlamamız nasıl olmalı acaba?

Mesaj 2 defa düzenlendi. Son düzenleyen: BEYAZMASTER (27.05.2022 00:11)

 

 

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

ikodev ikodev Developer Kullanıcı
  • Üyelik 08.05.2015
  • Yaş/Cinsiyet 28 / E
  • Meslek Developer
  • Konum Samsun
  • Ad Soyad İ** Ş**
  • Mesajlar 1020
  • Beğeniler 321 / 320
  • Ticaret 19, (%100)

Insert methodunu daha kolay hale getirebilirsiniz bu arada bu baya uzun olmuş :)))

$checkboxSutunu_1=htmlspecialchars(strip_tags($_POST["checkboxSutunu_1"])); 

Bu kısıma arkadaşın attığı if komutunu koyarsanız olması gerek yani aslında mantık şu veriyi her halükarda veritabanına işleyin if komutu ile o veriyi sadece doldurun seçildiyse 1 yap seçilmediyse NULL yap diyin böylelikle veritabanına her halükarda veri işlenmiş olsun. 1 veya NULL olarak en basiti bu :)

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)

ikodev adlı üyeden alıntı

Insert methodunu daha kolay hale getirebilirsiniz bu arada bu baya uzun olmuş :)))

$checkboxSutunu_1=htmlspecialchars(strip_tags($_POST["checkboxSutunu_1"])); 

Bu kısıma arkadaşın attığı if komutunu koyarsanız olması gerek yani aslında mantık şu veriyi her halükarda veritabanına işleyin if komutu ile o veriyi sadece doldurun seçildiyse 1 yap seçilmediyse NULL yap diyin böylelikle veritabanına her halükarda veri işlenmiş olsun. 1 veya NULL olarak en basiti bu :)

 
"Insert methodunu daha kolay hale getirebilirsiniz bu arada bu baya uzun olmuş :)))" 

: ))

.. (column1, checkboxSutunu) VALUES (value1, $checkbox)

Şeklindeki yapıyı kendi kullandığım admin panelde kullandığım olmuyor değil...



Fakat uzun versiyon daha güvenli diye biliyorum, yanılıyor olabilirim...

"Sizce en güvenli kayıt yöntemi hangisi?" diye sormam kaçınılmaz oldu bu noktada... : ))



Uyarlama için çok teşekkür ediyorum üstadım...

Mesaj 1 defa düzenlendi. Son düzenleyen: BEYAZMASTER (27.05.2022 00:29)

 

 

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

ikodev ikodev Developer Kullanıcı
  • Üyelik 08.05.2015
  • Yaş/Cinsiyet 28 / E
  • Meslek Developer
  • Konum Samsun
  • Ad Soyad İ** Ş**
  • Mesajlar 1020
  • Beğeniler 321 / 320
  • Ticaret 19, (%100)

En güvenli yol senin kontrolünde olan yoldur :) PDO nun getirdiği yeni özellikler tabikide eskisine göre daha iyi fakat "eskisine göre" iyi olması demek bu onun mükemmel olduğu anlamına gelmiyor ben şahsen eski usül takılıyorum fakat veritabanına ekleyeceğim tüm verileri filtreden geçirdiğim için dışardan inject mümkün olmuyor. Böylelikle ne sunucu tarafını yoruyorum ne de kendimi.. Burda fonksiyonlardan (prepare,bindParam vs) çok verilerin hangi filtrelerden geçtiği yoksa pdo nun kendiside tamamen yeterli değil

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)

ikodev adlı üyeden alıntı

En güvenli yol senin kontrolünde olan yoldur :) PDO nun getirdiği yeni özellikler tabikide eskisine göre daha iyi fakat "eskisine göre" iyi olması demek bu onun mükemmel olduğu anlamına gelmiyor ben şahsen eski usül takılıyorum fakat veritabanına ekleyeceğim tüm verileri filtreden geçirdiğim için dışardan inject mümkün olmuyor. Böylelikle ne sunucu tarafını yoruyorum ne de kendimi.. Burda fonksiyonlardan (prepare,bindParam vs) çok verilerin hangi filtrelerden geçtiği yoksa pdo nun kendiside tamamen yeterli değil

Teşekkür ederim açıklamanız için...

Mesaj 2 defa düzenlendi. Son düzenleyen: BEYAZMASTER (16.03.2023 10:25)

 

 

ÖNCE "İYİ,DOĞRU,GÜZEL BİR İNSAN" OLMAK (VEFA,TEVAZZU,NAİFLİK,SAYGI,...) GEREK!
Sonra wm oluruz.
wmaraci
wmaraci
Konuyu toplam 1 kişi okuyor. (0 kullanıcı ve 1 misafir)
Site Ayarları
  • Tema Seçeneği
  • Site Sesleri
  • Bildirimler
  • Özel Mesaj Al