Prakticky s MySQL - 7. díl

K naší knize návštěv tentokrát přibude listování, autentizace uživatelů, jejich práva a možnosti správy diskuse hlavním administrátorem.

Listování v diskusi

Aby se uživatelé mohli v naší diskusi snadno vyznat a nenačítaly se jim všechny příspěvky naráz, bývá dobrým zvykem v ní udělat listování. Možností jak toho dosáhnout je hodně, my si ukážeme systém stránek. Základem je definice počtu příspěvků, s nimiž budeme pracovat. My celou aplikaci postavíme tak, aby bylo možné změnou jedné proměnné upravit, po kolika příspěvcích se tvoří jedna stránka.

V níže uvedeném kódu si již přímo počítáme počet příspěvků v diskusi pro pozdější nabídku stránek diskuse, v proměnné x máme uložený implicitní počet příspěvků pro načítání na každé stránce diskuse. V proměnné stranek si dále uložíme počet stránek (zjistíme ho jako zaokrouhlený podíl mezi počtem příspěvků v diskusi test a proměnnou x), které budeme dále nabízet k listování. Další proměnnou je ak, což je aktuálně zvolená stránka, nejnižší hodnotu může mít 1.

Poté příspěvek, od něhož začneme vybírat v rámci SQL dotazu, spočítáme následovně:

$xy=(($ak*$x)-$x);

což by pro stránku 3 tedy znamenalo:

$x=10;
$ak=3;
$xy=((3*10)-10);

$xy=20;

Poté již stačí vybrat 10 záznamů od tohoto a máme náš dotaz vytvořený, úvodní část kódu pak tedy vypadá takto:

$x=10;
$queries=MySQL_Query("Select ID from Diskuse");
$test=MySQL_Num_Rows($queries);

$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 stránek k listování

Nyní tedy naše stránka umožňuje listování změnou proměnné ak, jak ale vytvořit nabídku stránek k onomu listování? Z dále prezentovaného kódu by šly vytvořit 3 části, nejprve určíme, zda je možné od aktuální stránky jít o jednu zpátky, pokud ano, vypíše se na toto odkaz coby tyto dvě špičaté závorky <<. To může nastat tehdy, není-li aktuální stránka 1 (v našem případě doplněno o nepovinou podmínku a je-li počet stránek větší než jedna abychom si zopakovali psaní více podmínek zaráz).

Objevuje se tu také nová proměnná s, jenž budeme tak dlouho od počáteční jedničky zvyšovat po jedné v rámci podmínkového cyklu while, dokud nebude větší než počet stránek. Také si v kódu ukážeme, jak spočítat rozmezí příspěvků u každé stránky, ale použijeme pak pro výpis vždy pouze její číslo. Při výpisu čísel stránek tvoří číslo zároveň odkaz na tuto stránku, pokud není rovno té aktuální.

Na konci podmínkového cyklu nesmíme zapomenout zvýšit s o jedna. Tomu by se šlo vyhnout použitím cyklu for, jak si ukážeme někdy příště. V poslední části nového kódu se nám objevuje výpis znaků >> pro možnost posunu o jednu stránku dopředu, ta je možná pouze je-li v diskusi alespoň o jednu stránku více oproti té aktuální směrem dopředu. Náš kód pro výpis stránek pak vypadá takto:

Stránka:
<?
if(($ak!=1)and($stranek>1)):
$aka=$ak-1;
echo"<a href=`diskuse.php?ak=$aka`><<</a>";
endif;

$s=1;
while($s!>($stranek)):

$ted=($s*$x);
$pak=$ted-$x;

if($s!=$ak):
echo " <a href=`diskuse.php?ak=$s`>".$s."</a>";
else:
echo " ".$s;
endif;

$s+=1;
endwhile;

$akaa=$ak+1;
if($akaa<=$stranek):
echo" <a href=`diskuse.php?ak=$akaa`>>></a>";
endif;
?>

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

Takto nějak by to mohlo v praxi vypadat …

Uživatelé

Dalším updatem naší diskuse bude vytvoření půdy pro její rozvoj tím, že si připravíme tabulku uživatelé diskuse. Při její tvorbě budeme brát přímo ohledy na to, že uživatelé budou mít 3 možné statusy, základní bude znamenat možnost přispívání do diskuse a editování či mazání svých vlastních příspěvků. Status 2 umožní editování a mazání i cizích příspěvků a poslední stádiem bude možnost měnit statusy ostatním uživatelům, kterou bude mít pouze hlavní administrátor diskuse. Položky u uživatelů pak budou následující: Jméno, Příjmení, Přezdívka, Email a Heslo. Tabulka samotná pak bude vypadat takto:

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

Opět si zopakujeme jak tuto tabulku vytvořit:

@$table=MySQL_Query("Create table Uzivatele(
ID int not null primary key auto_increment,
Jmeno varchar(255),
Prezdivka varchar(255),
Heslo varchar(255),
Email varchar(255),
Status int)");

Registrace uživatelů

První činností, kterou bude muset uživatel udělat, aby mohl přispívat do naší databáze, bude jeho registrace, úvodní HTML dokument asi není třeba více komentovat:

<html>
<head>
<title>
Registrace do naší diskuse
</title>
<meta http-equiv="Expires" content="0">

