Kontakt aufnehmen

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
    }
  }
?>

Du arbeitest in einer Agentur oder als Freelancer?
Dann wirf doch mal einen Blick auf unsere Software FeatValue.

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.

Über uns

Stefan Wienströer

Wir entwickeln Webanwendungen mit viel Leidenschaft. Unser Wissen geben wir dabei gerne weiter. Mehr über a coding project

Cookie-Einstellungen

Helfen Sie dabei, uns noch besser zu machen. Wir nutzen Cookies und ähnliche Technologien, um die Website auf Ihre Bedürfnisse anzupassen. Zur Datenschutzerklärung

Auswahl speichern