Jump to content
InvisionCommunity.de - Der Deutsche Invision Community Support
Sign in to follow this  
Arthex

weitere MySQL Tabellen auslesen

Recommended Posts

Hiho ;)

Ich sitze hier bereits die ganze Nacht und den Vormittag. Ich versuche Krampfhaft mein Board zu erweitern indem ich zusätzliche Skindateien ins Board einfüge die nur Member zu sehen bekommen.

Also eine Source Datei und eine Skin Datei um weitere Inhalte zu haben. Soweit geht das über =act.

Jetzt mein Problem: Ich habe noch einige Tabellen mit Infos zu den Mitgliedern und möchte diese Informationen nun jedem Mitglied über eine solche Skindatei anbieten. Dort sollen also einfach verschiedene MySQL Abfragen ausgeworfen werden.

Wie kann ich das hinbekommen? Ein Beispiel wär ganz nett denn ich bin da nicht so Fit. :rolleyes:

P.S. Muss nicht für 1.1 sein. Kann auch für 1.2 oder 1.3 sein. Ich hatte nur ein 1.1 zur Hand um das zu testen.

Edited by Arthex

Share this post


Link to post

Ich weiß nicht ganz, was du eigentlich willst. :)

Wenn dein Source auf die Instanzen der Forenklassen zurückgreift, dann kannst du ganz normal mit der Instanz $DB arbeiten.

Beispiel:

$DB->query("SELECT * FROM ibf_foo"); // Query absetzen

$DB->get_num_rows(); // Anzahl der Ergebniszeilen

$DB->fetch_row(); // Holen der Zeile aus der DB
Dabei müssen die Tabellen alle das Prefix haben wie die Forentabellen, ansonsten muß du den entsprechenden Bypassparameter angeben (bin mir nicht sicher, ob bei 1.1 schon vorhanden).
$DB->query("SELECT * FROM foo", 1);

Wenn du eigenständige Module erstellen willst, dann solltest du es unter >= 1.2 machen, denn da hast du eine entsprechende Schnittstelle und kannst die fertigen Sachen bequem per index.php?act=module&module=foo aufrufen. Dann brauchst du auch keine Änderungen am Sourcecode des Forums machen (besser wenn du mal updatest) und hast trotzdem alle Vorteile des Forums (Klasseninstanzen, Mitgliederinfos, usw...).

Kleines Beispiel ist hier die Teamseite, dies ist auch ein einfaches Custompage Modul, was ohne weitere Änderungen am Boardsource auskommt. :)

Sollte ich jetzt zuviel unnötiges oder unverständliches Zeug geredet haben, dann erklär mir bitte nochmal genau, was du möchtest. :)

Share this post


Link to post

Du hast das schon richtig Verstanden.

Ich nehme an das der Querry in der Source Datei aufgebaut werden muss. Und wie ruf ich das dann im Skin auf ?

Ein Update ist keine Problem wenn Du meinst das ich das dann gleich im Admin machen kann. Ich denke ich werde mir das erstmal anschauen. Ich bastel da halt erstmal rum um herauszufinden wie ich am besten weitere MySQL Daten einbinden kann. Ich habe die anderen Tabellen auch mit dem gleichen Präfix ausgestattet weil ich mir das bereits dachte.

Share this post


Link to post

Also ein ganz einfaches Beispiel, wenn du es so in deiner Version 1.1 einbindest.

Hoffe, das ist alles so richtig, was ich jetzt hier schreibe, da ich im Moment hier nur Zugriff auf Source von 1.2 habe.

Du erstellst eine Datei skin_bla.php und eine Datei Bla.php, die jeweils in den Skin- und den Sourceordner gehören.

skin_bla.php sieht in dem Beispiel so aus:

<?PHP
class skin_bla {


function test() {
global $ibforums;
return <<<EOF
TestHTML Stuff
EOF;
}

}

?>
Datei Bla.php
<?PHP

$idx = new Bla;

class Bla {

   var $output    = "";
   var $html       = "";

   //+----------------------------------------------------------------
//
// Our constructor, load words, load skin, get DB forum/cat data
//
//+----------------------------------------------------------------

