İçeriğe geç
ShiftDelete.Net
Haber ara/ SDN'ye SorGiriş
Haber Akışı SDNTV İnceleme Forum Yapay Zeka Akıllı Telefon Elektrikli Otomobil Oyun ShiftDelete.Net Global Teknoloji Haberleri Mobil Otomobil Donanım Savunma Bilim Sosyal Medya İnternet Giyilebilir Teknoloji Rehber Ürünler Son dakika Yazarlar
  1. Ana sayfa
  2. Topluluk
  3. Programlama
  4. Web Programlama (PHP, ASP, HTML, CSS, JavaScript)
Web Programlama (PHP, ASP, HTML, CSS, JavaScript)

PHP Mantiksal operatör sorunu

mamanybono15.09.20125 cevap1.672 görüntüleme
2012'den beri9 mesaj
#1
Merhabalar,

Aşağıdaki koda yine bu kodun bulunduğu sayfadan, bir form aracılığıyla veri gönderiyorum.Aşağıdaki kodda bulunan ilk if dögüsü formdaki bulunan iki input un doldurulduğunu kesinleştirmek için. Sorun şuki iç içe olan if döngülerinden ikincisi sürekli TRUE döndürüyor ve "The name of..." ile başlıyan cümle yazılıyor ekrana, oradaki = işareti yerine == yazdım bu seferde ne olursa olsun FALSE döndürüyor. Bu arada ben sorunu şu şekilde çözdüm oraya =1 yerine >0 yazdım oldu. Fakat yinede bunu öğrenmek istiyorum sürekli karşıma çıkıyor. Yardımlarınız için teşekkürler
<?php
if(isset($_POST["new_country_name"]) && isset($_POST["country_ip_ranges"]) && !empty($_POST["new_country_name"]) && !empty($_POST["country_ip_ranges"])){
 
 $country_name=@$_POST['new_country_name'];
 $country_ip_range=@$_POST['country_ip_ranges'];
 
$sql=mysql_query("SELECT id FROM countries WHERE  country_name='$country_name' LIMIT 1");
 
$exist_count=mysql_num_rows($sql);
 
if($exist_count=1){
 
 echo "The name of the country which you try to add is already exist in the system, please try to add different name.";
 
}else{
 
 mysql_query("INSERT INTO countries (id,country_name) VALUES ('','$country_name')" );
 
}
 
}
?> 
Cevaplar
2007'den beri17 bin mesaj
#2
If deyimi içerisinde tek eşittir kullanılmaz. Tek eşittir atama operatörüdür. Çift eşittir ise eşitlik kontrol operatörüdür. Orada devamlı geçersiz değerin gelmesi 1'den fazla kayıt olmasından ya da kayıt olmamasından kaynaklanıyordur. > 0 yaptığınız zaman ise 0'dan büyükse anlamı taşır. Yani herhangi bir kayıt var ise if'in içerisindekini uygular...
mamanybono Konuyu açan
2012'den beri9 mesaj
#3
Teşekkürler hocam. Gayet net anladım ,bide şimdi ==1 durumunu test ettim bu şekildede yaptım. Normalde bu şekilde yapınca olmuyordu, biraz fazla kafa yormuşum galiba, karıştırmışım olayı. Olmamasının sebebide şuydu, benmi hayal gördüm artık ne bilemiyorum :). Sorunda şuydu ==1 yapınca. veri tabanında olan bi veriyi girince normalde $exist_count=1 olmalı dolayısıyla if(1==1) true olmalı ve veri tabanına ikinci kez aynı veriyi kaydetmeden "The name of..." yazısı çıkmalıydı. Burada ekranda "The name of..." yazısı çıkmıyordu bende aynı veriyi ikinci kez kopyaladı diye gidip veri tabanına bakıyordum, fakat veri tabanındada ikinci kez kopyalanmamış oluyordu. Verinin kopyalanmamasını ilgili sütunu UNIQUE key yapmama bağladım fakat "The name of..." yazısının çıkmamasını anlıyamamıştım. Neyse ama şu anda bi sorun yok. Yardımın için tekrar teşekkürler.
2007'den beri17 bin mesaj
#4
Sorgudan gelen verilerde o veriden 5 tane varsa 5 == 1 yani false olur. Ya da olmayan bir veri sorgulanırsa 0 == 1 yine false olur. Var olup olmadığını kontrol etmenin en güzel yolu > 0 bence. Böylece sadece tek ihtimal değil birden fazla ihtimal göz önüne alınarak kontrol edilir.

Logical expression'lar ile ilgili biraz sıkıntın var sanırım :) Tüm operatörleri öğrenirsen kafanda soru işareti olmaz :)
mamanybono Konuyu açan
2012'den beri9 mesaj
#5
Olmayan veri 0==1 olduğunda sorun yok. Senim dediğin gibi 1 den fazla veri olması durumunda sql sorgusunda de LIMIT 1 var oda herzaman 1 gelmesini sağlıyor. Yani 5==1 olma durumu gerçekleşemez. Dolayısıyla ==1 şeklindede kullanabiliyorum.
2011'den beri597 mesaj
#6
cgrszone dedi: ↑
If deyimi içerisinde tek eşittir kullanılmaz. Tek eşittir atama operatörüdür. Çift eşittir ise eşitlik kontrol operatörüdür. Orada devamlı geçersiz değerin gelmesi 1'den fazla kayıt olmasından ya da kayıt olmamasından kaynaklanıyordur. > 0 yaptığınız zaman ise 0'dan büyükse anlamı taşır. Yani herhangi bir kayıt var ise if'in içerisindekini uygular...


if($exist_count=1)  // ifadesi exist_count isimli değişkene 1 atar, ve dönen ifade  exit_count'un değeri olacağı için sürekli true dönücektir, bildiğim  bütün yapısal kuralları gözden geçirirdim en ufak bi şüphem olsa ama, yok işte kahretsin. :D

//ve koşul yapısının kontrol ifadesinde kesinlikle "=" (atama) operatörünün kullanımı caizdir... :D
// imza: Diyanet. :D

// Örn blabla isminde bir fonksiyona sahipsiniz ve bu sadece verdiğiniz argümanın değerini bir arttırıp geri veriyor (değer ile argümanlanıyor referans ile değil !);

import( [MENTION=25201]cgrszone[/MENTION] );

$bla = 0; 

if($bla = blabla($bla))
echo "<font size='7'>$bla</font>"; // çıktımız büyüük bi şekilde 1 olacaktır, aslında kontrol ifadesinin ifadeyi çalıştırması bunun en büyük kanıtı ama işte bendeki de can, biri kalkıp "görmedik biz !" der falan. :D

Cevabını yaz

Cevap yazmak için giriş yap ya da üye ol. Eski forum kullanıcı adın ve parolanla girebilirsin.