Ik ben bezig met een login/registreer/etc systeempje te maken/leren maken, maar nu loop ik tegen een probleempje aan. Ben nu bezig met het registreer gedeelte en dat werkt zo goed als, alleen als ik wil controleren of de username al in gebruik is werkt dat niet. Hij zegt dat de username is gebruik is ookal gebruik ik een username die niet in gebruik is.. Dit is het stuk waar hij de username na kijkt:
<?php
$checkusername = $_POST["username"];
$checkusernamesql = "SELECT * FROM users WHERE username='$checkusername'";
$resultcheck = $conn->query($checkusernamesql);
$error = array();
if (empty($_POST["username"])){ //Check username
$error[] = "Vul je gebruikersnaam in!";
} else {
if(($_POST["username"])!=($resultcheck)){ //Check of username al bestaat
$error[] = "Gebruikersnaam al in gebruik!";
} else {
$username = $_POST["username"];
}
}
?>
Ik weet niet of het zo werkt maar ik heb het het zelfde gedaan als bij het gedeelte dat hij het wachtwoord checkt.
Greetz.
Even nog wat uitleg. En query geeft een resultset door met nuttige informatie voor een functie zoals fetch_assoc() of num_rows te noemen. Ook kan deze bij fouten in de query of database een 'false' teruggeven.
Met deze functie kan je dus NIET afleiden of een record al bestaat. Alleen of het gelukt is of niet.
Als ik het dus goed begrijp van het internet moet ik mysqli_real_escape_string gebruiken bij de $_POST? Zo dus:
$username = mysql_real_escape_string($conn, $_POST["username"]); Klopt dat?
En die implementatie van mysqli_real_escape_string() is dus niet goed. Je moet de functie gebruiken vóórdat je de data in de query plaatst. De functie beschermt je juist tegen input die je query kan manipuleren.
Als je na je query gebruikt, dan verniel je je data alleen maar met escapeings-karakters, dan dat je het gebruikt om deze te beschermen.
Verder raad ik ook aan om NIET de procedurele (mysqli_****()) en de object-georienteerde functies ($mysqli->********)DOORELKAAR te gebruiken. Dit zorgt vaak voor incompatibiliteit met elkaar, en gezien de notatie in beiden gevallen wel eens afwijkt zorgt het ook vaak voor verwarring.
Mijn voorkeur gaat uit naar de notitie met de pijl, en dus object georienteerd. Als je dan iets wilt escapen, dan gebruik je dit:
<?php
$username = $conn->real_escape_string($_POST["username"]); // eerst escapen!
$sql = "SELECT * FROM users WHERE username='".$checkusername."'";
$result = $conn->query($checkusernamesql); // query uitvoeren, en vervolgens wat ermee doen.
?>
Met de object-georiënteerde versie van MySQLi kan je een hoop dingen meer doen. Je kan zelfs nieuwe classes maken om te extenden als je bijvoorbeeld nieuwe functies erbij wilt maken, of functies (methods) wilt uitbreiden.
Oke ik snap wat je bedoelt.
quote:
<?php
$result = $conn->query($checkusernamesql); // query uitvoeren, en vervolgens wat ermee doen.
?>
hier die ik ook iets mee, namelijk kijken of de gebruikersnaam al ik gebruik is
<?php
if (empty($_POST["username"])){ //Check username
$error[] = "Vul je gebruikersnaam in!";
} else {
if(mysqli_num_rows($resultcheck)>=1){
$error[] = "Gebruikersnaam al ingebruik!";
} else {
$username = $conn->real_escape_string($_POST["username"]);
}
}
?>