Vytvorenie vlastného fóra pomocou PHP a MYSQL

V tomto rozširenejšom návode vám ukážeme ako sa dá vytvoriť pomocou PHP a databázy MYSQL vlastné funkčné fórum z registráciou,kategóriami,uživateľmi a vlastnými príspevkami. Je potreba menšia dávka trpezlivosti ale nieje to nič náročne. samozrejme,musíte vedieť aspoň základy s databázou MYSQL.Súbory ktoré si vytvoríme:

PHP

  • topic.php
  • signup.php
  • signout.php
  • signin.php
  • reply.php
  • index.php
  • header.php
  • footer.php
  • create_topic.php
  • create_cat.php
  • connect.php
  • category.php

CSS

  • style.css

Krok 1: Vytvorenie tabulky v databáze

Je dobrý nápad začať s vytváraním dobrého dátového modelu pri vytváraní aplikácie,u nás teda fórum. Popíšme si o našom fóre niečo čo budeme robiť a čo máme v pláne: Chystáme sa urobiť fórum, ktoré má užívateľov, ktorí vytvárajú témy v rôznych kategóriách. Ostatní používatelia môžu pridávať odpovede. Vytvoríme si 4 hlavné tabuľky kde sa budu zapisovať a uchovávať:

  • Registrované mená uživateľov
  • Ich heslá na prihlásenie do fóra
  • Kategórie
  • Názvy a odpovede vo fóre

1

Vyzerá to celkom elegantne, čo? Každý štvorec je databázová tabuľka. Všetky stĺpce sú uvedené v nej a linky medzi nimi predstavujú vzťahy.  Budem diskutovať o každej tabuľke z vysvetlením SQL, ktoré som vytvoril pomocou režimu vyššie. Pre vaše vlastné skripty môžete vytvoriť podobný systém. My použijeme PHPMYADMIN a ukážem vám ako si v ňom vytvoríte následujuce tabuľky. Tieto tabuľky vytvoríme tak,že prv vytvoríme kód s tabuľkou a potom to importujeme do phpmyadmina,ktorý tieto tabuľky spracuje. Alebo si vytvoríme súbor napr. tabulky.sql a cez phpmyadmina použijeme voľbu import. My použijeme prvú možnosť


Prvá tabuľka bude tabuľka z uživateľmi. Nazveme ju users

 

CREATE TABLE sa používa pre označenie že chceme vytvoriť novú tabuľku. Potom nasleduje názov tabuľky teda users a všetky stĺpce sú uvedené medzi zátvorkami. Ostatné sa nazývaju polia.

user_id

Typ tejto oblasti je INT, čo znamená, že v tomto poli má celé číslo. Pole nemôže byť prázdne (NOT NULL) a zvyšuje rozloženia číslic,teda ak uživateľ admin je na fóre registrovaný ako prvý,priradí sa mu číslo teda ID 1. To znamená že ID 1 už je obsadené a tak,keď sa zaregistruje uživateľ janko,jeho ID bude číslo 2. V spodnej časti tabuľky si môžete prezrieť USER_ID pole  deklarovaný ako primárny kľúč. Primárny kľúč slúži na jednoznačnú identifikáciu každého riadku v tabuľke.

user_name

Toto je textové pole, tzv pole VARCHAR v MySQL. Číslo v zátvorke je maximálna dĺžka. Užívateľ si môže zvoliť užívateľské meno až na 30 znakov. Toto pole nemôže byť NULL. Varchar zabezbečuje,že sa nesmie zaregistrovať 2x rovnaké meno. Na konci UNIQUE INDEX hovorí databáze že chceme pridať pre user_name jedinečný kľúč.

user_pass

Toto pole je rovné Username polu, s výnimkou maximálnej dĺžky. Samozrejme je potreba heslo v databáze šifrovať aby nebolo zneužite. Do tohto pola sa ukladá heslo ktoré použijeme pri registracii.

user_email

Toto pole sa rovná user_pass poľu.

user_date

Toto je oblasť, v ktorej budeme ukladať dáta registrovaných uživateľov. Je to typ DATETIME a poľe nemôže byť NULL. Ukladajú sa tu: Kedy sa uživateľ prihlasil naposledy,kedy sa zaregistroval alebo počet pridaných príspevkov.

user_level

