Prakticky s MySQL - 9. díl

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}

Klepněte pro větší obrázek

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é.

Diskuze (6) Další článek: Uvolnění finální verze OpenOffice.org 1.0 CZ

Témata článku: Software, Programování, MD5, Select, Odpovídající tvar, Black and White, Form, MySQL, Echo, Mys, Pass, Alert, Status, Password, Hidden, Email, Elsa, Login, Díl


Určitě si přečtěte

Nejlepší notebooky do 10 000 korun: Co má ještě smysl kupovat. A co ne?

Nejlepší notebooky do 10 000 korun: Co má ještě smysl kupovat. A co ne?

** Notebooky s cenou do deseti tisíc korun jsou plné kompromisů ** Existuje několik modelů dobře použitelných pro nenáročné použití ** Vhodnou alternativou jsou tablety nebo repasované počítače

David Polesný | 94

David Polesný
Jak vybrat notebookNotebooky
Finanční správa tento měsíc spustí Moje Daně. Přiznání má být hračka
Lukáš Václavík
eIdentitaČeskoeGovernment
Archivovat data do cloudu, na HDD, SSD, DVD, nebo Blu-ray? Co je nejvýhodnější?

Archivovat data do cloudu, na HDD, SSD, DVD, nebo Blu-ray? Co je nejvýhodnější?

** Kam doma natrvalo uložit data? Vyplatí se ještě optická média? ** Jaké kapacity disků a médií má smysl koupit? ** Cenovou výhodnost si ukážeme na příkladech s 2TB úložištěm

Lukáš Václavík | 122

Lukáš Václavík
ZálohováníÚložištěPevné disky
Dostali jste nový počítač? Tohle s ním udělejte, než ho začnete používat

Dostali jste nový počítač? Tohle s ním udělejte, než ho začnete používat

** Každý nový počítač si zaslouží počáteční péči ** Odinstalujte bloatware a nezapomeňte na vhodné nastavení ** Poradíme, jak se o počítač s Windows 10 postarat

David Polesný, Stanislav Janů | 75

David PolesnýStanislav Janů
PočítačeNotebooky
Superinteligenci nedokážeme ovládat a nejspíše se nedozvíme, že už tam někde je

Superinteligenci nedokážeme ovládat a nejspíše se nedozvíme, že už tam někde je

** Firmy i organizace včetně EU připravují etické kodexy pro A.I. ** Vědci z Madridu zkoumali, jestli je budeme moci aplikovat na A.I. 2.0 ** A je tu háček, superinteligence pro nás totiž bude neuchopitelná

Jakub Čížek | 84

Jakub Čížek
Umělá inteligence
Volitelná aktualizace Windows 10 opravila několik chyb, způsobila ale další problémy
Karel Kilián
Windows UpdateAktualizaceWindows 10
Konec modrých obrazovek smrti? Microsoft vydává mimořádnou aktualizaci pro Windows 10
Karel Kilián
Windows UpdateAktualizaceWindows 10

Aktuální číslo časopisu Computer

Megatest rychlých Wi-Fi 6 routerů

Jak ztišit počítač

Velký test mATX skříní