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']; $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ę
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); }
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.