Toto pole obsahuje úroveň užívateľa, napríklad: ‘0 ‘pre bežného užívateľa a ‘1’ pre admina. Viac o tom neskôr.

Teraz si túto tabuľku importujeme do databázy. Vytvoríme si nejaku tabuľku,prihlasíme sa do phpmyadmina. Klikneme na SQL a vložíme príkaz pre vytvorenie poli ktorý sme si vytvorili vyšie.

2

Vložíme príkaz:

3

A klikneme na Vykonaj

Vytvorí sa nám prvá tabuľka z názvom users a vnej polia ktoré sme už definovali

4 5


Tabuľka kategórii

6

 

Tabuľka tém

7

Tabuľka príspevkov

8

Všetke tabuľky sa rovnajú k prvému,čiže si nemusíme písať o každej.


Poďme začať s definíciou vzťahu. Budeme používať niečo, čo sa nazýva cudzí kľúč. Cudzí kľúč je referenčne obmedzenia medzi dvoma tabuľkami. Cudzí kľúč identifikuje stĺpec alebo sadu stĺpcov v jednej (odkazovanie) tabuľky, ktorá odkazuje na stĺpec alebo sadu stĺpcov v inom (referenced) polil. Niektoré podmienky:

Prepojiť príspevky na témy:

Prepojenie príspevkov na uživateľa:

 

Tieto podmienky vložíme rovnako ako boli podmienky na vytvorenie poli,teda SQL,vložiť podmienku>Vykonaj

To je všetko čo sa týka databázy. bolo to trocha náročne,ale stoji to zato :)


Krok 2: Hlava a päta fóra

Každá stránka na našom fóre potrebuje niekoľko základných vecí, ako DOCTYPE a niektoré značky. To je dôvod, prečo budeme zahŕňať header.php súbor v hornej časti každej stránky a footer.php v spodnej časti.  header.php obsahuje doctype, odkaz na štýlopis a niektoré dôležité informácie o fóre, ako názvy a meta značky.

header.php

Na riadkach <a href=”/php/forum/index.php”>Domov</a> si môžte zmeniť url adresu pre vaše fórum,inak vam nebude zobrazovať správne.

Wrapper div budú použité, aby bolo jednoduchšie vytvoriť štý prel celú stránku. Ponuka div obsahuje menu s odkazmi na stránky,lišta kde sa daju vytvoriť kategórie a témata. Div Userbar sa bude používať pre hornu lištu, ktorá obsahuje niektoré informácie, ako je meno a odkaz na odhlásenie zo stránky. Obsah stránky má skutočný obsah stránky,takže fórum nieje statická stránka ale dinamická,čo znamená že obsah sa mení.

footer.php

Každa stránka má aj dolnú lištu,kde sa odkazujú napr. autorské práva,názov stránky a iné. Pomocou div vytvoríme vzhľad v súbore style.css a tak nemusíme vkladať zbytočne kódy do každého súboru,ale stači len do jedneho.

Ďalšou výhodou je možnosť vykonávania rýchle zmeny. Môžete vidieť sami úpravou textu vo footer.php že stači prepísať jeden riadok a prepísať to na váś obsah. Nakoniec pridáme pár štýlov, ktorý nám poskytuje niektoré základné značky.


style.css

Teraz si vytvoríme vzhľad pre naše fórum aby nejak pekne vyzeralo. Toto je defaultny styl a ak neovladate CSS,stači prepisať kódy farieb a zmeníte si tak design stránky. Čím viac budete experimentovať,tak sa viac naučíte.

 


Krok 3: Prepojenie stránky na databázu

V prvom kroku sme si vytvorili hlavne tabuľky kde sa nám budu ukladať dôležite informácie. Lenže fórum sa sám na databázu nepripojí a preto to musíme urobiť my :)

Vytvoríme si súbor connect.php čo znamená pripojiť a vložíme doň skript na pripojenie k databázy. Názov,meno a heslo databázy musíte mať vyrvorené už v prvom kroku.

 Tu nesmieme urobiť chybu,pretože ak zadate nesprávne údaje tak bude nefunkčne cele fórum


 

Krok 4: Vytvorenie a registrácia uživateľov

Začneme tým,že si vytvoríme jednoduchy formulár na registráciu pomocou HTML a zanim vložíme PHP kód,ktorý nam bude údaje z formulára spracovávať a odosielať do databázy.

9

