Neden bu test çalışmaları ise yapar?

8 Cevap php

Sitem kullanıcı tabanlı izinler oluşturan bir giriş gerektirir. Kullanıcı sadece konuk erişimini varsa belirli bir fotoğraf görüntülenir eğer sitenin fotoğraf listesinde, ben belirlemeniz gerekir. Yani bu else if deyimi çalışmak olacağını düşündüm:

if (!($mysql_row['guest_access'] == 'NO') AND ($_SESSION['user_level'] == 'GUEST')) {

  // show the photo if it isn't private and the user isn't a guest

Ama öyle değil.

Ben üç satır içine bu testi ayrı Ancak, o zaman gayet güzel çalışıyor.

$is_private_photo = $mysql_row['guest_access'] == 'NO';  
$is_guest = $_SESSION['user_level'] == 'GUEST';
$both_private_and_guest = ($is_private_photo AND $is_guest);

if  (!$both_private_and_guest) {
  // show the photo if it isn't private and the user isn't a guest

Ne ilk sürümü ile yanlış?

8 Cevap

İlk eğer

if (!($mysql_row['guest_access'] == 'NO') AND ($_SESSION['user_level'] == 'GUEST'))

Aslında böyle yorumlandığı:

if (
    (!($mysql_row['guest_access'] == 'NO'))
    AND ($_SESSION['user_level'] == 'GUEST')
  )

Bu daha yüksek bir öncelik düzeyi ve (Operator Precedence bakınız) için !, sadece, birinci durum, her ikisi birden uygulanır


Your condition should probably be re-written with some additional parentheses :

if (!(($mysql_row['guest_access'] == 'NO') AND ($_SESSION['user_level'] == 'GUEST')))

Böylece ! bütün durum uygulanır.

Mantıklı değil operasyon VE sonuçlarına uygulanması gereken, ancak kod örneğinde sadece (ve daha yüksek önceliğe sahiptir DEĞİL) birinci fıkrası uygulanır. Sen hem şartları gruplayarak bunu çözebilir:

if (!(($mysql_row['guest_access'] == 'NO' AND ($_SESSION['user_level'] == 'GUEST'))) {

Başka bir dirsek eklemek veya bunu yapmak da o kadar değil operatörü (!) Sadece ilk koşulu kapsar

if ( $mysql_row['guest_access'] != 'NO' AND...

Eğer ilk sürümü yanlış yerde parantez koymak çünkü bulunuyor. Ikinci versiyonunun eşdeğer form

if (!$is_private_photo AND $is_guest)

hangi amaçlanan nedir net değil.

Böyle yapmak:

if (($mysql_row['guest_access'] != 'NO') AND ($_SESSION['user_level'] != 'GUEST')) {

Sizin '!' 'VE' tablosuna uygulanmıyor ... sadece ($ MYSQL_ROW ['guest_access'] == 'HAYIR') deyimi ile uygulanmaktadır.

Sadece ilk koşulu inkâr edilmektedir. Bu deneyin:

if (!($mysql_row['guest_access'] == 'NO' AND $_SESSION['user_level'] == 'GUEST')) {

Beklendiği gibi olumsuzlama operatör geçerli değildir. Sen gibi bir şey kullanmak gerekir:

if ( ! (($mysql_row['guest_access'] == 'NO') AND ($_SESSION['user_level'] == 'GUEST')) )

if ( ! ($mysql_row['guest_access'] == 'NO') OR ! ($_SESSION['user_level'] == 'GUEST') )