Задать вопрос
Al_Shopen
@Al_Shopen
Human

Как через ORM RedBean php внести изменения в несколько ячеек таблицы базы данных MySql?

Я сделал вход на сайт по логину и паролю, теперь мне необходимо реализовать изменение информации о пользователе.
В базе таблица users (id, user_name, user_surname, user_age, user_thirdname, email, password).
Я использую сессии в php при авторизации и при входе пользователь попадает в личный кабинет, где может изменить информацию о себе, для этого я использую findOne, но при внесении изменений(ФИО и возраст) - выдаёт ошибку:
Fatal error: Uncaught RedBeanPHP\RedException: Expected array, NULL given.

Вот код:
<?php
require "db.php";
$data = $_POST;

// изменение данных
if ( isset($_POST['change'])) {
      $findUserMail = R::findOne('users', 'email = ?', $data['email']);

      if ($findUserMail) {
            $findUser->user_name = $data['user_name'];
            $findUser->user_surname = $data['user_surname'];
            $findUser->user_thirdname = $data['user_otchestvo'];
            $findUser->user_age = $data['user_age'];	
            R::store($findUser);
      } else {
            echo "<script>alert(\"В введённых данных возникла ошибка:  \");</script>";
      }
}  
//выход из аккаунта и из сессии
if ( isset($_POST['out']) ) { 
	unset($_SESSION['logged_user']);
	header("Location:/index.php");
}


<form action="/index2.php" method="POST">
                        <p>Изменить личные данные</p>
                        <input type="text" placeholder="имя" name="user_name" required minlength="2" >
                        <input type="text" placeholder="фамилия" name="user_surname" required minlength="2" >
                        <input type="text" placeholder="отчество" name="user_otchestvo" required minlength="2" >
                        <input type="text" placeholder="возраст(лет)" name="user_age" required >
                        <button type="submit" name="change">Изменить</button>
                  </form>
  • Вопрос задан
  • 507 просмотров
Подписаться 1 Средний Комментировать
Пригласить эксперта
Ответы на вопрос 1
Al_Shopen
@Al_Shopen Автор вопроса
Human
В общем каким-то *я додумался сам - вот решение:
$id = $_SESSION['logged_user']->id;
$id = (int)$id;

if ( isset($_POST['change'])) {
      $findUser = R::findOne('users', 'id = ?', [$id]);
      
            $findUser->user_name = $data['user_name'];
            $findUser->user_surname = $data['user_surname'];
            $findUser->user_thirdname = $data['user_otchestvo'];
            $findUser->user_age = $data['user_age'];	
            R::store($findUser);
            header("Location:/index2.php");
}


Рофл в том, что по сессии я определял email, потом решил чекать по id юзера, но тут до меня дошла мысль завардампить и яполучил строку))) а в базе эта ячейка int'овая и всё что я сделал - вычислил id юзера по сессии и преобразовал его к числу так как без преобразования это была строка(обожаю динамическую типизацию) и потом я понял, что перепутал имя переменной - надо было findUser просто писать и всё, а то получается обращался не пойми к чему :)
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы