Frage von Oentr, 17

PHP - Kategorie anklicken und entsprechende Inhalte anzeigen lassen?

Hallo,

ich bin dabei, Kategorien einzubinden. Es gibt eine Liste von etwa 20 Kategorien, die sicherlich zunehmen wird, bei der jede einzeln anklickbar ist. Nach Klick, soll per Link auf eine weitere Seite verwiesen werden, auf der Ergebnisse zu dieser Kategorie angezeigt werden. Die Daten liegen in meiner SQL Datenbank. Beispiel: -- Haus Baum <<<<Hier wird geklickt Apfel --

Ich werde zur Seite kategorien.php weitergeleitet. Dort werden aus meiner SQL Datenbank alle Werte der Tabelle "tabelle" ausgegeben, die in der Spalte "kategorie" "Baum" stehen haben. Das heißt, wenn z.B. ID 1 in der Spalte "kategorie" Baum stehen hat, wird der Inhalt der gesamten ZEILE von ID 1 ausgegeben, weil diese ID zu den gesuchten Ergebnissen gehört. Ich hoffe, ich habe es genug erklärend dargestellt.

Meine Frage ist nun: Soll ich alle Kategorien zusammen in ein form packen, sodass der jeweilige Wert übermittelt wird? Gibt es bessere Ansätze? Wie genau kann ich auf kategorien.php dann genau alle diese kompletten ID´s ausgeben lassen, die in der Kategorie baum stehen?

Ich hoffe, es findet sich eine Lösung. Vielen Dank!

Antwort
von Minilexikon, 9
SELECT
    ID, Name
FROM
    Subkategorien
WHERE
    Kategorie = "Baum"

Wahrscheinlich sowas in der Richtung. Du könntest uns mal deine Tabellenstruktur grob verdeutlichen, so wie webflexer das schon getan hat.

Antwort
von fluffiknuffi, 12

Irgendwie haben mich deine Ausführungen etwas verwirrt aber ich werfe einfach mal AJAX in den Raum. Sprich wenn der User eine Kategorie auswählt, bekommt JavaScript das mit und lädt dann vom Sever die entsprechenden Einträge nach. Ist natürlich, wenn man noch nie mit AJAX gearbeitet hat, anspruchsvoller als die herkömmliche form-Lösung.

Antwort
von webflexer, 7

Wichtig bei beliebig vielen Kategorien ist deine Datenbankstruktur!

Saubere Lösung: (n:m - Relation)

 TBL_Rubriken:
 
Rubrik_ID (Primärschlüssel)
Rubrik_Name (ggf. UNIQUE)
Rubrik_Beschreibung
...
 
TBL_Artikel:
 
Artikel_ID (Primärschlüssel)
Autor_ID (ggf. darüber weitere n:m-Relation)
Artikel_Titel
Artikel_Verweis (z.B. Pfad zur Textdatei o.ä.)
...
 
TBL_Artikel_Rubrik:
 
Artikel_ID (Primärschlüssel)
Rubrik_ID (Primärschlüssel)

Einfaches

 

Beispiel

:

 

Es gibt die Rubriken: (TBL_Rubriken)

1 - "News" - "Neues / Allgemeine Nachrichten"

2 - "Technik" - "Technische Informationen"

3 - "EDV" - "Alles rund um den Computer"

4 - "Mathe" - "Alles rund um die Mathematik"

 

Es gibt die Artikel: (TBL_Artikel)

1 - 33 - "Zuse und Z1" - "/docs/articles/2003/a00853.pdf"

2 - 33 - "Differentialgleichungen" - "/docs/articles/2003/a10853.pdf"

3 - 33 - "Automatentheorie" - "/docs/articles/2003/a03853.pdf"

4 - 33 - "Jan Ulrich - Auf Siegeskurs" - "/docs/articles/2003/a01853.pdf"

 

Relationen: (TBL_Artikel_Rubrik) [A_ID - R_ID]

1 - 2 (Artikel 1 - Technik)

1 - 3 (Artikel 1 - EDV)

2 - 4 (Artikel 2 - Mathe)

3 - 2 (Artikel 2 - Technik)

 

3 - 3 (Artikel 2 - EDV)

3 - 4 (Artikel 2 - Mathe)

4 - 1 (Artikel 4 - News)

 

Will man nun alle Artikel haben, die zum Thema Technik gehören, dann

funktioniert dass so:

 SELECT * FROM TBL_Artikel INNER JOIN TBL_Artikel_Rubrik
ON TBL_Artikel.Artikel_ID = TBL_Artikel_Rubrik.Artikel_ID
WHERE TBL_Artikel_Rubrik.Rubrik_ID = 2;

Will man die Namen (der Rubriken) bei der Auswahl benutzen, muss man

diese entweder in der TBL_Artikel_Rubrik mitführen oder (sauberer)

ein weiteres INNER JOIN über die Tabelle TBL_Rubrik hinzufügen!

 

Kommentar von Oentr ,

Vielen Dank! Ich habe gestern Abend selber noch eine gut funktionierende Lösung gefunden, die ich entsprechend umsetzen konnte. Eventuell ist die aber nicht die sauberste.

Die Kategorien werden zwar von mir vorgegeben, sodass Nutzer nur aus diesen wählen können, jedoch werde ich mir definitiv auch deine Lösung ansehen und ggf. eher so umsetzen.

Danke an dich und alle anderen!

Die Frage ist hiermit beantwortet.

Antwort
von maximilianus7, 12

so als mini-tutorial:

http://paste2.org/mGX9OEgZ

hilft dir das?

ev. charset=iso-8859-1


Keine passende Antwort gefunden?

Fragen Sie die Community

Weitere Fragen mit Antworten