Redakční systém 4.

Po delší odmlce pokračujeme ve tvorbě vlastního redakčního systému v PHP. Dnes dokončíme administraci uživatelů a načneme správu rubrik.

Takže po trošku delší odmlce se opět setkáváme u seriálu Redakční Systém v PHP. V dnešním díle bych chtěl dokončit popis administračních skriptů starajících se o přidávání, editování a mazání uživatelů. Pokud nám zbyde trocha prostoru, budu pokračovat v popisu skriptů starajících se o vytváření, editaci a mazání rubrik. Nejdříve vás ale poprosím o drobnou změnu skriptu generuj.php, která napomůže většímu user-friendly rozhraní. Samotná úprava spočívá v přidání jednoho řádku do smyčky, ve které se vytváří proměnná $data. Funkčnost změny si vysvětlíme, až bude vhodná doba a budeme ji využívat.

generuj.php – oprava (/admin/generuj.php)

// pro každý řádek přidej do proměnné $data
while ($row = mysql_fetch_row($sql))
{
$data .= "<option value=\"".$row[0]."\"";
// !!! přidaný řádek !!!
$data .= '<? if ($autor == $row[0]) echo " SELECTED"; ?>';
$data .= ">".$row[1]."</option>\n";
}

O přidání nového uživatele se nám postará skript add_user.php, který se bude načítat do samostatného popup okna. Při prvním zavolání se zobrazí prázdný formulář, do kterého budete moct vyplnit údaje o uživateli. Login, heslo, email a jméno jsou povinné položky. Pokud nebudou vyplněny, skript opětovně zobrazí formulář, kde budete muset doplnit všechny povinné údaje. Budou-li všechny položky vyplněny, skript nejdříve ověří zda se v databázi neopakuje zadaný login, pokud ano, zobrazí se chybové hlášení a formulář. Pokud je vše v pořádku, skript uloží informace o uživateli do databáze, vygeneruje nový seznam uživatelů, zavře popup okno a reloaduje stránku se seznamem uživatelů, kde by se již měl zobrazit nový záznam.

add_user.php (/admin/add_user.php)

<?
// pokud neproběhla autorizace, ukončíme skript
if (!isset($PHP_AUTH_USER))
{
echo "Neautorizovaný přístup";
exit;
}
// include funkcí
include "../function.php";
include "../conn.php";
// autorizace
auth();
$error = ''; // proměnná obsahuje případné chybové hlášení
// existuje-li proměnná $email, $heslo, $login a $jmeno,
// budeme přidávat nového uživatele
if ($email != "" && $heslo != "" && $login != "" && $jmeno != "")
{
// pokud neexistuje proměnná $deny, nastavíme ji
if (!isset($deny)) $deny = "n";
// otestujeme možnost existence loginu, pokud již v databázi je,
// vypíšeme chybové hlášení a vrátíme uživateli formulář k opravě.
// jinak uživatele do databáze vložíme
@$sql = mysql_query("SELECT * FROM autori WHERE login LIKE '$login'");
if (mysql_num_rows($sql) > 0)
{
$login = '';
$error = "<DIV ALIGN=CENTER>Login již existuje !!!</DIV>\n";
}
else
{
// přidáme uživatele
@$sql = mysql_query("INSERT INTO autori VALUES (null, '$login',
'".md5($heslo)."', '$jmeno',
'$email', '$oautorovi', $poz,
'$deny')");
// jelikož jsme do databáze vložili nového uživatele, bude třeba
// vygenerovat nový soubor se seznamem uživatelů.
$generuj = "autori";
include "./generuj.php";
mysql_close($conn);
// zavoláme funkci, která nám zavře popup okno a reloadne
// stránku s uživatli
zavri();
exit;
}
}
else
{
$error = "<DIV ALIGN=CENTER>Chybí povinné údaje !!!</DIV>\n";
}
// databázi již nebudeme potřebovat
mysql_close($conn);
// zobrazíme HTML stránku s formulářem, který doplníme o případné
// chybové hlášení a obsah proměnných.
head();
?>
<H4 ALIGN="CENTER"><B>Přidání uživatele</B></H4>
<? echo $error; ?>
<FORM METHOD="POST" ACTION="add_user.php">
<TABLE BORDER="0" CELLSPACING="0" CELLPADDING="0" ALIGN="CENTER">
<TR>
<TD>Login: * </TD>
<TD><INPUT TYPE="TEXT" NAME="login" MAXLENGTH="20" SIZE="40"
VALUE="<? echo $login; ?>"></TD>
</TR>
<TR>
<TD>Heslo: * </TD>
<TD><INPUT TYPE="TEXT" NAME="heslo" MAXLENGTH="25" SIZE="40"
VALUE=""></TD>
</TR>
<TR>
<TD>Email: * </TD>
<TD><INPUT TYPE="TEXT" NAME="email" MAXLENGTH="100" SIZE="40"
VALUE="<? echo $email; ?>"></TD>
</TR>
<TR>
<TD>Jméno: * </TD>
<TD><INPUT TYPE="TEXT" NAME="jmeno" MAXLENGTH="100" SIZE="40"
VALUE="<? echo $jmeno; ?>"></TD>
</TR>
<TR>
<TD VALIGN="TOP">O autorovi:  </TD>
<TD><TEXTAREA COLS="34" ROWS="4" NAME="oa">
<? echo $oa; ?></TEXTAREA></TD>
</TR>
<TR>
<TD>Pozice:  </TD>
<TD><SELECT name="poz">
<?
// vloží všechny možné pozice a pokud je proměnná poz shodná
// s některým z indexů, pak tuto položku zvolí
for ($i = 1; $i <= 3; $i++)
{
echo "<OPTION VALUE=\"$i\"";
if ($i == $poz)
echo " SELECTED";
echo ">$pozice[$i]</OPTION>";
}
?>
</SELECT></TD>
</TR>
<TR>
<TD>Aktivní:  </TD>
<TD><INPUT TYPE="CHECKBOX" NAME="deny" VALUE="a"
<? if ($deny == "a") echo " CHECKED"; ?>></TD>
</TR>
<TR>
<TD COLSPAN="2" ALIGN="CENTER">
<INPUT TYPE="SUBMIT" VALUE="Přidat">
<? butonek(); ?>
</TD>
</TR>
</TABLE>
</FORM>
<?
foot();
?>

