Následující kód pouze deklaruje řetězcovou proměnnou, která obsahuje dotaz MySQL:
$sql = "INSERT INTO users (username, password, email)
VALUES ('".$_POST["username"]."','".$_POST["password"]."','".$_POST["email"]."')";
Dotaz neprovede. Chcete-li to provést, musíte použít některé funkce, ale nejprve mi dovolte vysvětlit něco jiného.
NIKDY NEVĚŘTE VSTUPU UŽIVATELE :Nikdy byste neměli přidávat uživatelský vstup (jako je formulářový vstup z $_GET
nebo $_POST
) přímo na váš dotaz. Někdo může opatrně manipulovat se vstupem takovým způsobem, že může způsobit velké poškození vaší databáze. Říká se tomu SQL Injection. Více si o tom můžete přečíst zde
Abyste ochránili svůj skript před takovým útokem, musíte použijte připravené výpisy. Více o připravených výpisech zde
Zahrňte do kódu připravené příkazy takto:
$sql = "INSERT INTO users (username, password, email)
VALUES (?,?,?)";
Všimněte si, jak ?
se používají jako zástupné symboly pro hodnoty. Dále byste měli připravit příkaz pomocí mysqli_prepare
:
$stmt = $mysqli->prepare($sql);
Poté začněte vázat vstupní proměnné na připravený příkaz:
$stmt->bind_param("sss", $_POST['username'], $_POST['email'], $_POST['password']);
A nakonec proveďte připravená prohlášení. (Tady probíhá skutečné vkládání)
$stmt->execute();
POZNÁMKA Ačkoli to není součástí otázky, důrazně vám doporučuji, abyste nikdy neukládali hesla jako prostý text. Místo toho byste měli použít password_hash
pro uložení hash hesla