Problem z połączeniem MySQL

0

Cześć,
Tym razem mam problem z połączeniem z bazą.
Otóż konfiguracje i samo połączenie z bazą mam w pliku config.php, który includuje przez

include('config/config.php');

Na każdej podstronie mogę się łączyć z bazą (mysqli_query($zmienna z danymi do bazy, zapytanie)) oprócz w plikach klasowych. Tam muszę robić nową zmienną w tym samym pliku z danymi do logowania. Czy wiecie jak temu zaradzić? Dane do logowania chciałbym trzymać tylko w jednym pliku.

0

Proponuję Ci zrobić klas config (w niej umieścisz dane do logowania) a potem poczytać o autoloaderach (m.in. Możesz wykorzystać mechanizmy z Composera)

0

Byłby ktoś tak miły i mi to rozpisał bardzo prosto i minimalnie? Samo połączenie z bazą mnie interesuje.

Próbowałem z autoloaderem i bez, ale coś robię nie tak.
Załóżmy, że mam 3 pliki:
Index.php, connectDB.php w folderze class i checkstatus.php w folderze class.

Funkcje wywołane w index.php z pliku connectDB.php działają prawidłowo, ale gdy chcę je wywołać w checkstatus.php - nie da się. Plik checkstatus.php jest zadeklarowany w index.php pod linijkami z wczytywaniem pliku connectDB.php i wywołaniu klasy.

Hmm.. w sumie teraz wpadłem na pewien pomysł. Czy to tak się robi? W każdej funkcji w klasie trzeba dodać rozpoczynanie klasy?

$mysql = new mysql();

Gdy to dodam, wszystko zaczyna działać. Ale trzeba to dodawać w każdej funkcji oddzielnie. Czy można jakoś raz w klasie to zadeklarować? I czy to poprawny sposób?

0

Nie musisz tego dodawać w każdej funkcji. Wystarczy, że dodasz to gdzieś na początku w klasie.

0

Dobrze, to może wstawię tutaj mój kod, abyśmy się wszyscy zrozumieli.
Index.php

<?PHP
	include('class/mysql.php');
	include('class/online.php');

	$check= new status();
	echo 'Status: '.$check->status();
?>

mysql.php

<?PHP
	class mysql{
		public function connect(){
			$conn = mysqli_connect('localhost', 'user', '**', 'Web');
			if($conn->connect_error){
				die("Connection failed: " . $conn->connect_error);
			}else{
				return $conn;
			}
		}
	}
?>

online.php

<?PHP
	class status{
		public function status(){
			$mysql = new mysql();
			$test = mysqli_fetch_array(mysqli_query($mysql->connect(), 'moje zapytanie`'));
			return $test;
		}
	}
?>

I to działa. Lecz jeśli $mysql = new mysql(); przeniosę wyżej zaczyna sypać błędem (jak wkleję include z lokalizacją klasy mysql - nic to nie zmienia. W sumie to po co, skoro wywoływanie mysql działa w funkcji?)

<?PHP
	class status{
		$mysql = new mysql();
		
		public function status(){
			$test = mysqli_fetch_array(mysqli_query($mysql->connect(), 'moje zapytanie`'));
			return $test;
		}
	}
?>
0

Na serio poczytaj o obiektowości skoro chcesz pisać obiektowy kod. Napisałem tutaj taki pseudo-php'owy kodzik byś bardziej to zrozumiał jak to ma działać - na 100% nie będzie działać, więc musisz pomyśleć jak to uzupełnić poprawnie i dostosować do swoich wymagań:

<?php


class config
{
    private $login = 'cośtam';
    private $password = 'cośtam';

    public function getLogin()
    {
        return $this->login;
    }

    public function getPassword()
    {
        return $this->password;
    }
}

//Jak robisz to na osobnych plikach to w database.php po prostu includujesz config.php

class database
{
    private $dbHandler;

    /**
     * database constructor.
     * @param config $config
     */
    public function __construct($config)
    {
        $this->dbHandler = new mysqli($config->getLogin(), $config->getPassword());
    }

    public function getStatus()
    {
        $query = mysqli_query($this->dbHandler, 'moje zapytanie`');

        return mysqli_fetch_array($query);
    }
}

// w pliku index.php includujesz oba powyższe i robisz tak. Masz już 3 includy (niby mało, ale jednak), dlatego nadal polecam popatrzeć jak działają autoloadery.

$config=new config();
$database = new database($config);

echo 'Status:'. $database->getStatus();
0

Dziękuję bardzo za ten kod. Pomógł mi. Mam teraz kolejne pytanko.
Załóżmy, że mam stronę, która sprawdza czy inne, zewnętrzne i zadeklarowane wcześniej strony działają. I na moim serwerze mam listę tych stron i jest info odnośnie dostępności innych stron(online/offline). Chciałbym to urozmaicić o archiwum/wykresy. I tutaj nie zbyt wiem jak się za to zabrać. Chciałbym prowadzić taki wykres/archiwum od początku do końca. Czyli od początku dodania takiej strony, a nie np. z ostatnich 30 dni. I jak to ugryźć?

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