Redakčný systém v php 03. (redakčná časť)

18.02.2002 18:02 | blackhole

V minulom článku som povedal, že si ukážeme ako si vytvoríme skripty na pridávanie odkazov do menu. Najskôr však potrebujeme vytvoriť redakčnú časť nášho systému. Aby sme mohli editovať tú časť, ktorú bude vidieť obyčajný používateľ (webovú). Teda vysvetlíme si autentizáciu a pridávanie autorov.

Redakčná časť bude mať rovnaký základ, ako tá webová. Teda skripty index.php, funkcie.php, funkciedb.php ktoré sme vytvorili v minulej časti budeme potrebovať aj v redakčnej časti. Vytvoríme si adresár redakcia a skopírujeme doň tieto skripty.
Samozrejme nebudú na vlas rovnaké, ako tie vo webovej časti. V redakčnej časti treba dorobiť prihlasovanie atd. O to sa nám bude starať skript redakcia.php, v ktorom budeme mať obyčajný html formulár. napríklad takto: <form name=\"add\" action=\"index.php\" method=post> <br> <B><font>LOGIN</font></B> <br><input name=\"login\" type=\"text\" size=\"32\" maxlength=\"50\"></input> <br> <B><font >HESLO</font></B> <br><input name=\"heslo\" type=\"password\" size=\"32\" maxlength=\"50\"></input> <br><input type=\"submit\" value=\"ODOSLI\"></input></form>Teraz si potrebujeme vytvoriť tabuľku v databáze, kde sa nám budú uchovávať informácie o užívateľoch. Nazveme ju \\\"autori\\\". Mysql príkaz resp. štruktúra tabuľky bude vyzerať takto: create table autori ( id int(255) NOT NULL AUTO_INCREMENT PRIMARY KEY, meno varchar(60), mail varchar(60), info varchar(255), vysvetlenie text, login varchar(60), pass varchar(60), cislo int );popis jednotlivých položiek:

id - identifikačné číslo, pre lepšiu prácu s údajmi
meno - meno autora (aj priezvisko) max. 60 znakov
mail - mail autora max. 60 znakov
info - krátke info o autori. bude zobrazené pod jeho menom v článku. niečo ako: autor je študent MS
vysvetlenie - podrobné informácie o autori atď... čo kto chce si tam môže o sebe napísať
login - prihlasovacie meno autora do redakčnej časti systému
pass - heslo do systému
číslo - tu budú čísla (1,2,3) podľa ktorých budeme vedieť kto ma akú hodnosť (autor, člen ...)

To by bola tabuľka. Teraz si v index.php vytvoríme kontrolnú štruktúru. Teda do index.php pridáme: <? //index.php //tu je zbytok zdrojaku. vid cast. 2. pripojit(); //pripojenie k db //ak je zadané aj meno aj heslo if (($login!=\"\")&&($heslo!=\"\")) { //vytiahneme z databázy login a heslo podľa zadaných údajov $kon = mysql_query(\"select * from autori where ('$login' like login )AND('$heslo' like pass) \"); //spočítame riadky $hack = mysql_num_rows($kon); //ak sa počet riadkov rovná jednej, teda login a heslo boli dobre zadané: if ($hack==1) { $novote = 60*10; //vytvorí premennú v ktorej je čas v sekundách o hodnote 10 minut // nastaví cookies s dobou expirácie 10 minút to pre prípad, keby sa autor neodhlásil setcookie(login,$login,Time()+$novote); setcookie(heslo,$heslo,Time()+$novote); //funkcia, ktorá nám dovolí poslať cookies aj po výpise ob_end_flush(); //potom nasleduje, nám už známu kód z predchadzajúceho článku //nakoniec, treba ešte pridať podmienky } //teda ak boli zlé zadané login a heslo else {echo \"ZLY LOGIN A HESLO.\";} } //táto podmienka je tu v prípade, že vypršia cookies. //teda ak je autor neaktivný viac ako 10 minút else {echo \"bol si odhlaseny\";} ?>Teraz si už môžeme do tabuľky vložiť nejaké údaje a skontrolovať funkčnosť kontroly. Neskôr si spravíme skripty, na editáciu a pridávanie autorov. Teraz však potrebujeme nejaké menu, aby sme mali načo klikať :). Kto pozorne sledoval druhú časť RS, vie, že menu budeme mať vytvorené v skripte menu.php, ktorý bude v adresári skripts. (skripts/menu.php)
vytvoríme si tento súbor (samozrejme v podadresári redakcia) a začneme s jeho editáciou. Najskôr však, aby sa nám neskôr lepšie pracovalo, si v skripte funkcie.php vytvoríme funkciu: vrch_tabulky(), a spodok_tabulky()

