Помогите исправить ошибку, не могу правильно сделать код, где пользователь в личном кабинете должен поменять свое имя, вот код в личном кабинете пользователя для ввода нового имени: PHP: <div class="form_task"> <?php if(isset($_SESSION['name'])){ echo '<p>Личный кабинет</p>'.$username.'.<br>'; echo ''; ?> <form method="POST" action="#" id="#"> <fieldset> <legend>Личные данные</legend> <div class="content_password">Введите новое имя:</div> <input type="text" name="new_name" value="" > <p><input type="submit" value="Поменять" name="savech"></p> </fieldset> </form> <form method="POST" action="#" id="#"> <fieldset> <p>E-mail: <input name="e_mail" type="Email" required></p> <p><input type="submit" value="Поменять" name="do_registrator2"></p> </fieldset> </form> <form method="POST" action="#" id="#"> <fieldset> <p>Пароль: <input name = "pas" type="Password" required></p> <p><input type="submit" value="Поменять" name="do_registrator3"></p> </fieldset> </form> </div> <?php } else { echo 'Вам необходимо авторизоваться'; } ?> Вот тот самый код замены имени пользователя PHP: if(isset($_POST['savech'])) { // if ($row = mysqli_num_rows($result)) // { // if(isset($_SESSION['name'])) //{ $new_name = $_POST['new_name']; $name1 = $_SESSION['name']; $query2 = "UPDATE `registrations` SET `name` = '$new_name' "; $result = mysqli_query($link,$query2) or die (mysqli_error($link)); // $_SESSION['name'] = $new_name; } else { $_SESSION['logged'] = false; } проблема в том, что он меняет имя пользователя у всех пользователей в таблице, а мне надо чтобы замена произошла у конкретного пользователя
Код (Text): WHERE `id`={$_SESSION['id']} Существование POST-параметров нужно проверять, прежде чем их использовать. И срочно читаем про SQL-инъекции (и про то, как с ними можно бороться).
переменную $user['id'] нужно создавать? Проверку POST я сделал в самом начале isset($_POST['savech'], и хотел сделать проверку на пользователя в таблице, но с другой стороны он же уже авторизовался, получается и ID у него уже должен быть свой?
Это условная запись. Выберите подходящий для себя вариант. Например, см., как я подправил мой пред. пост. --- Добавлено --- Говорю, существование используемых параметров проверяй: PHP: $new_name = $_POST['new_name']; Например, можешь в свою isset добавить этот параметр через запятую. --- Добавлено --- Или только его там оставь: совместишь проверку его существования с POST-проверкой. --- Добавлено --- Yes. Можешь вместо своей сессионной переменной logged использовать id: есть id, значит «logged», иначе нет.
Спасибо за помощь, буду в этом направление действовать, только пока не понятно с id, с этим я еще не сталкивался, id я делал только в таблице базы данных, и то оно у всех свое значение имеет. Буду думать как привязать id с сессией
Что там думать? id - пользователя это единственное, что обязательно должно быть в сессии после авторизации.
Когда я просто добавляю WHERE `id`={$_SESSION['id']}, то он показывает ошибку, получается что при авторизации в сессию id не записывается, я пробовал присвоить значение, но не нашел как это делается
Ты когда успешно аутентификацию проходишь (т.е. когда при входе указаны корректные логин и пароль), инициализируешь сессию путем создания сессионных переменных с нужными данными из БД. Ты по идее так должен был $_SESSION['name'] создать. Так же создаешь и $_SESSION['id']. Как выше написали, это чуть ли ни единственная обязательная сессионная переменная. Ее же можно использовать вместо logged (как, писал выше). --- Добавлено --- P.S. Вообще странно. Пытаешься что-то писать в базу от имени авторизованного пользователя, толком не разобравшись с сессиями, SQL-инъекциями и т.п.
PHP: <?php $err = [];# пустой массив для ошибок # проверяем какой метод используется на веб странице if ($_SERVER['REQUEST_METHOD'] == 'POST') { # получаем переменные и фильтруем их $filter = filter_input(INPUT_POST, 'user_name', FILTER_DEFAULT); if( !empty( $filter['user_name'] ) ) { $err[] = 'Заполни поле'; } # проверяем кол. ошибок if( count($err) > 0) # или проверить так: if( $err == [] ) { echo implode('.', $err); }else{ # чтобы имя менялось конкретному пользователю а не всем, тебе нужно указать например идентификатор пользователя ($_SESSION['uid']) = 2 $sql = "UPDATE `registrations` SET `name` = '$filter['user_name']' WHERE `uid` = '2' "; $res = mysqli_query($link, $sql) or die (mysqli_error($link)); $_SESSION['name'] = $filter['user_name']; # сохраняем в сессию имя, тут же можно сохранить идентификатор юзера $_SESSION['uid'] = true; # правда чтобы сохранить ID пользователя тебе нужно изначально это делать, как пользователь авторизовался на сайте, а не потом когда он редактирует свои данные. } } ?> <form method="POST" action="/путь к странице редактирования имя"> <fieldset> <legend>Личные данные</legend> <label>Введите новое имя:</label> <input type="text" name="user_name" placeholder="Ваше имя"> <input type="submit" value="Изменить"> </fieldset> </form>