Pri registrácii je potrebné spracovať formulár. Budeme používať premenné $ _SERVER .  Premenná je pole s hodnotami, ktoré sa automaticky nastaví pri každej požiadavke.

signup.php

Registrácia hotová.

Na riadku 1 máme INSERT INTO, ktoré hovorí samo za seba. Názov tabuľky je uvedený na druhom riadku. Slová medzi zátvorkách predstavujú stĺpce, v ktorých chceme vložiť dáta. . Máme tu aj  niečo nové: mysql_real_escape_string. Funkcia krije špeciálne znaky v neošetrených reťazciach, takže je bezpečné umiestniť v danom skripte.. Existuje príliš veľa skriptov, ktoré to nepoužívajú, a veľmi ľahko vám môžu “hackery” uškodiť . NERISKUJTE, použite mysql_real_escape_string (). tak ako my a budete mať pocit bezpečia pre vaše fórum :)

“Nikdy nevkladajte obyčajny formular pre hesla,použivajte šifrovanie ktoré html ponúka,teda to zvyčajné zahviezdičkovanie. ”

Tiež môžete vidieť, že funkcia sha1 () sa používa na šifrovanie heslo používateľa v databáze,takže ani ja a ani nikto iný v databáze neuvidí ake máte heslo. To je tiež veľmi dôležité mať na pamäti.. Musíte to vždy šifrovať. Predstavte si hacker, ktorý nejako zvláda získať prístup k databáze. Ak vidí všetky textových hesiel sa môže prihlásiť do každej (admin) účet, ktorý chce. Ak heslo stĺpce obsahujú SHA1 reťazca má bezva je prvý ktorý je takmer nemožné.

Poznámka: je tiež možné použiť md5 (), som vždy používať SHA1 (), pretože benchmarky ukázali, že je to trošičku rýchlejší, nie moc ale. Môžete nahradiť SHA1 s md5 ak sa vám páči.

Ak proces registrácie bol úspešný, mali by ste vidieť niečo takéto:

10

Spracovanie dát prebieha v troch častiach:

-Overovanie údajov

-Ak dáta nie sú platné, zobrazí formulár znovu.

-Ak sú údaje platné, uloži záznam v databáze

V ďalšom kroku vám ukážem ako nastavíme administrátorske práva pre uživateľa cez databázu a prihlásenie uživateľov.


 Krok 5: Pridanie levelu pre administrátora a prihlásenie uživateľov

Dôležitým aspektom fóra je rozdiel medzi bežnými užívateľmi a adminami / moderátormí. Keďže sa jedná o male fórum a pridávanie funkcií, ako je aj pridávanie nových moderátorov a tak by bola kapitola na dlhšiu dobu, budeme sa sústrediť na prihlasovaci proces a vytvorime aj nejaké administračné funkcie, ako je vytváranie nových kategórií a zatváranie vlákien-tém.  Teraz, keď ste dokončili predchádzajúci krok, môžete sa zaregistrovať a nastavíme si admin práva pomocou ktorých môžeme vytvárať kategórie alebo uzatvárať vlákna.

1. Klikneme na vytvoriť účet a vyplníme formulár

11

2. Klikneme na Registrovať

12

3. Teraz máme východne hodnoty práv,čiže môžete len prispievať do tém,ale je potreba vytvoriť kategórie ktoré môže len administrátor. Preto prejdeme do phpmyadmina,klikneme na tabuľku users a dole uvidíte polia a vnich hodnoty ktoré ste vypísali vo formulári.

13

4. Úplne na pravo je pole user_level a presne ten určuje aké máme práva pre fórum. Keď sa zaregistrujeme automaticky nám priradi level 0. My klikneme na tu ceruzku,čo znamena upraviť a uvidíme toto:

14

Celkom dole kde je user_level je ta 0 a mi ju zmeníme na 1 a klikneme na Vykonaj

16

Tak a teraz už máme účet ako administrátor. Ak ho chcete dať späť ako obyčajný uživateľ,zmente to zas na 0,ale teraz to nerobte,budeme potrebovať pre pokračovanie účet s admin právami.

Prihlásenie

signin.php

Nemyslíte si že som vám nepopísal čo robím,jednoduchšie to bude keď popis pridám do kódov:)

Prihlásenie máme hotové,teraz sa skúste prihlásiť,malo by to vyzerať takto:

17

