Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL][PHP]Własny silnik forum <- Od czego zacząć?
Forum PHP.pl > Forum > Przedszkole
savage44
Jako, że jest to mój pierwszy post na tym forum, także wypadałoby się przywitać, a więc Witam wszystkich serdecznie smile.gif

No dobra to teraz przejdźmy do rzeczy.

Chciałbym napisać własny silnik forum. Nie chodzi tu o jakiś vBulletin czy IP.B. Nawet nie chciałbym go udostępniać, po prostu chciałbym sprawdzić swoje możliwości oraz "potrenować" PHP.
To by było zwykłe forum, pisanie tematów, odpowiadanie w nich. Nawet rejestracja i logowanie nie musi być winksmiley.jpg
Wyświetlanie listy postów w działach i ew. jakieś statystyki na dole.

Dlatego też chciałbym, abyście poradzili mi od czego mam zacząć. Jakie tabele w bazie danych, etc.

Jak już pisałem nie chce robić żadnego skomplikowanego forum. Bez żadnych zabezpieczeń, w końcu tego nie będę udostępniał. Zależy mi, aby działało to co wymieniłem wcześniej.
Crozin
Z tego opisu wynika, że:
Kod
Forum: id, nazwa
Wątek: id, id forum, temat
Post: id, id wątku, autor, treść, data dodania
To całe Twoje forum...
thek
Zacznij od przemyślenia elementów składowych forum i ich wzajemnych powiązań między sobą. To baza, którą potem implementujesz, więc od niej zależą funkcjonalności i podatność na aktualizacje, zmiany. Dopiero po tym etapie możesz sięgnąć za ewentualna implementację.
savage44
Cytat(Crozin @ 16.08.2010, 11:33:17 ) *
Z tego opisu wynika, że:
Kod
Forum: id, nazwa
Wątek: id, id forum, temat
Post: id, id wątku, autor, treść, data dodania
To całe Twoje forum...


Zrobiłem tak jak mówisz i takie tabele utworzę:
  1. CREATE TABLE forum(
  2.  
  3. id INT NOT NULL PRIMARY KEY AUTO_INCREMENT,
  4. nazwa VARCHAR (150)
  5. );
  6.  
  7. CREATE TABLE watek(
  8.  
  9. id INT NOT NULL PRIMARY KEY AUTO_INCREMENT,
  10. id_forum //typ kolumny
  11. temat VARCHAR (150)
  12. );
  13.  
  14. CREATE TABLE post(
  15.  
  16. id INT NOT NULL PRIMARY KEY AUTO_INCREMENT,
  17. id_watku //typ kolumny
  18. autor VARCHAR (150),
  19. tresc TEXT,
  20. data_dodania DATETIME
  21. );


Takie tabele mogą być? I co dać w id_forum oraz id_watku?
Crozin
Cytat
I co dać w id_forum oraz id_watku?
Nałożyć klucz obcy odwołujący się do wskazywanej tabeli.
savage44
Cytat
Nałożyć klucz obcy odwołujący się do wskazywanej tabeli.

A można nieco jaśniej? smile.gif
Nie jestem aż tak zaawansowanym programistą PHP i chyba nie rozumiem tego pojęcia rolleyes.gif

Maxik
Najprościej będzie jeśli dasz INT i resztę rozwiążesz po stronie skryptu.
Crozin
Cytat
A można nieco jaśniej?
Mogę, ale tego nie zrobię. W Googleu masz wytłumaczenie czym są klucze obce.
Cytat
Nie jestem aż tak zaawansowanym programistą PHP i chyba nie rozumiem tego pojęcia
Nie przejmuj się... to nie ma kompletnie nic z PHP.
savage44
Poczytałem troszkę na temat tych kluczy obcych i nie wiem czy dobrze zrozumiałem.

