Как добавить в БД значение null, если поле не было заполнено?

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

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 поля заполнены. А я бы хотел добавлять, даже если одно заполнено, а остальные пустые.

Спасибо.


Ответы (1 шт):

Автор решения: Ипатьев

Записать значение 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();
→ Ссылка