Użyłeś backtick-ów ` przy przekazywaniu wartość ze zmiennych do zapytania sql.
zapisz np. tak:
($connect, "INSERT INTO `uzytkownicy`(`Imię`, `Nazwisko`, `Wiek`, `E-mail`, `Płeć`, `Języki`)
VALUES ('$name', '$surname', '$age', '$email', '$sex', '$langs')");
Druga sprawa użyłeś zmiennej: $langs, która w tym kontekście jest tablicą, a potrzebujemy string-a, czyli Twój $lng.
proponuję zamienić to:
$langs = $_POST['lang'];
$lng = "";
foreach($langs as $languages)
{
$lng .= $languages . ", ";
}
na
$langs = implode(',', ($_POST['lang'] ?? []));
wtedy w zapytaniu pozostaje zmienna $langs, ponieważ po użyciu implode przyjmuje wartość typu string.
($connect, "INSERT INTO `uzytkownicy`(`Imię`, `Nazwisko`, `Wiek`, `E-mail`, `Płeć`, `Języki`)
VALUES ('$name', '$surname', '$age', '$email', '$sex', '$langs')");
Proponuje najpierw sprawdzić, czy wszystkie wymagane zmienne posiadają jakąś wartość (lub przeprowadzić pełną walidację danych z formularza) i dopiero wtedy nawiązywać połączenie z bazą danych.
przykład
<?php
if ($_SERVER["REQUEST_METHOD"] == 'POST') // (isset($_POST['submit']))
{
$name = $_POST['imie'] ?? null;
$surname = $_POST['nazwisko'] ?? null;
$age = $_POST['wiek'] ?? null;
$email = $_POST['email'] ?? null;
$sex = $_POST['plec'] ?? null;
$langs = implode(',', ($_POST['lang'] ?? []));
//var_dump($langs);
if ($name && $surname && $age && $email && $sex)
{
require_once("connect.php");
$connect = mysqli_connect($host, $user, $password, $db) or die("Nie udało się połączyć z bazą danych.");
$result = mysqli_query($connect, "INSERT INTO `uzytkownicy`(`Imię`, `Nazwisko`, `Wiek`, `E-mail`, `Płeć`, `Języki`) VALUES ('$name', '$surname', '$age', '$email', '$sex', '$langs')");
}
}
?>
w powyższym przykładzie $lang może przyjąć wartość "pustą" (null string), bo użytkownik może nie zaznaczyć żadnego z checkbox-ów, dlatego nie jest sprawdzana (może być "pusta") (zgaduję, że reszta zmiennych musi posiadać jakąś wartość).
if ($name && $surname && $age && $email && $sex)
{
...
}
Ewentualnie gdy w bazie danych masz w tabeli `uzytkownicy` kolumnę `Języki` ustawioną na NOT NULL
$langs = (! empty($_POST['lang'] ?? null)) ? implode(',', ($_POST['lang'])) : 'brak danych';
//var_dump($langs);
if ($name && $surname && $age && $email && $sex && $langs)
{
...
}
[ What does double question mark (??) operator mean in PHP? ]