Dnes provedeme řadu změn v naší diskusi v rámci ukázky jejího možného dalšího vývoje při systému registrovaných uživatelů.
Jak to dnes bude
Toto povídání bude tentokrát ve znamení změn ve skriptech. Pro lepší orientaci si je uvádíme celé a dokumentované, aby se šlo ve změnách a samotných skriptech lépe vyznat. Cílem dnešních změn je naznačit možnosti práv uživatelů – daný uživatel s proměnnou Status=2 totiž může měnit svoji přezdívku při přispívání do diskuse, ostatní uživatelé ne. Také bude diskuse bez možnosti přispívání bez registrace. Skripty jsou navíc pojmenovány tak, aby se v nich lépe orientovalo. Jako další vylepšení přidáváme ošetření stavu, kdy v diskusi ještě nejsou příspěvky.
Include
Nejprve ze všeho si však ještě ukážeme další „zlepšovák“, který nám ušetří při psaní skriptů mnoho času a zvýší jejich efektivitu – totiž funkci include. Ta vkládá do aktuálního dokumentu další soubor. Díky tomu lze snadno ošetřit případ, kdy se změní připojovací údaje k naší databázi – nemusíme je měnit ve všech skriptech, ale pouze v jednom. Také se takto dají do dokumentů vkládat pomyslné hlavičky a patičky, které jsou pro ně shodné, je možné tímto způsobem používat i vlastní knihovny funkcí apod. Použití funkce include je vcelku snadné (příklad vkládá relativně pozicovaný soubor):
include("neco/in.php");
Diskuse.php
<?
include("in.php");
if($chyba!=0):
/*ošetření chyb při přispívání a logování*/
if($chyba==1):
$text="Bohužel došlo k chybě serveru.";
else:
$text="Neoprávněný přístup.";
endif;
echo"<script>alert(`$text`);</script>";
/*nahlášení chyby pomocí javascriptu*/
include("login.htm");
/*vypsání logovacího dokumentu*/
else:
/*zjištění uživatelských dat*/
$Loginnew=base64_decode($Login);
@$querya=MySQL_Query("Select * from Uzivatele where Prezdivka=`$Loginnew`");
if($querya):
$fetcha=MySQL_Fetch_Array($querya);
$password=$fetcha["Heslo"];
$email=$fetcha["Email"];
$status=$fetcha["Status"];
$pass=MD5($password);
if(($pass==$Heslo)and($password!="")):
/*kontrola hesla*/
?>
<LINK href="main.css" rel=StyleSheet type=text/css>
<center>
<h3>Diskuse</h3>
<?
include("pridatprispevek.php");
/*vložení dokumentu pro vkládání příspěvků*/
/*stránkování*/
$x=10;
$queries=MySQL_Query("Select ID from Diskuse");
$test=MySQL_Num_Rows($queries);
if($test>0):
$stranek=Ceil($test/$x);
if($ak==0):
$ak=1;
endif;
$xy=(($ak*$x)-$x);
$query=MySQL_Query("Select * from Diskuse order by ID DESC limit $xy,$x");
/*výpis příspěvků*/
while($fetch=MySQL_Fetch_Array($query)):
$ID=$fetch["ID"];
$Obsah=$fetch["Obsah"];
$Autor=$fetch["Autor"];
$Email=$fetch["Email"];
$Datum=$fetch["Datum"];
echo "<table width=550 border=1 style=`border-width:1;border-color:maroon;font-size:12`><tr><td align=left valign=center style=`border-width:0;border-color:maroon;`>";
if($Email!=""):
echo"<a href=`mailto:".$Email."`>".$Autor."</a>";
else:
echo "<b>".$Autor."</b>";
endif;
echo "</td><td align=right valign=center style=`border-width:0;border-color:maroon;`><small>".$Datum."</small></tr><tr><td colspan=2 align=center valign=center style=`border-width:0;border-color:maroon;`>".$Obsah."</td></tr></table><br>";
endwhile;
?>
Stránka:
<?
if(($ak!=1)and($stranek>1)):
$aka=$ak-1;
echo"<a href=`diskuse.php?ak=$aka&Login=$Login&Heslo=$Heslo`><<</a>";
endif;
$s=1;
while($s<=($stranek)):
$ted=($s*$x);
$pak=$ted-$x;
if($s!=$ak):
echo " <a href=`diskuse.php?ak=$s&Login=$Login&Heslo=$Heslo`>".$s."</a>";
else:
echo " ".$s;
endif;
$s+=1;
endwhile;
$akaa=$ak+1;
if($akaa<=$stranek):
echo" <a href=`diskuse.php?ak=$akaa&Login=$Login&Heslo=$Heslo`>>></a>";
endif;
else:
echo"Zatím v naší diskusi nejsou žádné příspěvky.";
endif;
/*stav, kdy v diskusi nejsou příspěvky*/
else:
$path = SubStr($SCRIPT_NAME, 0, StrRPos($SCRIPT_NAME, "/")).
"/diskuse.php?chyba=2";
Header("Location: http://$SERVER_NAME:$SERVER_PORT$path");
endif;
/*přesměrování při chybě, je možné zde zvolit jiný dokument, nebo úplně vynechat a vložit horní kód až za tuto detekci chyb*/
else:
$path = SubStr($SCRIPT_NAME, 0, StrRPos($SCRIPT_NAME, "/")).
"/diskuse.php?chyba=1";
Header("Location: http://$SERVER_NAME:$SERVER_PORT$path");
endif;
endif;
?>
Pridatprispevek.php
<script>
function validate(form){
if(form.Email.value==""){
return true;
}
else if(window.RegExp){
re = new RegExp("^[^@]+@[^.]+\..+$");
if(!re.test(form.Email.value)){
alert("Email odesílatele namá odpovídající tvar!");
form.Email.focus();
return false;
}
}
}
</script>
<table width=400 border=1 style=`border-width:1;border-color:maroon;font-size:12`><tr><td align=left valign=center style=`border-width:0;border-color:maroon;`>
<form action="pridejprispevek.php" name=form id=form onsubmit="return validate(this)" style="font-size:12"><input name="Login" type="hidden" value="<?echo $Login;?>" style="color:maroon"><input name="Heslo" type="hidden" value="<?echo $Heslo;?>" style="color:maroon">
<tr>
<td style="font-size:12">
<b>Autor:</b>
</td>
<td><input name="Autor" value="
<?
echo $Loginnew;
/*předtisknutí údajů, u Autora nemožné vždy měnit, u Emailu ano*/
?>
" style="color:maroon"
<?
if($status!=2):
echo"DISABLED";
endif;
/*ukázka rozdílů mezi uživateli*/
?>
>
</td>
</tr>
<tr>
<td style="font-size:12">
<b>Email:</b>
</td>
<td>
<input name="Email" value="<?echo $email;?>" style="color:maroon">
</td>
</tr>
<tr>
<td style="font-size:12">
<b>Příspěvek:</b>
</td>
<td>
<textarea name=Obsah cols=40 rows=7 style="color:maroon"></textarea>
</td>
</tr>
<tr>
<td align=center colspan=2>
<input type=submit value="Odeslat" class="submit">
</td>
</tr>
</table>
</form>
Pridejprispevek.php
<?
include("in.php");
$Loginnew=base64_decode($Login);
@$querya=MySQL_Query("Select * from Uzivatele where Prezdivka=`$Loginnew`");
if($querya):
$fetcha=MySQL_Fetch_Array($querya);
$password=$fetcha["Heslo"];
$email=$fetcha["Email"];
$status=$fetcha["Status"];
$pass=MD5($password);
/*pokud je heslo správné a nenulové a Autor je stejný jako Login nebo má možnost toto jméno měnit, je možné pokračovat*/
if((($pass==$Heslo)and($password!=""))and(($Autor==$Login)or($status==2))):
$Datum=Date("d.m.Y - H:i");
//if(Ereg("<",$Obsah)):
$Obsah=EReg_Replace("<","<",$Obsah);
//endif;
//if(Ereg(">",$Obsah)):
$Obsah=EReg_Replace(">",">",$Obsah);
//endif;
//if(Ereg("<",$Autor)):
$Autor=EReg_Replace("<","<",$Autor);
//endif;
//if(Ereg(">",$Autor)):
$Autor=EReg_Replace(">",">",$Autor);
//endif;
if($Autor==""):
$Autor="Anonym";
endif;
if(Obsah!=""):
$query=MySQL_Query("Insert into Diskuse values(null,`$Obsah`,`$Autor`,`$Email`,`$Datum`)");
endif;
$path = SubStr($SCRIPT_NAME, 0, StrRPos($SCRIPT_NAME, "/")).
"/diskuse.php?Login=$Login&Heslo=$Heslo";
Header("Location: http://$SERVER_NAME:$SERVER_PORT$path");
else:
$path = SubStr($SCRIPT_NAME, 0, StrRPos($SCRIPT_NAME, "/")).
"/diskuse.php?chyba=2";
Header("Location: http://$SERVER_NAME:$SERVER_PORT$path");
endif;
else:
$path = SubStr($SCRIPT_NAME, 0, StrRPos($SCRIPT_NAME, "/")).
"/diskuse.php?chyba=1";
Header("Location: http://$SERVER_NAME:$SERVER_PORT$path");
endif;
?>
Main.css
body{font-family:arial ce;font-size:12;background-color:maroon;border-color:maroon;color:white}
b{font-size:12;font-weight:bolder}
table{border-width:1;border-color:maroon;background-color:white;color:maroon}
input{font-family:arial ce;font-size:12;color:maroon;border-color:maroon;background:url("pozadi.gif")
}
td{border-width:0}
.submit{font-family:arial ce;font-size:12;color:maroon;font-weight:bolder;border-width:1;border-color:maroon}
.big{font-size:14;color:white}
a{color:black}

Takhle nějak to vypadá:)..
Příště
..se podíváme na možnost odpovídání na příspěvky v diskusi a smajlíky v ní samotné.