Följande kod deklarerar bara en strängvariabel som innehåller en MySQL-fråga:
$sql = "INSERT INTO users (username, password, email)
VALUES ('".$_POST["username"]."','".$_POST["password"]."','".$_POST["email"]."')";
Den kör inte frågan. För att göra det måste du använda vissa funktioner men låt mig förklara något annat först.
LITA ALDRIG på ANVÄNDARINSTÄLLNING :Du bör aldrig lägga till användarinmatning (som formulärinmatning från $_GET
eller $_POST
) direkt till din fråga. Någon kan försiktigt manipulera inmatningen på ett sådant sätt att den kan orsaka stor skada på din databas. Det kallas SQL Injection. Du kan läsa mer om det här
För att skydda ditt skript från en sådan attack måste du använd förberedda uttalanden. Mer om förberedda uttalanden här
Inkludera förberedda satser i din kod så här:
$sql = "INSERT INTO users (username, password, email)
VALUES (?,?,?)";
Lägg märke till hur ?
används som platshållare för värdena. Därefter bör du förbereda satsen med mysqli_prepare
:
$stmt = $mysqli->prepare($sql);
Börja sedan binda indatavariablerna till den förberedda satsen:
$stmt->bind_param("sss", $_POST['username'], $_POST['email'], $_POST['password']);
Och slutligen utför de förberedda uttalandena. (Det är här själva infogningen sker)
$stmt->execute();
OBS Även om det inte ingår i frågan, råder jag dig starkt att aldrig lagra lösenord i klartext. Istället bör du använda password_hash
för att lagra en hash av lösenordet