За последние 24 часа нас посетили 64506 программистов и 1745 роботов. Сейчас ищет 961 программист ...

Insert mysqli

Тема в разделе "PHP для новичков", создана пользователем Cyrius, 20 май 2017.

  1. Cyrius

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

    С нами с:
    3 июл 2016
    Сообщения:
    98
    Симпатии:
    4
    Помогите, не понимаю в чем ошибка. Хочу сделать так: если в таблице есть значение - выводить его в плесхолдере поля инпут. Если же человек нажал на кнопку отправки формы, ввел новое значение поля - апдейтим ячейку в таблице. Если же ячейка была пуста, и пользователь ввел в поле данные - инзертим их в таблицу. Вот как это у меня выглядит.
    PHP:
    1. <p>Имя: <input type="text" name="name" id="input1"  class="inputs_p" style="margin-left: 80px;" placeholder="
    2. <?php
    3. $id = $_SESSION['id']; //id залогинившегося
    4. $login = $_SESSION['login']; // login залогинившегося
    5. $query = mysqli_query($connect,"SELECT * FROM `users` WHERE `login` = '$login' ");
    6. $data = mysqli_fetch_array($query);
    7. //Суть
    8. if($data['name'] != ''){ //Если есть запись уже в табличке, то апдейтим
    9.   echo $data['name'];
    10.   if(isset($_POST['do_profile'])) { // do_profile - имя кнопки типа сабмит
    11.     if($_POST['name'] != ''){
    12.     $name = $_POST['name'];
    13.     mysqli_query($connect,"UPDATE `users` SET `name` = '$name' WHERE `login` = '$login' ");
    14.     }
    15.   }
    16. }
    17. else {
    18.   if(isset($_POST['do_profile'])){ //Если нету, то вставляем
    19.     if($_POST['name'] != ''){
    20.     $name = $_POST['name'];
    21.     mysqli_query($connect, "INSERT INTO `users` (name) VALUES ('$name') WHERE `login` = '$login'");
    22.     }
    23.   }
    24. }
    25.  
    26. ?>"></p>
    Самое странное, что в этом коде работает апдейт (то есть, если есть запись в таблице), в плейсхолдер выводятся данные, если они есть. НО НИЧЕГО НЕ ИЗЕРТИТСЯ.
    Проверял через ехо инзерт запрос - все норм.
     
  2. TeslaFeo

    TeslaFeo Старожил

    С нами с:
    9 мар 2016
    Сообщения:
    2.984
    Симпатии:
    759
    Намудрил!
    --- Добавлено ---
    вот это бред полный. такого не бывает.
     
  3. Cyrius

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

    С нами с:
    3 июл 2016
    Сообщения:
    98
    Симпатии:
    4
    Почему не бывает? - вставить в таблице users в поле name значение переменной $name, где поле login соответствует переменной $login (в которую заложено значение логина авторизировавшегося)
     
  4. Sergey_Tsarev

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

    С нами с:
    17 мар 2016
    Сообщения:
    502
    Симпатии:
    105
    Insert вставляет новую строку. Тебе нуже update
     
  5. Cyrius

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

    С нами с:
    3 июл 2016
    Сообщения:
    98
    Симпатии:
    4
    Спасибо всем, до меня дошло!
    --- Добавлено ---
    Я так понял, что условие WHERE вообще по логике не может употребляться вместе с insert?
     
  6. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    7.818
    Симпатии:
    1.333
    Адрес:
    Лень
    хочу понять почему кодеры пилюлят проверку в условиях
    $data['name'] != ''
    место !empty ( $data['name'] ) или isset
    но ладно там пилюлим, так еще и нотис словим, а если судить что такие условия пишем - господи... какого фуя боимся включить отображения всех ошибок error_reporting ( E_ALL );
    и фиксить все гавно написанное + уровень на +1 ЧСВ повысится.
    --- Добавлено ---
    открываешь америку на ходу, ваще молодцом!
    https://www.w3schools.com/sql/sql_insert_into_select.asp
     
  7. TeslaFeo

    TeslaFeo Старожил

    С нами с:
    9 мар 2016
    Сообщения:
    2.984
    Симпатии:
    759
    Да. INSERT добавляет новую строку, а WHERE используется для поиска уже существующих строк в запросах SELECT, UPDATE и DELETE.
     
  8. Cyrius

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

    С нами с:
    3 июл 2016
    Сообщения:
    98
    Симпатии:
    4
    Ну, потому что ''' и эмпти немного разные, а уж тем более isset и != ''
    ну насчет эмпти я согласен, но разве хуже, если я сделаю с '''?
     
  9. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    7.818
    Симпатии:
    1.333
    Адрес:
    Лень
    в чем разные если ты проверяешь переменную на наличие ключа, а с !empty на наличие ключа + содержимое , мм ?o_O

    еще раз - ты Notice фурункул сделал
     
  10. [vs]

    [vs] Суперстар
    Команда форума Модератор

    С нами с:
    27 сен 2007
    Сообщения:
    10.559
    Симпатии:
    632
    Наличие ключа проверяется с помощью array_key_exists()
    PHP:
    1. $a = ['b' => null];
    2. var_dump(isset($a['b'])); // false
    3. var_dump(array_key_exists('b', $a)); // true
     
  11. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    7.818
    Симпатии:
    1.333
    Адрес:
    Лень
  12. [vs]

    [vs] Суперстар
    Команда форума Модератор

    С нами с:
    27 сен 2007
    Сообщения:
    10.559
    Симпатии:
    632
    Другой вопрос, что из реквеста не может прийти чистый null, там либо ключа нет, либо в нем, как минимум, пустая строка.
    --- Добавлено ---
    поэтому с постом/гетом/кукис, isset канает.
     
  13. romach

    romach Старожил

    С нами с:
    26 окт 2013
    Сообщения:
    2.904
    Симпатии:
    719
    К примеру этим:
    PHP:
    1. $array['key'] = '0';
    2. var_dump(empty($array['key'])); // true
    3. var_dump($array['key'] == ''); // false
     
  14. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    7.818
    Симпатии:
    1.333
    Адрес:
    Лень
    http://sqlfiddle.com/#!9/c99f0/1

    придет стек ввиде array () без ключей и тогда скажет 3 строка
    Notice: key undefined ..... .php line 3
     
  15. romach

    romach Старожил

    С нами с:
    26 окт 2013
    Сообщения:
    2.904
    Симпатии:
    719
    Ну раз ничего не пришло, то надо реагировать на это как "записи нет", а не как "в записи куда-то пропало поле".
     
  16. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    7.818
    Симпатии:
    1.333
    Адрес:
    Лень
    o_O
    Не понял тебя, плиз кодом покажи
     
    denis01 нравится это.
  17. romach

    romach Старожил

    С нами с:
    26 окт 2013
    Сообщения:
    2.904
    Симпатии:
    719
    1. Когда мы проверяем на empty() можем получить ложное срабатывание, т.к. 0 может быть вполне допустимым значением, а оно вернет тебе true. Потому проверять так значения не всегда правильно.
    2. Получив ответ от БД сперва нужно проверить пришло ли что-то вообще, т.е. количество записей больше 0, если мы ожидаем их несколько или результат не равен null, если ожидаем одну. В случае же успешного выполнения запроса поля таки должны быть на месте, их отсутствие - повод для 500 ошибки, а не пропуска условия.

    p.s. зачем тут код? )
     
    Fell-x27 и MouseZver нравится это.
  18. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    7.818
    Симпатии:
    1.333
    Адрес:
    Лень
    лайк