[ Zoran Rašković @ 01.04.2002. 18:09 ] @
U poslednje vreme dosta ljudi se javljalo kako zele da instaliraju forum za njihov sajt , pa imaju teskoce oko instaliranja foruma tipa IkonBoard, phpBB itd itd....
Zasto ne bi napravili svoj forum ? Veoma je jednostavno i nije tesko... Uz osnovno znanje php-ja i mysql, u roku od pola sata mozete napraviti funkconalan php-based forum u kome moze postovati bilo ko.
Na pocetku, da kazem da je potrebno da znate html i basic stvari oko sintakse php i mysql-ja, posto u sintaksu troje pomenutih necemo zalaziti.

Za pocetak, da razmotrimo sta nam je sve potrebno za nas forum ?

Prvo, trebamo da napravimo tabelu u bazi gde ce se sve poruke nalaziti. Nazovimo nasu tabelu posts. Polja koja bi ta tabela trebalo da sadrzi bi otprilike bila:

Code:

id - integer(5), auto increment, primary key
pid - integer(5)
autor - char(30)
subject - char (30)
text - blob
datum - char(20)


Svakoj poruci ce automatski biti dodeljen id broj, koji ce biti razlicit za svaku poruku. Sada moramo razmotriti kako prepoznati prvu poruku u nekoj temi ? Pa, veoma lako. Za to nam sluzi polje pid. Naime, svakoj pocetnoj poruci u nekom threadu cemo dodeliti pid vrednost 0 kako bi znali koja nam je prva poruka u nekom threadu. Posle toga kada neko odgovori na tu poruku, tj. napise odgovor u tom threadu, svakoj poruci cemo deliti pid koji ce biti jednak sa id-om pocetne poruke.
Primer:
Ako zelim da napisem novu temu, kada unesem sve potrebne podatke, poruci se dodeljuje id=35 na primer, a za pid se dodeljuje 0 naravno.
Sada kada neko dodje i zeli da odgovori na temu, on isto pise novu poruku, samo sto se toj novoj poruci dodeljuje id bilo koji sledeci, a pid ce biti 35 kao sto pogadjate i sami.

Za unos pocetne poruke u bazu koristimo nesto tipa:

Code:

$result = mysql_query ("insert posts, set pid=0, autor='$var_autor', subject='$var_subject', text='$var_text', datum='$var_datum'", $db);


Promenljive $var_autor, $var_subject, $var_text dolaze iz forme i to sami mozete srediti, a promenljivu $var_datum treba srediti nesto kao:

Code:

$var_date=date("m-d-Y");


Kada treba da izlistamo sve threadove, to znaci da treba da izlistamo naslove svih poruka ciji je pid=0 a to cemo uraditi na sledeci nacin:

Ovako izgleda nas list.php fajl

Code:

echo "<table border='1'><tr><td>Autor<td>Subject<td>Datum</td></tr>";
$result=mysql_query("select autor, subject, datum, id from posts where pid=0", $db);
while ( $myrow = mysql_fetch_array($result) ) {

$a=$myrow[0];
$s=$myrow[1];
$d=$myrow[2];

echo "<tr><td>$a<td><a href='view_thread.php?mid=$myrow[3]'$s</a><td>$d</td></tr>";

}

echo "</table>";


Nas view_thread.php bi trebalo da izgleda ovako:

Code:

echo "<table border='1'><tr><td>Autor<td>Text</td></tr>";

$result=mysql_query("select * from posts where pid='$mid'", $db);
while ( $myrow = mysql_fetch_array($result) ) { 

echo "<tr><td>$myrow[2]<p>$myrow[5]<td>$myrow[3]<p>$myrow[4]</td></tr>";
}


echo "</table>";


Dakle, napravili smo dve stvari, listu svih tema (list.php) i listu svih poruka u nekoj temi (view_thread.php).
Sada je potrebno uraditi stranicu za repliku.

Kada se vrsi replika, tj odgovor na thread, onda prvo moramo da znamo koji je pid od poruke na koju vrsimo odgovor.

