Array aus Datenbanksatz erzeugen?

2Pac

Erfahrenes Mitglied
Hallo,

ich hab die Suchfunktion benutzt, hab aber irgendwie nichts passendes gefunden.

Folgendes Problem:

Ich möchte ein dynamisches Menu bauen. Dazu habe ich die Tabelle navi_main erzeugt. Diese besteht aus den Spalten id und menu.
Nun möchte ich die dort eingegebenen Menühauptpunkte als Array einlesen.
Mein Ansatz dazu war folgender:

PHP:
$navi_main = mysql_query("select menu from navi_main");
$dateien = array();
while ($row = mysql_fetch_object($navi_main)) 
{
 $dateien['$row['spalte1']']} = $row['spalte2'].php;
}

Aber irgendwie ist das mit dem nicht so wie ich will.
Er soll mir halt für die Navigation folgendes per Datenbank ausgeben.

PHP:
$dateien = array();
$dateien['home'] = "home.php";
$dateien['news'] = "news.php";
$dateien['error'] = "error.php";
Damit ich später mit index.php?section=home arbeiten kann.

Jemand einen Tipp?

Vielen Dank im Voraus!
2Pac
 
Bei mysql_fetch_object musst du
$row->Spalte1 benutzen

außerdem wird bei dir in SELECT nur eine Spalte abgefragt.
 
Hi,

PHP:
$navi_main = mysql_query("select menu from navi_main");
$dateien = array();
while ($row = mysql_fetch_object($navi_main)) 
{
 $dateien['$row['spalte1']']} = $row['spalte2'].php;
}

als Erstes solltest Du mal die Syntax korrigieren, so dass Du da keinen Parse Error mehr bekommst. Schau Dir mal Deine Klammern an und die String-Begrenzer (Du hast da welche, wo keine hingehören, dafür fehlen sie an anderer Stelle). ;)

Und dann folgst Du wod2008s Rat und verwendest $row als das, was es ist, nämlich ein Objekt. Da Du nur die Spalte "menu" ausgewählt hast, bekommst Du natürlich auch nur die Spalte "menu" im Ergebnis, nicht "spalte1" oder "spalte2".

LG
 
Sorry mein Fehler da sollte natürlich auf beiden Seiten menu hin.

Aber das beantwortet meine Frage nicht. Ich möchte halt wissen ob ich das so ausgeben kann oder nicht. :(

Sprich ob ich es wie folgt machen kann:

PHP:
$navi_main = mysql_query("select menu from navi_main");
$dateien = array();
while ($row = mysql_fetch_object($navi_main)) 
{
 $navipunkt = $row ->menu;
 $dateien['$navipunkt'] = "$navipunkt.php";
}

Weil wie gesagt das Menu ergibt sich ja aus den Punkten in der Datenbank. Und das ganze soll über folgendes Script ausgegeben werden:

PHP:
if(isset($_GET['section']) AND isset($dateien[$_GET['section']]))
{
 //Ist eine $_GET Variable vorhanden wird PHP angewiesen 
 //zu prüfen ob die Datei existiert und diese dann zu laden
 
 if(!file_exists($dateien[$_GET['section']])) echo "Die Datei ist nicht vorhanden.";

 include $dateien[$_GET['section']]; 
}
else
{
 //Wenn keine Variable oder Definition vorhanden ist
 //lade die Fehlerseite bzw. die Indexseite
 include $dateien['error']; 
}
 
Hi,

Aber das beantwortet meine Frage nicht. Ich möchte halt wissen ob ich das so ausgeben kann oder nicht. :(

Warum probierst Du es denn nicht einfach aus? Falls es funktioniert, geht das wesentlich schneller, als hier auf Antworten zu warten...
Falls nicht, kann man doch immer noch posten (und dann aber auch schildern, was denn Unerwartetes passiert).

Oder geht's um Sicherheit? Da wäre die Methode denke ich in Ordnung, es handelt sich ja um eine Whitelistprüfung. Nur den Include solltest Du natürlich nur machen, wenn die Datei auch existiert.
Und Du hast da immer noch Hochkommata drin, wo keine hingehören, falls das jetzt Dein tatsächlicher Code sein sollte...

LG
 
Also ich hab jetzt probiert und probiert, aber es klappt nicht.

Meine Tabellenstruktur:

Code:
Tabelle navi_main
Spalten: id, menu

Tabelle navi_sub
Spalten: id, mainid, text, link

config_menu sieht wie folgt aus:

PHP:
$navi_main_array = mysql_query("select menu from navi_main");
$dateien = array();
while ($row = mysql_fetch_object($navi_main_array)) 
{
 $navipunkt = $row ->menu;
 $dateien['$navipunkt'] = "$navipunkt.php";
}

In meiner index.php mache ich folgendes:

PHP:
<?php
           include("config_menu.php");
           if(isset($_GET['section']) AND isset($dateien[$_GET['section']]))
           { 
            if(!file_exists($dateien[$_GET['section']]))
            { 
             echo "Die Datei ist nicht vorhanden.";
            }
            else
            {
             include $dateien[$_GET['section']];
            }
           }
           else
           {
            echo "Error";
           }
          ?>

Es kommt immer die Meldung Error! Aber wenn ich in der config_menu.php echo $dateien['$navipunkt']; mache, dann gibt er mir die richtigen aus. Also irgendwas stimmt noch nicht so richtig mit dem $GET_['section'] :(

Hilfe :(
 
hier ist schonmal ein Fehler:

PHP:
 $dateien['$navipunkt'] = "$navipunkt.php";

das muss so aussehen:

PHP:
 $dateien['$navipunkt'] = $navipunkt.".php";
 
Das ist vielleicht nicht so schön, aber falsch ist es nicht. Ergibt das gleiche habs ja via echo ausgeben lassen, darum läuft es auf jeden fall nicht falsch. Aber ich änder es der schönheit wegen trotzdem ;)

Sonst jemand eine idee?
 
Zurück