Практическое задание №3(Первая CMS): проблемы с редактированием пользователя.
Primary tabs
Возникает проблема с редактированием существующих пользователей:
1) Поялвяются надписи: "Trying to get property of non-object", указывающие на строки 28,36,44,60
файла editUser.php.
2) После редактирования пользователя и сохранения изменений, изменения не применяются.
Ссылка на задание: Практическое задание №3
<?php // показываем только админу if ($_SESSION['userName'] !== 'admin') { header("Location: admin.php"); } include "templates/include/header.php"; include "templates/admin/include/header.php" ?> <h1><?php echo $results['pageTitle']?></h1> <form action="admin.php?action=<?php echo $results['formAction']?>" method="post"> <input type="hidden" name="userLogin" value="<?php echo $results['user']->login ?>"> <?php if (isset($results['errorMessage'])) { ?> <div class="errorMessage"><?php echo $results['errorMessage'] ?></div> <?php } ?> <ul> <li> <label for="title">User Login</label> <input type="text" name="login" id="login" placeholder="Login" required autofocus maxlength="25" value="<?php echo htmlspecialchars($results['user']->login)?>" /> </li> <li> <label for="title">User Password</label> <input type="text" name="password" id="password" placeholder="Password" required autofocus maxlength="25" value="<?php echo htmlspecialchars($results['user']->password)?>" /> </li> <li> <label for="checkActivity">Active</label> <input type="checkbox" name="active" value="1" id="checkboxActivity" <?php if($results['user']->active == 1) { echo 'checked = "checked"'; } ?> > </li> </ul> <div class="buttons"> <input type="submit" name="saveChanges" value="Save Changes" /> <input type="submit" formnovalidate name="cancel" value="Cancel" /> </div> </form> <?php if ($results['user']->login) { ?> <p><a href="admin.php?action=deleteUser&userLogin=<?php echo $results['user']->login ?>" onclick="return confirm('Delete This User?')"> Delete This User </a></p> <?php } ?> <?php include "templates/include/footer.php" ?>
С первой проблемой разобрался при помощи добавления проверки isset:
if (isset($results['user']->login)) echo htmlspecialchars($results['user']->login)
Надписи "Trying to get property of non-object" перестали отображаться.
НО обновление логина и пароля пользователя не происходит про прежнему.
Ссылка на коммит: ПР3
- Log in to post comments
- 8025 reads
vedro-compota
Mon, 06/03/2019 - 00:15
Permalink
уточним
хочу сразу отметить, что эта проверка не совсем корректна в том смысле , чтобы проверяете существование поля объекта, в то время как у вас судя по ошибке нет самого объекта (хотя isset не упадет вообще на любом несуществующем обращении):
чему равна переменная в момент возникновения ошибки? Видимо null?
И далее - почему это происходит? Как именно вы отлаживаете код, выясняете причину? опишите процесс.
_____________
матфак вгу и остальная классика =)
vedro-compota
Mon, 06/03/2019 - 00:19
Permalink
Ещё просьба добавить ссылку
Ещё просьба добавить ссылку на само задание на сайте.
_____________
матфак вгу и остальная классика =)
Pavel1989
Tue, 06/11/2019 - 12:54
Permalink
Дополнение
Создание нового пользователя работает. По умолчанию в классе User задается значение null для login, password, active:
Абсолютно не функционирует: редактирование уже созданного пользователя, не работает его удаление.
Отладчиком не пользуюсь, смотрю на код, анализирую, вношу измение в код, затем сохраняю код в редакторе NetBeans и обновляю страницу в браузере.
Внешне функции редактирования пользователя (файл admin.php) выглядят правильно, самостоятельно найти ошибку не получается:
vedro-compota
Tue, 06/11/2019 - 12:58
Permalink
ну так)
ну так попробуйте использовать отладчик или распечатывайте промежуточное значение - чтобы понять как именно "по какой ветки логики" движется код. Это важное умение, проект тут простой как раз чтобы потренировать подойдет
_____________
матфак вгу и остальная классика =)
Pavel1989
Sat, 06/15/2019 - 15:21
Permalink
Работа с отладчиком
Попробовал поставить Breakpoints на тех строках, на которые ссылка в тексте ошибки:
Правильно ли выполняю распечатку объекта? Брейкпоинты лучше ставить в тех строках на которые ссылается ошибка, если я правильно понимаю?
Pavel1989
Sun, 06/16/2019 - 16:11
Permalink
Отладка с указанием переменных
Сделал отладку файлов editUser.php и User.php с укзанием в watches переменных:
Интересен момент: type: null value? Тип переменной: нулевое значение?
vedro-compota
Sun, 06/16/2019 - 23:22
Permalink
null - это да, далее надо выяснить почему
да, т.е. значение null. Что такое null - вспоминаем отдельно. Это что-то типа "без значения".
Там null - т.е. не объект, а у необъекта обратиться к свойству нельзя, о чем и сообщает ошибка:
(вы писали о ней выше).
Далее:
почему там null? откуда должны браться данные для формирования объекта? (из базы или из обработки запроса GET или POST при отправки формы) - выяснили это?
_____________
матфак вгу и остальная классика =)
Pavel1989
Wed, 06/19/2019 - 21:57
Permalink
Если я правильно понимаю, то
Если я правильно понимаю, то login, password, active это свойства класса User и им задается первоначальное значение null, и далее конструктор присваевает им реальные
значения из массива $data. (также реализованно и для классов Category, Article).
Обработка POST запроса при отправке формы:
vedro-compota
Mon, 10/14/2019 - 17:10
Permalink
значение по умолчанию для checkbox (html)
Добавляю этот комментарий сильно позже на будущее: используйте такой приём для передачи значения по умолчанию.
_____________
матфак вгу и остальная классика =)