Polovicu návodu máme za sebou. V ďalšom kroku si ukážeme skript pre pridávanie kategórii do stránky a zobrazenie kategórii na úvodnej stránke.


Krok 6:Pridávanie kategórii do fóra.

Ak chceme vytvoriť kategórie, tak poďme začať s výrobou formulára a skriptu pre vytvorenie kategórii.

create_cat.php

Tento krok vyzerá skoro ako v kroku 4 (Registrácia ), takže nebudem robiť hĺbkové vysvetlenia. Ak ste postupovali podľa krokov mali bz ste byť schopní to pochopiť trochu rýchlejšie.

Ako môžete vidieť, začali sme z  $ _SERVER kontrola, po kontrole, či má užívateľ práva administrátora, ktorý je nevyhnutný pre vytvorenie kategórie sa objaví formulár na vytvorenie kategórii. Ak má práva, sú uložené hodnoty do databázy.

Vyzerá to následovne:

18

Zatiaľ nevytvárame žiadnu kategóriu,prv urobíme skript na prezeranie tém v  kategóriach  fóra a tak si skúsime vytvoriť prvú kategóriu. Takže chvíľka trpezlivosti a prejdite na ďalší krok:


Krok 7: Zobrazenie tém v daných kategóriach

Tento skript slúži na to,že ak klikneme na danú kategóriu,vypíšu sa nám len témy vytvorené v danej kategórii. Napr. Vytvoríme si diskusiu o autách a motorkách. Ak klikneme na kategóriu auta,tak témy ktoré sú v kategórii motorky sa nám nezobrazia.

Vytvoríme si súbor category.php ktorý nám bude na úvodnej stránke a po kliknutí obrazovať celkom hore najnovšie príspevky od uživateľov.

 Krok 8: Zobrazenie kategórii a príspevkov na hlavnej stránke

Možno ste si všimli,že nám stále chýba súbor index.php . Nieje až tak dôležitý,samozrejme musí byť a využijeme ho k tomu,že ak sa niekto dostane k nám na fórum,zobrazí sa mu hlavná stránka kde bude hlavná lišta a v prostiedku fóra zobrazene kategórie, a posledné príspevky od daných uživateľov.

vytvoríme si index.php a doň vložíme následujúce:

Tak a teraz si môžme vytvoriť kategóriu aby ste videli ako to bude vyzerať,nezabúdajte že to ešte není koniec,potrebujeme ešte skript na pridanie príspevkov do fóra a odpovede k témam.

1. Prihlásime sa ako administrátor do fóra a klikneme na Vytvorenie kategórie

19

2. Vyplníme a klikneme na Pridať kategóriu

20

Ak je všetko správne,malo by nám ukázať toto:

21

3. Teraz klikneme na domov,teda na index.php a úvodna stránka vyzerá takto:

22

4. Po kliknutí na kategóriu by sa nám malo ukazať toto,keďže ešte nemáme žiadnu tému

24


Krok 9: Vytváranie príspevkov

V tomto kroku budeme kombinovať techniky, ktoré sme získali v predchádzajúcich krokoch.Budeme používať overovanie, či je používateľ prihlásený,  používať vstupné dopyty či vytvoriť formulár na prípravu a odoslanie odpovede príspevku.

create_topic.php

V komentároch nájdete popis

Spočiatku sú polia definované, až potom hodnoty budú vložené. Videli sme prvý z nich, je to len reťazec, ktorý je vyrobený v bezpečí pomocou mysql_real_escape_string (). Druhá hodnota, NOW (), je SQL funkcia pre aktuálny čas. Tretia hodnota, je hodnota ktorú sme nevideli. To sa odkazuje na (platné) id kategórie. Posledná hodnota sa vzťahuje k (súčasné) USER_ID, ktoré je v tomto prípade hodnota $ _SESSION [user_id ‘]. Táto premenná bola vyhlásená v priebehu prihlásenia procesu.


Krok 10: Zobrazenie príspevkov

Ak vytvoríte príspevok,logický sa musí aj správne zobraziť. Na to slúži súbor topic.php

 


 

Krok 11: Odpovede na už vytvorené témata

Ak niekto vytvorí nejakú tému,tak na fórach je zvykom,že iný uživatelia môžu do danej témy prispievať vlastnými prśipevkami tzv. Odpoveď. Na to bude slúžiť súbor reply.php

 


