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.
Het enige wat je moet begrijpen aan de $conn->real_escape_string, is dat je deze functie alleen gebruikt voor alle -door de user aanpasbare- data die je IN een query stopt. Dit is veelal $_GET['...'], $_POST['...'], $_COOKIE['...'], $_ENV['...']. Maar wees er oplettend in.

De functie gebruik je dus NOOIT NA dat je je $conn->query(...) uitgevoerd hebt. Dan is het gewoon nutteloos.
- Ariën - op 12/02/2017 11:32:01

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.

Deze stelling klopt niet. De procedurele en object georiënteerde schrijfwijzen zijn prima compatibel met elkaar, in die zin dat ze alle mysqli-gerelateerde objecten gebruiken. Het snijdt alleen geen hout om deze schrijfwijzen te combineren.

Plus, omdat mysqli enkel van objecten gebruik maakt zou het wellicht logischer zijn om ook (uitsluitend) van de object georiënteerde schrijfwijze gebruik te maken.

en gezien de notatie in beiden gevallen wel eens afwijkt zorgt het ook vaak voor verwarring.

Dit is toch wel degelijk juist! Met mengen van deze stijlen maakt het programmeren gewoon verwarrender. En ik kan me wel eens herinneren dat ik ooit met een menging van beiden eens vreemde bijzaken heb gehad. Misschien was het een bug in PHP die inmiddels gefixxed is, maar het is mij wel eens voorgekomen.
- Ariën - op 13/02/2017 16:10:31
Dit is toch wel degelijk juist!

Dat weerspreek ik ook niet, in wezen zeg ik hetzelfde, maar draag tegelijkertijd een zinnigere reden aan voor het gebruiken van één notatie, omdat de reden die jij aandroeg niet klopt.
Zeg nu zelf:


<?php
// MySQLi OO
$result->num_rows;
$row = $result->fetch_assoc();

// versus

// MySQLi procedureel
mysqli_num_rows($result);
$row = mysqli_fetch_assoc($result);
?>

Ik zie een aanzienlijk verschil tussen de OO-notatie bij MySQLi. De ene is een functie, en de andere niet.
Dit kan dus degelijk verwarring opleveren bij het programmeren als je beide schrijfwijzen door elkaar mengt.
Er is een vage schemerzone tussen objectgeoriënteerd en procedureel PHP.
Bij de Countable-interface bijvoorbeeld:


<?php
// OO
$number_of_users = $users->count();

// Procedureel
$number_of_users = count($users);

?>
- Ariën - op 13/02/2017 17:42:00
Dit kan dus degelijk verwarring opleveren bij het programmeren als je beide schrijfwijzen door elkaar mengt.

Daar ging de discussie wat mij betreft ook nooit over maar zaag maar door over hoe verwarrend een combinatie is, zoveel heb ik ook al gezegd.

Reageren