Это то же самое, что и ответ RiggsFolly, но улучшено.
if ($_SERVER['REQUEST_METHOD'] == 'POST' && isset($_POST['db-details'])) {
try {
mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
$connection = new mysqli(
$_POST['dbHost'],
$_POST['dbUsername'],
$_POST['dbPassword'],
$_POST['dbName']
);
$DBconfig = [
'dbHost' => $_POST['dbHost'],
'dbUsername' => $_POST['dbUsername'],
'dbPassword' => $_POST['dbPassword'],
'dbName' => $_POST['dbName']
];
// generate the config file
$contents = '<?php' . PHP_EOL;
$contents .= '$DBconfig = ' . var_export($DBconfig, true) . ';' . PHP_EOL;
$contents .= 'mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);' . PHP_EOL;
$contents .= '$connection = new mysqli(
$DBconfig["dbHost"],
$DBconfig["dbUsername"],
$DBconfig["dbPassword"],
$DBconfig["dbName"]
);';
echo $contents;
} catch (\Exception $e) {
// echo error message here and show the same form.
}
}
По сути, вы должны избегать оператора подавления ошибок любой ценой. К счастью, PHP имеет исключения, которые можно перехватить и обработать.
Если исключений нет, вы можете поместить сведения о соединении в массив, а затем экспортировать этот массив в строку. Создайте файл подключения и сохраните его.
Еще одна вещь, которую я хотел бы улучшить, - это инкапсулировать это в функцию, чтобы предотвратить утечку деталей конфигурации.
// generate the config file
$contents = '<?php' . PHP_EOL;
$contents .= 'function db_connect():\mysqli { '. PHP_EOL;
$contents .= '$DBconfig = ' . var_export($DBconfig, true) . ';' . PHP_EOL;
$contents .= 'mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);' . PHP_EOL;
$contents .= 'return new mysqli(
$DBconfig["dbHost"],
$DBconfig["dbUsername"],
$DBconfig["dbPassword"],
$DBconfig["dbName"]
);';
$contents .= PHP_EOL;
$contents .= '}'.PHP_EOL;
$contents .= '$connection = db_connect();'.PHP_EOL;
echo $contents;