Witam,
zrobiłem sobie formularz zmiany danych w bazie, ale po zapisie pobierane są ponownie jakby stare dane albo są trzymane gdzieś w pamięci... chociaż wątpię, bo w logach strony, które stworzyłem jestem w stanie od razu po kliknięciu zobaczyć nowe dane.
<?php
namespace src\cms\controller;
use src\cms\controller\Controller;
use src\cms\controller\IController;
use src\cms\model\UsersModel;
class SettingsController extends Controller implements IController
{
private $usersModel;
private $currentLoggedUser;
public function __construct()
{
parent::__construct();
$this->usersModel = new UsersModel();
}
public function __destruct()
{
parent::displayBase();
}
public function indexAction()
{
$this->currentLoggedUser = $this->usersModel->getUserByUsername($_SESSION['username']);
$this->view->first_name = $this->currentLoggedUser[0]['first_name'];
$this->view->email = $this->currentLoggedUser[0]['email_address'];
if (isset($_POST['save'])) $this->checkData();
$this->view->baseContent = $this->view->display('src/cms/data/templates/settings.php');
}
/**
* Checks the data from form while changing the user data
*/
private function checkData()
{
if ($_POST['old_password'] == $this->currentLoggedUser[0]['password'] && $_SESSION['rank'] == 'admin') //Checks if the logged user is admin
$this->changeData();
else
\simonmedia\package\log\Logs::warn('SettingsController (cms)', 'The given password is not the same as in database');
}
/**
* Changes the data of the current logged user
*/
private function changeData()
{
$oldName = $this->currentLoggedUser[0]['first_name'];
$name = $_POST['first_name'];
$emailAddress = $_POST['email_address'];
$newPassword = $_POST['new_password'];
$rePassword = $_POST['re_password'];
if ($newPassword !== $rePassword)
\simonmedia\package\log\Logs::warn('SettingsController (cms)', 'New password and the repeat password is not the same');
else
$this->usersModel->setNewData($oldName, $name, $emailAddress, $newPassword);
}
}
To jest ta klasa.
Sam formularz kieruje na tą samą stronę, z której został wywołany.
W liniach 29, 30 są wysyłane do widoku (do formualrza) dane z bazy.
Mniej więcej wiem, gdzie leży problem, ale czy stare dane są jakby zachowywane w danym przesłaniu?
Gdy na końcu czyli w changeData zrobię
var_dump($this->usersModel->getUserByUsername($_SESSION['username']));
to zwraca mi od razu nową nazwę już po zmianie.
Jakieś sugestie macie jak to załatwić?
Myślałem o ajax i wysłanie żądania z formularza do php przez ajax i odebranie danych, ale czy to ma sens?
Przy okazji proszę o ocenę klasy (nie duża, ale chyba pierwsza do oceny)
Dodam, że skrypt potrafi sobie zmieniać na zmianę nawet.
Tutaj możecie to sprawdzć: simonmedia.gtbase.net/panel
Login: admin
Hasło: superhaslo
Wygląda to tak, jakby nie odświeżał - lub nie pobierał świeżych danych z db.
UPDATE:
Chyba naprawiłem sobie to tym:
private function changeData()
{
$oldName = $this->currentLoggedUser[0]['first_name'];
$name = $_POST['first_name'];
$emailAddress = $_POST['email_address'];
$newPassword = $_POST['new_password'];
$rePassword = $_POST['re_password'];
\simonmedia\package\log\Logs::warn('SettingsController (cms)', 'New password and the repeat password is not the same');
if ($newPassword !== $rePassword)
\simonmedia\package\log\Logs::warn('SettingsController (cms)', 'New password and the repeat password is not the same');
else
$this->usersModel->setNewData($oldName, $name, $emailAddress, $newPassword);
header('refresh:0.01; url=http://cms/panel/ustawienia'); }
No i logi działają, bo bez czasowe refreshu było to wykonywane od razu i jakby logi były pomijane.
Oczywiście będzie to zautomatyzowane.