Waagrechtes Menü aus Datenbank lesen

  • Themenstarter Themenstarter DEDEX7200Pro
  • Beginndatum Beginndatum
D

DEDEX7200Pro

Hallo Leute,
ich habe hier ein Problem mit meinen Script.

Hier erst mal, wie es aussehen sollte:
PHP:
<div class="menu">
<ul>
	<li><a href="http://www.ebay.de" class="hide">Kategorie 1</a></li>
	<li><a class="hide">Kategorie 2</a>
		<ul>
		<li><a href="http://www.test.de">test.de</a></li>
		</ul>
	</li>
	<li><a class="hide">Kategorie 3</a>
		<ul>
		<li><a href="http://www.test2.de">test2.de</a></li>
		</ul>
	</li>
</ul>
</div>

und hier, wie es derzeit aussieht:

PHP:
<div class="menu">
<ul>
	<li><a href="http://www.ebay.de" class="hide">Kategorie 1</a>
	<li><a class="hide">Kategorie 2</a>
	<ul>
	<li><a href="http://www.test.de">test.de</a></li>
	</ul>
	<li><a class="hide">Kategorie 3</a>
</ul>
</div>

(Es fehlen quasi die Links in der Kategorie 3 und danach dann)

Meine SQL-Datenbank sieht so aus:

struktur:
Code:
CREATE TABLE navigation (
  id INT (8) unsigned NOT NULL AUTO_INCREMENT,
  categorielink varchar(255) NOT NULL default '',
  categorie varchar(255) NOT NULL default '',
  link varchar(255) NOT NULL default '',
  page varchar(255) NOT NULL default '',
  type varchar(255) NOT NULL default '',
  date timestamp(14) NOT NULL,
  PRIMARY KEY  (id)
) TYPE=MyISAM;

Inhalt:
Code:
INSERT INTO navigation (categorie, link, page, type) VALUES ('Kategorie 1', 'http://www.ebay.de', '', 'categorielink');
INSERT INTO navigation (categorie, link, page, type) VALUES ('Kategorie 2', '', '', 'categorie');
INSERT INTO navigation (categorie, link, page, type) VALUES ('Kategorie 2', 'http://www.test.de', 'test.de', 'link');
INSERT INTO navigation (categorie, link, page, type) VALUES ('Kategorie 3', '', '', 'categorie');
INSERT INTO navigation (categorie, link, page, type) VALUES ('Kategorie 3', 'http://www.test2.de', 'test2.de', 'link');

(bzw. die Befehle^^ Wüsste nicht, wie ich des sonst gut darstellen könnte)

Mein Script sieht so aus:
PHP:
<?php
include("config.php");
include("defines.php");

mysql_connect($host, $user , $pass);
mysql_select_db($db);

$query = mysql_query("SELECT * FROM navigation");
$query2 = mysql_query("SELECT * FROM navigation");

echo "<div class=\"menu\">";
echo "<ul>";

while($row = mysql_fetch_array($query,MYSQL_ASSOC)) {
//Falls kein Untermenü, Link anzeigen
if ($row["type"] == "categorielink") {
echo "<li><a href=\"".$row["link"]."\" class=\"hide\">".$row["categorie"]."</a></li>";
}

//Falls Untermenü, die restlichen Kategorien
if ($row["type"] == "categorie") {
$categorie = $row["categorie"];
echo "<li><a class=\"hide\">".$row["categorie"]."</a>";

//Unterseiten / Links
while($row2 = mysql_fetch_array($query2,MYSQL_ASSOC)) {
$categorie2 = $row2["categorie"];
echo "<ul>";
if ($row2["type"] == "link" and $categorie == $categorie2) {
echo "<li><a href=\"".$row2["link"]."\">".$row2["page"]."</a></li>";
}
echo "</ul>";
}
echo "</li>";
}
}

echo "</ul>";
echo "</div>";
?>

Die config.php enthält nur meine Datenbankeinstellungen (die ja auch korrekt sind^^). Die Defines.php soll später mal mein Menü enthalten. (Hab schon ein waagrechtes menü; aber möchte dann ein anderes style haben, aber des ist ja auch jetzt egal).

So jetzt habe ich ja, wie oben das Problem, dass der Inhalt für die zweite Kategorie nicht vorhanden ist. Wie löse ich das Problem? Ich habe des schon mit foreach und for versucht, aber irgenwie setze ich des an die falsche stelle, wenn ihr des problem damit lösen könnt^^

Edit: Mit $categorie == $categorie2 möchte ich verhindern, das Inhalt für die Kategorie 3 nicht in der zweiten erscheint

