Почему переменную R::store($user_change); не передаются значения при попытке обновить их в бд?
Подскажите пожалуйста почему не получается обновить в бд данные?
Пример инпута и пример запроса
<label class="form-label" for="account-username">Логин</label>
<input type="text" class="form-control" id="account-username"
name="new_login" placeholder="<?php echo $logged_user_login; ?>" value="
<?php echo @$data['new_login'];?>"/>
<?php
require 'db.php';
session_start();
$data = $_POST;
if( isset($data['do_data']) ) {
$errors = array();
$showError = True;
if ( $data['user_name'] == "" ) {
$errors[] = 'Введите имя и фамилию';
}
if ( $data['user_phone'] == "" ) {
$errors[] = 'Введите телефон';
}
if ( $data['user_country'] == "" ) {
$errors[] = 'Введите название компании';
}
if( R::count('users', "login = ?", array($data['new_login'])) > 0) {
$errors[] = 'Пользователь с таким логином существует';
}
if( empty($errors)) {
//$user_ids = $_SESSION['logged_user']->id;
$user_change = R::findOne('users', "id = ?", array($_SESSION['logged_user']->id));
//$user_change = R::exec("UPDATE `users` WHERE `id` = ?", ["$ids"]);
//$user_change = R::load('user', $_SESSION['logged_user']->id);
$user_change->login = $data['new_login'];
$user_change->name = $data['user_name'];
$user_change->phone = $data['user_phone'];
$user_change->country = $data['user_country'];
R::store($user_change);
exit;
}
}
?>
Ответы (1 шт):
Скорее всего, вы ничего не находите в findOne и дальше ничего не обновляете. Это происходит, вероятно, потому, что вы стартуете сессию после начала вывода. В документации к session_start сказано:
Для использования сессий на основе cookie, функция session_start() должна быть вызвана перед выводом чего бы то ни было в браузер.
Опытные программисты никогда не сталкиваются с такими проблемами, потому что они разрабатывают в окружении, которое не подавляет никакие ошибки. То есть у них есть локальная копия сайта, для которой error_reporting установлен в E_ALL и display_errors = 1.
Вы можете временно включить отображение ошибок для своего кусочка кода через функцию error_reporting и отображение ошибок через ini_set;
Опытные разработчики так же всегда кодируют обработку ошибок и особых случаев. Если метод может вернуть строку из базы данных или null, то для варианта с null обязательно надо написать код.
$logged_user = $_SESSION['logged_user']?? null;
if ($logged_user === null) {
throw new \Exception('Пользователь не залогинен.');
}
$user_change = R::findOne('users', 'id = ?', [$logged_user->id]);
if ($user_change === null) {
throw new \Exception(sprintf('Не найден пользователь %d', $logged_user->id));
}