Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

2 Stron V   1 2 >  
Reply to this topicStart new topic
> [MySQL][PHP]Własny silnik forum <- Od czego zacząć?
savage44
post 16.08.2010, 10:18:28
Post #1





Grupa: Zarejestrowani
Postów: 16
Pomógł: 0
Dołączył: 16.08.2010
Skąd: wieś

Ostrzeżenie: (0%)
-----


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.


--------------------
Reklama : Humor : Pomoc
Go to the top of the page
+Quote Post
Crozin
post 16.08.2010, 10:33:17
Post #2





Grupa: Zarejestrowani
Postów: 6 476
Pomógł: 1306
Dołączył: 6.08.2006
Skąd: Kraków

Ostrzeżenie: (0%)
-----


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...
Go to the top of the page
+Quote Post
thek
post 16.08.2010, 10:35:41
Post #3





Grupa: Moderatorzy
Postów: 4 362
Pomógł: 714
Dołączył: 12.02.2009
Skąd: Jak się położę tak leżę :D




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ę.


--------------------
Najpierw był manual... Jeśli tam nie zawarto słów mądrości to zapytaj wszechwiedzącego Google zadając mu własciwe pytania. A jeśli i on milczy to Twój problem nie istnieje :D
Go to the top of the page
+Quote Post
savage44
post 16.08.2010, 10:55:19
Post #4





Grupa: Zarejestrowani
Postów: 16
Pomógł: 0
Dołączył: 16.08.2010
Skąd: wieś

Ostrzeżenie: (0%)
-----


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?


--------------------
Reklama : Humor : Pomoc
Go to the top of the page
+Quote Post
Crozin
post 16.08.2010, 10:57:18
Post #5





Grupa: Zarejestrowani
Postów: 6 476
Pomógł: 1306
Dołączył: 6.08.2006
Skąd: Kraków

Ostrzeżenie: (0%)
-----


Cytat
I co dać w id_forum oraz id_watku?
Nałożyć klucz obcy odwołujący się do wskazywanej tabeli.
Go to the top of the page
+Quote Post
savage44
post 16.08.2010, 11:03:24
Post #6





Grupa: Zarejestrowani
Postów: 16
Pomógł: 0
Dołączył: 16.08.2010
Skąd: wieś

Ostrzeżenie: (0%)
-----


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



--------------------
Reklama : Humor : Pomoc
Go to the top of the page
+Quote Post
Maxik
post 16.08.2010, 11:10:43
Post #7





Grupa: Zarejestrowani
Postów: 726
Pomógł: 129
Dołączył: 10.01.2008
Skąd: Gdańsk

Ostrzeżenie: (0%)
-----


Najprościej będzie jeśli dasz INT i resztę rozwiążesz po stronie skryptu.


--------------------
Pomogłem? Kliknij przycisk Pomógł pod pomocnym Ci postem.
http://maxik.me/
Go to the top of the page
+Quote Post
Crozin
post 16.08.2010, 11:13:20
Post #8





Grupa: Zarejestrowani
Postów: 6 476
Pomógł: 1306
Dołączył: 6.08.2006
Skąd: Kraków

Ostrzeżenie: (0%)
-----


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.
Go to the top of the page
+Quote Post
savage44
post 16.08.2010, 11:44:32
Post #9





Grupa: Zarejestrowani
Postów: 16
Pomógł: 0
Dołączył: 16.08.2010
Skąd: wieś

Ostrzeżenie: (0%)
-----


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


--------------------
Reklama : Humor : Pomoc
Go to the top of the page
+Quote Post
set4812
post 16.08.2010, 12:22:02
Post #10





Grupa: Zarejestrowani
Postów: 150
Pomógł: 3
Dołączył: 13.04.2010

Ostrzeżenie: (0%)
-----


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??
Go to the top of the page
+Quote Post
savage44
post 16.08.2010, 12:29:13
Post #11





Grupa: Zarejestrowani
Postów: 16
Pomógł: 0
Dołączył: 16.08.2010
Skąd: wieś

Ostrzeżenie: (0%)
-----


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


--------------------
Reklama : Humor : Pomoc
Go to the top of the page
+Quote Post
Crozin
post 16.08.2010, 13:32:41
Post #12





Grupa: Zarejestrowani
Postów: 6 476
Pomógł: 1306
Dołączył: 6.08.2006
Skąd: Kraków

Ostrzeżenie: (0%)
-----


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
Go to the top of the page
+Quote Post
savage44
post 16.08.2010, 13:41:37
Post #13





Grupa: Zarejestrowani
Postów: 16
Pomógł: 0
Dołączył: 16.08.2010
Skąd: wieś

Ostrzeżenie: (0%)
-----


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,


--------------------
Reklama : Humor : Pomoc
Go to the top of the page
+Quote Post
Crozin
post 16.08.2010, 14:02:58
Post #14





Grupa: Zarejestrowani
Postów: 6 476
Pomógł: 1306
Dołączył: 6.08.2006
Skąd: Kraków

Ostrzeżenie: (0%)
-----


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ć.
Go to the top of the page
+Quote Post
savage44
post 16.08.2010, 14:43:07
Post #15





Grupa: Zarejestrowani
Postów: 16
Pomógł: 0
Dołączył: 16.08.2010
Skąd: wieś

Ostrzeżenie: (0%)
-----


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

Ten post edytował savage44 16.08.2010, 14:43:55


--------------------
Reklama : Humor : Pomoc
Go to the top of the page
+Quote Post
attimo
post 16.08.2010, 14:49:53
Post #16





Grupa: Zarejestrowani
Postów: 115
Pomógł: 6
Dołączył: 23.01.2010

Ostrzeżenie: (0%)
-----


Masz dwa razy primary key albo ja źle patrze...
Go to the top of the page
+Quote Post
savage44
post 16.08.2010, 14:58:23
Post #17





Grupa: Zarejestrowani
Postów: 16
Pomógł: 0
Dołączył: 16.08.2010
Skąd: wieś

Ostrzeżenie: (0%)
-----


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


--------------------
Reklama : Humor : Pomoc
Go to the top of the page
+Quote Post
attimo
post 16.08.2010, 15:18:01
Post #18





Grupa: Zarejestrowani
Postów: 115
Pomógł: 6
Dołączył: 23.01.2010

Ostrzeżenie: (0%)
-----


Tutaj też masz dwa klucze podstawowe...
Go to the top of the page
+Quote Post
Ramzaa
post 16.08.2010, 15:18:18
Post #19





Grupa: Zarejestrowani
Postów: 207
Pomógł: 17
Dołączył: 4.08.2009

Ostrzeżenie: (0%)
-----


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;


Ten post edytował Ramzaa 16.08.2010, 15:19:14
Go to the top of the page
+Quote Post
savage44
post 16.08.2010, 15:25:12
Post #20





Grupa: Zarejestrowani
Postów: 16
Pomógł: 0
Dołączył: 16.08.2010
Skąd: wieś

Ostrzeżenie: (0%)
-----


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.


--------------------
Reklama : Humor : Pomoc
Go to the top of the page
+Quote Post

2 Stron V   1 2 >
Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 19.07.2025 - 12:56