Følgende kode erklærer bare en strengvariabel, der indeholder en MySQL-forespørgsel:
$sql = "INSERT INTO users (username, password, email)
VALUES ('".$_POST["username"]."','".$_POST["password"]."','".$_POST["email"]."')";
Den udfører ikke forespørgslen. For at gøre det skal du bruge nogle funktioner, men lad mig først forklare noget andet.
STIL ALDRIG TIL BRUGERINDTAG :Du bør aldrig tilføje brugerinput (såsom formularinput fra $_GET
eller $_POST
) direkte til din forespørgsel. Nogen kan omhyggeligt manipulere inputtet på en sådan måde, at det kan forårsage stor skade på din database. Det kaldes SQL Injection. Du kan læse mere om det her
For at beskytte dit script mod et sådant angreb skal du brug Udarbejdede Udsagn. Mere om forberedte erklæringer her
Inkluder forberedte udsagn til din kode som denne:
$sql = "INSERT INTO users (username, password, email)
VALUES (?,?,?)";
Læg mærke til, hvordan ?
bruges som pladsholdere for værdierne. Dernæst skal du forberede sætningen ved hjælp af mysqli_prepare
:
$stmt = $mysqli->prepare($sql);
Begynd derefter at binde inputvariablerne til den forberedte sætning:
$stmt->bind_param("sss", $_POST['username'], $_POST['email'], $_POST['password']);
Og til sidst udføre de forberedte udsagn. (Det er her selve indsættelsen finder sted)
$stmt->execute();
BEMÆRK Selvom det ikke er en del af spørgsmålet, råder jeg dig kraftigt til aldrig at gemme adgangskoder i klartekst. I stedet skal du bruge password_hash
for at gemme en hash af adgangskoden