| |

Število obiskov: 10.752.842



 

|
|
|
 |
 |
 |
| |
SKRIPTA ZA NOVICE Z UPORABO SKRIPTNEGA JEZIKA PHP V POVEZAVI Z MySQL
BAZO PODATKOV
Tako pa smo zopet skupaj :). Tokrat sem sklenil, da se malo "poigram"
s PHP-jem in sicer s skripto za dodajanje novic in komentarjev.
Skripta je sestavljena iz šestih strani: novice.php, novica.php,
komentarji.php, komentar.php, login.php
in conn.php, dodana pa je tudi datoteka za generiranje tabel
v MySQL bazi baza.sql.
Ta skripta vsebuje prikaz novic po dnevih, dodajanje novic preko web vmesnika,
ter njihovo urejanje, dodajanje komentarjev in urejanje le teh. Strani za urejanje
in dodajanje so zaščitene z vstopom preko uporabniškega imena in gesla, imajo
pa tudi dvojno raven pravic (administrator in normalni uporabnik - logiran),
stran pa je zasnovana tako, da takoj ko poravimo pravice uporabnika v bazi,
takoj lahko le te uporablja, brez ponovne prijave.
Vse skupaj uporablja MySQL bazo, ki je zastonj, povezavo do nje lahko najdete
tukaj,
zelo dober program za upravljanje MySQL baze pa je MySQL-Front,
katerega stran pa na žalost ne obstaja več (možno da tudi povezava na download
ne bo več delovala). Če boste zadevo gnali na Windows platformi, potem potrebujete
še MyODBC,
priporočljivo pa je tudi da uporabljate APACHE web server, ki ga najlaje dobite
če naloite PHP-triad
(PHP-triad vam namesti APACHE, PHP, ter MySQL). Windows uporabniki naj obvezno
uporabljajo APACHE, saj na IIS-u ne delajo kolački (cookies), s čimer sem imel
osebno kar nekaj problemov.
Uporabljajte pa tudi strani kot so http://www.php.net,
http://www.planetsourcecode.com,
http://www.rci.rutgers.edu/~jfulton/php1/functions.html,
http://www.phpdeveloper.org/,
ena izmed meni boljših strani pa je tudi http://www.asp-php.com,
saj tukaj najdete ekvivalente za ASP (super za ASP-jovce) v PHP-ju, res da je
v čudnem jeziku, samo vseeno če imate vsaj nekaj programerske žilice, vam ne
bo težko dešifrirati... :)
Potrebna predznanja za to skripto so to, da poznate samo sintakso jezika, ter
delo z bazami. Vse to se lahko naučite preko člankov o PHP-ju, ki so že na 3delavnici,
ali pa s pomočjo zgoraj omenjenih strani.
Sedaj pa kar začnimo.
Najprej bomo obdelali skript za prijavo v sistem (login), saj se rezultati tega
skripta uporabljajo na vseh straneh, še predno gremo na login pa bomo spoznali
datoteko, kjer je zapisana pot do baze (conn.php)
Stran kjer je zapisana povezava z bazo conn.php (stran je v direktoriju
includes/)
<?php
// povezava z MySQL bazo,
če je baza na lokalnem računalniku, potem lahko uporabimo localhost,
// v nasprotnem primeru pa IP
(npr.: 212.30.90.73)
$povezava = @mysql_connect("localhost", "",
"")
or die("Povezava z bazo ne deluje");
// povezava do izbrane baze (tutorials)
.. spremeni če imaš tabele drugje !!
// za vse članke, ki sem jih napisal
(jih bom napisal) bom uporabljal bazo z imenom tutorials
mysql_select_db("tutorials", $povezava);
?>
|
|
Nato zgradimo stran za prijavo v sistem login.php (stran je na root-u)
<?php
// če je uporabnik pritisnil submit, sproimo
kodo za login
if (isset($HTTP_POST_VARS['submit'])) {
// preberemo vrednosti iz forme
$uporabnik = $HTTP_POST_VARS[uporabnik];
$geslo = $HTTP_POST_VARS[geslo];
// če uporabnik ni izpolnil enega izmed
polj
// potem mu prikažemo obvestilo o napaki
if ($uporabnik == "" OR $geslo == "") {
$napaka = "Vpiši uporabniško ime in geslo !";
} else {
// vstavimo povezavo z bazo
Include("includes/conn.php");
// s pomočjo SQL stavka preberemo, če uporabnik
pod vpisanim geslom obstaja
$SQL = "SELECT * FROM users WHERE uporabnik = '$uporabnik'
AND geslo = '$geslo'";
// sproimo branje
$rs = mysql_query($SQL);
// ali uporabnik obstaja ? če je zapisov
več od 0 potem uporabnik je v bazi
if (mysql_num_rows($rs) > 0) {
$zapis = mysql_fetch_row($rs);
// nastavimo piškotek za prijavljenega uporabnika
$uporabnik = $zapis[1];
setcookie("uporabnik",$uporabnik);
// preusmerimo stran na stran z novicami
Header("Location: novice.php");
} else {
// če uporabnik ne obstaja, potem sproimo
napako
$napaka = "Napačno uporabniško ime in/ali geslo !";
}
// sprostimo bazo
mysql_free_result($rs);
// zapremo povezavo z bazo
mysql_close($baza);
}
}
// prikaz vnosnih polj (forme za login)
?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>PHP novice</title>
<meta http-equiv="Content-Type" content="text/html;
charset=windows-1250">
</head>
<body bgcolor="#FAFAFA">
<form name="logiranje" method="post" action="login.php">
Uporabniško ime<br>
<input type="text" name="uporabnik">
<br>Geslo<br>
<input type="password" name="geslo">
<br>
<input type="submit" name="submit" value="Vstop">
</form>
<!-- izpis napake, če le ta obstaja
-->
<?php if ($napaka != "") { echo $napaka; } ?>
</body>
</html>
|
|
Ko smo prijavljeni v sistem lahko urejamo, dodajamo, brišemo, skrivamo, prikazujemo
novice ali komentarje, vse to pa je pogojeno z našimi pravicami. Če imamo status
navadnega uporabnika, potem lahko samo dodajamo in urejamo svoje komentarje, v
primeru, ko imamo admin pravice pa imamo popolen nadzor nad sistemom.
Sedaj si bomo ogledali stran, ki skrbi za prikaz novic, za kar ni potrebna prijava
v sistem, vendar je dobro da smo prijavljeni, saj s tem lahko tako dodajamo komentarje.
novice.php (stran je na root-u)
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML
4.01 Transitional//EN">
<html>
<head>
<title>PHP novice</title>
<meta http-equiv="Content-Type" content="text/html;
charset=windows-1250">
</head>
<body bgcolor="#FAFAFA">
<?php
// preberemo cookie za prijavo v sistem
(uporabnik in njegove pravice)
// če je uporabnik_pravice 1 potem ima vse, če je 2 pa samo dodajanje
komentarjev
$uporabnik = $HTTP_COOKIE_VARS["uporabnik"];
// vstavljena povezava z bazo
Include("includes/conn.php");
// če je uporabnik logiran, potem preberemo
njegove pravice
if ($uporabnik != "") {
// SQL stavek za branje pravic
$SQL = "SELECT * FROM users WHERE uporabnik LIKE '$uporabnik'";
// sproimo branje
$rs = mysql_query($SQL);
// če v bazi najdemo uporabnika, potem preberemo
njegove pravice
$zapis = mysql_fetch_row($rs);
$uporabnik_pravice = $zapis[4];
}
// spremenljivka za začasni datum (uporabljena
za prikaz novic po dnevih)
$zacasni_datum = "999";
// če smo prijavljeni kot admin, potem vidimo
tudi skrite novice
if ($uporabnik_pravice == 1) {
// SQL stavek za prikaz novic sortiranih
po datumu od zadnje proti prvi (prvih 15)
$SQL = "SELECT * FROM news ORDER BY datum DESC, cas DESC
LIMIT 15";
} else {
// SQL stavek za prikaz novic sortiranih
po datumu od zadnje proti prvi (prvih 15)
$SQL = "SELECT * FROM news WHERE prikaz = 1 ORDER BY datum
DESC, cas DESC LIMIT 15";
}
// sproimo branje
$rs = mysql_query($SQL);
// beremo novice dokler ne dosežemo konec
zapisov
while ($zapis = mysql_fetch_row($rs)):
// preberemo zapise v spremenljivke
$id = $zapis[0];
$naslov = $zapis[1];
$opis = $zapis[2];
$vir = $zapis[3];
$datum = $zapis[4];
$cas = $zapis[5];
$avtor = $zapis[6];
$prikaz = $zapis[7];
// neustrezne znake zamenjamo z html znaki
in namesto vbCrLf vstavimo <br />
$opis = stripslashes($opis);
$opis = STR_REPLACE("&","&",$opis);
$opis = nl2br($opis);
// če smo admin (1) potem vidimo tudi skrite
novice in komentarje
if ($uporabnik_pravice == 1) {
// s pomočjo SQL stavka dobimo število
komentarjev za novico
$SQL_kom = "SELECT id FROM comments WHERE id_novica = ".
$id;
} else {
// s pomočjo SQL stavka dobimo število
komentarjev za novico (samo prikazani)
$SQL_kom = "SELECT id FROM comments WHERE prikaz=1 AND id_novica
= ". $id;
}
// sproimo branje iz baze
$rs_kom = mysql_query($SQL_kom);
// z ukazom za število zapisov dobimo število
komentarjev
$st_kom = mysql_num_rows($rs_kom);
// razbijemo format mysql datuma
$datum = explode("-", $datum);
// z razbitega datuma preberemo leto,
mesec in dan
$datum_leto = $datum[0];
$datum_mesec = $datum[1];
$datum_dan = $datum[2];
// razbijemo format mysql časa
$cas = explode(":", $cas);
// z razbitega časa preberemo uro in minute
$cas_h = $cas[0];
$cas_m = $cas[1];
$cas = $cas_h.":".$cas_m;
// primerjamo vrednost zacasne spremenljivke
za datum z datumom iz baze
// s tem prikažemo tabelo, ki izpiše (grupira) dneve novic
if ($datum_dan != $zacasni_datum): ?>
<table width="100%" border="0" cellpadding="2"
cellspacing="0">
<tr>
<td bgcolor="#990000"><font color="#FFFFFF"><b><?php
echo $datum[2].".".$datum[1].".".$datum[0];
?></b></font></td>
</tr>
</table>
<? endif; ?>
<!-- izpis tabele z novicami -->
<table width="100%" border="0" cellpadding="5"
cellspacing="0">
<tr>
<td>
<table width="100%" border="0" cellspacing="0">
<tr>
<td><b><?php echo $naslov; ?></b></td>
</tr>
<tr>
<td><?php echo $opis; ?></td>
</tr>
<tr>
<td>
<br>avtor: <a href="uporabnik.php?up=<?php echo
$avtor; ?>"><?php echo $avtor; ?></a> |
ura: <?php echo $cas; ?>
<?php if($vir != ""): ?> | vir: <b><?php
echo $vir; ?></b><?php endif; ?> |
<a href="komentarji.php?id=<?php echo $id; ?>">komentarjev(<?php
echo $st_kom; ?>)</a>
<?php
// na podlagi pravic za uporabnika
prikažemo ustrezne povezave za urejanje novice
if($uporabnik_pravice == "1") {
// admin -
uredi novico
echo '| admin: <a href="novica.php?id='.$id.'&act=edit">Uredi</a>';
// preverimo ali je novica prikazana
ali ne, in nato prikažemo ustrezne povezave
// za skrij ali prikaži novico
if ($prikaz == 1) {
// admin -
skrij novico
echo ' <a href="novica.php?id='.$id.'&act=hide">Skrij</a>';
} else {
// admin -
prikaži novico
echo ' <a href="novica.php?id='.$id.'&act=show">Prikaži</a>';
}
// admin -
briši novico, dodaj novico
echo ' <a href="novica.php?id='.$id.'&act=del">Briši</a>';
echo ' <a href="novica.php?act=add">Nova</a>';
}
?>
<hr width="100%" size="5" noshade color="#eeeeee">
</td>
</tr>
</table>
</td>
</tr>
</table>
<?php
// začasni spremenljivki za datum dodelimo
novo vrednost (vrednost prebranega zapisa)
$zacasni_datum = $datum_dan;
endwhile;
// če novic ni potem prikaemo sporočilo
za obiskovalce strani
if (mysql_num_rows($rs) == 0) {
echo "Trenutno ni novic";
}
// sprostimo bazo
mysql_free_result($rs);
// prikaz povezave za dodajanje novic
if($uporabnik_pravice == "1") {
echo '<br><a href="novica.php?act=add">Nova</a>';
}
// zapremo povezavo z bazo
mysql_close($baza);
?>
</body>
</html>
|
|
Ko smo zgradili stran za novice, potrebujemo tudi stran, preko katere bomo lahko
gledali in dodajali komentarje.
Za to sem zgradil stran komentarji.php
(stran je na root-u)
<!DOCTYPE
HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>PHP novice</title>
<meta http-equiv="Content-Type" content="text/html;
charset=windows-1250">
</head>
<body bgcolor="#FAFAFA">
<?php
// preberemo cookie za prijavo v sistem
(uporabnik in njegove pravice)
// če je uporabnik_pravice 1 potem ima vse, če je 2 pa samo dodajanje
$uporabnik = $HTTP_COOKIE_VARS["uporabnik"];
// vstavljena povezava z bazo
Include("includes/conn.php");
// če je uporabnik logiran, potem preberemo
njegove pravice
if ($uporabnik != "") {
// SQL stavek za branje pravic
$SQL = "SELECT * FROM users WHERE uporabnik LIKE '$uporabnik'";
// sproimo branje
$rs = mysql_query($SQL);
// če v bazi najdemo uporabnika, potem preberemo njegove pravice
$zapis = mysql_fetch_row($rs);
$uporabnik_pravice = $zapis[4];
}
// dobimo id novice za prikaz komentarjev
$id = $HTTP_GET_VARS["id"];
// če smo admin (1) potem vidimo tudi
skrite novice in komentarje
if ($uporabnik_pravice == 1) {
// SQL stavek za prikaz izbrane novice
$SQL = "SELECT * FROM news WHERE id = ". $id;
} else {
// SQL stavek za prikaz izbrane novice
$SQL = "SELECT * FROM news WHERE prikaz=1 AND id = ".
$id;
}
// sproimo branje iz baze
$rs = mysql_query($SQL);
// preberemo novico
$zapis = mysql_fetch_row($rs);
// preberemo zapise v spremenljivke
$id_n = $zapis[0];
$naslov = $zapis[1];
$opis = $zapis[2];
$vir = $zapis[3];
$datum = $zapis[4];
$cas = $zapis[5];
$avtor = $zapis[6];
$prikaz = $zapis[7];
// neustrezne znake zamenjamo z html znaki
in namesto vbCrLf vstavimo <br />
$opis = stripslashes($opis);
$opis = STR_REPLACE("&","&",$opis);
$opis = nl2br($opis);
// če smo admin (1) potem vidimo tudi
skrite novice in komentarje
if ($uporabnik_pravice == 1) {
// s pomočjo SQL stavka dobimo število
komentarjev za novico
$SQL_kom = "SELECT id FROM comments WHERE id_novica = ".
$id;
} else {
// s pomočjo SQL stavka dobimo število
komentarjev za novico (samo prikazani)
$SQL_kom = "SELECT id FROM comments WHERE prikaz=1 AND id_novica
= ". $id;
}
// sproimo branje iz baze
$rs_kom = mysql_query($SQL_kom);
// z ukazom za število zapisov dobimo število
komentarjev
$st_kom = mysql_num_rows($rs_kom);
// razbijemo format mysql datuma
$datum = explode("-", $datum);
// z razbitega datuma preberemo leto,
mesec in dan
$datum_leto = $datum[0];
$datum_mesec = $datum[1];
$datum_dan = $datum[2];
$datum = $datum_dan.".".$datum_mesec.".".$datum_leto;
// razbijemo format mysql časa
$cas = explode(":", $cas);
// z razbitega časa preberemo uro in minute
$cas_h = $cas[0];
$cas_m = $cas[1];
$cas = $cas_h.":".$cas_m;
// izpis podatkov v tabelo
?>
<table width="100%" border="0" cellpadding="5"
cellspacing="0">
<tr>
<td>
<table width="100%" border="0" cellpadding="2"
cellspacing="0">
<tr>
<td bgcolor="#990000"><font color="#FFFFFF"><b>Novica</b></font></td>
</tr>
</table>
<table width="100%" border="0" cellspacing="0">
<tr>
<td><b><?php echo $naslov; ?></b></td>
</tr>
<tr>
<td><?php echo $opis; ?></td>
</tr>
<tr>
<td>
<br>avtor: <a href="uporabnik.php?up=<?php echo
$avtor; ?>"><?php echo $avtor; ?></a> |
datum: <?php echo $datum; ?> | ura: <?php echo $cas;
?>
<?php if($vir != ""): ?> | vir: <b><?php
echo $vir; ?></b><?php endif; ?> |
<a href="komentarji.php?id=<?php echo $id; ?>">komentarjev(<?php
echo $st_kom; ?>)</a>
</td>
</tr>
</table>
<br>
<table width="100%" border="0" cellpadding="2"
cellspacing="0">
<tr>
<td bgcolor="#990000">
<font color="#FFFFFF"><b>Komentarji</b>
| </font>
<?php
// preverimo če je uporabnik logiran in
če je mu dovolimo dodajanje komentarja
if ($uporabnik != "") {
echo ' <a href="komentar.php?id_n='.$id_n.'&act=add"><font
color="white"><b>Dodaj komentar</b></font></a>';
}
?>
</td>
</tr>
</table>
<?php
// če v bazi ni komentarjev, potem izpišemo
ustrezno obvestilo
if ($st_kom == 0) {
?>
<table width="100%" border="0" cellspacing="0"
cellpadding="5">
<tr>
<td align="center">Ni komentarjev !</td>
</tr>
</table>
<?php
// v nasprotnem primeru komentarje preberemo
iz baze
} else {
// če smo admin (1) potem vidimo tudi skrite
novice in komentarje
if ($uporabnik_pravice == 1) {
// s pomočjo SQL stavka preberemo komentarje
za izbrano novico
$SQL = "SELECT * FROM comments WHERE id_novica = ".
$id_n ." ORDER BY datum ASC, cas ASC";
} else {
// s pomočjo SQL stavka preberemo komentarje
za izbrano novico
$SQL = "SELECT * FROM comments WHERE prikaz=1 AND id_novica
= ". $id_n ." ORDER BY datum ASC, cas ASC";
}
// sproimo branje
$rs = mysql_query($SQL);
// spremenljivka za izmenjujoče barve celic
$alternate = 0;
// izpisujemo komentarje dokler ne pridemo
konca zapisov
while ($zapis = mysql_fetch_row($rs)):
// preberemo zapise v spremenljivke
$id = $zapis[0];
$id_novica = $zapis[1];
$avtor = $zapis[2];
$komentar = $zapis[3];
$datum = $zapis[4];
$cas = $zapis[5];
$prikaz = $zapis[6];
// neustrezne znake zamenjamo z html znaki
in namesto vbCrLf vstavimo <br />
$komentar = stripslashes($komentar);
$komentar = STR_REPLACE("&","&",$komentar);
$komentar = nl2br($komentar);
// razbijemo format mysql datuma
$datum = explode("-", $datum);
// z razbitega datuma preberemo leto,
mesec in dan
$datum_leto = $datum[0];
$datum_mesec = $datum[1];
$datum_dan = $datum[2];
// razbijemo format mysql časa
$cas = explode(":", $cas);
// z razbitega časa preberemo uro in minute
$cas_h = $cas[0];
$cas_m = $cas[1];
$cas = $cas_h.":".$cas_m;
// izmenjujoče barve celic
if ($alternate % 2 == 0) {
$barva = "#FFFFFF";
}else{
$barva = "#EEEEEE";
}
?>
<table width="100%" border="0" cellspacing="0"
cellpadding="5">
<tr>
<td bgcolor="<?php echo $barva ?>">
<?php echo $komentar ?>
<p>
avtor: <a href="uporabnik.php?up=<?php echo $avtor;
?>"><?php echo $avtor ?></a> |
<?php echo $datum[2].".".$datum[1].".".$datum[0]."
/ ".$cas ?>
<?php
// preverimo če je uporabnik logiran in
če ima admin pravice
if($uporabnik_pravice == "1") {
// prikaemo ustrezne povezave (uredi, briši,
dodaj, prikai, skrij)
echo '| admin: <a href="komentar.php?id='.$id.'&id_n='.$id_n.'&act=edit">Uredi</a>';
// preverimo če je komentar prikazan in
na podlagi tega prikaemo ustrezno povezavo
if ($prikaz == 1) {
echo ' <a href="komentar.php?id='.$id.'&id_n='.$id_n.'&act=hide">Skrij</a>';
} else {
echo ' <a href="komentar.php?id='.$id.'&id_n='.$id_n.'&act=show">Prikaži</a>';
}
echo ' <a href="komentar.php?id='.$id.'&id_n='.$id_n.'&act=del">Briši</a>';
echo ' <a href="komentar.php?id_n='.$id_n.'&act=add">Nov</a>';
// če uporabnik nima admin pravic ima pravico
urejanja samo svojega komentarja
} elseif($uporabnik_pravice == "2" AND $uporabnik ==
$avtor) {
echo '| <a href="komentar.php?id='.$id.'&id_n='.$id_n.'&act=edit">Uredi</a>';
}
?>
</p>
</td>
</tr>
</table>
<?php
// povečamo spremenljivko za izmenjujoče
barve celic za 1
$alternate++;
endwhile;
}
// zapremo povezavo
z bazo
mysql_close($baza);
?>
<p><a href="novice.php">nazaj</a></p>
</td>
</tr>
</table>
</body>
</html>
|
|
Sedaj ko imamo strani preko, katerih gledamo novice in komentarje, potrebujemo
še strani za dodajanje le teh.
Za ta namen sem zgradil stran novica.php (stran
je na root-u), preko katere se ureja izbrano novico.
<?php
// preberemo cookie za prijavo v sistem
(uporabnik in njegove pravice)
// če je uporabnik_pravice
1 potem ima vse, če je 2 pa samo dodajanje
$uporabnik = $HTTP_COOKIE_VARS["uporabnik"];
// vstavljena povezava z bazo
Include("includes/conn.php");
// če je uporabnik logiran, potem
preberemo njegove pravice
if ($uporabnik != "") {
// SQL stavek za branje pravic
$SQL = "SELECT * FROM users WHERE uporabnik LIKE '$uporabnik'";
// sproimo branje
$rs = mysql_query($SQL);
// če v bazi najdemo uporabnika,
potem preberemo njegove pravice
$zapis = mysql_fetch_row($rs);
$uporabnik_pravice = $zapis[4];
} else {
// če uporabnik ni logiran, potem ga preusmerimo
nazaj na začetno stran
Header("Location: novice.php");
}
// sprostimo bazo
mysql_free_result($rs);
// preberemo katera akcija je bila izbrana
(nov,briši,uredi,...)
$act = $HTTP_GET_VARS["act"];
// preberemo id novice
$id = $HTTP_GET_VARS["id"];
// za izbrane akcije proimo ustrezno
if ($uporabnik_pravice != 1) {
// če uporabnik ni logiran, ali nima pravic,
potem ga preusmerimo nazaj na začetno stran
Header("Location: novice.php");
// izvršitev ustreznih akcij
?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>PHP novice</title>
<meta http-equiv="Content-Type" content="text/html;
charset=windows-1250">
</head>
<body bgcolor="#FAFAFA">
<?php
// akcija urejanje
} elseif ($act == "edit" AND $uporabnik_pravice == 1)
{
// preberemo izbrano novico in jo prikaemo
v vnosnih poljih
$SQL = "SELECT * FROM news WHERE id = ". $id;
// sproimo branje iz baze
$rs = mysql_query($SQL);
// preberemo novico
$zapis = mysql_fetch_row($rs);
// preberemo zapise v spremenljivke
$id_n = $zapis[0];
$naslov = $zapis[1];
$opis = $zapis[2];
$vir = $zapis[3];
$datum = $zapis[4];
$cas = $zapis[5];
$avtor = $zapis[6];
$prikaz = $zapis[7];
// prikaemo podatke v formi
?>
<form name="novica" method="post" action="novica.php?act=save">
Naslov novice<br>
<input name="naslov" type="text" size="50"
value="<?php echo $naslov ?>">
<br>Opis novice<br>
<textarea name="opis" cols="50" rows="10"><?php
echo $opis ?></textarea>
<br>Vir novice<br>
<input name="vir" type="text" size="50"
value="<?php echo $vir ?>">
<input name="id_n" type="hidden" value="<?php
echo $id_n ?>">
<br>
<input type="checkbox" name="prikaz" value="1"
<?php if ($prikaz == "1") { echo "checked";
} ?>> Prikaz novice
<br>
<input name="submit" type="submit" value="Shrani">
</form>
<?php
// sprostimo bazo
mysql_free_result($rs);
// akcija prikai vpis
} elseif ($act == "show" AND $uporabnik_pravice == 1)
{
// s pomočjo SQL stavka prikaemo
vpis
$SQL = "UPDATE news SET prikaz = 1 WHERE id = $id" ;
$rs = mysql_query($SQL);
// sprostimo bazo
mysql_free_result($rs);
// preusmerimo stran nazaj na začetek
Header("Location: novice.php");
// akcija skrij vpis
} elseif ($act == "hide" AND $uporabnik_pravice == 1)
{
// s pomočjo SQL stavka skrijemo vpis
$SQL = "UPDATE news SET prikaz = 0 WHERE id = $id" ;
$rs = mysql_query($SQL);
// sprostimo bazo
mysql_free_result($rs);
// preusmerimo stran nazaj na začetek
Header("Location: novice.php");
// akcija briši vpis
} elseif ($act == "del" AND $uporabnik_pravice == 1)
{
// s pomočjo SQL stavka pobrišemo
novico
$SQL = "DELETE FROM news WHERE id = $id" ;
$rs = mysql_query($SQL);
// s pomočjo SQL stavka pobrišemo
komentarje za novico
$SQL = "DELETE FROM comments WHERE id_novica = $id"
;
$rs = mysql_query($SQL);
// sprostimo bazo
mysql_free_result($rs);
// preusmerimo stran nazaj na začetek
Header("Location: novice.php");
// akcija nov vpis
} elseif ($act == "add" AND $uporabnik_pravice == 1)
{
// prikaemo formo za nov vpis
?>
<form name="novica" method="post" action="novica.php?act=save">
Naslov novice<br>
<input name="naslov" type="text" size="50">
<br>Opis novice<br>
<textarea name="opis" cols="50" rows="10"></textarea>
<br>Vir novice<br>
<input name="vir" type="text" size="50">
<input name="id_n" type="hidden">
<br>
<input type="checkbox" name="prikaz" value="1">
Prikaz novice
<br>
<input name="submit" type="submit" value="Shrani">
</form>
<?php
// shranjevanje vpisa (novice)
} elseif ($act == "save" AND $uporabnik_pravice
== 1) {
// dobimo podatke iz forme
$id_n = $HTTP_POST_VARS["id_n"];
$naslov = $HTTP_POST_VARS["naslov"];
$opis = $HTTP_POST_VARS["opis"];
$vir = $HTTP_POST_VARS["vir"];
$datum = date("Y-n-d");
// dobimo sistemski čas
$cas = getdate();
$h = $cas[hours];
$m = $cas[minutes];
$s = $cas[seconds];
// zgradimo čas, ki ga sprejme MySQL baza
$cas = $h.":".$m.":".$s;
$avtor = $uporabnik;
$prikaz = $HTTP_POST_VARS["prikaz"];
// preverimo če je v checkboxu kljukica
if ($prikaz != 1) {
$prikaz = 0;
} else {
$prikaz = 1;
}
// če urejamo novico (id_n ni prazen)
sproimo SQL stavek za UPDATE, drugače pa za nov vpis
// id_n je id novice
if ($id_n != "") {
$SQL = "UPDATE news SET naslov='$naslov', opis='$opis', vir='$vir',
avtor='$avtor', prikaz=$prikaz WHERE id = $id_n";
} else {
$SQL = "INSERT INTO news (naslov,opis,vir,avtor,datum,cas,prikaz)
VALUES ('$naslov','$opis','$vir','$avtor','$datum','$cas',$prikaz)";
}
$rs = mysql_query($SQL);
// sprostimo bazo
mysql_free_result($rs);
// preusmerimo stran nazaj na začetek
Header("Location: novice.php");
}
// zapremo povezavo z bazo
mysql_close($baza);
?>
</body>
</html>
|
|
Potrebujemo še stran preko katere bomo lahko dodajali i urejali komentarje.
Za to poskrbi stran komentar.php (datoteka na root-u)
<?php
// preberemo cookie za prijavo v sistem
(uporabnik in njegove pravice)
// če je uporabnik_pravice 1 potem ima vse, če je 2 pa samo dodajanje
$uporabnik = $HTTP_COOKIE_VARS["uporabnik"];
// vstavljena povezava z bazo
Include("includes/conn.php");
// če je uporabnik logiran, potem preberemo
njegove pravice
if ($uporabnik != "") {
// SQL stavek za branje pravic
$SQL = "SELECT * FROM users WHERE uporabnik LIKE '$uporabnik'";
// sprožimo branje
$rs = mysql_query($SQL);
// če v bazi najdemo uporabnika, potem preberemo
njegove pravice
$zapis = mysql_fetch_row($rs);
$uporabnik_pravice = $zapis[4];
} else {
// če uporabnik ni logiran, potem ga preusmerimo
nazaj na začetno stran
Header("Location: novice.php");
}
// sprostimo bazo
mysql_free_result($rs);
// preberemo katera akcija je bila izbrana
(nov,briši,uredi,...)
$act = $HTTP_GET_VARS["act"];
// preberemo id novice in komentarja
$id_n = $HTTP_GET_VARS["id_n"];
$id = $HTTP_GET_VARS["id"];
// za izbrane akcije prožimo ustrezno
if ($uporabnik_pravice != 1 AND $uporabnik_pravice != 2) {
// če uporabnik ni logiran, ali nima pravic,
potem ga preusmerimo nazaj na začetno stran
Header("Location: novice.php");
// izvršitev ustreznih akcij
?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>PHP novice</title>
<meta http-equiv="Content-Type" content="text/html;
charset=windows-1250">
</head>
<body bgcolor="#FAFAFA">
<?php
// akcija urejanje
} elseif ($act == "edit") {
// preberemo izbran komentar in ga prikažemo
v vnosnih poljih
$SQL = "SELECT * FROM comments WHERE id = ". $id;
// sprožimo branje iz baze
$rs = mysql_query($SQL);
// preberemo novico
$zapis = mysql_fetch_row($rs);
// preberemo zapise v spremenljivke
$id = $zapis[0];
$id_n = $zapis[1];
$avtor = $zapis[2];
$komentar = $zapis[3];
$datum = $zapis[4];
$cas = $zapis[5];
$prikaz = $zapis[6];
// če je prijavljen uporabnik avtor vpisa
ali administrator, potem mu dovolimo urejanje
if ($uporabnik == $avtor OR $uporabnik_pravice == 1) {
// prikažemo podatke v formi
?>
<form name="komentar" method="post" action="komentar.php?act=save">
<br>Komentar<br>
<textarea name="komentar" cols="50" rows="10"><?php
echo $komentar ?></textarea>
<input name="id" type="hidden" value="<?php
echo $id ?>">
<input name="id_n" type="hidden" value="<?php
echo $id_n ?>">
<br>
<?php if ($uporabnik_pravice != 1) { //
če je uporabnik administrator potem mu prikažemo checkbox
?>
<input name="prikaz" type="hidden" value="1">
<?php } else { ?>
<input type="checkbox" name="prikaz" value="1"
<?php if ($prikaz == "1") { echo "checked";
} ?>> Prikaz komentarja
<?php } ?>
<br>
<input name="submit" type="submit" value="Shrani">
</form>
<?php
} else {
// preusmerimo stran nazaj na začetek
Header("Location: komentarji.php?id=$id_n");
}
// sprostimo bazo
mysql_free_result($rs);
// akcija prikaži vpis
} elseif ($act == "show" AND $uporabnik_pravice == 1)
{
// s pomočjo SQL stavka prikažemo vpis
$SQL = "UPDATE comments SET prikaz = 1 WHERE id = $id"
;
$rs = mysql_query($SQL);
// sprostimo bazo
mysql_free_result($rs);
// preusmerimo stran nazaj na začetek
Header("Location: komentarji.php?id=$id_n");
// akcija skrij vpis
} elseif ($act == "hide" AND $uporabnik_pravice == 1)
{
// s pomočjo SQL stavka skrijemo vpis
$SQL = "UPDATE comments SET prikaz = 0 WHERE id = $id"
;
$rs = mysql_query($SQL);
// sprostimo bazo
mysql_free_result($rs);
// preusmerimo stran nazaj na začetek
Header("Location: komentarji.php?id=$id_n");
// akcija briši vpis
} elseif ($act == "del" AND $uporabnik_pravice == 1)
{
// s pomočjo SQL stavka pobrišemo vpis
$SQL = "DELETE FROM comments WHERE id = $id" ;
$rs = mysql_query($SQL);
// sprostimo bazo
mysql_free_result($rs);
// preusmerimo stran nazaj na začetek
Header("Location: komentarji.php?id=$id_n");
// akcija nov vpis
} elseif ($act == "add") {
?>
<form name="komentar" method="post" action="komentar.php?act=save">
<br>Komentar<br>
<textarea name="komentar" cols="50" rows="10"><?php
echo $komentar ?></textarea>
<input name="id_n" type="hidden" value="<?php
echo $id_n ?>">
<br>
<?php if ($uporabnik_pravice != 1) { //
če je uporabnik administrator potem mu prikažemo checkbox
?>
<input name="prikaz" type="hidden" value="1">
<?php } else { ?>
<input type="checkbox" name="prikaz" value="1">
Prikaz komentarja
<?php } ?>
<br>
<input name="submit" type="submit" value="Shrani">
</form>
<?php
} elseif ($act == "save") {
// dobimo podatke iz forme
$id = $HTTP_POST_VARS["id"];
$id_n = $HTTP_POST_VARS["id_n"];
$komentar = $HTTP_POST_VARS["komentar"];
$datum = date("Y-n-d");
// dobimo sistemski čas
$cas = getdate();
$h = $cas[hours];
$m = $cas[minutes];
$s = $cas[seconds];
// zgradimo čas, ki ga sprejme MySQL baza
$cas = $h.":".$m.":".$s;
$avtor = $uporabnik;
$prikaz = $HTTP_POST_VARS["prikaz"];
// preverimo če je v checkboxu kljukica
if ($prikaz != 1) {
$prikaz = 0;
} else {
$prikaz = 1;
}
// če urejamo novico (id_n ni prazen)
sprožimo SQL stavek za UPDATE, drugače pa za nov vpis
if ($id != "") {
$SQL = "UPDATE comments SET komentar='$komentar', prikaz=$prikaz
WHERE id = $id";
} else {
$SQL = "INSERT INTO comments (id_novica,komentar,avtor,datum,cas,prikaz)
VALUES ($id_n,'$komentar','$avtor','$datum','$cas',$prikaz)";
}
$rs = mysql_query($SQL);
// sprostimo bazo
mysql_free_result($rs);
// preusmerimo stran nazaj na začetek
Header("Location: komentarji.php?id=$id_n");
}
// zapremo povezavo z bazo
mysql_close($baza);
?>
</body>
</html>
|
|
To je vsa koda, ki je potrebna za solidno delujoč sistem novic. Manjka edino
kakšen javascript, ki bi preverjal vnosna polja, ter script, s pomočjo katerega
bi oblikovali tekst, ki ga vnašamo, ker pa to ni del PHP-ja, bo članek za urejanje
teksta in preverjanje polj s pomočjo javascripta objavljen kot svoj članek.
Kodo za to skripto si lahko snamete tukaj,
če pa bodo kakšna vprašanja, pa me lahko kontaktirate preko u2u, ali pa pošljete
email.
|
|
|
 |
|
 |
|
|