 |
| Hinweise |
Willkommen im TP-Hilfe-Forum!Dies ist ein Forum zu den Themen Photoshop, Dreamweaver, Flash, Selbständigkeit und mehr, in dem Du Hilfe, Anleitung oder eine Lösung zu Deinen Problemen erhältst. Aktuell bist Du in unseren Foren als Gast mit reinen Leserechten unterwegs. Wenn Du Dich registrierst, kannst Du eigene Themen verfassen, Deine Frage stellen und privat mit anderen TPlern kommunizieren. Weitere Foren werden zugänglich, und Du wirst – falls gewünscht – per Mail über neue Beiträge informiert. Die Registrierung ist schnell und kostenlos. Sollten bei der Registrierung Fragen auftauchen, reicht ein Klick in unsere Hilfe - Häufig gestellte Fragen oder eine kurze Mitteilung an das Support-Team. Viel Spaß bei Traum-Projekt.com |
10.05.2002, 21:18
|
#1
|
|
TP-Member
Registriert seit: Jan 2002
|
Wie programmiere ich ein Forum?
Hi
Wie schreibe ich ein Forum?
Also das Prinzip ist mir klar. Ich habe ein paar Foren, wenn ich auf eines diese Foren klicke kommen die Threads die in diesem Forum zu finden sind. Die Threads haben alle eine ID die zum jeweiligen Forum passen. Das ist auch nicht das Problem.
Als Beispiel nehme ich die Startseite eines Forums. Dort steht welcher User, egal in welchem Thread, in diesem Forum den letzten Beitrag geschrieben hat.
Also links der name des Boards, rechts der Name des Users der den letzten Beitrag geschrieben hat.
Ich will in der Tabelle wo die Foren aufgeführt werden auch die ID des User der den letzten Beitrag geschrieben hat speichern.
Also baue ich die seite auf. Es wird die gesammte tabelle durchgearbeitet, name des Forums, Link und eben auch der User.
Da ich aber nur die ID des Users habe muß ich mir den wirklichen namen aus einer anderen tabelle holen, dadurch unterbreche ich aber das durchsuchen der Tabelle wo die Foren gespeichert sind.
Mögliche Lösung: Ich gehe zuerst die Tabelle mit den Usern durch und speichere alle Daten in einem Array, um sie dann den jeweiligen Foren, welche wieder aus einer anderen Tabelle kommen, zuzzuordnen.
Diese Lösung ist aber nicht wirklich gut, dann kommen noch andere dinge wie das Style des Foums hinzu und das Problem vergrößert sich noch.
Was mache ich also am besten?
__________________
Lebet lange und in Frieden.
|
|
|
10.05.2002, 22:48
|
#2
|
|
TP-Greis
Registriert seit: Jun 2001
Ort: Bonn-Altstadt
|
Du solltest Dir eines der kostenlosen Forensysteme besorgen und den Code genauestens studieren. Denn damit das ganze einigermassen funktioniert, müssen Queries her, bei denen Dir JOINS nur so um die Ohren fliegen. Ein Forum schreibt man halt nicht mal eben so ... 
__________________
Give up yourself into the moment — The time is now.
|
|
|
10.05.2002, 22:55
|
#3
|
|
Registered User
Registriert seit: Dec 2001
Ort: Berlin
|
wasn ein JOIN?
|
|
|
10.05.2002, 23:11
|
#4
|
|
TP-Greis
Registriert seit: Jun 2001
Ort: Bonn-Altstadt
|
Kurzgesagt: Die abstrahierte Schnittmenge zweier oder mehrerer Tabellen.
__________________
Give up yourself into the moment — The time is now.
|
|
|
10.05.2002, 23:21
|
#5
|
|
Registered User
Registriert seit: Dec 2001
Ort: Berlin
|
aso gut  das wars syntax kriegt man ja leicht aus diversen referenzen wenn man es mal braucht
aber sone kurze erklärung is gut^^
|
|
|
11.05.2002, 00:05
|
#6
|
|
TP-Member
Registriert seit: Jan 2002
|
das man ein forum nicht einfach mal so schreibt ist klar, deshalb dieser thread
ich bitte ja um tips, nicht um eine anleitung.
ich werde mir mal das wbb ansehen.
JOINs sind shcon mal gut 
__________________
Lebet lange und in Frieden.
|
|
|
11.05.2002, 12:49
|
#7
|
|
TP-Veteran
Registriert seit: Jan 2002
|
moin
Ich hab mir schonmal angetan, ein Forum selbst zu schreiben (und schaff grad am zweiten, weil noch so einiges verbesserungsfähig war).
Die Sache mit dern Anzeige des Usernamens hab ich ohne 'join' erledigt, abgesehn vom absolut grundlegendsten hab ich nämlich von MySQL auch keine Ahnung. Es gab einfach noch keinen Anlass, sich intensiver damit zu befassen, bisher konnt ich jedes Problem auch per php lösen  .
Im allgemeinen bin ich genauso vorgegangen, wie Du in deinem Eröffnungsbeitrag beschrieben hast:
Ich hol die Thread-Datensätze aus der Tabelle und 'schau mir die Author-ID an'. Die wird an eine Funktion 'getUserData($user_id) übergeben, welche Bestandteil des 'User Management'-Parts der Website is und mir in einem Array die Daten des jeweiligen Benutzers zurückgibt - u.a. den Nickname, der anschließend ausgegeben wird - ist vielleicht nicht die absolut eleganteste Lösung, funktioniert aber einwandfrei  .
Abschließend noch ein kleiner Verbesserungsvorschlag:
In der Beschreibung deiner Vorgehensweise erklärst du, dass Du die ID des Users, der den letzten Beitrag gepostet hat, in deiner Tabelle mit den Thread-Daten speicherst.
Das is nicht besonders elegant, weil unnötig. Diese Information ist schon in deinen Beitragsdaten enthalten und muss nur mit dem richtigen Query herausgeholt werden - in etwa
"SELECT author_id FROM messages_table WHERE topic_id = $topic_id ORDER BY id DESC LIMIT 1"
(das is vielleicht nicht der heilige Gral der sql-Programmierung, funktioniert aber).
Der Query liefert die Author-ID des letzten Beitrags zurück, indem er die Einträge absteigend nach ihrer id sortiert (ORDER BY id DESC) und lediglich den letzten/ersten (wie mans nimmt  ) zurückgibt (LIMIT 1). 'ORDER BY id' deshalb, weil man davon ausgehen kann, dass der neuste Eintrag grundsätzlich auch der mit der höchsten id ist (ich nehm einfach mal an, dass du eine Spalte 'id' mit auto_incerement und primary key hast).
Alternativ könntest duch auch nach dem Datum sortieren, is vom Ausdruck her auf den ersten Blick noch einleuchtender...letztlich isses egal, und vielleicht geht das sortieren nach id ja minimalst schneller  ).
|
|
|
11.05.2002, 13:02
|
#8
|
|
TP-Veteran
Registriert seit: Jan 2002
|
und nochwas...
Ich hätte da noch einen Tip zur Verringerung von überflüssigerweise doppelt gespeicherten Informationen:
Falls du in den Datensätzen deiner Topics-Tabelle nicht irgendwelche speziellen Werte speicherst (*g* bisschen allgemein ausgedrückt, ich weiß  ....naja, halt wieder: 'Informationen, die nicht schon irgendwie auch in der Tabelle mit den Beitagsdatensätzen steckt', dann lass sie weg  .
Jeder der Beiträge zu einem bestimmten Topic ist diesem über eine 'Topic ID' zugeordnet - du kannst ihre Anzahl und sämtliche Informationen über den ersten, den letzten und überhaupt alle ermitteln und anhand dieser Daten deine Topic-Liste generieren - ohne dafür irgendeine zusätzliche Tabelle in der Datenbank anlegen zu müssen.
|
|
|
11.05.2002, 14:16
|
#9
|
|
TP-Member
Registriert seit: Jan 2002
|
Hi
Zitat:
Original geschrieben von seb
Ich hab mir schonmal angetan, ein Forum selbst zu schreiben (und schaff grad am zweiten, weil noch so einiges verbesserungsfähig war).
|
Das ist mein erstes  . Ich versuche ein Forum zu schreiben was auch für den professionellen einsatz, mit sehrvielen threads und vielen foren noch schnell funktioniert.
Zitat:
Original geschrieben von seb
Es gab einfach noch keinen Anlass, sich intensiver damit zu befassen, bisher konnt ich jedes Problem auch per php lösen .
|
das stimmt schon, es geht mir aber darum das der server so wenig belastet wird wie möglich. und wenn viele user im forum unterwegs sind rechnet es sich wenn ich mySQL und PHP voll ausnutze und nicht mit kompromissen programmiere 
Zitat:
Original geschrieben von seb
Ich hol die Thread-Datensätze aus der Tabelle und 'schau mir die Author-ID an'. Die wird an eine Funktion 'getUserData($user_id) übergeben, welche Bestandteil des 'User Management'-Parts der Website is und mir in einem Array die Daten des jeweiligen Benutzers zurückgibt - u.a. den Nickname, der anschließend ausgegeben wird - ist vielleicht nicht die absolut eleganteste Lösung, funktioniert aber einwandfrei .
|
genau so habe ich es bei kleineren projekten auch gemacht und es funtzt wirklich einwandfrei.
Zitat:
Original geschrieben von seb
Das is nicht besonders elegant, weil unnötig. Diese Information ist schon in deinen Beitragsdaten enthalten und muss nur mit dem richtigen Query herausgeholt werden - in etwa
"SELECT author_id FROM messages_table WHERE topic_id = $topic_id ORDER BY id DESC LIMIT 1"
(das is vielleicht nicht der heilige Gral der sql-Programmierung, funktioniert aber).
|
klar funtzt das so, ich mache es auch so
mit dem befehl holst du einfach den letzten datensatz aus der tabelle, der zu diesem thema gehört. das ich auch in ordnung. so will ich es machen, aber per JOIN, damit erspare ich mir ein QUERY. *g* eines ist nicht viel, aber auf dauer rechnet es sich.
__________________
Lebet lange und in Frieden.
|
|
|
11.05.2002, 14:17
|
#10
|
|
TP-Member
Registriert seit: Jan 2002
|
ich mußte den post leider aufteilen weil ich nur eine begrenzte anzahl an vbcodes in einem post verwenden darf, ich hoffe das ist kein problem, ich mache es auch nicht jeden tag 
Zitat:
Original geschrieben von seb
Alternativ könntest duch auch nach dem Datum sortieren, is vom Ausdruck her auf den ersten Blick noch einleuchtender...letztlich isses egal, und vielleicht geht das sortieren nach id ja minimalst schneller ).
|
ich ordne immer nach id. da kann kein fehler auftretten, beim datum schon eher, und ist auch übersichtlicher.
2ter Post
Zitat:
Original geschrieben von seb
Jeder der Beiträge zu einem bestimmten Topic ist diesem über eine 'Topic ID' zugeordnet - du kannst ihre Anzahl und sämtliche Informationen über den ersten, den letzten und überhaupt alle ermitteln und anhand dieser Daten deine Topic-Liste generieren - ohne dafür irgendeine zusätzliche Tabelle in der Datenbank anlegen zu müssen.
|
Eigendlich hast du recht.
Es ist so das ich eine alte version des vbulletin rumliegen habe, 1.5 oder sowas. Das Forum kann im grunde nichts. Aber ich habe mir die Datenbank angesehen und bin deshlab auf die idee mit der UserID gekommen.
Aber alle Daten in die thread tabelle zu schreiben funtzt natürlich auch.
Jetzt habe ich noch eine Frage zu den Templates.
Was hat mehr sinn, wenn ich die Templates, Logo, Buttons, Links, Copyrights u.s.w. in eine html datei schreibe oder in die datenbank?
Wenn ich es in die DB schreibe steht zwar viel drinnen, es kann aber über ein Admin Panel leichter geändert werden, ohne tonnenweise setzen von Dateiberechtigungen oder der User muß nich die dateien selber durchsuchen.
Was sagt ihr?
__________________
Lebet lange und in Frieden.
|
|
|
11.05.2002, 14:18
|
#11
|
|
TP-Veteran
Registriert seit: Apr 2001
Ort: Münster und gerade aus Brisbane
|
also ich habe es mir auch einmal angetan ein forum zu basteltn:
grundlage php, mysql (was auch sonst!)
ist sicherlich noch verbesserungsfähig, aber ich bin folgendermassen vorgegangen:
- tabelle user mit userdaten und status, wobei vom status die rechte abhängig sind, also ob der zum beispiel in der admin-maske einen beitrag löschen darf usw.
- eine tabelle foren in der die verschiedenen boards sind, darin sind auch anzahl der beiträge etc. gespeichert
- eine tabelle themen, wo die themen mit autor titel und erstellugsdatum stehen
- eine tabelle beiträge mit autor des beitrag, thema, beitrag_logo, titel, text und datum
dann habe ich halt die möglichkeit der eingabe von neuen themen und neuen antworten per formular gebaut
eine seite die abhängigt von forum, thema und beitrags id die beiträge ausliest und antwort etc. möglichkeit bietet
das ganze ist natürlich nicht fertig -->wie immer bei sowas
es ist doch ziemlich aufwendig sowas von vorne bis hinten zu bauen. vorallem dazu noch ne komfortable adminmaske.
|
|
|
11.05.2002, 14:54
|
#12
|
|
TP-Veteran
Registriert seit: Jan 2002
|
Zitat:
Original geschrieben von jph
es ist doch ziemlich aufwendig sowas von vorne bis hinten zu bauen. vorallem dazu noch ne komfortable adminmaske.
|
dem kann ich nur zustimmen  Gerade Programmierung und Design einer halbwegs durchdachten Benutzeroberfläche nimmt die meiste Zeit des kompletten Vorhabens in Anspruch, die Organisation der Daten im 'back-end' is da noch der kleinere Teil der Mühen.
|
|
|
11.05.2002, 15:39
|
#13
|
|
TP-Veteran
Registriert seit: Jan 2002
|
Zitat:
Original geschrieben von Akira
Das ist mein erstes . Ich versuche ein Forum zu schreiben was auch für den professionellen einsatz, mit sehrvielen threads und vielen foren noch schnell funktioniert.
|
Das erscheint mir n bisschen widersprüchlich. "Es ist noch kein Meister vom Himmel gefallen" - Ich denk nicht, dass jemand dazu in der Lage ist, etwas von Anfang an perfekt zu machen - völlig gleich, um was es geht.
Den Anspruch an dich selbst, mit dem 1. Versuch ein State-of-the-art-Forensystem zu entwickeln, würd ich n bisschen zurückschrauben.
Natürlich is eine gewisse Planung vor dem Start unverzichtbar, aber ich würd nicht versuchen, für jeden Aspekt sofort das absolute Optimum zu finden - wird dir kaum gelingen.
Zitat:
Original geschrieben von Akira
das stimmt schon, es geht mir aber darum das der server so wenig belastet wird wie möglich. und wenn viele user im forum unterwegs sind rechnet es sich wenn ich mySQL und PHP voll ausnutze und nicht mit kompromissen programmiere  
|
Die Vorgehensweise, die Anzahl an Beiträge zu einem bestimmten Thread (und überhaupt Informationen über die Threads) nochmal zusätzlich in einer Tabelle zu speichern, ist aus meiner Sicht viel mehr 'Kompromiss' als die Werte durch simples 'nachschauen' in der Datenbank zu ermitteln.
Weiter unten redest du vom Einsparen von Queries - Was ist mit dem Query, der bei jedem neuen Posting die Anzahl der Beiträge, Datum und Benutzer-ID des ersten und letzten Postings zu einem Thread neu schreibt? - Der z.B. könnte wie gesagt wirklich wegfallen  .
Zwischen der Methode, diese Werte aus den Beitragsdaten zu ermitteln und der, sie nochmal separat zu speichern, wirst du selbst bei tausenden von Beiträgen wohl kaum einen Performanceunterschied feststellen können.
Ich versteh diesen Zwang nach Geschwindigkeitsoptimierung sowieso nicht so recht, der unter uns Amateur-Webentwicklern weit verbreitet zu sein scheint.
Wenns um die Entwicklung z.B. einer 3D-Engine ginge, wo Geschwindigkeit wirklich Kriterium Nr. 1 ist (abgesehn von der Darstellungsqualität, aber die ergibt sich ja im allgemeinen direkt aus der Performance), sähe die Sache natürlich anders aus,
aber von wirklich katastophal schlechtem Code (z.b. 500 Queries, wo einer reichen würde) mal abgesehen, wird -jedes- Stück php-Software auf jeden Fall schnell genug verarbeitet, selbst unter der allerhöchsten Ausführungslast, die für seinen speziellen Fall noch realistisch zu erwarten ist.
In aller Regel ist die Verzögerung durch den überlasteten Webserver/den überlasteten Provider/die zu lahme Internetverbindung/wasweissich viel höher als die, die durch die Ausführung des php-Scripts anfällt. Dabei geht es um Sekundenbruchteile, die wirklich nicht ins Gewicht fallen.
Möglicherweise bringt eine Weiterentwicklung des php-Interpreters deinem Script mehr Geschwindigkeitszuwachs, als du ihn durch Code-Optimierung jemals erreichen könntest.
soooo...viel geschwätzt, arg vom Thema abgekommen...  .
Und bitte nimm das bloß nicht persönlich. Es soll kein Angriff auf deine Einstellung sein, nur mal meine Meinung. Ich hätt sie natürlich auch an beliebigen andern Stellen äußern können, aber hier hatt's halt gerade gepasst.
Seb
|
|
|
11.05.2002, 16:14
|
#14
|
|
TP-Member
Registriert seit: Jan 2002
|
ich nehms nicht persönlich
es geht darum das ich immer auf der suche bin wie ich die seite am schnellsten und server schonendsten schreiben kann. um das zu errreichen stöbere ich auf vielen seite was zur folge hat das ich sehr viel dazulerne. und darum geht es mir.
das ich die neueste vbulletin nicht einholen werde ist mir völlig klar, aber unterer durchschnitt sollte es auch nicht werden 
__________________
Lebet lange und in Frieden.
|
|
|
15.05.2002, 17:06
|
#15
|
|
TP-Member
Registriert seit: Jan 2002
|
mein forum geht voran
hi
es sieht ganz gut aus mit dem forum.
bia auf ein kleines problem:
ich habe eine tabelle wo die id, der name u.s.w. der einzelnen foren gespeichert werden.
auserdem werden in der selben tabelle die kategorien gespeichert. unterschieden werden sie in der spalte iscategory, ist der wert 1, ist es eine kategorie.
dann gibt es noch die spalte parentc. dort speichere ich die id der kategorie welches den forun übergeordnet ist. dann ist da noch die spalte order, welche die foren für jede kategorie ordnet.
das problem ist jetzt wie ich die datensätze ordnen soll damit sie richtig angezeigt werden.
ich hoffe ihr könnt mir helfen 
__________________
Lebet lange und in Frieden.
|
|
|
|
Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
|
|
|
| Themen-Optionen |
Thema durchsuchen |
|
|
|
| Thema bewerten |
|
|
Forumregeln
|
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.
HTML-Code ist aus.
|
|
|
Alle Zeitangaben in WEZ +2. Es ist jetzt 06:05 Uhr.
|
 |