Na stranici view_thread.php u formularu gde ce se nalaziti Reply button, morate uraditi sledece:

Code:

<form ation='reply.php?id=$mid' method='post'>
(ovde dodajete taster reply)
</form>


Kada user klikne na Reply, onda ga vodi na reply.php?id=35 na primer.

Na stranici reply.php napravite formu za unos na sledeci nacin

Code:

<form method='reply1.php?id=$id' method='post'>
(ovde pravite formu sa svim poljima)
</form>


Na stranici reply1.php konacno se vrsi unos poruke u bazu:

Code:

$var_autor=htmlspecialchars($var_autor);
$var_subject=htmlspecialchars($var_subject);
$var_text=htmlspecialchars($var_text);

$result=mysql_query("insert posts set pid='$id', autor='$var_autor', subject='$var_subject', text='$var_text', datum='$var_datum'", $db);


Takodje na stranici reply1.php zelite da stavite nesto tipa:

Code:

echo "Vasa poruka je uneta. <a href='list.php'>Kliknite ovde</a> za povratak na glavnu stranu";


To bi bilo to otprilike, Obratitie paznju da je ovo najjednostavniji forum sistem koji postoji. Imalo bi tu jos dosta stvari da se poradi kako bi se poboljsao kvalitet. Neke od stvari koje nisu pomenute:

-verifikacija polja, (da li je neko polje prazno?)
-lepse formatiranje displaya
-duzina texta koji je unet
-umesto datum polja koristiti timestamp(14) u mysql-u
-kao sto vidite, ovo je samo jedan forum , a ako zelite da imate vise kategorija foruma kao sto na es postoji, onda morate imati tabelu forms na primer, to nisam objasnjavao ovde, jer bi stvari postale slozenije

I tako dalje i tako dalje. Iako mozda izgleda sve slozeno i nerazumno, u principu je prosto.

Za primer pogledajte na www.zoki.co.yu pod stavkom Forum rezultat ovoga sto sam objasnio.

Nadam se da sam bar nekom pomogao da napravi svoj php forum, i da ne mora da se muchi oko instalacije Ikonboarda ili phpBB foruma i tako dalje.... Pre ili kasnije svako shvati da je php kraljevski jezik :D


[Ovu poruku je menjao Trunks dana 17.09.2002. u 12:39 GMT]
[ madboy @ 02.04.2002. 08:59 ] @
Vauuu ovo je bilo super. Ovakvih stvari bi trebalo da bude vise jer ovako ne samo sto cemo mi naucit da napravimo forum ili sl nego se lakse upoznajemo sa php-om eto..
[ 01011011 @ 02.04.2002. 09:08 ] @
Pa nije Zoki maciji kasalj brate, to ti je Florida...Svaka cast, ali ne samo na forumu sto si napisao nego na uspehu, jer ja iskreno da se nalazim na Floridi vecinu vremena bih provodio ganjajuci Charapanke. :)

Ljepo uradjeno i objsanjeno.
[ FlatLine @ 05.04.2002. 03:54 ] @
Vidiš, ja sam pre par dana napisao jedan mini forum koji je skoro potpuno isti kao i ovaj tvoj, samo se nisam setio da može pid da se ubacuje nego sam napravio dva table-a, jedan sa prvim postovima i jedan sa replys, inače sve ostalo je isto :)

Samo ovo mi nije jasno: "datum - char(20)", "$var_date=date("m-d-Y");" i "umesto datum polja koristiti timestamp(14) u mysql-u"

Ja sam mu lupio: post_date - INT i onda ubaciš time(); u to polje tako da je baratanje datumom i vremenom pojednostavljeno do maksimuma i uvek format možeš da promeniš. $post_time = date ("H:i d/m/y ", $row["post_date"]);

A i ovo iz iskustva: $var_text=nl2br(htmlspecialchars($var_text));

Sve jedno, dobro je da se neko potrudio da objasni ovo. Ja znam da ja ne bih mogao. Jedno je pisati script a nešto sasvim drugo, uputstvo. Svaka čast!
[ Zoran Rašković @ 05.04.2002. 05:25 ] @
Pa ovo za datum, to sam stavio da se datum pravi pomocu date komande i da se u bazi cuva kao char(20). Najjednostavniji nachin.

