PHP Koşullu mantık, özel sipariş?

4 Cevap php

Ben bu suretle gider bir koşullu deyim var:

if ($_POST['password'] == $_POST['repeat'] && $_SESSION['type'] == "admin")

Ama ben de şartlı (yerine "admin") tipi "ayrıcalıklı" ile kullanıcılara gerçek değerlendirmek istiyoruz diyelim.

Yani, örneğin, yazabilirsiniz:

if ($_POST['password'] == $_POST['repeat'] && $_SESSION['type'] == "admin" || $_SESSION['type'] == "superuser")

Ancak PHP soldan sağa conditionals ve denklemleri okur varsayarak, bu "şifre" ve "tekrar" eşit olmasa bile biz etrafında hayali parantez yerleştirerek konum beri koşullu, gerçek değerlendirmek için bir "ayrıcalıklı" için daha sonra mümkün "&&" yanında iki işlenen, değil mi?

"| |" Ben için iki işlenen saklanması parantez ekleyebilirsiniz, ama ben geçmişte bir şey denedim olabilir hafifçe hatırlamak ve olağanüstü başarısız oldu.

Bunu yapmak için daha iyi bir yolu var mı? Parantez aslında (böylece benim bellek hatalı olduğunu? Sonucuna [bellek sızıntısı? Heh.]) Işe yarar mı

Teşekkürler!

4 Cevap

Evet, parantez && || daha yüksek bir önceliğe sahip olduğu gerçeğini geçersiz kılar.

Test edilmiş ancak bu deneyin değil:

if ($_POST['password'] == $_POST['repeat'] && 
($_SESSION['type'] == "admin" || $_SESSION['type'] == "superuser"))

De yönetici onay içine alın () ve OR 'türü' çek. Süper optimum kod için ilk olarak kontrol almak gerekir.

($_SESSION['type'] == "superuser" || ($_POST['password'] == $_POST['repeat'] && $_SESSION['type'] == "admin") )

Elinden istediğini elde etmek için:

if (($_POST['password'] == $_POST['repeat']) && ($_SESSION['type'] == "admin" || $_SESSION['type'] == "superuser"))

Kullanıcı tipi yönetici veya süper kullanıcı ise şifreleri maç ve ne zaman true olarak değerlendirmek hangi.

Ya da, daha verbose:

$valid_password= $_POST['password'] == $_POST['repeat'];
$valid_user= $_SESSION['type'] == "admin" || $_SESSION['type'] == "superuser";
if ($valid_password && $valid_user)
 // Do something