0251 / 590 837 15
info@a-coding-project.de
;

Datenbankklasse Teil 4 (CMS)

Heute geht es mal wieder um die Datenbank in unserem selbst erstellten CMS. Wie ihr alle wisst haben wir im letzten Beitrag die alte Datenbankverbindung komplett rausgenommen. Der Besucherbereich steht zur Zeit nicht zur Verfügung – Und das soll auch erst so bleiben. Wir werden in diesem und auch in den nächsten Artikeln erstmal nur den Admin-bereich bearbeiten. Und das ganze nicht auf Klassen sondern auf Methoden. Denn wir sollten auf jeden Fall alles gründlich testen. Aus dem Grund nehmen wir erst die Funktionen, die auch (im Adminbereich) getestet werden können.

Nun loggt euch mal alle in euren Admin-Bereich ein und schaut euch die MySQL-Fehler dort an. Was fällt euch auf?

Also mir ist dabei zuerst aufgefallen, dass ich mein Passwort immer wieder falsch eingegeben habe. Das war natürlich nicht so. In der Klasse /system/classes/user.php wurde noch mit der alten $dbprefixgearbeitet, die nicht mehr gültig ist. Hier ist der neue Code für die Methode checkPassword:

<?php
  function checkPassword($password){
    $password =$GLOBALS['db']->EscapeString(trim($password));
    $name = $GLOBALS['db']->EscapeString(trim($this->name));
    $count = $GLOBALS['db']->ReadField("SELECT COUNT(*) FROM {'dbprefix'}user WHERE 
                        name='".$name."' AND password = '".md5($password)."'");
    return $count == 1;
  }
?>

Nun könnt ihr euch anmelden. Nun bekommt ihr mit Sicherheit wieder eine Reihe an mysql-Fehlern. Diese werden in diesem Artikel behoben.

Los geht’s mit der Klasse /system/classes/menu.php. Hier wurden die auf der Startseite des Admin-Bereichs benötigten Methoden passend zur Datenbankklasse umgebaut:

<?PHP
class Menu{
  function display($id, $globalstart,$globalend, $elementstart,$elementend,$class){
    $rows = $GLOBALS['db']->ReadRows("SELECT title,href FROM {'dbprefix'}menu WHERE menuID = '".$id."' ORDER BY id");
    echo $globalstart;
    $i = 1;
    foreach($rows as $row){
      echo $elementstart."<a href="".$row->href.""title="".$row->title."" 
           class="".$class." menue-".$id."-".$i."">".$row->title."</a>".$elementend;
      $i++;
    }
    echo $globalend;
  }
  
  function getIdByName($name){
    $name = $GLOBALS['db']->EscapeString(strtolower(trim($name)));
    return $GLOBALS['db']->ReadField("SELECT id FROM {'dbprefix'}menu_names WHERE lower(trim(name)) = '".$name."' LIMIT 0,1");;
  }

  function displayEditable($id){
    $res = mysql_query("SELECT id, title,href FROM ".$dbpraefix."menu WHERE menuID = '".$id."' ORDER BY id");
    while($row = mysql_fetch_row($res)){
      echo $elementstart."<input name="".$row[0]."_title"value="".$row[1]."" />
                          <input name="".$row[0]."_href"value="".$row[2]."" />
                          <input type="submit"name="".$row[0]."_delete"value="X"/><br />";
    }
  }

  function addEntry($menu,$title,$href){
    global $dbpraefix;
    $res = mysql_query("SELECT MAX(id) FROM ".$dbpraefix."menu 
                        WHERE menuID = '".$menu."'");
    $row = mysql_fetch_row($res);
    $id = $row[0] + 1;
    $res = mysql_query("INSERT INTO ".$dbpraefix."menu (id,menuID,title,href)
                        VALUES('".$id."','".$menu."',
                               '".$title."','".$href."')");
    if($res){
      $args['menu']  = $menu;
      $args['title'] = $title;
      $args['href']  = $href;
      EventManager::raiseEvent("menu_entry_added","../",$args);
    }
    return $res;
  }

  function editEntry($menu,$id,$title,$href){
    global $dbpraefix;
    $res =  mysql_query("UPDATE ".$dbpraefix."menu SET 
                          href = '".$href."', 
                          title = '".$title."' 
                        WHERE id = '".$id."' 
                          AND menuID = '".$menu."'");
    if($res){
      $args['menu']  = $menu;
      $args['title'] = $title;
      $args['href']  = $href;
      $args['id']    = $href;
      EventManager::raiseEvent("menu_entry_edit","../",$args);
    }
    return $res;
  }

  function deleteEntry($menu,$id){
    global $dbpraefix;
    $res = mysql_query("DELETE FROM ".$dbpraefix."menu WHERE menuID = '".$menu."' AND id = '".$id."'");
    if($res){
      $res = mysql_query("UPDATE ".$dbpraefix."menu SET id = id - 1 WHERE id > '".$id."'");
      if($res){
        $args['menu']  = $menu;
        $args['id'] = $id;
        EventManager::raiseEvent("menu_entry_deleted","../",$args);
      }
    }
    return $res;
  }

  function create($name){
    global $dbpraefix;
    $res = mysql_query("INSERT INTO ".$dbpraefix."menu_names (name) VALUES ('".$name."')");
    if($res){
      $args['name']  = $name;
      EventManager::raiseEvent("menu_created","../",$args);
    }
    return mysql_insert_id();
  }

  function delete($id){
    global $dbpraefix;
    $res = mysql_query("DELETE FROM ".$dbpraefix."menu_names WHERE id = '".$id."'");
    if($res){
      $res = mysql_query("DELETE FROM ".$dbpraefix."menu WHERE menuID = '".$id."'");
      if($res){
        $args['id']  = $id;
        EventManager::raiseEvent("menu_deleted","../",$args);
      }
    }
    return $res;
  }
}
?>

Gleiches bei /system/classes/dashboard.php:

<?PHP
  class Dashboard{
    public $id;
    public $cols;
    
    function loadWidgets(){
      $this->cols[] = $this->loadWidgetsByColumn(1);
      $this->cols[] = $this->loadWidgetsByColumn(2);
      $this->cols[] = $this->loadWidgetsByColumn(3);  
    }
    
    function loadWidgetsByColumn($columnId){
      $columnId = $GLOBALS['db']->EscapeString($columnId);
      $rows = $GLOBALS['db']->ReadRows("SELECT path FROM {'dbprefix'}dashboards 
                                        WHERE col = '".$columnId."' AND id = '".$this->id."'
                                           ORDER BY row");
      if($rows){
        foreach($rows as $row){
          $widgetData =WidgetController::getWidgetData($row->path);
          $widget =WidgetController::getWidget($widgetData);
          $widget->load();
          $res[] = $widget;
        }
      }
      
      return $res;
    }
    
    function display(){
      echo "<div id="columns">";
      $this->displayColumn(0);
      $this->displayColumn(1);
      $this->displayColumn(2);
      ?>
        <script type="text/javascript" src="http://jqueryjs.googlecode.com/files/jquery-1.2.6.min.js"></script>
        <script type="text/javascript" src="jquery-ui-personalized-1.6rc2.min.js"></script>
        <script type="text/javascript" src="inettuts.js"></script>
      <?PHP
    }
    
    function displayColumn($id){
      ?>
        <ul id="column<?PHP echo $id; ?>" class="column">
          <?PHP
            if($this->cols[$id]){
              foreach($this->cols[$id] as $widget){
                $widget->display();
              }
            }
          ?>
        </ul>
      <?PHP
    }
  }
?>

Kommentare

Daniel schrieb am 11.03.2010:

Hilfe. Bei mir wird rein gar nichts angezeigt. Kann es sein das xampp die mysqli erweiterung nicht aktiv hat? Ich schau mal nach.

Daniel schrieb am 11.03.2010:

So, es funktioniert wieder alles was bis jetzt wieder funktionieren soll. ^^

Stefan Wienströer schrieb am 11.03.2010:

Was mussteste umstellen? Wär vielleicht etwas fürs Wiki ;-)

Daniel schrieb am 11.03.2010:

Musste in der php.ini die Erweiterung mysqli aktivieren. D.h. die Kommentarzeichen entfernen.