A posle toga kao predlog na kraju sam rekao da bi datum mogao da se cuva kao timestamp(14) u bazi, s tim sto kad se vadi iz baze dobije se jedan 14-cifreni broj, a to u stvari predstavlja godinu(4 cifre), mesec, dan, sat, min i sekunde. Pa za to bi trebalo onda napraviti funkciju koja razdvaja sve to i prikazuje lepo formatiran datum. Slozeniji nachin :)

I da, na kraju sam samo zaboravio da dodam nl2br (niko nije savrsen :), koji pretvara sve \n kodove u <br> tagove.

Hvala svima na lepim rechima.
[ leka @ 05.04.2002. 10:55 ] @
S tim da svi oni koji nemaju MySQL na serverima mogu samo da blenu u ovaj kod... Trebalo je napisati (ako vec postoji potreba) da sve stoji u nekom plaintext-u ili DB bazi (ona postoji svuda! i ugradjena je u PHP)... Cisto da se sirokim narodnim masama priblizi sve to...
[ t3chX @ 06.04.2002. 21:26 ] @
Da, hajde da vidimo kako bi sve izgledalo bez mySQL-a. Pokazi PHP fstream (fopen(), fwrite(), fclose())... Ako moze naravno.
[ Zoran Rašković @ 06.04.2002. 22:46 ] @
Hmm pa moze naravno ali nisam to do sad radio...Videcu da probam nesto kada budem imao vremena, a mogli bi i ostali da ovo prihvate kao izazov da napisu nesto ovako :)
[ 01011011 @ 06.04.2002. 22:54 ] @
Hocete da se napise sa writable fajlovima .txt i da se tu cuva sve, ima da probam veceras da to napravim :)
[ t3chX @ 06.04.2002. 23:29 ] @
Prikazivanje sadržaja fajla (učitava se u string)

$fajl = readfile("imefajla");
echo $fajl;

međutim problem mi se dešavao prilikom formatiranig ispisa. Zna li neko proceduru za ispis liniju po liniju, isto tako potrebna mi je sintaksa za kreiranje fajla (formatiranog), da se prosledi tekst iz forme.

Neki drugi način sem

$f = fopen("imefajla", "w");
$tekst = "$txt";
fputs($f, $tekst);
fclose($f);

?
[ Zoran Rašković @ 07.04.2002. 00:25 ] @
evo ja upravo to radim ali nemogu nikako da ga nateram da predje u novi red

probao sam

fwrite($fp, "\n");

ali on samo stavlja onaj kvadratic u txt fajl ali ne prelazi u novi red ?
[ t3chX @ 07.04.2002. 00:27 ] @
Da, o tome ti govorim .. jedino shto se moze uraditi je html code da ubacish <br> ali to nije prakticno resenje ... Nista cu radim, valjda cu neshto da procackam.
Anyway, si primetio broj koji stavlja na kraju ? Barem se meni to deshava ako radim sa readfile ?
[ Zoran Rašković @ 07.04.2002. 00:33 ] @
ne znam koji broj na krahu ???

anyway, provalio sam ovo. Potrebno je uraditi \r\n, tako da izgleda nesto ovako:

fwrite($fp, "\r\n");

tada ce preci u novi red :)

ja sam osmislio da se id od poruka cuva u prvom redu fajla, a postovi se posle appenduju u svakoj novoj liniji sa pocetnom reci [new_post] itako dalje....

idem sad u prodavnicu, nadam se da cu napraviti nesto do veceras :)
[ 01011011 @ 07.04.2002. 00:40 ] @
Sto ne pomesas sa html
fwrite ($fp, <BR>\n);
[ t3chX @ 07.04.2002. 00:42 ] @
Da skontah za novi red, ID nije problem, ali ovaj kod mi sad stvara muke, elem na kraju svakog stringa proizvoljno dodaje 329, 12 ili tako nesto. Kako ti ispisujesh fajlove ?
[ t3chX @ 07.04.2002. 00:46 ] @
Citat:
01011011:
Sto ne pomesas sa html
fwrite ($fp, <BR>\n);