   function Bla()
   {
       global $ibforums, $DB, $std, $print, $skin_universal;

        $this->html     = $std->load_template('skin_bla'); // Laden der Skindatei

        $DB->query("SELECT * FROM ibf_bla"); // Irgendein Query

        while ($row = $DB->fetch_row()) // Alle Datensätze holen
         {
                  // Irgendwas machen mit den Datensätzen

          }

         $this->output .= $this->html->test(); // Skinelement laden

         $print->add_output($this->output);  // Kompletten Output der Klasseninstanz $print übergeben

        // Output an Browser senden mit Option Titelleiste, Navi und keinen JS.
       $print->do_output( array( 'TITLE'    => "Testseite",
                'JS'       => 0,
                'NAV'      => array("Testseite"
                      ),
              ) );
   }

}
Nun muß du nur in der index.php noch unterhalb von
                 "SC"       => "Boards",
                "SF"       => "Forums",
                "SR"       => "Forums",
noch sowas wie
"bla"       => "Bla",

einfügen, dann kann man mittels index.php?act=bla das aufrufen. Bei 1.2 mit der Modulschnittstelle entfällt natürlich das angesprochende Eintrag in der index.php.

Vielleicht sollte ich mal ein Tutorial für die ersten Schritte, um ein Modul zu erstellen, schreiben. :)

Share this post


Link to post

Danke für deine Mühen bisher Stefan.

Nur das erstellen der eigentlichen Skin und Source Datei hab ich ja schon. Auch den Eintrag in der index.php.

Ich habe also bereits mehrere Dateien im Skin eingebunden und der Aufbau der Seiten ist mir klar.

Es kommt aber langsam auch Licht ins Dunkel was den Querry anbelangt. Also dank deiner Hilfe denke ich jetzt den Querry in der Sources Datei einbinden zu können.

Aber der Output in der Skin Datei ist mir noch nicht klar. Hier muss ja auch innerhalb einer Tabelle z.b. dann irgendwo " hier Automarke, Baujahr und Farbe " rein. Da schleift es noch.

Die Module als solches erstellen hatte ich also bereits. Mir fehlt halt noch der Output von der MYSQL.

Nehmen wir mal als Beispiel:

Tabelle " ibf_autos

Querrys in der Tabelle die ich rausholen möchte

" marke" & " farbe " & "baujahr"

Ich brauch also hier einmal das rausladen der Daten was wohl in der Sources Datei geschieht.

Und jetzt brauch ich in einer Tabelle im Skin eingebettet die Angaben die jetzt bei Marke, Baujahr und Farbe rauskommen. Da muss ja irgendein Ausgabebefehl hin der sich auf die Sources an der Stelle bezieht.

Wenn Du hier anhand der Daten eine Ausgabe hättest, dann könnte ich mir die Struktur selber aufbauen.

Sorry aber ich mach das zum ersten mal mit MYSQL Ausgabe ;)

Share this post


Link to post

Okay, an deinen Beispiel würde ich es wie folgt machen. :)

Ich geh davon aus, das die Spalten in der Tabelle marke, farbe und baujahr heißen.

Skindatei skin_bla.php:

<?PHP
class skin_bla {


function tabellenkopf() {
global $ibforums;
return <<<EOF
<table width="100%" border="0">
<tr>
<td>Marke</td>
<td>Farbe</td>
<td>Baujahr</td>
</tr>
EOF;
}

function tabellenreihe($data) {
global $ibforums;
return <<<EOF
<tr>
<td>{$data['marke']}</td>
<td>{$data['farbe']}</td>
<td>{$data['baujahr']}</td>
</tr>
EOF;
}

function tabellenende() {
global $ibforums;
return <<<EOF
</table>
EOF;
}

}

?>
Nun die Sourcedatei Bla.php:
<?PHP

$idx = new Bla; // Neue Instanz der Klasse Bla

class Bla {

  var $output    = "";
  var $html       = "";

