Please verify you are human

Einzelne Datenabfrage
  Register for your free account! | Forgot your password?

Go Back   elitepvpers > Coders Den > Web Development
You last visited: Today at 14:10

  • Please register to post and access all features, it's quick, easy and FREE!

Advertisement



Einzelne Datenabfrage

Discussion on Einzelne Datenabfrage within the Web Development forum part of the Coders Den category.

Reply
 
Old   #1
 
elite*gold: 0
Join Date: Feb 2021
Posts: 4
Received Thanks: 0
Einzelne Datenabfrage

Hallo, ich taste mich langsam an PHP ran, bin gerade dabei ein kleines System zu programmieren.

Ich habe eine Datenbanktabelle (users) mit der spalte (super) dieser Wert ist auf Standard also 0.

Nun möchte ich abfragen welchen wert $userid = $_SESSION['userid'] in der Tabelle super hat.

Das gleiche habe ich mit Guthaben gemacht, es hat funktioniert.
Mit der Super Tabelle klappt es aber leider nicht.

Code:
$userid = $_SESSION['userid'];
$id = 0;


$stats = $pdo->prepare("SELECT super FROM users WHERE id = {$userid}");
$stats->execute(array($id));
$admin = $stats->fetch();

echo $admin['id'];
Kann mir jemand mal bitte helfen? Wie gesagt, ich will nur eine einzige spalte Abfragen...

Notice: Undefined index: id in C:\projects\htdocs\admin.php on line 12

Obwohl ich id gesetzt habe..
creativeIDE is offline  
Old 02/24/2021, 15:08   #2
 
elite*gold: 0
The Black Market: 149/0/0
Join Date: Sep 2016
Posts: 451
Received Thanks: 76
Du holst dir nur das Feld "super" und versuchst danach vom Array das Feld mit dem Index "id" abzufragen.

=> echo $admin['super'];

Alternativ musst du deinen SQL Befehl bearbeiten von "[...] super [...]" zu "[...] super, id [...]"
SyntaxBreaker is offline  
Old 02/24/2021, 15:14   #3
 
elite*gold: 0
Join Date: Feb 2021
Posts: 4
Received Thanks: 0
Quote:
Originally Posted by SyntaxBreaker View Post
Du holst dir nur das Feld "super" und versuchst danach vom Array das Feld mit dem Index "id" abzufragen.

=> echo $admin['super'];

Alternativ musst du deinen SQL Befehl bearbeiten von "[...] super [...]" zu "[...] super, id [...]"

ich suche schon knapp 1 Std. nach diesem Fehler ^^, dankeee!!
hast du vielleicht noch paar Seiten was ich mir durchlesen könnte, versuche gerade die Logik zu verstehen von allem...


Hab das jetzt mal so gemacht...

Code:
$userid = $_SESSION['userid'];
$status = 0;

//Abfrage von Admin
$stats = $pdo->prepare("SELECT super FROM users WHERE id = {$userid}");
$stats->execute(array($status));
$admin = $stats->fetch();
$status = $admin['super'];

if($status == 1){
    echo "Herzlich Willkommen im Adminbereich!";
} else {
    echo "Du bist kein Admin!";
}
Muss ich z.B bei execute diesen Wert als array abspeichern?
creativeIDE is offline  
Old 02/24/2021, 15:25   #4
 
elite*gold: 0
The Black Market: 149/0/0
Join Date: Sep 2016
Posts: 451
Received Thanks: 76
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.
SyntaxBreaker is offline  
Old 02/24/2021, 18:31   #5
 
Legithos's Avatar
 
elite*gold: 95
Join Date: Nov 2009
Posts: 669
Received Thanks: 47
Quote:
Originally Posted by SyntaxBreaker View Post
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.
Legithos is offline  
Old 02/25/2021, 09:45   #6


 
False's Avatar
 
