0

Я только знакомлюсь с пхп, и пытаюсь организовать добавление полей в БД, через инпуты. Обработчик у меня выглядит следую

require_once "connect.php";
$loc1 = $_POST["loc1"];
$loc2 = $_POST["loc2"];
$loc3 = $_POST["loc3"];
mysqli_query($connect, "INSERT INTO `locbase` (`id`, `loc1`, `loc2`, `loc3`) VALUES (NULL, '$loc1', '$loc2', '$loc3')");
header('Location: admin.php');

Проблема заключается в том, что в БД добавляются значения, только если все 3 поля заполнены. А я бы хотел добавлять, даже если одно заполнено, а остальные пустые.

Спасибо.

  • пытаюсь организовать добавление полей в БД, через инпуты. Это называется "вставить запись". Добавление полей - совсем иная операция. в БД добавляются значения, только если все 3 поля заполнены. А если не все - что наблюдается? подробно... – Akina Mar 23 '21 at 15:38
  • Прошу прощения, еще плохо знаком с терминологией. Если не все поля добавляются, то ничего не происходит - возвращает на страницу header('Location: admin.php'); а если убрать то на пустой странице обработчика – Alex Lvl Mar 23 '21 at 15:40
  • Если не все поля добавляются, то ничего не происходит Не верю. По всему - должно приходить от MySQL сообщение об ошибке, просто Вы его не выводите (и вообще не проверяете на ошибку). А надо... в общем, делайте, а потом приходите и показывайте точный и полный текст ошибки. – Akina Mar 23 '21 at 15:43
  • Говорю же "Я только знакомлюсь с пхп". Я не знаю как вывести ошибку mysql и это не гуглится быстро.. – Alex Lvl Mar 23 '21 at 15:53
  • Я немного разобрался. Проблема в том, что тип данных в БД указан как "datetime". Если его поменять на varchar или integer то всё добавляется, однако хотелось бы оставить, этот тип данных. Скорее нужно разрешить атрибут NULL в БД. – Alex Lvl Mar 23 '21 at 15:56
  • помимо разрешения нулл в БД надо еще и само поле превратить из пустой строки в нулл – Ипатьев Mar 23 '21 at 15:59
  • а для этого надо переделать запрос на подготовленные выражения – Ипатьев Mar 23 '21 at 15:59
  • в sql запросе можно пропускать некоторые поля (те что в скобках), также при создании таблицы можно указать, что поле по-умолчанию может принимать значение null. – Jean-Claude Mar 23 '21 at 17:07

1 Answers1

0

Записать значение null в бд несложно. Нужно сделать всего две вещи.

  1. Использовать подготовленные выражения. Поскольку их все равно надо всегда использовать при вставке, то этот пункт скорее риторический
  2. Собственно превратить пустую строку, которая приходит из формы когда поле не заполнено, в значение null

Итоговый код будет базироваться вот на этом ответе

# соединяемся с БД. лучше делать это в отдельном файле
mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
$db = new mysqli('127.0.0.1', '1', '1', 'vk2');
$db->set_charset('utf8mb4');

превращаем пустые строки в null

$loc1 = $_POST["loc1"] ?: null; $loc2 = $_POST["loc2"] ?: null; $loc3 = $_POST["loc3"] ?: null;

выполняем подготовленный запррос. все пояснения по ссылке выше

$sql = "INSERT INTO locbase (loc1, loc2, loc3) VALUES (?,?,?)"); $stmt = $link->prepare($sql); $stmt->bind_param("sss", $loc1, $loc2, $loc3); $stmt->execute();