Další skript, který si probereme, bude edit_user.php, který bude obsluhovat formulář pro změnu údajů o autorech. Jedná se vlastně o úpravu předešlého skriptu. Heslo už ale nebude povinná položka, pokud jej nevyplníte, nebude se měnit.

edit_user.php (/admin/edit_user.php)

<?
// pokud nenproběhla autorizace, ukončíme skript
if (!isset($PHP_AUTH_USER))
{
echo "Neautorizovaný přístup";
exit;
}
include "../function.php";
// pokud neexsituje proměnná $id zavřeme popup
if (!isset($id))
{
zavri();
exit;
}
include "../conn.php";
// autorizace
auth();
// pokud byl odeslán formulář, a bylo zadáno jméno a email, budeme
// autora editovat
if ($email != "" && $jmeno != "")
{
if (!isset($deny))
$deny = "n";
// SQL pokud se nemění heslo, nebudeme jej v databázi měnit
if ($heslo == "")
{
@$sql = mysql_query("UPDATE autori SET jmeno = '$jmeno',
email = '$email', oautorovi = '$oa',
prava = $poz, stav = '$deny'
WHERE id = $id");
}
// SQL pokud se heslo mění, provedeme změnu hesla v databázi
else
{
@$sql = mysql_query("UPDATE autori SET pass = '".md5($heslo)."',
jmeno = '$jmeno', email = '$email',
oautorovi = '$oa', prava = $poz,
stav = '$deny' WHERE id = $id");
}

// mohlo se změnit jméno autora, takže vygenerujeme nový
// soubor s autory
$generuj = "autori";
include "./generuj.php";
mysql_close($conn);
zavri();
exit;
}
// select informaci o uzivateli
@$sql = mysql_query("SELECT * FROM autori WHERE id = $id");
// pokud neni user v databazi, zavru okno
if (mysql_num_rows($sql) == 0):
mysql_close();
zavri();
exit;
endif;
@$row = mysql_fetch_row($sql);
mysql_free_result($sql);
mysql_close($conn);
head();
?>
<H4 ALIGN="CENTER"><B>Editace uživatele</B></H4>
<FORM METHOD="POST" ACTION="edit_user.php">
<INPUT TYPE="HIDDEN" NAME="id" VALUE="<? echo $id; ?>">
<TABLE BORDER="0" CELLSPACING="0" CELLPADDING="0" ALIGN="CENTER">
<TR>
<TD>Login:  </TD>
<TD><? echo $row[1]; ?></TD>
</TR>
<TR>
<TD>Heslo:  </TD>
<TD><INPUT TYPE="TEXT" NAME="heslo" MAXLENGTH="25" SIZE="40"
VALUE=""></TD>
</TR>
<TR>
<TD>Email: * </TD>
<TD><INPUT TYPE="TEXT" NAME="email" MAXLENGTH="100" SIZE="40"
VALUE="<? echo $row[4]; ?>"></TD>
</TR>
<TR>
<TD>Jméno: * </TD>
<TD><INPUT TYPE="TEXT" NAME="jmeno" MAXLENGTH="100" SIZE="40"
VALUE="<? echo $row[3]; ?>"></TD>
</TR>
<TR>
<TD VALIGN="TOP">O autorovi:  </TD>
<TD><TEXTAREA COLS="34" ROWS="4" NAME="oa">
<? echo $row[5]; ?></TEXTAREA></TD>
</TR>
<TR>
<TD>Pozice:  </TD>
<TD><SELECT name="poz">
<?
for ($i = 1; $i <= 3; $i++)
{
echo "<OPTION VALUE=\"$i\"";
if ($i == $row[6])
echo " SELECTED";
echo ">$pozice[$i]</OPTION>";
}
?>
</SELECT></TD>
</TR>
<TR>
<TD>Aktivní:  </TD>
<TD><INPUT TYPE="CHECKBOX" NAME="deny" VALUE="a"
<? if ($row[7] == "a") echo " CHECKED"; ?>></TD>
</TR>
<TR>
<TD COLSPAN="2"> </TD>
</TR>
<TR>
<TD COLSPAN="2" ALIGN="CENTER">
<INPUT TYPE="SUBMIT" VALUE="Editovat">
<? butonek(); ?>
</TD>
</TR>
</TABLE>
</FORM>
<?
foot();
?>

Tak, a administraci uživatelů máme hotovou. Můžete si vyzkoušet vytvořit několik testovacích userů a přidělovat jim různá práva, popřípadě jim zakázat přístup úplně. Alespoň si tak vyzkoušíte činnost skriptu menu.php – zda se položky menu skutečně generují podle práv přihlášeného uživatele.

Rubriky

Jelikož již máme možnost vytvořit uživatele, kteří budou mít možnost vkládat články a krátké zprávy, bude třeba vytvořit rubriky, do kterých se budou články autorů vkládat. Pro administraci rubrik bude třeba vytvořit další PHP skripty, které se budou jmenovat: rubriky.php, add_rubrika.php a edit_rubrika.php. Jelikož seznam rubrik budeme kvůli pozdější optimalizaci výkonu generovat do souboru, přidáme do skriptu generuj.php další část kódu, která se bude o toto generování starat. Skript vygeneruje celkem dva soubory. Jeden bude používán v administrační části, kde se bude vkládat do formuláře pro vložení/editaci článku a druhý bude vkládán do skriptů, jež se budou starat o samotné zobrazování stránek návštěvníkům.

generuj.php (/admin/generuj.php)

if ($generuj == "rubriky")
{
// vybereme všechny rubriky a seřadíme výsledek podle jejich názvu.
@$sql = mysql_query("SELECT * FROM rubriky ORDER BY rubrika");
// vyprázdníme pomocné proměnné
$data1 = '';
$data2 = '';
// pro každý záznam v databázi vložíme do pomocných proměnných
// jeden řádek
while ($row = mysql_fetch_row($sql))
{
$data1 .= "<a href=\"index.php?rubrika=".$row[0]."\">".$row[1];
$data1 .= "</a><br>\n";
$data2 .= "<option value=\"".$row[0]."\"";
$data2 .= '<? if ($rubrika == $row[0]) echo " SELECTED"; ?>';
$data2 .= ">".$row[1]."</option>\n";
}
// vygenerujeme první soubor
@$f = fopen("../inc/rubriky","w");
fputs($f,$data1);
fclose($f);
// vygenerujeme druhý soubor
@$f = fopen("../inc/rubriky_admin","w");
fputs($f,$data2);
fclose($f);
}

Jelikož dnešní část byla hodně praktická, další část skriptů pro administraci rubrik si probereme až v příštím díle seriálu. Máte tak alespoň možnost pořádně odzkoušet administraci uživatelů a případně ji doladit dle svého gusta. A abych nezapomněl, přidávám dva slíbené obrázky, které pomohou zpestření administrační části RS. Jsou to následující dva malé gify, které umístíte do adresáře: /admin/img/.

ok.gif(209 b)     no.gif(164 b)

Navigace v seriálu← Redakční systém 3.Redakční systém 5. →