Jer morash znati koliki ti je size boxa u kojem ces ispisivati fajlove, shto moras priznati zvuci idiotski.
[ jc denton @ 07.04.2002. 00:50 ] @
Citat:
01011011:
Pa nije Zoki maciji kasalj brate, to ti je Florida...Svaka cast, ali ne samo na forumu sto si napisao nego na uspehu, jer ja iskreno da se nalazim na Floridi vecinu vremena bih provodio ganjajuci Charapanke. :)

Ljepo uradjeno i objsanjeno.


I tata bi sine, ali nisam znao bas da ima dosta charapanki na floridi - pojasni malo, bas me interesuje.

Izvinjavam se sto odstupam od teme, ali ... :)

pozdrav
[ FlatLine @ 07.04.2002. 16:04 ] @
Citat:
t3chX:
Prikazivanje sadržaja fajla (učitava se u string)

$fajl = readfile("imefajla");
echo $fajl;


int readfile (string filename [, int use_include_path])
Reads a file and writes it to standard output. --> Znači, ovaj code gore je pogrešan.. uopšte ne definišeš varijablu $file jer funkcija readfile sama izbaci sadržaj fajla. Probaj bez echo i videćeš:
Code:
readfile ("imefajla");


Ja skoro uvek koristim:
Code:
 $file = implode ("", file ("imefajla"));


[ Zoran Rašković @ 07.04.2002. 22:23 ] @
Ja chitam fajl, otvorim ga sa fopen(); pa onda liniju po liniju retrivujes u petlji.

Anyway pogledajte temu o txtForumu, napravio sam ga!
[ Sale81 @ 02.06.2002. 01:51 ] @
Evo da iskopam ovu temu... jer je topic ODLICAN!

Bilo bi fino da kod zipujete i postavite :)
[ _/\_pustinjak_/\_ @ 25.11.2002. 17:07 ] @
I jel ce neko napisati kod [ili logiku makar] za forum bez Baze podataka
[ CONFIQ @ 25.11.2002. 17:55 ] @
http://www.seek4pal.com/myphps...w_scripts&cid=12&sid=8

copyright by Judge Dred :Đ
[ Zoran Rašković @ 25.11.2002. 23:05 ] @
Koji na zalost ima bagova a ja nikako da sednem da napisem taj admin sistem i jos ponesto za txtForum...
[ ctpaba @ 09.09.2003. 11:35 ] @
pazi ja sam cackao nesto i prepravio Guestbook sa jos malo dodaka nesto je ispalo iako nemam pojma o PHP-u pa me bas interesuje sta strucnjaci misle o ovome

http://cs.ctpaba.com/down.php
[ Hippie @ 06.12.2003. 16:58 ] @
jao ...meni treba jedan mali i jednostavan forum, a nije mi bas jasno ni sta je MySQL, PHP ...chmd 777 i sve ostalo ....:( ...

anybody help?? ....ima li negde na netu skinuti jednostavan forum recimo bez tog MySQL-a?
[ komptrade @ 14.08.2004. 15:34 ] @
Napravio sam sve fajlove...
Ali ne znam sta ovde da stavim :

Code:

<form method='reply1.php?id=$id' method='post'>
(ovde pravite formu sa svim poljima)
</form>


Code:

<form ation='reply.php?id=$mid' method='post'>
(ovde dodajete taster reply)
</form>


Takodje u kom fajlu mogu da ostvarim MYSQl konekciju?
Nigde ne vidim DB Name , pass , username i server...?????

I kako da napravim novu tablu u bazi? Imam phpMyAdmin ?
[ zmil @ 16.08.2004. 08:04 ] @
Zar nije lakse MYSQL nego tekstualni podatci .
Prvo za svaku temu ti treba da stvori po jedan tekstualni fajl i....
[ komptrade @ 16.08.2004. 08:49 ] @
Mozda je lakse ali ja ne znam kako da to uradim....

Zna li neko i moze li da mi pomogne?