Próbuję utworzyć tabele za pomocą takiego kodu

  1. CREATE TABLE forum(
  2.  
  3. id INT NOT NULL PRIMARY KEY AUTO_INCREMENT,
  4. nazwa VARCHAR (150)
  5. );
  6.  
  7. CREATE TABLE watek(
  8. id INT NOT NULL PRIMARY KEY AUTO_INCREMENT,
  9. forum_id INT(11) UNSIGNED NOT NULL,
  10. PRIMARY KEY(forum_id)
  11. team VARCHAR (150)
  12. ) ENGINE = InnoDB;
  13.  
  14. ALTER TABLE watek ADD INDEX ( forum_id )
  15.  
  16. ALTER TABLE watek
  17. ADD CONSTRAINT FOREIGN KEY (forum_id) REFERENCES forum (id) ON DELETE CASCADE ON UPDATE CASCADE,
  18.  
  19. CREATE TABLE post(
  20.  
  21. id INT NOT NULL PRIMARY KEY AUTO_INCREMENT,
  22. watek_id INT(11) UNSIGNED NOT NULL,
  23. PRIMARY KEY(watek_id)
  24. team VARCHAR (150)
  25. ) ENGINE = InnoDB;
  26.  
  27. ALTER TABLE post ADD INDEX ( watek_id )
  28.  
  29. ALTER TABLE post
  30. ADD CONSTRAINT FOREIGN KEY (watek_id) REFERENCES watek (id) ON DELETE CASCADE ON UPDATE CASCADE,


Niestety coś jest źle i nie dodaje. Crozin, mógłbyś go poprawić, ew. powiedzieć mi w czym leży błąd? Nie mam pojęcia jak to rozwiązać sad.gif

Cytat
Mogę, ale tego nie zrobię. W Googleu masz wytłumaczenie czym są klucze obce.

Bardzo dobrze, nie zależy mi na gotowcu. W końcu tworzę ten silnik, aby poćwiczyć/ czegoś się nauczyć smile.gif
set4812
Jak juz wspomniano o relacja to dołoże pytanie mam 2 tabele uzytkownikow i jakas inna w której mam id uzytkownika w uzyciu. Czy da sie pobrac zapytaniem z tej innej dane uzytkownika jak sie ma relacje??
savage44
Aha, bym zapomniał.
Przy próbie dodania wywala mi coś takiego:

Kod
zapytanie SQL:

CREATE TABLE watek(

id INT NOT NULL PRIMARY KEY AUTO_INCREMENT ,
forum_id INT( 11 ) UNSIGNED NOT NULL ,
PRIMARY KEY ( forum_id ) team VARCHAR( 150 )
) ENGINE = InnoDB;



MySQL zwrócił komunikat:  

#1064 - Something is wrong in your syntax obok 'team VARCHAR (150)
    ) ENGINE = InnoDB' w linii 5
Crozin
1) Klucz obcy powinien być tego samego typu (kolumna) co kolumna z innej tabeli, na którą wskazuje. INT, a UNSIGNED INT to dwa różne typy (czyt: oba powinny być UNSIGNED INT)
2) W tabeli wątek kluczem głównym powinno być ID, nie FORUM_ID
savage44
Poprawiłem to co napisałeś, ale nadal chyba coś nie halo.

Teraz kod wygląda tak:
  1. CREATE TABLE forum(
  2.  
  3. id INT NOT NULL PRIMARY KEY AUTO_INCREMENT,
  4. nazwa VARCHAR (150)
  5. );
  6.  
  7. CREATE TABLE watek(
  8. id INT NOT NULL PRIMARY KEY AUTO_INCREMENT,
  9. forum_id INT NOT NULL,
  10. PRIMARY KEY(forum_id)
  11. temat VARCHAR (150)
  12. ) ENGINE = InnoDB;
  13.  
  14. ALTER TABLE watek ADD INDEX ( forum_id )
  15.  
  16. ALTER TABLE watek
  17. ADD CONSTRAINT FOREIGN KEY (id) REFERENCES forum (id) ON DELETE CASCADE ON UPDATE CASCADE,
  18.  
  19. CREATE TABLE post(
  20.  
  21. id INT NOT NULL PRIMARY KEY AUTO_INCREMENT,
  22. watek_id INT NOT NULL,
  23. PRIMARY KEY(watek_id)
  24. temat VARCHAR (150)
  25. ) ENGINE = InnoDB;
  26.  
  27. ALTER TABLE post ADD INDEX ( watek_id )
  28.  
  29. ALTER TABLE post
  30. ADD CONSTRAINT FOREIGN KEY (watek_id) REFERENCES watek (id) ON DELETE CASCADE ON UPDATE CASCADE,