<style>
body{font-family:arial ce;font-size:12;background-color:maroon;border-color:maroon}
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}
</style>

<script language="JavaScript">
function check(form){

if(form.Jmeno.value==""){
alert("Není zadáno jméno.");
form.Jmeno.focus();
return false;
}

if(form.Email.value==""){
alert("Není zadán email.");
form.Email.focus();
return false;
}

else if(window.RegExp){
re = new RegExp("^[^@]+@[^.]+\..+$");

if(!re.test(form.Email.value)){
alert("Email nemá odpovídající tvar.");
form.Email.focus();
return false;
}
}

if(form.Login.value==""){
alert("Není zadána přezdívka.");
form.Login.focus();
return false;
}

if(form.Heslo.value==""){
alert("Není zadáno heslo.");
form.Heslo.focus();
return false;
}

if(form.Heslo2.value==""){
alert("Není zadána kopie hesla.");
form.Heslo2.focus();
return false;
}

if(form.Heslo.value!=form.Heslo2.value){
alert("Hesla se neshodují.");
form.Heslo2.focus();
return false;
}

}
</script>

</head>
<html>
<body>
<center>
<b class=big>REGISTRACE</b><br>
<table width=300 border=1 align=center>
<form action="zaregistrovat.php" method="POST" name="form" onsubmit="return check(this)">

<tr>
<td align=left width="150"><b>Jméno a příjmení</b>:</td><td align=left><input name="Jmeno"></td>
</tr>

<tr>
<td align=left><b>Email</b>:</td><td align=left><input name="Email"></td>
</tr>

<tr>
<td align=left><b>Přezdívka</b>:</td><td align=left><input name="Login"></td>
</tr>

<tr>
<td align=left><b>Heslo</b>:</td><td align=left><input type="password" name="Heslo"></td>
</tr>

<tr>
<td align=left><b>Ověření hesla</b>:</td><td align=left><input type="password" name="Heslo2"></td>
</tr>

<tr>
<td align=center colspan=2><input type=submit value=Registruj! class=submit></td>
</tr>
</form>
<script>
form.Jmeno.focus();
</script>
</table>
</center>
</body>
</html>

Tento dokument jsme si již sice jednou prezentovali, ale jeho výsledná podoba je nyní mírně upravená:

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

Na vysvětlenou předchozí kódu snad pouze pro zopakování dodat, že po načtení stránky se přesune kurzor do prvního textového pole a při odeslání dat se zkontroluje jejich platnost.

Příští pokračování

V následujícím týdnu dokončíme registraci uživatelů, vytvoříme jejich logovací systém a začneme s dalšími úpravami v hlavním programovém kódu, takže již brzo bude naše diskuse pořádně propracovaná!.

Diskuze (1) Další článek: Jak často vyměňujete počítač? Nyní prý jednou za 40 měsíců

Témata článku: Software, Programování, Alert, Příspěvek, Mys, MySQL, Úvodní část, Díl, Status, Předchozí kód, Echo, Stadi, Code, Stadia, Odpovídající tvar


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

Konec modrých obrazovek smrti? Microsoft vydává mimořádnou aktualizaci pro Windows 10
Karel Kilián
Windows UpdateAktualizaceWindows 10
Fedora 33 prostě funguje. Linux si zaslouží dobýt laptop, je to ale asi opět marné

Fedora 33 prostě funguje. Linux si zaslouží dobýt laptop, je to ale asi opět marné

** Desktopový Linux funguje a vypadá stále lépe ** Fedora 33 není výjimkou ** Ve stínu Windows a macOS tu vyrostly skvělé alternativy

Jakub Čížek | 167

Jakub Čížek
FedoraOperační systémyLinux
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
Technici nestíhají. Cetin dočasně přerušil zavádění VDSL bondingu
Lukáš Václavík
CETINPřipojení k internetu
Microsoft pořád myslí i na odpůrce předplatného. Letos vydá Office 2021
Lukáš Václavík
Microsoft OfficeMicrosoft
Vybíráme nejlepší monitory: Od úplně levných až po displeje na rozmazlování očí

Vybíráme nejlepší monitory: Od úplně levných až po displeje na rozmazlování očí

** Vybrali jsme nejlepší monitory na práci i pořádné hraní ** Nejlevnější monitor s kvalitním panelem nestojí ani tři tisíce ** Rozlišení 4K a větší obrazovka už není nedostupný luxus

David Polesný | 31

David Polesný
Monitory
Jak se šíří Covid v Česku: Čerstvá data, semafor PES, mapy okresů a obcí. Každý den aktualizované grafy

Jak se šíří Covid v Česku: Čerstvá data, semafor PES, mapy okresů a obcí. Každý den aktualizované grafy

** Vývoj COVID-19 v Česku: nakažení, úmrtí, testovaní, hospitalizovaní ** Mapa podle okresů, přehled podle věku, situace v Evropě i ve světě ** Každý den aktualizované grafy a mapy

Marek Lutonský | 172

Marek Lutonský
COVID-19Koronavirus

Aktuální číslo časopisu Computer

Megatest rychlých Wi-Fi 6 routerů

Jak ztišit počítač

Velký test mATX skříní