Не могу понять, где ошибаюсь...
Есть форма (Bootstrap 4), включающая запрос и обновление данных (там, вообще, 5 полей + кнопка, покажу одно поле, остальные аналогичны):
<form role="form" name="GlobalsForm" action="" method="post">
<?php global_data_read (); ?> <!-- Читаем данные из БД -->
<div class="form-group row h-20">
<label for="site-name-input" class="col-2 col-form-label my-auto">Заголовок сайта</label>
<div class="col-5 my-auto">
<input class="form-control site-name" type="text" name="SiteName" value="<?php echo $GlobalData['SiteName']; ?>" id="site-name-input">
</div>
<span id="site-name-input" class="text-muted my-auto">Заголовок сайта. Применяется в названии вкладки браузера</span>
</div>
<button type="submit" name="submit" id="globals-data-save" class="btn btn-success btn-lg pull-right ">Сохранить общие настройки</button>
<?php global_data_update (); ?> <!-- Изменяем данные в БД -->
</form>
Функция считывания данных из БД global_data_read:
function global_data_read () {
global $GlobalData;
$GlobalData = array();
$bd_link = mysqli_connect(DB_HOST, DB_USER, DB_PASSWORD, DB_NAME);
if (mysqli_connect_errno()) {
printf("Не удалось подключиться: %s\n", mysqli_connect_error());
exit();
}
if (!$bd_link->set_charset("utf8")) {
printf("Ошибка при загрузке набора символов utf8: %s\n", $bd_link->error);
exit();
}
$globals_query = "SELECT * FROM site_data";
$globals_result = $bd_link->query($globals_query);
while($globals_row = $globals_result->fetch_array()) {
$globals_rows[] = $globals_row;
$GlobalData['SiteName'] = $globals_row['SiteName'];
$GlobalData['CompanyName'] = $globals_row['CompanyName'];
$GlobalData['Theme'] = $globals_row['Theme'];
$GlobalData['Phone'] = $globals_row['Phone'];
$GlobalData['Email'] = $globals_row['Email'];
}
return $GlobalData;
}
Здесь все работает штатно: данные читаются и заносятся в поля формы.
Функция function global_data_update для обновления данных, работающая по нажатию кнопки в форме:
function global_data_update () {
$bd_link = mysqli_connect(DB_HOST, DB_USER, DB_PASSWORD, DB_NAME);
if (mysqli_connect_errno()) {
printf("Не удалось подключиться: %s\n", mysqli_connect_error());
exit();
}
if (!$bd_link->set_charset("utf8")) {
printf("Ошибка при загрузке набора символов utf8: %s\n", $bd_link->error);
exit();
}
if (form_submitted()) {
$GlobalData['SiteName'] = $_POST['SiteName'];
echo "SiteName = " . $GlobalData['SiteName'] . "<br />";
$GlobalData['CompanyName'] = $_POST['CompanyName'];
echo "CompanyName = " . $GlobalData['CompanyName'] . "<br />";
$GlobalData['Theme'] = $_POST['Theme'];
echo "Theme = " . $GlobalData['Theme'] . "<br />";
$GlobalData['Phone'] = $_POST['Phone'];
echo "Phone = " . $GlobalData['Phone'] . "<br />";
$GlobalData['Email'] = $_POST['Email'];
echo "Email = " . $GlobalData['Email'];
$globals_query = "UPDATE site_data SET
SiteName = '" . $GlobalData['SiteName'] . "',
CompanyName = '" . $GlobalData['CompanyName'] . "',
Theme = '" . $GlobalData['Theme'] . "',
Phone = '" . $GlobalData['Phone'] . "',
Email = '" . $GlobalData['Email'] . "'";
$globals_result = $bd_link->query($globals_query);
}
return $GlobalData;
}
Здесь есть функция form_submitted, которая просто проверяет isset и $_POST.
Обратите внимание: я в global_data_update проверяю и вывожу на экран значения массива GlobalData. Тут и появляется глюк - код не распознает поле БД Theme, хотя успешно видит его при запросе функцией global_data_read.
В контрольном выводе появляется ошибка:
Notice: Undefined index: Theme in C:\Users\user\Desktop\XAMPP\htdocs\constreq\_db-operate\db-op.php on line 42
Theme =
В БД это поле, естественно, остается пустым, при этом остальные поля постятся, выводятся и изменяются в БД правильно.
Замучился уже проверять синтаксис, может просто глаз замылился?