PHP çalışmıyor in_array

4 Cevap php

Bir kullanıcı belirli bir sayfaya erişmek eğer ben (oturumları ile) kimlik doğrulaması için PHP İn_Array () fonksiyonu kullanıyorum. Nedense, bu çalışmıyor ...

PHP PAGE

session_start();
require_once('../scripts/functions.php'); 
$role_auth = @$_SESSION['role_auth'];
access($role_auth, array(0,1,2,3,4));

access FUNCTION

function access($role_auth, $array){

if(!(in_array($role_auth, $array))){ 
   header("Location: ../index.html");
}
}

Ben işlevi yazdırma ifadeleri eklerseniz, ben doğru tüm değerleri işleve edildiğini görebilirsiniz. Işlevi dizideki olarak kabul edilir nedense, bir oturum değişkeni set vermeden denir eğer sorun olduğunu ve doğrular.

Herhangi bir fikir?

4 Cevap

Eğer kullanarak sıkı tür denetimlerini etkinleştirmek isteyebilirsiniz:

in_array($role_auth, $array, true)

ne olasılıkla oluyor $ role_auth false olarak eval'd ediliyor ve sizin in_array'in açıklamada 0 maç olabilir gibi.

ne yapıyor olmalıdır şudur:

session_start(); 
require_once('../scripts/functions.php'); 
$role_auth = (isset($_SESSION['role_auth']))?$_SESSION['role_auth']:-1; 
access($role_auth, array(0,1,2,3,4));

ya da benzer bir şey. iyi hiç bir şey @ operatörünü kullanarak bir gelir

Ben $ _SESSION ['role_auth'] aslında yerine (kötü uygulama IMHO olan) uyarıları bastırmak için @ kullanarak (isset) ile ayarlanmış olup olmadığını görmek için kontrol ediyorum

Ne oluyor bu 0 ve 0 olarak görüyor çünkü hiçbir şey $ role_auth olduğunda yanlış == 0 ... yani in_array döndürür true olduğunu düşünüyorum dizide olduğu

 $role_auth = @$_SESSION['role_auth'];

@ Işareti endeksi dizi değil gibi burada alabilirsiniz herhangi bir uyarı bastıran edilir. Nasıl bunun yerine böyle bir şey hakkında:

 if(isset($_SESSION['role_auth']))
    $role_auth = $_SESSION['role_auth'];
 else
    $role_auth = -1;//(or whatever an invalid role is)

Php, sayı sıfır örneğin, çoğu sayısal olmayan şeyleri eşit olarak kabul edilir:

null   == 0
false  == 0
""     == 0
"asdf" == 0

Muhtemelen $_SESSION aslında önceden 'role_auth' anahtarını içeren ve aynı zamanda {[(3 $strict parametresini geçirerek, uygun türe dönüştürmek emin olmak gerekir )]}, böylece bir tür denetimi gibi bir değer çek garanti (=== vs ==). Lütfen diziden sıfır kaldırılması da iyi bir fikir olabilir.