Edit2: Ich verstehe halt nicht, warum ab
Code:
if ($row["type"] == "categorie") {
zwar dann 2 Kategorien oder mehr macht, aber dann nur einmal die Links zu den Kategorien macht

Edit3: Ich mein, wenn ich
echo "<p>Hallo</p>"; mache anstatt
Code:
while($row2 = mysql_fetch_array($query2,MYSQL_ASSOC)) {
$categorie2 = $row2["categorie"];
echo "<ul>";
if ($row2["type"] == "link" and $categorie == $categorie2) {
echo "<li><a href=\"".$row2["link"]."\">".$row2["page"]."</a></li>";
}
echo "</ul>";
}

dann wird doch auch bei beiden Kategorien "Hallo" angezeigt; wieso dann nicht bei den Links?

Edit XXX:
PHP:
<?php
include("config.php");
include("defines.php");

mysql_connect($host, $user , $pass);
mysql_select_db($db);

$query = mysql_query("SELECT * FROM navigation");

echo "<div class=\"menu\">";
echo "<ul>";

while($row = mysql_fetch_array($query,MYSQL_ASSOC)) {
//Falls kein Untermenü, Link anzeigen
if ($row["type"] == "categorielink") {
echo "<li><a href=\"".$row["link"]."\" class=\"hide\">".$row["categorie"]."</a></li>";
}

//Falls Untermenü, die restlichen Kategorien
if ($row["type"] == "categorie") {
echo "<li><a class=\"hide\">".$row["categorie"]."</a>";

//Unterseiten / Links
if (!empty($link) and !empty($page))
echo "<ul><li><a href=\"".$link."\">".$page."</a></li></ul>";
echo "</li>";
}
}

echo "</ul>";
echo "</div>";
?>

oder so
PHP:
<?php
include("config.php");
include("defines.php");

mysql_connect($host, $user , $pass);
mysql_select_db($db);

$query = mysql_query("SELECT * FROM navigation");

echo "<div class=\"menu\">";
echo "<ul>";

while($row = mysql_fetch_array($query,MYSQL_ASSOC)) {
$categorie = $row["categorie"];
$link = $row["link"];
$page = $row["page"];
$type = $row["type"];

//Falls kein Untermenü, Link anzeigen
if ($type == "categorielink") {
echo "<li><a href=\"".$link."\" class=\"hide\">".$categorie."</a></li>";
}

//Falls Untermenü, die restlichen Kategorien
if ($type == "categorie") {
echo "<li><a class=\"hide\">".$row["categorie"]."</a>";

//Unterseiten / Links
if ($type == "link") {
echo "<ul><li><a href=\"".$link."\">".$page."</a></li></ul>";
}

echo "</li>";
}
}

echo "</ul>";
echo "</div>";
?>

Am liebsten wäre es mir so, aber wie komme ich auf $link und $page? Bei $row["link"] oder $row["page"] klappt es bei mir nicht und dann müsste noch die Kategorien zugeordnet werden
 
Zuletzt bearbeitet von einem Moderator:
Hi

Ich fang mal von oben an.

1. Soweit ich seh fehlen in deiner jetztigen Ausgabe ein paar </li>. Das aber nur der Ordnung halber.

2. Grundsätzlich wäres es einfacher wenn du zum Ausgeben der Links/Unterseiten nicht wieder die ganze Tabelle aus der Datenbank laden würdest, sondern nur mehr die Einträge die du auch brauchst. Ich geb dir mal ein bisschen Code als Denkanstoss

PHP:
$query = mysql_query('SELECT * FROM navigation');

//Menüausgabe beginnen

while ($row = mysql_fetch_array($query, MYSQL_ASSOC)) {
  if ($row["type"] == "categorielink") {
    //Ausgabe Link
  }

  if ($row["type"] == "categorie") {
    //Ausgabe Kategorie

    //Daten für die Kategorie laden
    $subquery = mysql_query('SELECT * FROM navigation WHERE categorie = "'.$row['categorie'].'"');

    while ($catrow = mysql_fetch_array($subquery, MYSQL_ASSOC)) {
      //Nachdem eh nur die richtigen Einträge selektiert werden einfach alles was kommt ausgeben
    }
  }
}

Noch was grundsätzliches zu deiner Datenbankarchitektur. Es wäre vielleicht sinnvoll die Tabelle in zwei Teiltabellen zu teilen, siehe Bild.
 

Anhänge

  • er1.png
    er1.png
    3 KB · Aufrufe: 23
vielen Dank, manchmal sieht man den Wald vor lauter Bäumen nicht mehr^^ Hier mein Script, der zum Erfolg geführt hat:

PHP:
<?php
include("config.php");
include("defines.php");

mysql_connect($host, $user , $pass);
mysql_select_db($db);

echo "<div class=\"menu\">";
echo "<ul>";

$query = mysql_query('SELECT * FROM navigation');
$subquery = mysql_query('SELECT * FROM navigation WHERE categorie = "'.$row['categorie'].'"');

//Menüausgabe beginnen
while($row = mysql_fetch_array($query,MYSQL_ASSOC)) {
//Falls kein Untermenü, Link anzeigen
if ($row["type"] == "categorielink") {
echo "<li><a href=\"".$row["link"]."\" class=\"hide\">".$row["categorie"]."</a></li>";
}

//Falls Untermenü, die restlichen Kategorien
if ($row["type"] == "categorie") {
$categorie = $row["categorie"];
echo "<li><a class=\"hide\">".$row["categorie"]."</a>";

//Unterseiten / Links
$subquery = mysql_query('SELECT * FROM navigation WHERE categorie = "'.$row['categorie'].'"');
echo "<ul>";
while ($catrow = mysql_fetch_array($subquery, MYSQL_ASSOC)) { 
if ($catrow["type"] == "link") {
echo "<li><a href=\"".$catrow["link"]."\">".$catrow["page"]."</a></li>";
}
}
echo "</ul>";
echo "</li>";
}
}

echo "</ul>";
echo "</div>";
?>
 
Zuletzt bearbeitet von einem Moderator:
Zurück