-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathprofile.php
110 lines (100 loc) · 3.9 KB
/
profile.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
<?php
$forAuth = true;
include 'includes/header.php';
// Заполняем данные пользователя
$name = $user['name'];
$email = $user['email'];
// Создаем массив для ошибок
$errors = [];
// проверяем отправку формы
if(isset($_POST['submit'])) {
// Берем данные из формы
$name = $_POST['name'];
$email = $_POST['email'];
$password = $_POST['password'];
$newPassword = $_POST['new_password'];
$newPasswordConfirm = $_POST['new_password_confirm'];
// Проверка длины строки name
$nameLen = mb_strlen($name);
if($nameLen < 1 || $nameLen > 30) {
$errors['name'] = 'Incorrect name length (1 - 30)';
}
// валидация на корректность email
if(!filter_var($email, FILTER_VALIDATE_EMAIL)) {
$errors['email'] = 'Incorrect email';
}
// Подготовка запроса на уникальность email
$emailQuery = $db->prepare("SELECT * FROM users WHERE email = :email AND id <> :user_id");
// выполнение запроса
$emailQuery->execute([
'email' => $email,
'user_id' => $user['id'],
]);
// Получение первой строки из БД (массив или false)
if($emailQuery->fetch()) {
$errors['email'] = 'Email is exist';
}
// если указан новый пароль (т.е. если не пустая строка)
if($newPassword) {
// длина строки нового пароля
$newPasswordLen = mb_strlen($newPassword);
if($newPasswordLen < 3) {
$errors['new_password'] = 'Incorrect new password length';
}
// сравниваем строки нового пароля и его повторения
if($newPassword !== $newPasswordConfirm) {
$errors['new_password_confirm'] = 'Incorrect confirmation';
}
// сравниваем хэш старого пароля из формы с хэшем пароля из БД
if(md5($password) !== $user['password']) {
$errors['password'] = 'Incorrect password';
}
}
// если нет ошибок
if(count($errors) === 0) {
// если указан новый пароль, то заполняем его хэш, иначе берем старый хэш из БД
$password = $newPassword ? md5($newPassword) : $user['password'];
// подготовка запроса
$query = $db->prepare("UPDATE users SET name = :name, email = :email, password = :password WHERE id = :user_id");
// выполнение запроса
$query->execute([
'name' => $name,
'email' => $email,
'password' => $password,
'user_id' => $user['id']
]);
// флаг успешного сохранения для вывода сообщения
$successUpdate = true;
}
}
?>
<h1>Profile</h1>
<?= isset($successUpdate) ? 'Success update' : '' ?>
<form action="profile.php" method="post" novalidate>
<label>
Name:<br>
<input type="text" name="name" value="<?= $name ?>">
<?= $errors['name'] ?? '' ?>
</label><br>
<label>
Email:<br>
<input type="text" name="email" value="<?= $email ?>">
<?= $errors['email'] ?? '' ?>
</label><br>
<label>
Password:<br>
<input type="password" name="password">
<?= $errors['password'] ?? '' ?>
</label><br>
<label>
New password:<br>
<input type="password" name="new_password">
<?= $errors['new_password'] ?? '' ?>
</label><br>
<label>
New password confirm:<br>
<input type="password" name="new_password_confirm">
<?= $errors['new_password_confirm'] ?? '' ?>
</label><br>
<input type="submit" name="submit" value="Save">
</form>