redbean php создает новую строчку

111
21 июня 2021, 03:00

Недавно начал использовать RedBeanPHP, всё нормально работало, пока я не попытался сделать изменение логина.

<?php
require "db.php";
$data = $_POST;
if (isset($data['changelogin'])) {
    $errors = array();
    if (trim($data['oldlogin']) == '') {
        $errors[] = 'Введите старый логин';
    }
    if (trim($data['newlogin']) == '') {
        $errors[] = 'Введите новый логин';
    }
    $user = R::findOne('users', 'name = ?', array($data['oldlogin']));
    if (empty($errors)) {
        $users = R::load('users', $user);
        $users->name = $data['newlogin'];
        R::store($users);
        header('Location: index.php');
    } else {
        echo '<div style="color: red;">' . array_shift($errors) . '</div>';
    }
}
?>

Вообщем, вместо того чтобы загружать новое имя, создается новая строка c почтой NULL Паролем NULL, но зато нужным логином.

Answer 1

У вас создается новая запись, потому что вы создаете нового пользователя и присваиваете ему только логин:

if (empty($errors)) {
    $users = R::load('users', $user);  // Загрузили юзера которого нет в базе $user = NULL;
    $user->name = $data['newlogin'];  // Присваиваем свойство name
    R::store($users); // Сохраняем нового юзера
    header('Location: index.php');
}

Вы уже загрузили модель юзера тут:

$user = R::findOne('users', 'name = ?', array($data['oldlogin']));

Все что вам нужно это изменить у него name:

$user->name = $data['newlogin'];
R::store('users', $user);

В итоге код будет такой:

<?php
require "db.php";
$data = $_POST;
if (isset($data['changelogin'])) {
    $errors = array();
    if (trim($data['oldlogin']) == '') {
        $errors[] = 'Введите старый логин';
    }
    if (trim($data['newlogin']) == '') {
        $errors[] = 'Введите новый логин';
    }
    if (empty($errors)) {
        $user = R::findOne('users', 'name = ?', array($data['oldlogin']));
        $user->name = $data['newlogin'];
        R::store($user);
        header('Location: index.php');
    } else {
        echo '<div style="color: red;">' . array_shift($errors) . '</div>';
    }
}
?>
READ ALSO
не могу собрать проект в netbeans

не могу собрать проект в netbeans

Везде пишут про файл manifest, но у меня он не создаётся и нигде вообще не упоминается, main класс выбрал, но jar файл так и не запускается пишет:

91
Как сменить версию Java

Как сменить версию Java

У меня установлена java версии 18, но при выполнении команды java --version, получаю ответ что версия: openjdk 11

101
Singleton, как лучше инициализировать поля

Singleton, как лучше инициализировать поля

Есть некоторый класс, который удобно реализовать как singletonКак лучше инициализировать его поля(информация о том как их заполнять приходит...

72