Dahil bir dosyaya PHP değişkenleri Passing?

4 Cevap php

Bu çalışması gerekir, bu yüzden çalışmıyor neden gerçekten anlaşılmaz değilim.

Ben bir kullanıcı, her yönetici sayfanın üst kısmında bir $ session sınıf yöntemi kullanarak oturum olup olmadığını görmek için kontrol ediyorum. Ancak, dinamik bir kullanıcı oturum olup olmadığına bağlı olarak başlık dosyası ayarlamak ve kullanıcı olduğunu hangi rolü seviyede istiyorum.

Yani kontrol $session->is_logged_in() ve sonra ben önde gitti ve $logged = true adında bir değişken tanımlanmış; Daha sonra kullanmak için. Daha sonra kolay kullanım için $role_level adlı yeni bir var içinde yeni bir kullanıcı nesnesi ve mağaza $user->role_level oluşturmak için $user->find_by_id($session->id) yöntemini kullanın.

Bu, tüm sayfanın üstüne yakın oluyor. Dahası vb sayfa geçmiş form işleme, aşağı, include("../_layouts/header.php") komutu olduğunu. Ardından, header.php dosyasında, ben if(!$logged) { ... } else { ... } gibi küçük kontrolleri kullanın. Ancak ...

Ben aşağıdaki hataları alıyorum:

Notice: Undefined variable: logged in /home/hips/html/_layouts/header.php on line 119
Notice: Undefined variable: logged in /home/hips/html/_layouts/header.php on line 131
Notice: Undefined variable: logged in /home/hips/html/_layouts/header.php on line 138

Bu nasıl olabilir? Ben header.php dahil önce dosyasındaki değişkenler tanımlayan ediyorum! Bu işe gerekmez mi?

FYI, everything was working fine until I tried to use $logged header.php dosyasında.

4 Cevap

Değişkenler dahil dosyaları yaymak, bu nedenle bu değişkeni dahil çağırdığınızda ayarlı DEĞİL olduğunu, olmalıdır: eğer öyleyse değişken o noktada ayarlı değil, neden sonra anlamaya kontrol deneyin.

(Eğer include ifadesi diyoruz hangi aynı düzeyde) dıştaki kapsamında tanımlamak gerekir: Örneğin, eğer tanımlanmışsa $ o zaman bunun dışında yaymak değil, "eğer" bloğu içinde ya da bir işlev içinde giriş . Ve kullanıcı sadece değişken false başlatılmadı kullanıcı oturum açmış durumda, çek (! $ Giriş) uyarı verecektir eğer, kaydedilir olmadığı durum için onu tanımlamak gerekir. Say $ = false giriş; İşinizin başında.

Gibi, çok basit bir şey deneyin

// file1.php
$var = "foobar";

// file2.php
include("file1.php"); // or require("file1.php");
die($var);

İşe yarıyor mu? Belki de kod dışında bir sorun var.

Bunun yerine, küresel alanda yürütülecek kodu dahil ve tanımlanan başka bir global değişken bağlı olarak sadece bir fikir ... Dosyanızı her yerde bulunur ve header.php içindeki kod uygun fonksiyonların organize olmak var. Eğer header.php den çıktı istediğiniz yerde Sonra, bir argüman olarak açmış $ ile uygun işlevini çağırın. Bu (ünite testleri gibi) test etmek için kod daha uyumlu ve daha kolay vermenize yardımcı olacaktır.

Yerine if (!logged), try if (empty($logged)). Bu değişkeni ayarlanmamış durumlarda bir uyarı oluşturmaz.