Dynamisches Menü
freak_ts
- datenbank
Hallo, wiedermal komme ich nicht weiter mit PHP+MySQL.
Also, ich versuche mal mein Problem zu beschreiben:
Ich hab ne Tabelle mit "Kathegorien".
Dann habe ich eine weitere Tabelle mit den "Inhalten" der jeweiligen Kathegorien.
Die Einträge beider Tabellen haben jeweils eine ID + Namen (und weitere sachen, wie Links, etc.)
Was ich vor habe: Ich möcht die NAMEN der Kathegorien auslesen,
und anschließend andere Tabellen mit den ausgelesenen NAMEN öffnen,
und die Inhalte auslesen.
Bisher hab ich volgendes versucht:
(ist jetzt mal nur ein Schnipsel, sonnst wirds unübersichtlich)
$link = mysql_connect("localhost","****","*****");
mysql_select_db("menu");
$query0 = 'SELECT * FROM structure';
$structure = mysql_query($query0);
while($line = mysql_fetch_assoc($structure))
{
//echo ($line["id"]. ", " . $line["name"]);
$query1 = ("SELECT * FROM ".$line["name"]);
$eintrag = mysql_query($query1);
while($line2 = mysql_fetch_assoc($eintrag))
{
//echo ($line2["id"]. ", " . $line2["name"]);
};
};
Teilweise geht es ja, aber:
Warning: mysql_fetch_assoc(): supplied argument is not a valid MySQL result resource in D:\public\****.php on line 18.
Bestimmt ist es nur ein MINIMALER FEHLER bei... puhh keine ahnung?
Ich hoffe jemand versteht mein Problem, und kann mir dabei helfen.
Gruß, freak_ts
Ach, genau, die Fehlerbescheibung ist Falsch:
Der Fehler tritt auf, bei der zweiten Schleife, auf Zeile 14 - nicht 18.
Ich hoff mein Anfang/Schnipsel taugt wenigstens ein bisschen was.
Gruß, freak_ts
hey!
schon mysql_error probiert?
cu
hey!
schon mysql_error probiert?
cu
Hallo. Nein, hab mir noch kein error ausgeben lassen...
Probier ich gleich mal THX.
Ist der Script wohl richtig gewesen / Bekommst du wohl keine errors ????
gruß, freak_ts
hey
Ist der Script wohl richtig gewesen / Bekommst du wohl keine errors ????
Ich hab ihn nich ausprobiert, aber wenn so eine Fehlermeldung kommt, benutz ich erstmal das. Meistens stellen sich dann einfach Tippfehler dabei heraus o.ä.
lg
Ich hab jetzt mal folgendes in die Schleife integriert:
echo mysql_errno() . ": " . mysql_error(). "\n";
Ich bekomm aber keine weiteren error-nachrrichten.
Warning: mysql_fetch_assoc(): supplied argument is not a valid MySQL result resource
Jetzt häng ich wirklich fest.
gruß, freak_ts
Hi freak_ts!
Was ich vor habe: Ich möcht die NAMEN der Kathegorien auslesen,
und anschließend andere Tabellen mit den ausgelesenen NAMEN öffnen,
und die Inhalte auslesen.
Dein Datenbankdesign ist fehlerhaft. Mehrere Entitätstypen sollten über ihre Primärschlüssel, zumindest aber Schlüsselkandidaten verknüpft werden.
Und wie es scheint, hast du für jede Kategorie eine eigene Tabelle. Das ist schlecht wart- und erweiterbar. Sinnvoller wäre, alle Kategorien in einer Tabelle zu verwalten und mit einer Tabelle Inhalt in Beziehung zu stellen.
Die Struktur innerhalb einer Tabelle "categorie" kann über Parent-IDs realisiert werden.
Bisher hab ich volgendes versucht:
Du fragst in deinem Code eine Tabelle ab und nutzt Daten daraus, um eine neue Abfrage zu erstellen. Das deutet _definitiv_ auf ein fehlerhaftes DB-Design hin.
Teilweise geht es ja, aber:
Warning: mysql_fetch_assoc(): supplied argument is not a valid MySQL result resource in D:\public\****.php on line 18.
Ich finde die Fehlermeldung recht anschaulich: $eintrag
scheint kein gültiges MySQL-Resultset zu sein.
Bestimmt ist es nur ein MINIMALER FEHLER bei... puhh keine ahnung?
Die Fehler sind hauptsächlich im Konzept zu finden.
Ich hoffe jemand versteht mein Problem, und kann mir dabei helfen.
An eine Überarbeitung musst du schon selbst ran. =)
Aber wir unterstützen dich dabei selbstverständlich gern.
MfG H☼psel
yo,
Du fragst in deinem Code eine Tabelle ab und nutzt Daten daraus, um eine neue Abfrage zu erstellen. Das deutet _definitiv_ auf ein fehlerhaftes DB-Design hin.
dem kann ich nicht zustimmen. ein nicht sinvoller weg einer abfrage muss nicht immer auf ein schlechtes design zurückzuführen sein. und konkret in seinem fall würde ich das auch nicht so defintiv sagen, dass sein design schlecht ist.
aber noch zwei tipps für ihn, ich würde grundsätzlich alle namen der tabllen im singular halten. zum anderen kannst du dir ja mal die variable $query1 aus geben lassen, da fehlt doch bestimmt die WHERE klausel und noch ein wenig mehr....
zum anderen macht der einsatz von * auch nur dann sinn in der ausgabe, wenn man wirklich alle spalten in der projektion braucht. und dann kann man sich noch überlegen, ob es in deinem falle nicht besser ist, aus den zwei abfragen eine zu machen
Ilja
Hi Ilja!
Du fragst in deinem Code eine Tabelle ab und nutzt Daten daraus, um eine neue Abfrage zu erstellen. Das deutet _definitiv_ auf ein fehlerhaftes DB-Design hin.
dem kann ich nicht zustimmen. ein nicht sinvoller weg einer abfrage muss nicht immer auf ein schlechtes design zurückzuführen sein.
Okay, da gebe ich dir recht.
und konkret in seinem fall würde ich das auch nicht so defintiv sagen, dass sein design schlecht ist.
Oh doch! =)
Er fragt die Kategorienamen aus der DB ab und verwendet diese um auf Tabellen mit diesen Namen zuzugreifen. Um eine neue Kategorie anzulegen, muss er eine neue Tabelle erschaffen. Das deutet für mich schon auf ein fehlerhaftes DB-Design hin.
MfG H☼psel
yo,
Er fragt die Kategorienamen aus der DB ab und verwendet diese um auf Tabellen mit diesen Namen zuzugreifen.
daran ist erst einmal grundsätzlich nichts verkehrt, aussser das man das auch gleich in einer abfrage machen kann.
Um eine neue Kategorie anzulegen, muss er eine neue Tabelle erschaffen.
das kann ich nicht nachvollziehen, sofern ich ihn richtig versanten habe. wenn er eine neue kategorie anlegen will, muss er doch nur einen neuen datensatz-eintrag in der tabelle kategorie machen. wie kommst du darauf, dass er eine neue tabelle anlegt ?
Ilja
Hi Ilja!
Er fragt die Kategorienamen aus der DB ab und verwendet diese um auf Tabellen mit diesen Namen zuzugreifen.
daran ist erst einmal grundsätzlich nichts verkehrt, aussser das man das auch gleich in einer abfrage machen kann.
Ja, sowieso. Das ist ja auch nicht mein eigentlich Kritikpunkt.
Um eine neue Kategorie anzulegen, muss er eine neue Tabelle erschaffen.
[...] wie kommst du darauf, dass er eine neue tabelle anlegt ?
Das geht aus seinem geposteten Code hervor:
// ...
$query0 = 'SELECT * FROM structure';
$structure = mysql_query($query0);
while($line = mysql_fetch_assoc($structure))
{ // ...
$query1 = ("SELECT * FROM ".$line["name"]);
// ... ^^^^
};
MfG H☼psel
jo,
Das geht aus seinem geposteten Code hervor:
// ...
$query0 = 'SELECT * FROM structure';
$structure = mysql_query($query0);
while($line = mysql_fetch_assoc($structure))
{ // ...
$query1 = ("SELECT * FROM ".$line["name"]);
// ... ^^^^
};
lach, und ich dachte, der fehler besteht darin, dass er unter anderem die WHERE klausel vergessen hat. da hast du recht, das ist aller wahrscheinlichkeit ein design fehler.
Ilja
Hallo, erstmal VIELEN DANK für eure Mühen...
Um eine neue Kategorie anzulegen, muss er eine neue Tabelle erschaffen.
Ja, da hast du allerdings recht... Aber für mich ist es echt übersichtlicher, da ich sonnst in zukunft bei EINEM TABLE verdammt lange suchen müsste, um einen eintrag manuell zu ändern. Mit jeweils einer eigenen Tabelle, für die Inhalte jeder Kategorie, fällt mir die Strukturierung und Übersicht leicher. Desshalb gibt es ja extra die eigene DB namens "menu".
Eure Vorschläge sind echt gut. Leider hab ich noch zu wenige Erfahrungen.
Wenn ich jetzt doch nur EINE Tabelle nehemen würde, wie kann ich dann eine "Sortierte Ausgabe" aller Katigorien realisieren, wenn die Einträge wild nacheinander / zwischendurch Eingetragen werden? Mit "ID" jedenfalls nicht mehr. Irgendwie z.B. ": 'kathegorie'" lool...
Oder wie muss ich dass dann angehen?
Wichtig: Kann ich dann auch die REIHENFOLGE festlegen, in der die einzelnen Kathegorien nacheinander ausgegeben werden? z.B. dass GEZIELT ZUERST die "Home-Kathegorie" ausgegeben wird???
--> Und desshalb kam mir die Idde mit dieser "Index-Tabelle", weil ich dort die Reihenfolge der Kathegorien frei Festlegen kann. Z.B wenn ich z.B eine Komplette Kathegorie im Menü weiter nach unten verschieben möchte, dann ändere ich einfach die "(Reihenfolge-)ID" in diesem extra Index-Table...
Ich kann das ganze schlecht erklähren. Aber ein Bild sagt mehr als 1000 Worte:
(HIER ist nur das Bild.)
Sagt bitte ruhig bescheid, wenn meine Idde bissher vollkommen bescheuert ist, denn vielleicht gehe ich das ganze echt ein bisschen falsch an.
Ich wollte es so einfach gestallten, wie es hald möglich ist, und dabei die "Manuelle-Administration hinterher" auch einfach halten, mittels "PHPmyAdmin".
Über weitere Vorschläge und Ideen wäre ich seeeehr dankbahr.
gruß, freak_ts
Hallo.
Aber für mich ist es echt übersichtlicher, da ich sonnst in zukunft bei EINEM TABLE verdammt lange suchen müsste, um einen eintrag manuell zu ändern. Mit jeweils einer eigenen Tabelle, für die Inhalte jeder Kategorie, fällt mir die Strukturierung und Übersicht leicher.
Nicht du sollst dort suchen, sondern die Datenbank.
MfG, at