Quote:
Originally Posted by SyntaxBreaker
Gerne 
Konkrete Links habe ich nicht, aber du kannst ja einfach mal nach "PHP pdo" Google befragen.
Hilfreich ist auch immer sowas wie "print_r([variable]);". Damit wird sie dir ausgegeben und du kannst schauen woran es scheitert.
|
Statt print_r($variable) bietet sich var_dump($variable) noch besser an.
Wenn du mit PDO arbeiten willst, dann würde ich es so machen:
Code:
$userid = $_SESSION['userid'];
$status = 0;
//Abfrage von Admin
$stats = $pdo->prepare("SELECT super FROM users WHERE id = :uid");
$stats->execute([
"uid" => htmlspecialchars($userid)
]);
$admin = $stats->fetch();
$status = $admin['super'];
if($status == 1){
echo "Herzlich Willkommen im Adminbereich!";
} else {
echo "Du bist kein Admin!";
}
PDO hat den Vorteil der Prepaired Statements. Das is unter Anderem ein riesiger Vorteil was die Sicherheit deiner Anwendung angeht. Zur praktischen und wirklich einfach gehaltenen Erklärung:
Prinzipiell ist dein SQL-Query wie folgt aufgebaut
Code:
"SELECT super FROM users WHERE id = " . $userid;
Nachteil hieran ist, dass sobald ein User die userid in irgendeiner Art und Weise beeinflussen kann (eher bei anderen Abfragen relevant), der SQL-Query durch einen User erweitert werden kann.
Code:
$userid = $_SESSION["userid"];
//User kann die Variable beeinflussen und gibt an:
$userid = "105 OR 1=1; SELECT * FROM users"
Das ist eine extreme Sicherheitslücke (SQL injection) und soll natürlich vermieden werden. Dies passiert bei PDO mit prepaired statements.
Statt
Code:
"SELECT super FROM users WHERE id = " . $userid;
schreiben wir
Code:
"SELECT super FROM users WHERE id = :userid";
Wie du ja eh schon richtig gemacht hast. Hintergrund hierbei ist, dass SQL einfach ausgedrückt AUSSCHLIEßLICH deine Variable auch als Variable liet und nicht ggf deinen SQL-Query erweitert (wie es bei SQL injection der Fall ist).
Jetzt müssen wir nurnoch :userid auch definieren bzw eine Variable zuweisen. Das passiert im $stats->execute(); also wie folgt:
Code:
$stats->execute([
"userid" => $userid
])
Wichtig! Kein Komma nach $userid. Einzige Ausnahme, wenn du mehrere Variablen zuweist, wie zb
Code:
$stats->execute([
"userid" => $userid,
"name" => $username
])
Hier wird mit einem einfachen Komma getrennt und die letzte Zeile hat kein Komma.
Letzte Anmerkung - Die PHP-Funktion htmlspecialchars() verhindert, dass html-Code ausgeführt wird.
Sollte ein User einen Html-Tag als Benutzername verwenden, zB "<html>" und du holst dir den Benutzer aus der Datenbank und willst ihn anzeigen lassen, wirst du nichts sehen, da der HTML-Befehlt auch als Befehl ausgeführt wird. Wenn du den Text des Benutzernamens des Benutzers haben willst, dann mit htmlspecialchars().
Sinnvoll vor dem Speichern in die Datenbank UND auch, wenn der Wert wieder abgerufen und angezeigt werden soll.