За последние 24 часа нас посетили 20769 программистов и 1131 робот. Сейчас ищут 389 программистов ...

Помогите исправить ошибку

Тема в разделе "Сделайте за меня", создана пользователем Vladimir85, 17 сен 2019.

  1. Vladimir85

    Vladimir85 Новичок

    С нами с:
    17 сен 2019
    Сообщения:
    5
    Симпатии:
    0
    Помогите исправить ошибку, не могу правильно сделать код, где пользователь в личном кабинете должен поменять свое имя,
    вот код в личном кабинете пользователя для ввода нового имени:
    PHP:
    1. <div class="form_task">
    2. <?php
    3.             if(isset($_SESSION['name'])){
    4.  
    5. echo '<p>Личный кабинет</p>'.$username.'.<br>';
    6. echo '';
    7. ?>
    8. <form method="POST" action="#" id="#">
    9.    <fieldset>
    10.     <legend>Личные данные</legend>
    11.             <div class="content_password">Введите новое имя:</div>
    12.            <input type="text" name="new_name" value="" >
    13.            <p><input type="submit" value="Поменять" name="savech"></p>
    14.    </fieldset>
    15. </form>
    16.  
    17. <form method="POST" action="#" id="#">
    18.      <fieldset>
    19.             <p>E-mail: <input name="e_mail" type="Email"  required></p>
    20.             <p><input type="submit" value="Поменять" name="do_registrator2"></p>
    21.      </fieldset>
    22. </form>
    23.  
    24. <form method="POST" action="#" id="#">
    25.        <fieldset>
    26.             <p>Пароль: <input name = "pas" type="Password" required></p>  
    27.             <p><input type="submit" value="Поменять" name="do_registrator3"></p>
    28.        </fieldset>
    29. </form>
    30.   </div>
    31.   <?php }
    32.   else
    33.   {
    34.       echo 'Вам необходимо авторизоваться';
    35.   }
    36.     ?>
    37.  
    Вот тот самый код замены имени пользователя
    PHP:
    1. if(isset($_POST['savech']))
    2. {
    3. // if ($row = mysqli_num_rows($result))
    4.   //  {
    5.        // if(isset($_SESSION['name']))
    6. //{  
    7.  
    8.         $new_name = $_POST['new_name'];
    9.    $name1 = $_SESSION['name'];
    10.         $query2 = "UPDATE `registrations` SET `name` = '$new_name' ";
    11.         $result = mysqli_query($link,$query2) or die (mysqli_error($link));
    12.       //  $_SESSION['name'] = $new_name;
    13. }
    14.       else
    15.           {
    16.             $_SESSION['logged'] = false;      
    17.         }
    проблема в том, что он меняет имя пользователя у всех пользователей в таблице, а мне надо чтобы замена произошла у конкретного пользователя
     
  2. miketomlin

    miketomlin Старожил

    С нами с:
    9 авг 2016
    Сообщения:
    3.787
    Симпатии:
    646
    Код (Text):
    1. WHERE `id`={$_SESSION['id']}
    Существование POST-параметров нужно проверять, прежде чем их использовать. И срочно читаем про SQL-инъекции (и про то, как с ними можно бороться).
     
    #2 miketomlin, 17 сен 2019
    Последнее редактирование: 17 сен 2019
    Vladimir85 нравится это.
  3. Vladimir85

    Vladimir85 Новичок

    С нами с:
    17 сен 2019
    Сообщения:
    5
    Симпатии:
    0
    переменную $user['id'] нужно создавать? Проверку POST я сделал в самом начале isset($_POST['savech'], и хотел сделать проверку на пользователя в таблице, но с другой стороны он же уже авторизовался, получается и ID у него уже должен быть свой?
     
  4. miketomlin

    miketomlin Старожил

    С нами с:
    9 авг 2016
    Сообщения:
    3.787
    Симпатии:
    646
    Это условная запись. Выберите подходящий для себя вариант. Например, см., как я подправил мой пред. пост.
    --- Добавлено ---
    Говорю, существование используемых параметров проверяй:
    PHP:
    1. $new_name = $_POST['new_name'];
    Например, можешь в свою isset добавить этот параметр через запятую.
    --- Добавлено ---
    Или только его там оставь: совместишь проверку его существования с POST-проверкой.
    --- Добавлено ---
    Yes. Можешь вместо своей сессионной переменной logged использовать id: есть id, значит «logged», иначе нет.
     
    Vladimir85 нравится это.
  5. Vladimir85

    Vladimir85 Новичок

    С нами с:
    17 сен 2019
    Сообщения:
    5
    Симпатии:
    0
    Спасибо за помощь, буду в этом направление действовать, только пока не понятно с id, с этим я еще не сталкивался, id я делал только в таблице базы данных, и то оно у всех свое значение имеет. Буду думать как привязать id с сессией
     
  6. Valick

    Valick Активный пользователь

    С нами с:
    12 авг 2018
    Сообщения:
    1.911
    Симпатии:
    328
    Что там думать? id - пользователя это единственное, что обязательно должно быть в сессии после авторизации.
     
  7. Vladimir85

    Vladimir85 Новичок

    С нами с:
    17 сен 2019
    Сообщения:
    5
    Симпатии:
    0
    Когда я просто добавляю WHERE `id`={$_SESSION['id']}, то он показывает ошибку, получается что при авторизации в сессию id не записывается, я пробовал присвоить значение, но не нашел как это делается
     
  8. Valick

    Valick Активный пользователь

    С нами с:
    12 авг 2018
    Сообщения:
    1.911
    Симпатии:
    328
    @Vladimir85, не надо искать, просто прочтите любую книгу по РНР и вам воздастся))
     
  9. miketomlin

    miketomlin Старожил

    С нами с:
    9 авг 2016
    Сообщения:
    3.787
    Симпатии:
    646
    Ты когда успешно аутентификацию проходишь (т.е. когда при входе указаны корректные логин и пароль), инициализируешь сессию путем создания сессионных переменных с нужными данными из БД. Ты по идее так должен был $_SESSION['name'] создать. Так же создаешь и $_SESSION['id']. Как выше написали, это чуть ли ни единственная обязательная сессионная переменная. Ее же можно использовать вместо logged (как, писал выше).
    --- Добавлено ---
    P.S. Вообще странно. Пытаешься что-то писать в базу от имени авторизованного пользователя, толком не разобравшись с сессиями, SQL-инъекциями и т.п. :(
     
  10. _ne_scaju_

    _ne_scaju_ Старожил

    С нами с:
    25 ноя 2016
    Сообщения:
    2.149
    Симпатии:
    118
    PHP:
    1. <?php
    2.  
    3. $err = [];# пустой массив для ошибок
    4.  
    5. # проверяем какой метод используется на веб странице
    6. if ($_SERVER['REQUEST_METHOD'] == 'POST')
    7. {
    8.   # получаем переменные и фильтруем их
    9.   $filter = filter_input(INPUT_POST, 'user_name', FILTER_DEFAULT);
    10.  
    11.   if( !empty( $filter['user_name'] ) )
    12.   {
    13.       $err[] = 'Заполни поле';
    14.   }
    15.   # проверяем кол. ошибок
    16.   if( count($err) > 0) # или проверить так: if( $err == [] )
    17.   {
    18.     echo implode('.', $err);
    19.   }else{
    20.     # чтобы имя менялось конкретному пользователю а не всем, тебе нужно указать например идентификатор пользователя ($_SESSION['uid']) = 2
    21.     $sql = "UPDATE `registrations` SET `name` = '$filter['user_name']' WHERE `uid` = '2' ";
    22.     $res = mysqli_query($link, $sql) or die (mysqli_error($link));
    23.     $_SESSION['name'] = $filter['user_name']; # сохраняем в сессию имя, тут же можно сохранить идентификатор юзера
    24.     $_SESSION['uid'] = true; # правда чтобы сохранить ID пользователя тебе нужно изначально это делать, как пользователь авторизовался на сайте, а не потом когда он редактирует свои данные.
    25.  }
    26.  
    27. }
    28. ?>
    29. <form method="POST" action="/путь к странице редактирования имя">
    30.    <fieldset>
    31.     <legend>Личные данные</legend>
    32.       <label>Введите новое имя:</label>
    33.       <input type="text" name="user_name" placeholder="Ваше имя">
    34.       <input type="submit" value="Изменить">
    35.    </fieldset>
    36. </form>
     
    #10 _ne_scaju_, 22 сен 2019
    Последнее редактирование: 22 сен 2019
  11. Vladimir85

    Vladimir85 Новичок

    С нами с:
    17 сен 2019
    Сообщения:
    5
    Симпатии:
    0
    Спасибо, мне уже помогли, но Ваша методика тоже очень интересная