Funktion & Abfragen

Alles, was PHP betrifft, kann hier besprochen werden.

Funktion & Abfragen

Postby Kev » 02. August 2005 17:22

Huhu zusammen hab ein großes Prob und zwar hab ich mich irgendwie sehr extrem mit meinen beiden funktion verbaut bzw. ich blick grad selbst garnix mehr...

Zum Prob:
Also ich ich habe 3 werte inna db, einmal: promote (dort werden 2 ids eingetragen bsp: clanid|guildid), acctid (user id), promoteid (imcrement wert oder wie der heßt^^)...

So bei promote werden jeweils zwei ids eingetragen und zwar einmal die clanid & gildenid, es soll bei der ersten Funktion prüfen ob der user bereits in einem clan bzw. in einer gilde beworben hat wenn ja soll eben die entsprechende id dort eingetragen werden bzw. geuppt werden...

Sprich:
Falls der user in einem clan beworben hat soll er Clanid eintragen funzt ja auch so wie bei gilden id, so wenn der er sich dann anschließend bei einer gilde bewirbt soll er eben dann bei einer freien stelle wo noch keine gildenid vergeben ist eben die gildenid eintragen...

Hoffe das ist verständlich


Hier die Funktion, die obere ist die erste:
Code: Select all
function promote_check($class, $id){
   global $session;

   $sql = 'SELECT '.$class.'s.'.$class.'ban, promotes.promote FROM '.$class.'s LEFT JOIN promotes ON promotes.acctid = \''.$session['user']['acctid'].'\' '.$ccat.' WHERE '.$class.'s.'.$class.'id = '.$id;
   $result = db_query($sql) or die (db_error($sql));

   while ($row = db_fetch_assoc($result)) {
      list($clan, $guild) = explode('|', $row['promote']);
      $ban = explode('|', $row[$class.'ban']);

      if($clan > false && $class == 'clan' && $clan == $id){
         $_GET['warning'] = '`n`n`$`cDu hast dich bereits hier beworben!`c`$';
         $res = true;
      } else if ($guild > false && $class == 'guild'  && $guild == $id){
         $_GET['warning'] = '`n`n`$`cDu hast dich bereits hier beworben!`c`$';
         $res = true;
      } else if (array_search($session['user']['acctid'], $ban)){
         if($class == 'clan')
            $_GET['warning'] = '`n`n`$`cDu bist aus diesem Clan verbannt und kannst dich nicht bewerben!`c`$';
         if($class == 'guild')
            $_GET['warning'] = '`n`n`$`cDu bist aus dieser Gilde verbannt und kannst dich nicht bewerben!`c`$';
         $res = true;
      } else {
         $res = false;
      }

   }
   return ($res);
}


Code: Select all
function promote_insert($class, $id){
   global $session;

   $sql = 'SELECT promote FROM promotes  WHERE acctid = '.$session['user']['acctid'];
   $result = db_query($sql) or die (db_error($sql));

   while ($row = db_fetch_assoc($result)) {

      list($clan, $guild) = explode('|', $row['promote']);

      if($clan != $id && $guild != $id){
         if($class == 'clan')
            $res = $id.'|0';
         if($class == 'guild')
            $res = '0|'.$id;

         $sql = 'INSERT INTO promotes VALUES(\''.$res.'\', \''.$session['user']['acctid'].'\', \''.date('Y.m.d').'\', \'0\')';
      } else {
         if($clan > false && $guild < true && $clan == $id){
            $res = $clan.'|'.$id;
            $sql = 'UPDATE promotes SET promote = \''.$res.'\', promotedate = \''.date('Y.m.d').'\' WHERE acctid = '.$session['user']['acctid'];
         } else if($clan < true && $guild > false && $guild == $id){
            $res = $id.'|'.$guild;
            $sql = 'UPDATE promotes SET promote = \''.$res.'\', promotedate = \''.date('Y.m.d').'\' WHERE acctid = '.$session['user']['acctid'];
         }
      }
   }
   db_query($sql) or die (db_error($sql));
}



Ps: hab mich irgendwie selbst total verkuckt und blick grad garnix mehr ick hoffe es kann mir jemand helfen danke schonmal ;)
User avatar
Kev
 
