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

MySQL Tabellen auflisten für leichtere Administration

Code & Blog Logo

Code & Blog Logo

In unserem CMS soll es möglich sein, auch die Datenbank zu bearbeiten (ähnlich wie bei PhpMyAdmin). So muss man nicht immer zwischen PhpMyAdmin und CMS wechseln.

Heute fangen wir an die Tabellen aufzulisten. Dafür gibt es den MySQL Befehl „SHOW TABLES„. Damit auch alles schön objektorientiert ist erstellen wir uns dafür eine MySQL Klasse. Also Datei /system/classes/MySQL.php anlegen.

Darin schreiben wir als erstes die Funktion, die die Tabellennamen als Array zurückliefert:

<?PHP
  class MySQL{

    function getTables(){
      $res = mysql_query("SHOW TABLES");
      while($row = mysql_fetch_row($res)){
        $tables[] = $row[0];
      }
      sort($tables);
      return $tables;
    }

  }
?>

Des weiteren wollen wir dort auch noch die Einträge einer Tabelle zählen lassen. Dafür gibt es die Funktion countTableEntries, welche als Parameter den Namen der Tabelle benötigt. Das sieht dann so aus:

    function countTableEntries($table){
      $res = mysql_query("SELECT COUNT(*) FROM ".mysql_real_escape_string($table));
      $row = mysql_fetch_row($res);
      return $row[0];
    }

Nun müssen wir noch die Klasse in der /admin/index.php importieren. Das sieht dann so aus:

<?PHP
  session_start();
  include("../system/dbconnect.php");
  include("../system/settings.php");
  include("../system/classes/user.php");
  include("../system/classes/menu.php");
  include("../system/classes/page.php");
  include("../system/classes/MySQL.php");
  include("../system/filterfilename.php");
  include("../system/sys.php");
?>

Fehlt uns also erstmal nur noch das ausgeben. Im Hauptmenü wird bereits auf die Datei /admin/includes/db.php verlinkt. In ihr rufen wir unsere Funktionen auf:

<h1>Datenbank</h1>
<table>
  <thead>
    <tr>
      <td>Name</td>
      <td>Aktionen</td>
      <td>Eintr&auml;ge</td>
    </tr>
  </thead>
  <tbody>
    <?PHP
      foreach(MySQL::getTables() as $table){
        echo "<tr>
                <td>".$table."</td>
                <td>Kommen noch ;-)</td>
                <td>".MySQL::countTableEntries($table)."</td>
               </tr>";
      }
    ?>
  </tbody>
</table>

Off-Topic:Habt ihr schon die neuen Admin-Kommentare gesehen? Mein Kopf ist nun auf der linken Seite und der Hintergrund meiner Kommentare ist hellblau. So könnt ihr sofort sehen was von mir kommt. Mach mal unten ein Beispielkommentar^^

Kommentare

Stefan Wienströer schrieb am 03.09.2009:

Beispielkommentar XD

Daniel Busch schrieb am 03.09.2009:

Müssen wir nicht noch die MySQL Klassen im Admin index.php script includen oder war das schon drann und ich habs wieder mal nicht mitbekommen?

Stefan Wienströer schrieb am 03.09.2009:

Musst nur genau lesen ;-) Scherz^^ Hab's vergessen zu schreiben. Das kommt davon, wenn man coded und nebenbei bloggt. ICh glaub ich erstell mir noch nen zweites Testystem, wo ich einen Tag später das ganze teste und erst dann veröffentliche. Sorry dafür.

Daniel Busch schrieb am 03.09.2009:

Dafür sind wir (ich) ja da. Das wäre wenig lehrreich wenn jeder nur copy und paste machen würde. (Nach dem Motto--&gt;Dummheit schafft Freizeit, oder Team--&gt;Toll ein anderer machts. ;-)

Stefan Wienströer schrieb am 03.09.2009:

Da kann man dann auch sofort zu Joomla greifen^^

Markus Thömmes schrieb am 03.09.2009:

Ich lege dir mal die __autoload Funktion ans Herz. Erspart dieses ganze inludegedöns!

Daniel Busch schrieb am 04.09.2009:

Hör mir auf mit dem sperrigen Monster.

Stefan Wienströer schrieb am 04.09.2009:

@Markus: Werd ich mir mal ansehen, danke. Hab schon mit dem Gedanken gespielt gehabt, da mal was anderes zu machen. Bin nur noch nicht zu gekommen was passendes rauszusuchen.

Kakuzu schrieb am 14.05.2011:

so nun bin ich mittlerweile auch an diesem Punkt vom Blog angelangt und wollte mein eine Kleien 'Änderung Posten die ich an der Funktion zum auslesen der Tabellen gemacht habe. Interessant ist es für alle die noch weitere Tabellen in der Datenbank haben die nicht zum CMS gehören und die man auch nicht über das CMS bearbeiten möchte. Alte Function: function getTables() { $res = mysql_query("SHOW TABLES"); while ($row = mysql_fetch_row($res)) { $tables[] = $row[0]; } sort($tables); return $tables; } Neue Funktion: function getTables() { global $dbpraefix; $res = mysql_query("SHOW TABLES LIKE '" . $dbpraefix . "%'"); while ($row = mysql_fetch_row($res)) { $tables[] = $row[0]; } sort($tables); return $tables; } Hier werden nun nur noch die Tabellen aufgelistet die den in den Einstellungen gespeicherten DB Präfix haben. Vllt. ist diese leichte Änderung ja für einige von nutzen.

blobse schrieb am 31.05.2011:

@Kakuzu hab ich unabhängig von dir auch so gelöst :). Ist die saubere variante :D