Krok 12: Odhlásenie prihláseneho uživatela

Tak a sme pri konci našého návodu. Fórum máme hotové,ale budeme ešte potrebovať skript,ktorý nam odhlási prihláseneho uživateľa. Vytvoríme si signout.php do ktorého vložíme následujúci skript:

Skript len použije session ktorý sa uložil pri prihásení a odpojí ho od databázi.

 


Hurá máme vytvorené fórum. Hoc som tento článok písal 5 hodín použil som na pomoc pár zahraničných fór a stránok,čiže preklad,vypracovanie a oprava nejakých kódov dala zabrať,ale som rád že sa podaril a dúfam že sa vám páči. Tvorba fóra nieje jednoduchá vec,ale tento návod je jeden z najjednoduchších ako si vytvoriť celkom pekné fórum a použiť len tie najdôležitejšie php kódy a tabuľky. Vy môžte aj naďalej experimentovať,vložiť do fóra nejaké logá pomocou html,tý šikovnejší môžu vložiť do registrácii CAPTCHA kódy,alebo umožniť odosielať odpovede neregistrovaným,pomocou nejakého zabezpečovacieho kódu a tak. V podobných návodoch budem pokračovať,ukážem vám ako si vytvoriť vlastný e-shop,redakčný systém a podobné veci ktoré dnes letia :)


 

Takže hotové fórum si môžte vyskúšať tu:

 

www.pocitacovyexpert.6f.sk/php/forum/


Tu si môžte stiahnuť hotové súbory

forum-pocitacovyexpert.6f.sk

Written by admin1

Venujem sa tvorbe webových stránok pomocou html,css a teraz aj html5 a css3,taktiež začiatočnickému programovaniu v PHP. Rád skúmam vnútro počítača ale hlavne ma baví tvorba a inštalácia webov pomocou CMS wordpress,joomla,cms pro,fóra a iné veci kde sú zdrojové kódy pekne napísané. Pocitacovyexpert.eu je môj prvý projekt na ktorom pracujem už od polovice roka 2012.

11 Komentáre

  1. Juraj píše:

    Fantastický tutík! Admin, klobúk dole a moc ďakujem :-)

    • admin píše:

      Ďakujeme,bude toho oveľa viac,neskôr pridáme administráciu,profili a iné. Taktiež chystáme PHP tutoriál.

  2. Juraj píše:

    Stránka je naozaj super a teším sa na ďalšie veci.

    K tomu fóru ešte. Vedeli by ste poradiť ako do správy pri vytváraní témy zakomponovať jednoduchý editor textu ?

  3. Filip píše:

    Zdravíčko mám taký problém keď vyplním zložku registrovať tak mi zobrazí že niečo nieje v poriadku a že to mám skúsiť neskôr neviete kde by mohla byť chyba ?

  4. Filip píše:

    Už som to odstránil sám :) … spravil som chybu v databáze :) … ďakujem krásne za tento návod hodne mi pomohol pri tvorbe môjho ročníkového projektu :)

  5. marcel píše:

    Ahojte
    Stranka je super vinkajuco vysvetlene skusam prvy krat programovat html a php sice programujem C-cku, visual basic, PLC,Fanuc,DSM, a ani neviem este co ale v tomto pripade sa mi javy proble viete mi niekto pomoct prihlasim sa ako administrator vsetko ok.
    Len ked dam vytvorit kategoriu nastave problem a to je toto

    chybaTable ‘users.categories’ doesn’t exist

    v com mam problem
    Dakujem za rychlu odpoved

  6. majo píše:

    ja mam web kde mam v mamber.php nastavene.: ze kazdich 10 min ked user klikne na button claim points tak mu do balance prirata 5 bodou. ja by som potreboval spravit lvl 1 2 3 adt to by nebol problem. skopirujem celi php mamber ulozim ako mamber1php a vnom nastavim na 10min 20bodou. problem mam v tom ze ako to mam spravit aby ked uzivatel si zakupi lvl alebo ho ziska to je fuk. sa po prihlaseni automaticki prihlasi uz ako lvl xy teda do mamber1. php kde uz ma tich 10min 20 bodou. taktiez potrebujem aby to bolo aj casovo obmedzene teda lvl xy by bol cca 10 dni a potom automaticky sa stal zas LVL 0 cize navrat do mamber.php kde je 10 min uz len 5 bodou

Zanechať komentár