De volgende code declareert gewoon een stringvariabele die een MySQL-query bevat:
$sql = "INSERT INTO users (username, password, email)
VALUES ('".$_POST["username"]."','".$_POST["password"]."','".$_POST["email"]."')";
Het voert de query niet uit. Om dat te doen, moet je enkele functies gebruiken, maar laat me eerst iets anders uitleggen.
VERTROUW NOOIT GEBRUIKERSINVOER :U mag nooit gebruikersinvoer toevoegen (zoals formulierinvoer van $_GET
of $_POST
) rechtstreeks op uw vraag. Iemand kan de invoer zo zorgvuldig manipuleren dat deze grote schade aan uw database kan veroorzaken. Dat heet SQL-injectie. Je kunt er hier
meer over lezen
Om je script tegen een dergelijke aanval te beschermen, moet je moet gebruik voorbereide verklaringen. Meer over voorbereide verklaringen hier
Voeg voorbereide instructies als volgt toe aan uw code:
$sql = "INSERT INTO users (username, password, email)
VALUES (?,?,?)";
Merk op hoe de ?
worden gebruikt als tijdelijke aanduidingen voor de waarden. Vervolgens moet u de verklaring voorbereiden met behulp van mysqli_prepare
:
$stmt = $mysqli->prepare($sql);
Begin dan met het binden van de invoervariabelen aan het voorbereide statement:
$stmt->bind_param("sss", $_POST['username'], $_POST['email'], $_POST['password']);
En voer tenslotte de voorbereide verklaringen uit. (Hier vindt de eigenlijke invoeging plaats)
$stmt->execute();
OPMERKING Hoewel dit geen deel uitmaakt van de vraag, raad ik je ten zeerste aan om wachtwoorden nooit in leesbare tekst op te slaan. Gebruik in plaats daarvan password_hash
om een hash van het wachtwoord op te slaan