Помогите, не понимаю в чем ошибка. Хочу сделать так: если в таблице есть значение - выводить его в плесхолдере поля инпут. Если же человек нажал на кнопку отправки формы, ввел новое значение поля - апдейтим ячейку в таблице. Если же ячейка была пуста, и пользователь ввел в поле данные - инзертим их в таблицу. Вот как это у меня выглядит. PHP: <p>Имя: <input type="text" name="name" id="input1" class="inputs_p" style="margin-left: 80px;" placeholder=" <?php $id = $_SESSION['id']; //id залогинившегося $login = $_SESSION['login']; // login залогинившегося $query = mysqli_query($connect,"SELECT * FROM `users` WHERE `login` = '$login' "); $data = mysqli_fetch_array($query); //Суть if($data['name'] != ''){ //Если есть запись уже в табличке, то апдейтим echo $data['name']; if(isset($_POST['do_profile'])) { // do_profile - имя кнопки типа сабмит if($_POST['name'] != ''){ $name = $_POST['name']; mysqli_query($connect,"UPDATE `users` SET `name` = '$name' WHERE `login` = '$login' "); } } } else { if(isset($_POST['do_profile'])){ //Если нету, то вставляем if($_POST['name'] != ''){ $name = $_POST['name']; mysqli_query($connect, "INSERT INTO `users` (name) VALUES ('$name') WHERE `login` = '$login'"); } } } ?>"></p> Самое странное, что в этом коде работает апдейт (то есть, если есть запись в таблице), в плейсхолдер выводятся данные, если они есть. НО НИЧЕГО НЕ ИЗЕРТИТСЯ. Проверял через ехо инзерт запрос - все норм.
Почему не бывает? - вставить в таблице users в поле name значение переменной $name, где поле login соответствует переменной $login (в которую заложено значение логина авторизировавшегося)
Спасибо всем, до меня дошло! --- Добавлено --- Я так понял, что условие WHERE вообще по логике не может употребляться вместе с insert?
хочу понять почему кодеры пилюлят проверку в условиях $data['name'] != '' место !empty ( $data['name'] ) или isset но ладно там пилюлим, так еще и нотис словим, а если судить что такие условия пишем - господи... какого фуя боимся включить отображения всех ошибок error_reporting ( E_ALL ); и фиксить все гавно написанное + уровень на +1 ЧСВ повысится. --- Добавлено --- открываешь америку на ходу, ваще молодцом! https://www.w3schools.com/sql/sql_insert_into_select.asp
Да. INSERT добавляет новую строку, а WHERE используется для поиска уже существующих строк в запросах SELECT, UPDATE и DELETE.
Ну, потому что ''' и эмпти немного разные, а уж тем более isset и != '' ну насчет эмпти я согласен, но разве хуже, если я сделаю с '''?
в чем разные если ты проверяешь переменную на наличие ключа, а с !empty на наличие ключа + содержимое , мм ? еще раз - ты Notice фурункул сделал
Наличие ключа проверяется с помощью array_key_exists() PHP: $a = ['b' => null]; var_dump(isset($a['b'])); // false var_dump(array_key_exists('b', $a)); // true
Другой вопрос, что из реквеста не может прийти чистый null, там либо ключа нет, либо в нем, как минимум, пустая строка. --- Добавлено --- поэтому с постом/гетом/кукис, isset канает.
К примеру этим: PHP: $array['key'] = '0'; var_dump(empty($array['key'])); // true var_dump($array['key'] == ''); // false
http://sqlfiddle.com/#!9/c99f0/1 придет стек ввиде array () без ключей и тогда скажет 3 строка Notice: key undefined ..... .php line 3
Ну раз ничего не пришло, то надо реагировать на это как "записи нет", а не как "в записи куда-то пропало поле".
1. Когда мы проверяем на empty() можем получить ложное срабатывание, т.к. 0 может быть вполне допустимым значением, а оно вернет тебе true. Потому проверять так значения не всегда правильно. 2. Получив ответ от БД сперва нужно проверить пришло ли что-то вообще, т.е. количество записей больше 0, если мы ожидаем их несколько или результат не равен null, если ожидаем одну. В случае же успешного выполнения запроса поля таки должны быть на месте, их отсутствие - повод для 500 ошибки, а не пропуска условия. p.s. зачем тут код? )