Posts: 269
Joined: 09. October 2004 13:25
Location: NRW/Hamm

Postby jakimo72 » 02. August 2005 23:04

Ich kann das so schnell auch nicht blicken, aber
einige Anmerkungen habe ich:

Warum verwendest Du ein zusammengesetztes Attribut in einer
Datenbank, kann man nicht Clanid und Guildid eigene Attribute in der Datenbank spendieren? Dann entfiele der Kram mit dem Explode.
(Datenbänker sprechen von der Verletzung der 1. Normalform)
Danach könnte man viel einfachere SQL-Abfragen gestalten, z.B.
"Select promoteid from promotes where acctid = ".$session['user']['acctid']." and (clanid = $id or guildid = $id)"

"Promote" ist wohl die unpassenste aller Übersetzung für "Bewerbung"
hat micht etwas iritiert...

Um die SQL-Anweisungen besser lesbar zu machen kann man besser
Doppelquotes verwenden, um die Singlequotes nicht maskieren zu brauchen.

Wo wird die Variable $ccat initialisiert, die in der Funktion promote_check verwendet wird?

Warum gibt es zu jeder $class eine eigene Tabelle? Ich denke eine
Tabelle für alle Klassen, aber dann mit einer classid bzw. classname,
wäre einfacher zu handhaben und erweiterbar auf andere Klassen.
User avatar
jakimo72
 
Posts: 151
Joined: 07. February 2005 13:25
Location: Hamburg-Barmbek

Postby Kev » 03. August 2005 00:55

Jop stimmt hast recht, habs soweit erstma so:

Code: Select all
function promote_check($class, $id){
   global $session;

   $sql = 'SELECT '.$class.'s.'.$class.'ban, promotes.'.$class.'promotes as promotes FROM '.$class.'s LEFT JOIN promotes ON promotes.acctid = \''.$session['user']['acctid'].'\' WHERE '.$class.'s.'.$class.'id = '.$id;
   $result = db_query($sql) or die (db_error($sql));
   $row = db_fetch_assoc($result);

      $promote = explode('|', $row['promotes']);
      $ban = explode('|', $row[$class.'ban']);

      if (array_search($session['user']['acctid'], $ban)){
         if($class == 'clan')
            $_GET['warning'] = '`n`n`$`cDu bist aus diesem Clan verbannt und kannst dich nicht bewerben!`c`$';
         if($class == 'guild')
            $_GET['warning'] = '`n`n`$`cDu bist aus dieser Gilde verbannt und kannst dich nicht bewerben!`c`$';
         $res = true;
      } else if(array_search($id, $promote)){
            $_GET['warning'] = '`n`n`$`cDu hast dich bereits hier beworben!`c`$';
         $res = true;
      } else {
         $res = false;
      }
   return ($res);
}


Code: Select all
function promote_insert($class, $id){
   global $session;

   $sql = 'SELECT '.$class.'promotes FROM promotes  WHERE acctid = '.$session['user']['acctid'];
   $result = db_query($sql) or die (db_error($sql));
   $row = db_fetch_assoc($result);

   $promote = explode('|', $row[$class.'promotes']);

      if(db_num_rows($result) < true){
         if($class == 'clan')
            $clan = '|'.$id;
         if($class == 'guild')
            $guild = '|'.$id;

         $sql = 'INSERT INTO promotes VALUES(\''.$clan.'\', \''.$guild.'\', \''.$session['user']['acctid'].'\', \''.date('Y.m.d').'\', \'0\')';
      } else {
            if($row[$class.'promotes'] == '')
               $res = '|'.$id;
            if($row[$class.'promotes'] != '')
               $res = $row[$class.'promotes'].'|'.$id;
            $sql = 'UPDATE promotes SET '.$class.'promotes = \''.$res.'\', lastpromote = \''.date('Y.m.d').'\' WHERE acctid = '.$session['user']['acctid'];
      }
   db_query($sql) or die (db_error($sql));
}
User avatar
Kev
 
Posts: 269
Joined: 09. October 2004 13:25
Location: NRW/Hamm


Return to PHP

Who is online

Users browsing this forum: No registered users and 12 guests