Goedemorgen mensen!

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.
Inderdaad, alleen pas je $conn->real_escape_string wel verkeerd toe, en dus op de verkeerde plek.

En in de OO-versie is het $result->num_rows om te kijken hoeveel records er zijn.
Wat is dan het beste om die te gebruiken? bij de if (empty($_POST["username"])){ ?
Ikzelf controleer of het veld niet leeg is, in combinatie met een trim() tegen spatie-grapjassen.

<?php
$var = '          ';
if(trim($var)!='') {
    echo "Correct";
} else {
    echo "Er is niks ingevoerd.";
}
?>
Oké, dus inplaats van if empty, if trim. En dat helpt ook een deel tegen sql injection?
Dat heeft niks met SQL-injection te maken. Je kijkt alleen of ze leeg zijn, en het haalt voor- of achterlopende spaties weg.

SQL-injection ga je alleen maar tegen met deze functie, vóór je query:

<?php
$conn->real_escape_string($variabele);
?>
Oké, ik begin het nu een beetje te begrijpen. Heb nu ookal een paar tuts gekeken op youtube. Ik denk dat het nu wel goed is.
Laat je code nu eens zien, ik ben benieuwd hoe het nu geworden is.
Ik heb de $conn->real_escape_string nog staan omdat ik dat nog niet helemaal snap, maar ben nu een tutorial aan het volgen over het beveiligen van je scripts in het algemeen dus ook met htmlspecialchars enzo
De "if trim" heb ik alleen bij username, omdat de rest niet uitmaakt en de mail word al gecheckd.
<?php

include("config/database.php");

if(isset($_POST["submit"])){
$ip = $_SERVER['REMOTE_ADDR'];
$var = " ";

$url = "https://www.google.com/recaptcha/api/siteverify";;
$privatekey = "--------------";
$response = file_get_contents($url."?secret=".$privatekey."&response=".$_POST["g-recaptcha-response"]."&remoteip=".$_SERVER["REMOTE_ADDR"]);
$data = json_decode($response);

$checkusername = $conn->real_escape_string($_POST["username"]);
$checkusernamesql = "SELECT * FROM users WHERE username='".$checkusername."'";
$resultcheck = $conn->query($checkusernamesql);

$error = array();
if(isset($data->success) AND $data->success==false){
$error[] = "Captcha fout!";
} else {

if (trim($var)!=($_POST["username"])){ //Check username
$error[] = "Deze gebruikersnaam kan niet!";
} else {
if($resultcheck->num_rows>=1){
$error[] = "Gebruikersnaam al ingebruik!";
} else {
$username = $conn->real_escape_string($_POST["username"]);
}
}

if (empty($_POST["name"])){ //Check name
$error[] = "Vul je naam in!";
} else {
$name = $conn->real_escape_string($_POST["name"]);
}

if (empty($_POST["password"])){ //Check password
$error[] = "Vul je wachtwoord in!";
} else {
if(($_POST["password"])!=($_POST["password2"])){ //check password is het zelfde
$error[] = "Je wachtwoord is niet het zelfde";
} else {
$password = $conn->real_escape_string(hash("sha512", $_POST["password"]));
}
}
if (empty($_POST["email"])){ //Check email
$error[] = "Vul een Email in!";
} else {
if (filter_var($_POST["email"], FILTER_VALIDATE_EMAIL)){ //Check geldige email
$email = $conn->real_escape_string($_POST["email"]);
} else {
$error[] = "Vul een geldig Email in!";
}
}
}

if (empty($error)){
$conn->real_escape_string($sql);
$sql = ("INSERT INTO users (ip, username, name, password, email) VALUES ('$ip', '$username', '$name', '$password', '$email')");
$result = $conn->query($sql);
if (!$result){
echo "Error";
} else {
echo "Geregistreerd!";
}
} else {
echo "Error: ";
foreach ($error as $key => $value) {
echo $value;
echo "&nbsp;";
}
}

}




$conn->close();

?>

Ik begin php nu een beetje te leren, alleen dat beveiligen enzo dat is nog een pain in the ass
Waarom gebruik je nog steeds $conn->real_escape_string(......) NA je query?
Dit zie ik op lijn 29,36 en 45.
Zoals ik al eerder zei, heeft dat geen enkel nut.

En dit gaat ook niet:

            $conn->real_escape_string($sql);
            $sql = ("INSERT INTO users (ip, username, name, password, email) VALUES ('$ip', '$username', '$name', '$password', '$email')");
            $result = $conn->query($sql);

$sql bestaat allereerst nog niet eens, en verder moet je de waardes per stuk escapen met $conn->real_escape_string(...), als dat nog niet gebeurd is.
Klopt, ik citeer:
Ik heb de $conn->real_escape_string nog staan omdat ik dat nog niet helemaal snap

Script ik een beetje netjes of heb je nog wat tips?

Reageren