funkcie.php (pridávanie) <? //vrch tabuľky function vrch_tabulky($nadpis) { echo\" <TABLE CELLSPACING=\\\"0\\\" CELLPADDING=\\\"1\\\" BORDER=\\\"0\\\" BGCOLOR=\\\"#234567\\\" width=\\\"100%\\\"> <TR><TD>$nadpis</td></tr><tr><td> <TABLE bgcolor=\\\"#ffffff\\\" border=\\\"0\\\" cellpadding=\\\"3\\\"  cellspacing=\\\"0\\\" width=\\\"100%\\\"> <tr><td bgcolor=\\\"#ffffff\\\">\"; } //uzatvori nam tabuľku function spodok_tabulky() { echo \" </TABLE> </TD> </TR> </TABLE><br>\"; } ?>tak a teraz sa už môžeme vrhnúť na vytvorenie menu v redakčnej časti RS. Pripomínam, že stále pracujeme na redakčnej časti. V tej normálnej (webovej) bude menu vyzerať trocha ináč, pretože tam budeme data vyťahovať s databázy.

menu.php <? //vrch tabuľky  MENU $vrch = vrch_tabulky(\"MENU\"); echo \"$vrch\"; ?> //odkaz na skript, ktorý nám pridá autora <b>REDAKCIA</b><BR> <a href=\"index.php?b=addautor\"><LI><b>add autor</b></a><br> <? //tagy ktoré ukončievajú tabuľku spodok_tabulky(); ?>Keď teraz napíšeme túto URL http://nieco.sk/redakcia/redakcia.php prihlásime sa správne, mali by sme mať v ľavo tabuľku a v ňom odkaz na skript addautor.php ktorý si teraz vytvoríme:

addautor.php //najskôr formulár kde budeme písať všetky údaje o autorovi. (meno,mail,login,heslo...) <form name=\"add\" action=\"?b=addautor\" method=post> <br><B><font >MENO</font></B> <br><input name=\"menoa\" type=\"text\" size=\"32\" maxlength=\"50\"></input> <br><B><font >E-mail</font></B> <br><input name=\"maila\" type=\"text\" size=\"32\" maxlength=\"50\"></input> <br><B><font >kratke info</font></B> <br><input name=\"infoa\" type=\"text\" size=\"60\" maxlength=\"60\"></input> <br><b><font size=3>POPIS</font></b> <br><TEXTAREA name=\"popisa\" rows=6 cols=40></TEXTAREA><br> <br> <br> <br> <B><font >login</font></B> <br><input name=\"logina\" type=\"text\" size=\"32\" maxlength=\"50\"></input> <br><B><font >heslo</font></B> <br><input name=\"hesloa\" type=\"text\" size=\"32\" maxlength=\"50\"></input> <br><br> TYP:<br> <select name=\"root\" > <option value=\"1\">sefredaktor</option> <option value=\"2\">autor</option> <option value=\"3\">clen</option> </select><br><br> <input type=\"submit\" value=\"ODOSLI\"></input></form> <? //teraz nasleduje php kod, ktorý nám tieto údaje vloží do databázy //skontrolujeme, ci sú zadané všetky údaje, ktoré považujeme za dôležité if (($menoa != \"\")AND($popisa !=\"\")AND($infoa !=\"\")AND($login !=\"\")AND($heslo !=\"\")) { //skontrolujeme, či náhodou neexistuje už autor s rovnakým loginom   $g = mysql_query(\"select * from autori where login like '$logina'\");   $tr = mysql_num_rows($g); //spočítanie riadkov //ak nie, tak vložíme údaje do databázy if ($tr==\"\") { $hrad = MySQL_query(\"insert into autori values ('','$menoa','$maila','$infoa','$popisa','$logina','$hesloa','$root')\"); } //ak nie, vypíšeme správu, že login už existuje else {echo \"<center>b>-login $logina uz existuje, zvolte si prosim iny </b><center>\";} } //ak neboli zadané všetky údaje, môžeme vypísať varovnú správu, alebo len tak jednoducho ich //  nevložime ;) else {} ?>podľa tohto formulára by pridávanie autorov mohlo mať tento tvar:

Samozrejme, môže sa stať, že vložíme chybné údaje, alebo daný autor už neexistuje a preto ho chceme vymazať. Aj nato si spravime skript (delautor.php)
- v menu.php pridáme odkaz na skript delautor.php (<LI><b&g t;ZMAZAŤ autora<br>)

