PHP Mantiksal operatör sorunu

mamanybono

Öğrenci
Katılım
15 Eylül 2012
Mesajlar
9
Reaksiyon puanı
0
Puanları
0
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
smile.gif


PHP:
<?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')" );
 
}
 
}
?>
 
Katılım
31 Aralık 2007
Mesajlar
17,486
Reaksiyon puanı
189
Puanları
243
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

Öğrenci
Katılım
15 Eylül 2012
Mesajlar
9
Reaksiyon puanı
0
Puanları
0
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.
 
Katılım
31 Aralık 2007
Mesajlar
17,486
Reaksiyon puanı
189
Puanları
243
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

Öğrenci
Katılım
15 Eylül 2012
Mesajlar
9
Reaksiyon puanı
0
Puanları
0
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.
 

LeaveNhA

Doçent
Katılım
4 Aralık 2011
Mesajlar
597
Reaksiyon puanı
5
Puanları
18
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...

PHP:
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
 
Üst