Crozin
1) Zarówno w tabeli wątek jak i post tworzysz klucz podstawowy na kolumnach ID (dobrze) po czym nie wiadomo czemu próbujesz założyć ponownie klucz podstawowy (co już jest niedopuszczalne) na kolumnę forum_id/wątek_id - co w dodatku nie ma sensu.
2) W tabeli wątek próbujesz zrobić klucz obcy z ID, a to FORUM_ID powinno nim być.
savage44
W całym kodzie brakowało 2 przecinków i to było powodem sypania się!
Że też musiałem to przeoczyć sad.gif

No dobra, ale mam kolejny problem, myślę, że prosty do rozwiązania dla kogoś obeznanego.

Tak wygląda kod "poprawiony" z tymi przecinkami:

  1. CREATE TABLE forum(
  2.  
  3. id INT NOT NULL PRIMARY KEY AUTO_INCREMENT,
  4. nazwa VARCHAR (150)
  5. );
  6.  
  7. CREATE TABLE watek(
  8. id INT NOT NULL PRIMARY KEY AUTO_INCREMENT,
  9. forum_id INT NOT NULL,
  10. PRIMARY KEY(forum_id),
  11. temat VARCHAR (150)
  12. ) ENGINE = InnoDB;
  13.  
  14. ALTER TABLE watek
  15. ADD CONSTRAINT FOREIGN KEY (forum_id)
  16. REFERENCES forum (id)
  17. ON DELETE CASCADE
  18. ON UPDATE CASCADE,
  19.  
  20. CREATE TABLE post(
  21.  
  22. id INT NOT NULL PRIMARY KEY AUTO_INCREMENT,
  23. watek_id INT NOT NULL,
  24. PRIMARY KEY(watek_id),
  25. temat VARCHAR (150)
  26. ) ENGINE = InnoDB;
  27.  
  28. ALTER TABLE post
  29. ADD CONSTRAINT FOREIGN KEY (watek_id)
  30. REFERENCES watek (id)
  31. ON DELETE CASCADE
  32. ON UPDATE CASCADE,


I po wysłaniu tego wywala mi taki błąd:

  1. zapytanie SQL:
  2.  
  3. CREATE TABLE watek(
  4.  
  5. id INT NOT NULL PRIMARY KEY AUTO_INCREMENT ,
  6. forum_id INT NOT NULL ,
  7. PRIMARY KEY ( forum_id ) ,
  8. temat VARCHAR( 150 )
  9. ) ENGINE = InnoDB;
  10.  
  11.  
  12.  
  13. MySQL zwrócił komunikat:
  14.  
  15. #1068 - Zdefiniowano wiele kluczy podstawowych

Tego już nie dam rady sam rozwiązać sad.gif
attimo
Masz dwa razy primary key albo ja źle patrze...
savage44
No tak, masz rację smile.gif
Teraz już dobrze tworzy tabelę watek oraz forum. Nadal ma problem z ostatnia czyli post.

Tak wygląda kod odpowiadający za tworzenie tabeli post:

  1. CREATE TABLE post(
  2.  
  3. id INT NOT NULL PRIMARY KEY AUTO_INCREMENT,
  4. watek_id INT NOT NULL,
  5. PRIMARY KEY(watek_id),
  6. temat VARCHAR (150)
  7. ) ENGINE = InnoDB;
  8.  
  9. ALTER TABLE post
  10. ADD CONSTRAINT FOREIGN KEY (watek_id)
  11. REFERENCES watek (id)
  12. ON DELETE CASCADE
  13. ON UPDATE CASCADE,

A taki wywala błąd:
  1. zapytanie SQL:
  2.  
  3. ALTER TABLE watek ADD CONSTRAINT FOREIGN KEY ( forum_id ) REFERENCES forum( id ) ON DELETE CASCADE ON UPDATE CASCADE ,
  4. CREATE TABLE post(
  5.  
  6. id INT NOT NULL PRIMARY KEY AUTO_INCREMENT ,
  7. watek_id INT NOT NULL ,
  8. PRIMARY KEY ( watek_id ) ,
  9. temat VARCHAR( 150 )
  10. ) ENGINE = InnoDB;
  11.  
  12.  
  13.  
  14. MySQL zwrócił komunikat:
  15.  
  16. #1064 - Something is wrong in your syntax obok 'CREATE TABLE post(
  17.  
  18. id INT NOT NULL PRIMARY KEY AUTO_INCREMENT,
  19. ' w linii 7