delautor.php <? //na začiatku je kontrolná štruktúra, ktorá kontroluje či sme zadali aby bol autor vymazaný. (ak //spúšatame tento skript prvý raz, tak samozrejme nie a normálne vypíše zoznam autorov if ($zmaz!=\"\") { mysql_query(\"delete from autori where id = $zmaz\"); //vypíše, že autora sme vymazali echo \"<center><font color=#234567><b>-==[ autor bol odstraneny ]==-</b></font></center>\"; } //vypis zoznamu autorov //výber z databázy $result = MySql_query(\" select id,meno,mail,info,vysvetlenie,cislo from autori \"); //cyklus while sa nám stará o to, že: vypíše všetkých autorov z tabuľky // funkcia mysql_fetch_row() zasa o to, že hodnoty id,meno,mail,info ... budeme mať uložené v //premenných (jednoducho nám ich nahádže do polí) //$zaklad[0] = id //$zaklad[1] = meno atd ... while ($zaklad = mysql_fetch_row($result)){ //vypíše vrch tabuľky, aby sme to mali pekne prehľadné $vrch = vrch_tabulky(\"\"); echo \"$vrch\"; //formulár kde máme jeden checkbox a potvrdzovacie tlačítko echo \"<form name=del action=\\\"?b=delautor\\\" method=post>vymazat?&nbsp; <input type=\\\"checkbox\\\" name=\\\"zmaz\\\" value=$zaklad[0]> &nbsp;\"; echo \"<input type=\\\"submit\\\" value=\\\"DELETE\\\"></input></form>\"; echo \"<br>meno: &nbsp;<font color=#505050><b>$zaklad[1]</b><br> </font><font size=2>info: &nbsp; $zaklad[3]</font><br>\"; spodok_tabulky(); echo \"<br>\"; } ?>Ako to celé funguje ?
- pri autorovi, ktorého chceme vymazať zaškrtneme checkbox a klikneme na zmazať
- formulár zavolá skript delautor.php (teda sám seba) v ktorom je podmienka (vid. začiatok) že ak je zaškrtnutý checkbox, tak vymaže záznam s príslušným id.
- potom vypíše hlášku, že autor bol zmazaný

časť vymazavacieho skriptu môže vyzerať aj takto:

Kdo má na čo právo

Teraz príde jedna s dôležitých častí. Ako som už spomínal, v našom RS sa budú rozlišovať 3 hodnosti.
1. šefredaktor - ten bude môcť všetko
2. autor - všetko ako člen, + pridávanie článkov atď.
3. člen - bude môcť napríklad pridať novinku, link, a podobné drobnosti

Samozrejme, vy sami si môžete určiť, kdo kde má prístup. V našom RS majú daný používatelia tieto čísla:
šefredaktor - 1
autor - 2
člen -3

Nie je teda nič jednoduchšie, ako do každého skriptu pridať kontrolnú štruktúru, ktorá bude rozoznávať, či používateľ má právo vstupu do danej sekcie. Do index.php hneď po kontrolnej štruktúre si môžeme vložiť: <? $autor = MySql_query(\"select id,meno,mail,info,vysvetlenie,cislo from autori where login like '$login'\"); $name=mysql_fetch_row($autor); if ($name[5]==1){$hodnost=\"sefredaktor\";} if ($name[5]==2){$hodnost=\"autor\";} if ($name[5]==3){$hodnost=\"clen\";} Potom hocikde, v celej redakčnej časti bude v premennej $name[5] uloženná hodnosť. Teda v každom skripte na začiatku vložíme: - ak chceme, aby mal prístup iba šefredaktor if($name[5]==1){  ......skript...... } else{echo \"nemáte právo na vstup do tejto sekcie\";} - ak chceme, aby mal prístup šefredaktor a aj autor if (($name[5]==1)||($name[5]==2)) {  ......skript...... } else{echo \"nemáte právo na vstup do tejto sekcie\";} ?> note: Tam, kde má prístup člen, má prístup každý. teda netreba dávať žiadne kontrolné štruktúry.

Ako ste si všimli, skripty addautor.php a delautor.php zatiaľ nemajú žiadne obmedzenia. Určite nie je rozumné, aby obyčajný člen mohol mazať autorov. Preto máte domácu úlohu. Ošetriť tieto skripty. :)

To by bolo na dnes všetko. Bolo toho dosť. Dúfam, že ste to zvládli. V podstate v celej časti seriálu sa budem snažiť písať tak, aby vám k funkčnosti stačilo aj obyčajné copy+paste. A určite nakoniec bude ku stiahnutiu celý RS.mis0 truban