Niedziałajace includowanie plików

0

Szczerze powiem że już nie mam pomysłów o co może chodzić...
Mam 2 klasy - każda w osobnym pliku, oba pliki w tym samym katalogu

login.php

require_once("language.php");
class login
{

	public $user;
	public $userId;
	public $userLevel;
        protected $lang;
        protected $db;

        public function __construct()
	{
            $this->lang = NEW language();
            require_once(dirname(dirname(__FILE__))."/config.php");
            $this->db = NEW mysqli($db['hostname'], $db['username'], $db['password'], $db['database']);
            if($this->db->connect_errno > 0){
                die('Nieb można połączyć się z bazą[' . $this->db->connect_error . ']');
            }
	}

	public function loginForm($errors, $message)
	{

                if($errors) echo '<div class="alert error">' . $message . '</div>';
                echo '
                <section id="login_box">
                    <form class="login_form">
                        <h1>'.$this->lang->login_title.'</h1>
                        <p>
                            <label for="login">'.$this->lang->login.'</label>
                            <input type="text" name="login" placeholder="'.$this->lang->login_placeholder.'" required>
                        </p>
                        <p>
                            <label for="password">'.$this->lang->password.'</label>
                            <input type="password" name="password" placeholder="'.$this->lang->password_placeholder.'" required> 
                        </p>

                        <p>
                            <input type="submit" name="submit" value="'.$this->lang->loginng.'">
                        </p>       
                    </form> 
                </section>
                ';
	}


	public function login($user, $pass)
	{
		$pass = md5($pass);
                
		$statement = $this->db->prepare("SELECT id, login, level FROM members WHERE login = ? AND password = ?");
                $statement->bind_param('ss', $user, $pass);
                $statement->execute();
                
		if($statement->num_rows == 1)
		{
		 $row = $statement->fetch_assoc();
			$_SESSION['level'] = $row['level'];
			$_SESSION['user'] = $row['login'];
			$_SESSION['userId'] = $row['id'];
			return true;
		}
		else return $this->lang->wrong_login;
	}

	public function logout()
	{
		session_destroy();
		return;
	}

	public function check($accessLevel, $id)
	{
		if($accessLevel <= $_SESSION['level'] and $id == $_SESSION['userId']) return false;
		else return true;
	}
	
	
	
	
	

	public function query($sql, $only_first = false)
	{
		$result = @mysql_query($sql, $this->connection);

	}

	protected function get_error_path()
	{
	}

}

language.php

class language {
    public $language;
    public $lang;
    
    public function __construct() {
        require_once(dirname(dirname(__FILE__))."/config.php");
        $this->language = $settings['lang'];
        require_once(dirname(dirname(__FILE__))."/lang/".$this->language.".php");
        $this->lang = $lang;
    }
    
    public function __get($word)
	{
	return $this->lang[$word];
	}
}

No i gdy w language.php dodaje pliki (config.php i lang/pl.php - jezyk ustawiony jest w tablicy) to nie ma problemu, strona jest w takiej wersji językowej jak ustawie natomiast gdy w login.php dodaje plik config.php to tak jakby go nie widziało... jakieś propozycje? co robię źle?

0

Ale dostajesz jakieś ostrzeżenie?
No i - czy spróbujesz załadować dwa rady plik config.php i to w dodatku korzystając z require_once?
Podaj ścieżki do wszystkich tych plików.

0

|-class
| |--language.php
| |--login.php
|-lang
| |--pl.php
|-config.php

dodatkowo plik:
config.php

<?php $db = array( 'username' => 'user', 'password' => 'pass', 'hostname' => 'host', 'database' => 'base' ); $settings = array( 'lang' => 'pl', 'base_url' => 'link', 'site_name' => 'name' ); ?>
0

niczego nie dostaje, wygląda to tak jakby po prostu nie widziało tablic z pliku config.php?

0

I co dzek69, masz jakieś pomysły?

0

Ta, uprościłem Twój skrypt, żeby nie miał tego, co jest nie w temacie i .. wszystko działa.
http://www.sendspace.com/file/fumtqa
Więc stwierdziłem, że nie mam czasu wnikać co jeszcze możesz robić źle, że nie działa..

1

Masz ustawione error_reporting(E_ALL) ?
Może nie includuje Ci language.php - spróbuj

require_once("class/language.php");
0

yep, jeśli plik, od którego zaczyna się wykonanie requesta jest w katalogu A, to nie ma znaczenia, że klasy są w tym samym katalogu B; musisz podać ścieżkę do pliku z klasą tak jak napisał Sarrus - 'A/class.php'.

0

Ale koleś używa magicznej stałej __FILE__, właśnie po to, żeby includy zawsze mieć relatywnie od aktualnego pliku.
Wg dokumentacji __FILE__ będzie zwracać ścieżkę do aktualnego pliku - jak jest includowany - to także (a nie np. do indeksu).
No i po moim wycięciu całych tych otoczek klas - to działało jak trzeba, więc nie wiem co jeszcze mógł po drodze skopać.

0

dzek69, działało bo troszkę za bardzo sobie to uprościłeś a co za tym idzie nie popełniłeś tego błędu co ja, metodą prób i błędó doszedłem do tego że gdy wywołuje klase w klasie i w tej wywołanej jest plik dołączany require_once który wcześniej został dołączony za pomocą require_once to go nie widać - troszkę za bardzo ograniczyłem dodawanie, dodało raz i tyle - wedle tego co było wpisane :)

0

No to przeczytaj moją pierwszą odpowiedź. Widzę, że odpisałeś na ostatnie i pierwsze zdanie, drugie olałeś i potem dwa dni zastanawiania się nad problemem, skoro - w domyśle - to nie problem z użyciem require_once zamiast require.

0

Nie 2 dni zastanawiania się tylko chwila (nie było mnie przy kompie w weekend - praca)
no ale tak, nie wziąłem pod uwagę 2 zdania - tak to jest jak się jest podkurzonym i się czyta na szybciora żeby szybko odpisać i rozwiązać problem... przede wszystkim dzięki za cierpliwość :)

1 użytkowników online, w tym zalogowanych: 0, gości: 1