Er zijn verschillende manieren om te controleren of door de gebruiker verstrekte gegevens overeenkomen met gegevens in een MySQL-database met behulp van PHP. De beste aanpak hangt af van wat u vergelijkt en hoe u met potentiële verschillen wilt omgaan. Hier zijn een paar voorbeelden, gericht op best practices op het gebied van beveiliging:
1. Controleren op een enkele gebruiker (bijvoorbeeld inloggen):
Dit is het meest voorkomende scenario. We controleren of een gebruikersnaam en wachtwoord overeenkomen met een record in de database. Het is van cruciaal belang dat we het wachtwoord hashen voordat we het vergelijken. Bewaar wachtwoorden nooit in platte tekst!
```php
// Databasegegevens (VERVANG DEZE DOOR UW WERKELIJKE INFORMATIE!)
$servernaam ="uw_servernaam";
$gebruikersnaam ="uw_gebruikersnaam";
$wachtwoord ="uw_wachtwoord";
$dbnaam ="uw_dbnaam";
// Gebruikersinvoer (schoon dit!)
$usernameInput =$_POST["gebruikersnaam"];
$passwordInput =$_POST["wachtwoord"];
// Saneer gebruikersinvoer om SQL-injectie te voorkomen
$usernameInput =mysqli_real_escape_string($conn, $usernameInput);
$passwordInput =mysqli_real_escape_string($conn, $passwordInput);
// Maak verbinding
$conn =nieuwe mysqli($servernaam, $gebruikersnaam, $wachtwoord, $dbnaam);
// Controleer de verbinding
if ($conn->connect_error) {
die("Verbinding mislukt:" . $conn->connect_error);
}
// Bereiden en binden
$stmt =$conn->prepare("SELECTEER wachtwoord_hash VAN gebruikers WAAR gebruikersnaam =?");
$stmt->bind_param("s", $usernameInput);
$stmt->execute();
$result =$stmt->get_result();
if ($resultaat->aantal_rijen> 0) {
$row =$result->fetch_assoc();
$hashedPassword =$rij["wachtwoord_hash"];
// Verifieer het wachtwoord met behulp van wachtwoord_verify (de ingebouwde wachtwoordhashing-functie van PHP)
if (password_verify($passwordInput, $hashedPassword)) {
// Inloggen succesvol
echo "Inloggen gelukt!";
} anders {
// Onjuist wachtwoord
echo "Onjuist wachtwoord.";
}
} anders {
// Gebruikersnaam niet gevonden
echo "Gebruikersnaam niet gevonden.";
}
$stmt->sluiten();
$conn->sluiten();
?>
```
Uitleg:
* Databasegegevens: Vervang de tijdelijke aanduiding-referenties door uw daadwerkelijke MySQL-databasegegevens.
* Gebruikersinvoer: Bij deze code wordt ervan uitgegaan dat de gebruikersnaam en het wachtwoord zijn ingediend via een POST-verzoek. Schoon gebruikersinvoer altijd op om kwetsbaarheden in SQL-injectie te voorkomen. `mysqli_real_escape_string()` is een basisstap, maar voorbereide instructies (hier gebruikt) zijn veel robuuster.
* Opgestelde verklaring: Een voorbereide instructie voorkomt SQL-injectie door de SQL-query te scheiden van de door de gebruiker verstrekte gegevens. Het is cruciaal voor de veiligheid.
* Wachtwoordhashing: De database moet wachtwoord *hashes* opslaan, geen wachtwoorden in platte tekst. `password_hash()` creëert een veilige hash, en `password_verify()` vergelijkt de invoer van de gebruiker met de opgeslagen hash.
* Foutafhandeling: De code omvat basisfoutafhandeling voor databaseverbindingen en queryfouten.
2. Controleren op meerdere overeenkomsten (bijvoorbeeld een tabel doorzoeken):
Als u meerdere overeenkomsten moet vinden op basis van gebruikersinvoer (zoals zoeken naar producten met een specifieke naam), moet u de zoekopdracht aanpassen:
```php
// ... (databaseverbinding zoals hierboven) ...
$zoekterm =$_POST["zoekterm"];
$zoekterm =mysqli_real_escape_string($conn, $zoekterm); // Ontsmet!
$sql ="SELECT * VAN producten WAAR de naam LIKE '%$searchterm%'"; //Eenvoudig voorbeeld:gebruik een voorbereide verklaring voor betere beveiliging!
$resultaat =$conn->query($sql);
if ($resultaat->aantal_rijen> 0) {
while($row =$result->fetch_assoc()) {
// Verwerk elke overeenkomende rij
echo "Product:". $rij["naam"] . " ";
}
} anders {
echo "Geen producten gevonden.";
}
// ... (nauwe verbinding) ...
?>
```
Belangrijke opmerking: Het bovenstaande zoekvoorbeeld maakt gebruik van tekenreeksaaneenschakeling, die kwetsbaar is voor SQL-injectie als `$searchterm` niet is opgeschoond . Voor een veilige oplossing herschrijft u deze met behulp van voorbereide instructies. Voorbeeld:
```php
$stmt =$conn->prepare("SELECT * FROM producten WAAR naam LIKE ?");
$zoekterm ="%" . $zoekterm . "%"; // Voeg jokertekens toe voor LIKE
$stmt->bind_param("s", $zoekterm);
$stmt->execute();
// ... rest van de code om de resultaten te verwerken ...
```
Vergeet niet om de tijdelijke tabel- en kolomnamen te vervangen door uw daadwerkelijke databaseschema. Geef altijd prioriteit aan beveiliging door gebruik te maken van voorbereide instructies en de juiste invoeropschoning om SQL-injectieaanvallen te voorkomen. Overweeg het gebruik van geparametriseerde query's voor elke interactie met gebruikersinvoer en uw database. Voor complexere scenario's of grote gegevenssets wilt u wellicht geavanceerdere technieken verkennen, zoals opgeslagen procedures. |