У меня такое:
$db_hostname = 'localhost';
$db_username = 'root';
$db_password = '';
$db_database = 'publications';
сохранен как connection.php
но я не могу его использовать в этом переменном:
namespace form;
include_once "Form.php";
include_once "connection.php";
class login extends Form
{
public function showLoginfrom()
{
echo '<form name="loginform" method="get">';
$login = new Form();
$login->AddText('username','Your username');
$login->AddPassword('password','','Your password');
$login->SubmitButton('Login');
echo "</form>";
}
public function executeLogin()
{
$connection = new \mysqli($db_hostname,$db_username,$db_password,$db_database);
$username = ($_GET["username"]);
$password = ($_GET["password"]);
$query ="SELECT * FROM users WHERE username= '$username' AND password= '$password'";
$result = $connection->query($query);
if (mysqli_num_rows($result)== 1)
{
echo "Welcome";
}
else
{
echo "Login failed";
}
}
Я знаю, что мой код небезопасен, я просто экспериментирую. Его первая программа php.
Например;
public function executeLogin($db_hostname,$db_username,$db_password,$db_database)
{
$connection = new \mysqli($db_hostname,$db_username,$db_password,$db_database);
А затем вызовите метод executeLogin()
с этими переменными в текущей области.
Два способа вы можете ввести их для создания свойств. Первый точно такой же, как и выше, в методе __construct()
.
Другой способ - включить файлы в __construct()
и установить их как свойства. Например
private $arrDbDetails = array();
public function __construct() {
include_once "connection.php";
$this->arrDbDetails = array(
'host' => $db_hostname,
'user' => $db_username,
'pass' => $db_password,
'db' => $db_database
);
Затем вы можете получить к ним доступ с помощью $this->arrDbDetails['host']
, например, в вашем executeLogin()
.
$connection = new \mysqli($this->arrDbDetails['host'],$this->arrDbDetails['user'],$this->arrDbDetails['pass'],$this->arrDbDetails['db']);
Вы также можете define
значения и использовать их в глобальной области.
define('DB_USERNAME', 'my_mysql_user');
А затем назовите их как обычные константы в вашем методе.
Другой способ сделать это - использовать класс w/static. Что-то вроде:
class Config {
static public $mysqli;
static public $dbCredentials = [];
}
include('connection.php');
Config::$dbCredentials['host'] = $db_hostname;
// and repeat for the others
//optional, extra step:
Config::$mysqli = new \mysqli(...);
Затем, чтобы использовать, вы можете сделать:
public function executeLogin()
{
$connection = new \mysqli(\Config::$dbCredentials['host'], ..);
//or
$connection = \Config::$mysqli;
// do other stuff
}
Другие примечания/альтернативы:
config
в connection.php
и выполняя эту настройку оттуда.public static getConnection()
), чтобы получить соединение mysqli (возможно, использовать одноэлементный)public static getDbHost()
)executeLogin
объект mysqli
, который будет передан из вызывающего кода.
global
(ew!), Либо введите их.