XHTMLforum

XHTMLforum (http://xhtmlforum.de/index.php)
-   Serveradministration und serverseitige Scripte (http://xhtmlforum.de/forumdisplay.php?f=80)
-   -   SQL Abfrage (http://xhtmlforum.de/showthread.php?t=52852)

erxx 24.07.2008 13:21

SQL Abfrage
 
Hallo liebe Gemeinde,

Mein Problem ist, dass ich gerne einen Button nur anzeigen lassen will wenn der Benutzer ein Administrator ist.
Da ich eine WBB3 Datenbank benutze müsste ich erst die dem usernamen entsprechende userID in der Tabelle wcf_user herausfinden und dann in der Tabelle wcf_user_to_group checken ob es für diese userID in der Spalte groupID einen Eintrag "4" gibt. Um somit herauszufinden ob dieser User ein Administrator ist. Ich habe mir lange die Tabellen angeguckt und das ist der einzige Weg gewesen der mir aufgefallen ist. Jedoch krieg ich ihn nicht in SQL umgesetzt. Vielleicht kann es ja einer von euch ?

Kleine Zusammenfassung

Tabelle: wcf_user

$_SESSION["username"](auch $username) sollte "username" in wcf_user entsprechen. Die dazugehörige userID (primary Key) ist die Information die ich haben will.

Tabelle: wcf_user_to_group

Die eben herausgefundene userID suchen (diese ist eventuell mehrmals enthalten) jedoch soll nur ein Eintrag beachtet werden in dem

in der Spalte userID die im 1.Schritt herausgefundene userID steht und in der Spalte groupID muss 4 stehen (4 steht für Admin)

Hoffe habe mich klar ausgedrückt.

Hoffe auf schnelle Hilfe

Vielen Dank im Vorraus

mantiz 24.07.2008 14:08

Entweder Du fragst die beiden Tabellen über einen Join ab, oder Du fragst beide Tabellen nacheinander ab.

1. Join
PHP-Code:

$sql srprintf("SELECT * FROM `wcf_user` AS `t1` LEFT JOIN `wcf_user_to_group` AS `t2` ON `t1`.`userID` = `t2`.`userID` WHERE `t1`.`username` = '%s' AND `t2`.`groupID` = 4"$username);
$result mysql_query($sql);
if (
mysql_num_rows($result) > 0) {
  
// erfolgreich


2. Nacheinander
PHP-Code:

$sql sprintf("SELECT * FROM `wcf_user` WHERE `username` = '%s'"$username);
$result mysql_query($sql);
if (
$row mysql_fetch_assoc($result)) {
   
// username gefunden, also weiter
   
$sql sprintf("SELECT * FROM `wcf_user_to_group` WHERE `userID` = '%s' AND `groupID` = 4"$row['userID']);
   
$result mysql_query($sql);
   if (
mysql_num_rows($result) > 0) {
      
// user gehört zur Gruppe 4
   
}



erxx 24.07.2008 16:41

Herzlichen Dank mantiz für deine rasche Antwort,

kannst du eventuell erklären wo das "%s" herkommt ?

edit: so wie ich das nun sehe, hast du den usernamen als resultat genommen, jedoch exisitert username nicht in der 2. Tabelle dort exisitert nurnoch userID oder irre ich mich etwa ?
und was is sprintf(); für eine Funktion ?

ich glaube ein " ist falsch plaziert sollte es nicht heissen:

PHP-Code:

$sql srprintf("SELECT * FROM `wcf_user` AS `t1` LEFT JOIN `wcf_user_to_group` AS `t2` ON `t1`.`userID` = `t2`.`userID` WHERE `t1`.`username` = '%s' AND `t2`.`groupID` = 4, $username"); 

Und würdest du mir eventuell eine Variante empfehlen ?

Vielen Dank

kampfgnom 24.07.2008 16:55

Zitat:

Zitat von erxx (Beitrag 394761)
kannst du eventuell erklären wo das "%s" herkommt ?

Das %s steht für string und ist ein teil der Funktion sprintf();
Dabei wird das zweite Argument der Funktion an diese Stelle gesetzt:
PHP-Code:

sprintf("Ich gebe einen %s aus""string"); 

Edit: Verwechselt mit printf.
Sprintf formatiert ihn nur. und gibt ihn dann zurück. printf gibt ihn gleich aus...

mantiz 24.07.2008 17:07

Ich würd's über den Join machen und die Anführungszeichen sind schon richtig bei mir. :)

Allerdings heisst die Funktion "sprintf" und nicht "srprintf", wie ich oben fälschlicherweise geschrieben habe. :)

Den Rest hat kampfgnom ja schon beantwortet.

Man könnte auch sowas wie
PHP-Code:

$sql "SELECT * FROM ... WHERE t1.`username` = '" $username "' AND t2.`groupID` = 4";
// ... 

schreiben, allerdings gewöhne ich mir an solche Dinge mittlerweile via sprintf zu schreiben, da ich dies um einiges übersichtlicher finde.

erxx 24.07.2008 17:29

Vielen Dank euch, ich habe den Code implementiert und es funktioniert wunderbar.

Wo lernt man eigentlich sowas :) also SQL lernen schon klar, ein Schulkameread wollte mir da einen 5 zeiligen Code andrehen mit ätlichen Variabeln. Ich hab noch nirgends eine Seite gefunden die einem erlaubt SQL so gut zu verstehen um das hinzukriegen...

Vielen Dank nochmal :)

Edit: Else wird nicht berücksichtigt, deshalb fehlt nun ein Bild was auffüllen soll...

Hab den Code zur besseren übersicht mal bissl zerlegt, findet da jemand ein Fehler ? mein else wird irgendwie nicht berücksichtigt und das sieht nicht so gut aus auf der HP ^^

PHP-Code:

<? 
if((isset($_SESSION['admin']) and ($_SESSION['username'])) 
{
?>
<a href="http://"><img src="nl_sliced_08.jpg" alt="AdminCP" /></a><img src="nl_sliced_09.jpg" alt="Border" />  
<? 

else 

?>
<img src="nl_sliced2_08.jpg" alt="Border" />
<?


mantiz 24.07.2008 17:42

ka, ich mache das jetzt schon seit 8 Jahren (immer mal wieder mit kleineren Pausen).

Bei (my)SQL würde ich mich irgendwo zwischen Anfänger und Fortgeschrittenen einordnen, bei PHP zwischen Fortgeschrittenen und Profi, aber eher in Richtung Fortgeschrittenen :), wobei ich in beiden Bereichen immer wieder mal erstaunt bin, dass ich das eine oder andere noch nicht kenne, obwohl ich schon etwas länger damit zu tun habe, sprich: Ich lerne ständig wieder was neues kennen. :)

Aber das meiste kommt wohl vom Learning-by-doing und Routine.

Leider kann ich mit einem guten Tutorial nicht dienen.

Nimm' Dir einfach ein Ziel vor Augen, was möglichst objektiv betrachtet nicht zu groß ist und versuche dem möglichst nahe zu kommen, dabei hab' ich noch am meisten gelernt, leider aber auch ein paar Dinge nicht kennengelernt, weil die nichts mit meinem Problem zu tun hatten. :D

erxx 24.07.2008 17:45

Ich habe vor knapp einer Woche angefangen mich richtig mit HTML PHP CSS und SQL zu befassen bisher dabei rumgekommen ist das hier

Bitte den edit begutachten bei meinem vorletzten Beitrag

mantiz 24.07.2008 17:54

Hast Du die schließende "}" nur hier vergessen, oder fehlt die auch im Code?

Ansonsten verwende ich immer "&&" anstelle von "and", weiß nicht, ob das was damit zu tun haben könnte.

Und wenn Du auf "$_SESSION['username']" prüfst, dann würde ich auch prüfen, ob der Schlüssel überhaupt gesetzt ist, also lieber mit
PHP-Code:

if (isset($_SESSION['admin']) && isset($_SESSION['username']) && $_SESSION['username']) { ... } 

Außer Du stellst sicher, dass der Schlüssel "username" in $_SESSION immer gesetzt ist. :)

erxx 24.07.2008 18:01

Habe deinen Rat befolgt und && benutzt es funktioniert jetzt auch lag aber an der geschwungenen Klammer ;)
Vielen Dank


Alle Zeitangaben in WEZ +2. Es ist jetzt 17:39 Uhr.

Powered by vBulletin® Version 3.8.11 (Deutsch)
Copyright ©2000 - 2024, vBulletin Solutions, Inc.

© Dirk H. 2003 - 2023