elite*gold: 0
The Black Market: 243/0/0
Join Date: Apr 2011
Posts: 11,115
Received Thanks: 2,436
Quote:
Originally Posted by Legithos View Post
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.
Allgemein richtig zusammengefasst, bis auf diesen Part:
Quote:
Letzte Anmerkung - Die PHP-Funktion htmlspecialchars() verhindert, dass html-Code ausgeführt wird.
[...]
Sinnvoll vor dem Speichern in die Datenbank UND auch, wenn der Wert wieder abgerufen und angezeigt werden soll.
Die Funktion verhindert nicht das ausführen von html-Code, die Funktion wandelt enige Zeichen in html tags um z.B. wird aus "<" "<".
Durch die umwandlung erkennt der Browser nur noch text und keine Html Tags mehr.

Daher ist es auch nicht nötig und Sinnvoll htmlspecialchars in SQL's zu verwenden egal ob SELECT, UPDATE, INSERT INTO, etc...
Musst du mal manuell Sachen in der Datenbank nachgucken würdest du dir damit nur die Arbeit erschweren, daher reicht es einfach nur bei der Ausgabe htmlspecialchars zu verwenden.
False is offline  
Reply


Similar Threads Similar Threads
"Steam Datenabfrage"
06/02/2015 - Call of Duty - 1 Replies
Hallo, ich weiss nicht was ich noch machen soll, hatte dieses Problem noch nie. Jedenfalls, weiss ich nicht ob es daran liegt aber, bevor das Problem kam, habe ich ein Camo Pack runtergeladen (Afterlife Tarnung). Gestern ging noch alles perfekt. Heute, wenn ich auf "Mehrspieler" klicke, und verbinden will, kommt "Steam Datenabfrage ...". Nach einer weile, steht dann da, dass die Server wohlmöglich offline sind, was nicht stimmt. Einer das selbe Problem gehabt? Bitte dringend um Hilfe!
Call of Duty Black Ops 2 (Steam Datenabfrage)
05/07/2015 - Call of Duty - 7 Replies
#Spiel versucht zu Reparieren etc. bereits versucht im Netz noch keine erfolgreiche Lösung gefunden Fehler: Steam Daten Abfrage.... & Danach (Fehler beim Verbinden zu Bo2) Lösung: ??? (Keine Gefunden) Wird nach herausfinden Eingetragen... Ich hoffe es kann mit diesem Thread vielen Usern geholfen werden und (mir) ebenfalls da ich das Problem selber habe ^^ ----------------------------------------- -Firewall deaktiviert -Neues System so auch neuinstalliert
[TAUSCHE]Longjuyt2 S1 3 Einzelne Accounts Lvl 80+!!!
07/20/2009 - Metin2 Trading - 2 Replies
Wie der titel schon sagt, Tausche ich Hier meine 3 Longjuyt2 Accounts Infos : Alles Sind Krieger, Level : 81 "Körper" ; Level : 87 "Mental" ; Level 80 "Körper" So, Level 80 : Alles P rest auf Sausen Level 81 : Alles P rest auf KR "Kann mich auch Täuschen sorry :P" Level 87 : Alles P !!!
Einzelne Sektoren im Ram sperren?
02/09/2006 - Technical Support - 4 Replies
Hallo, tja, das Topic sagt eigentlich schon alles... ist es möglich einzelne Sektoren im Ram zu sperren? Ein einzelner Sektor in meinem Ramriegel ist kaputt, bei den Fehlern wird immer dieser angezeigt. Statt einen neuen zu kaufen müsste es doch theoretisch möglich sein, den Zugriff auf diesen Sektor prophylaktisch zu sperren? Korgan



All times are GMT +1. The time now is 14:10.


Powered by vBulletin®
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
SEO by vBSEO ©2011, Crawlability, Inc.

Support | Contact Us | FAQ | Advertising | Privacy Policy | Terms of Service | Abuse
Copyright ©2026 elitepvpers All Rights Reserved.