sql >> Database >  >> RDS >> Mysql

PHP:Waarden van het formulier invoegen in MySQL

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



  1. Geen wachtwoord opgegeven / Positionele parameter niet gevonden PostgreSQL - Powershell

  2. jQuery automatisch aanvullen om te werken met PHP-bron

  3. Hoe gegevens behouden met behulp van postgres docker-afbeelding?

  4. Records samenvoegen in een enkele kolom zonder lussen?