attimo
Tutaj też masz dwa klucze podstawowe...
Ramzaa
Odpuść sobie pisanie tego "forum" bo i tak nie napiszesz. Ja polecam na początek system komentarzy opary na bazie danych MySQL, a po jego napisaniu, zacznij go urozmaicać o różne dodatki typu podział na kategorie, usuwanie komentarzy, edycja, itd. Będziesz miał świetny wstęp do "tworzenia własnego forum". A dlaczego tak piszę? Po twoich postach, łatwo wywnioskować, że nie jesteś jeszcze wystarczająco dobry, aby stworzyć to co chcesz. Tak jak powiedziałem - nie utrudniaj sobie życia i zacznij od podstaw.

  1. id INT NOT NULL AUTO_INCREMENT ,
  2. watek_id INT NOT NULL ,
  3. PRIMARY KEY ( watek_id ) ,
  4. temat VARCHAR( 150 )
  5. ) ENGINE = InnoDB;
savage44
Z błędami, ale utworzyło smile.gif

Cytat
Odpuść sobie pisanie tego "forum" bo i tak nie napiszesz. Ja polecam na początek system komentarzy opary na bazie danych MySQL, a po jego napisaniu, zacznij go urozmaicać o różne dodatki typu podział na kategorie, usuwanie komentarzy, edycja, itd. Będziesz miał świetny wstęp do "tworzenia własnego forum". A dlaczego tak piszę? Po twoich postach, łatwo wywnioskować, że nie jesteś jeszcze wystarczająco dobry, aby stworzyć to co chcesz. Tak jak powiedziałem - nie utrudniaj sobie życia i zacznij od podstaw.

Słuchaj, może dam sobie radę może nie. To już nie twoja sprawa... W razie jakbym miał jakieś problemy jak teraz to po prostu napiszę na forum, w końcu ono jest po to, aby pomagać takim ludziom takim jak ja...
Tak samo to czy ja jestem wystarczająco dobry, czy nie to już nie tobie oceniać...

Jeżeli nie masz nic do powiedzenia na temat to po prostu wyjdź i się nie odzywaj.
Ramzaa
Cytat(Ramzaa @ 16.08.2010, 16:18:18 ) *
nie utrudniaj sobie życia i zacznij od podstaw.


Jeśli tego zdania nie rozumiesz, to pozostaje mi tylko życzyć powodzenia. A jeżeli nie doceniasz tego co piszą Ci inne osoby, które przeszły przez to samo co Ty teraz przechodzisz, to powodzenia +2.
savage44
Cytat
Jeśli tego zdania nie rozumiesz,

Rozumiem...
Cytat
to pozostaje mi tylko życzyć powodzenia.

Yyy... dziękuje?
Cytat
A jeżeli nie doceniasz tego co piszą Ci inne osoby, które przeszły przez to samo co Ty teraz przechodzisz, to powodzenia +2.

Doceniam. Ale jak wiadomo człowiek uczy się na błędach. Nie wiem ile czasu mi zajmie napisanie tego "pseudo silnika forum", ale zrobię to!
Może z pomocą innych na forum, może z pomocą google, książki, ale uda mi się.

W końcu nie piszę vBulletin. To jest zwykły prosty silniczek, dlatego sądzę że mi się to uda. Przynajmniej będę się starał.
Robię to, żeby "potrenować" te języki, a nie żeby udostępnić to komuś lub zarobić.
Jak widzisz nikt nie podał mi gotowca, a jedynie naprowadzenia i jakoś udało mi się rozwiązać mój problem.
Dzięki temu nauczyłem się "czegoś" nowego z MySQL.

I kończmy już tą dyskusje. Jeżeli nie będziesz chciał mi pomagać to proszę Cię, nie wchodź tu i nie zaczynaj bezsensownej dyskusji, która prowadzi jedynie do spamu.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.