   // Konstruktor wird automatisch bei Erstellung der Instanz aufgerufen
  function Bla()
  {
      global $ibforums, $DB, $std, $print, $skin_universal;

       $this->html     = $std->load_template('skin_bla'); // Laden der Skindatei

        $this->output .= $this->html->tabellenkopf(); // Tabellenkopf in Ausgabevariable kopieren

       $DB->query("SELECT * FROM ibf_autos"); // Aufrufen des Query
       while ($row = $DB->fetch_row()) // Solange Schleife ausführen wie Datensätze vorhanden
        {
                 // Info: Ergebniszeile aus Datenbank wird in Array $row gespeichert
                 
                // Zuweisen einer Spalte mit den entsprechenden Daten an die Ausgabevariable
                $this->output .= $this->html->tabellenreihe($row);
         }

         // Alle Spalten in Ausgabevariable, nun das Ende der Tabelle zuweisen:


        $this->output .= $this->html->tabellenende();

        // Info: In $this->output befindet sich jetzt der gesamte HTML Output
        $print->add_output($this->output);  // Kompletten Output der Klasseninstanz $print übergeben

       // Output an Browser senden mit Option Titelleiste, Navi und keinen JS.
      $print->do_output( array( 'TITLE'    => "Autoseite",
               'JS'       => 0,
               'NAV'      => array("Autoseite"
                     ),
             ) );
  }

}

Hoffe, das ist einigermaßen verständlich. :)

Share this post


Link to post

Ich denke damit sollte ich wohl auskommen. Ist ja der Ansatz drin und hier kann ich nachvollziehen was passiert.

Das wird dann heute Abend noch getestet obwohl ich schon Saumüde bin :D

Danke Dir erstmal für deine tolle Hilfe Stefan. Wenn ich was zu Wege gebracht habe lass ich es dich hier wissen. :rolleyes:

Share this post


Link to post

:D :rolleyes:

es hat super geklappt. Danke dir dafür nochmal.

Aaaber, jetzt habe ich noch eine Sache die ich benötige. Und zwar gibt es auch Inhaltseiten auf denen nur Ausgaben kommen dürfen die auch zu dem Member gehören.

Bleiben wir mal bei dem Beispiel Auto:

Jetzt möchte ich z.b. das User Meier ( oder laut Invisionboard auch Member ID 1 oder sonstiges ) bei Aufruf einer Skin Datei nur Daten von sich sieht.

Z.b. seinen Umsatz, Kontostand oder sonstiges.

Dafür mache ich aber auch wieder eine Extra Tabelle. Also es wird nicht aus der Membertabelle gezogen. Jetzt brauch ich ja einen Verweis das einmal die Tabelle Member abgefragt wird ob es sich um den User handelt, oder eine andere Abfrage das ich dem Skin wieder sagen kann der User darf nur seine Daten aus z.b Tabelle "persönliches" auslesen.

Da dies bei den meisten Dateien der Fall ist die ich aufbaue wär das noch wichtig.

Wird wohl noch eine Sicherheitsabfrage sein, oder wie macht es das Board zb. wenn ich in den Messenger gehe? Dort sehe ich ja auch nur Daten die für mich bestimmt sind.

Hintergrund des ganzen: Ich bin dabei ein zweites Programm das auch noch umständlich ist, von den Daten ins Invisionboard zu bringen. Hier handelt es sich um 7 unterschiedliche Tabellen die ich abfragen muss. Meistens wird halt Userspezifisch etwas ausgelesen.

Ansonsten bin ich mit deinem Beispiel super Zurecht gekommen.

Share this post


Link to post

Jedesmal, wenn du die index.php aufrufst und das machst du ja mit deinen Modulen wird auch der User geprüft. Somit brauchst du keine spezielle Prüfung mehr einbauen, sondern kannst direkt auf die in der Klasseninstanz $ibforums befindlichen Informationen arbeiten.

Wenn deine Informationen in der Datenbank mit der Id des jeweiligen Users verknüpft sind, so kannst du es einfach im SQL Statement einbauen.

Die Variable für die Mitglieder-ID heißt $ibforums->member['id']

Wenn wir also von deiner Beispieltabelle ausgehen, muß da noch eine Spalte m_id sein, wo die ID des jeweiligen Mitgliedes mitgespeichert wird. Dann kannst das Query wie folgt aussehen:

$DB->query("SELECT * FROM ibf_autos WHERE m_id ='".$ibforums->member['id']."'");

So erhälst du nur die Infos von dem einen Mitgliedes, die du dann ausgibst.

Share this post


Link to post

Du bist ein Schatz. :P

Wenn Du ein Mädel wärst würde ich mich wohl grad verlieben und den PC wegschmeißen.

Jetzt hab ich alles wichtige und kann das mal verwirklichen. Wird wohl ne Woche oder so dauern bis ich alle Daten entsprechend im Skin habe.

Nochmal tausend Dank :clap: :party:

Share this post


Link to post

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

Sign in to follow this  

×