Princip
Do administrace se dostaneme přes
login.html, ta odešle heslo scriptu a jestliže se bude heslo
schodovat s heslem ve scriptu, tak se vám zobrazí celá diskuze
doplněna o zaškrtávací boxy a tlačítko smazat.
Jak script
maže celá témata?
Každé téma je uloženo samostatně v jednom
souboru, PHP smaže vybrané soubory a ostatní přejmenuje tak, aby
byly číslovány za sebou a zároveň sníží počet témat v souboru
pocet.dat tak, aby číslo souhlasilo s počtem témat.
Jak script maže jen některé (nevhodné) příspěvky k danému
tématu?
Otevře se soubor s příspěvky, přečtou se z něho data a ty
se pak přidávají do řetězce, ale než se tam přidají, tak se
zkontroluje, zda nemají být náhodou smazány, jestliže ano, tak se do
řetězce nepřidají, když se takto postupně zkontrolují všechny
příspěvky, řetězec se uloží do stejného souboru, ze kterého byl
přečten bez příspěvků které byly vybrány ke smazání.
Vysvětlení neznámých funkcí
UnLink(soubor)
Funkce smaže soubor, jestliže je
soubor smazán, vrací true.
Rename(staré jméno, nové jméno)
Funkce přejmenuje
soubor, vrací true, když se povede soubor přejmenovat.
Zdrojové kódy
login.html
<HTML>
<HEAD>
<TITLE>Admin</TITLE>
</HEAD>
<BODY>
<CENTER>
<BR>
<H1>Login do administrační části diskuze</H1>
<FORM name="FUKY" method="POST" action="admin.php">
<INPUT type="hidden" name="id" value="show">
<TABLE
border="0">
<TR valign="top">
<TD
align="right">
<B>Heslo:</B>
<TD
align="left">
<INPUT type="text" size="30"
name="heslo"><BR>
<TR valign="top">
<TD colspan="2" align="center">
<INPUT value=" OK "
type="submit">
</TD>
</TR>
</TABLE>
</FORM>
</CENTER>
</BODY>
</HTML>
admin.php
<?
//ZKONTROLUJE ZDA HESLO
SOUHLASÍ
if ($heslo != "heslo") {
echo "<H1><FONT
color=\"red\">Špatné heslo</FONT></H1>";
echo "<A HREF=\"login.html\">Zpět
na logovací stránku</A>";
exit;
}
if ($id == "show") {
?>
<HTML>
<HEAD>
<TITLE>Admin</TITLE>
</HEAD>
<BODY>
<BR>
<H1
align="center">Administrace</H1>
<CENTER>
<FORM name="FUKY" method="POST" action="admin.php">
<INPUT value="<? echo $heslo; ?>" name="heslo"
type="hidden">
<INPUT value="ok" name="mazat"
type="hidden">
<TABLE border="0" cellpadding="5"
cellspacing="5" align="center" width="100%">
<TR>
<TD><B>Téma</B>
<TD><B>Autor</B>
<TD><B>Vloženo</B>
<?
$fp = FOpen("./pocet.dat", "r");
$pocet =
FGetS($fp, 10);
FClose($fp);
if ($pocet == 0) {
exit;
}
for ($i = $pocet; $i > 0;
--$i) {
$fp = FOpen("./tema".$i.".dat",
"r");
$soubor =
File("./tema".$i.".dat");
List($tema, $autor, $email, $datum) = Explode(";", $soubor[1]);
$data .= "<TR
bgcolor=\"#CCFFFF\"><TD><INPUT type=\"checkbox\"
name=\"tema".$i."\" value=\"".$i."\"><B><A
HREF=\"./admin.php?id=".$i."&heslo=".$heslo."\">".$tema."</A></B><TD><B><A
HREF=\"mailto:
".$email."\">".$autor."</A></B><TD><B>".$datum."</B>";
for ($a = 2; $a <
Count($soubor); ++$a) {
$radek = $soubor[$a];
if
($radek[0] == "%") {
List($tema, $autor, $email, $datum) = Explode(";", $soubor[++$a]);
$data .= "<TR><TD>".$tema."<TD><A
HREF=\"mailto:
".$email."\">".$autor."</A><TD>".$datum."<TD>";
}
}
}
echo $data;
?>
</TD>
</TR>
</TABLE>
<INPUT value="Smazat"
type="submit">
</FORM></CENTER>
</BODY>
</HTML>
<?
exit;
}
if (($mazat == "ok") && ($id != "")) {
$fp = FOpen("./tema".$id.".dat", "r");
$soubor = File("./tema".$id.".dat");
FClose($fp);
//CYKLUS KTERÝ
PŘIDÁVÁ DO PROMĚNÉ DATA PŘÍSPĚVKY KTERÉ SE NEMAJÍ MAZAT
for ($i = 0; $i < Count($soubor);
++$i) {
$radek =
$soubor[$i];
if ($radek[0]
== "%") {
++$pocet;
if
(${"smaz".$pocet} == $pocet) {
$vlozit = "ne";
}
else {
++$cislo;
$data .= "%".$cislo."\n";
$vlozit = "ano";
}
}
else {
if ($vlozit ==
"ano") {
$data .= $radek;
}
}
}
//TATO PODMÍNKA JE SPLNĚNA
KDYŽ SE SMAŽOU VŠECHNY PŘÍSPĚVKY
if
($data == "") {
$data =
"%0";
}
$fp = FOpen("./tema".$id.".dat", "w");
FPutS($fp, $data);
FClose($fp);
Header("Location:
./admin.php?heslo=$heslo&id=$id");
exit;
}
if ($id != "") {
?>
<HTML>
<HEAD>
<TITLE>Admin</TITLE>
<META NAME="author"
CONTENT="Jan Fuchs">
</HEAD>
<BODY>
<BR>
<H1 align="center">Administrace</H1>
<CENTER>
<TABLE border="0" cellpadding="5"
cellspacing="5" align="center" width="100%">
<FORM
name="FUKY" method="POST" action="admin.php">
<INPUT
value="<? echo $heslo;?>" name="heslo" type="hidden">
<INPUT value="ok" name="mazat" type="hidden">
<INPUT value="<? echo $id; ?>" name="id"
type="hidden">
<?
$fp =
FOpen("./tema".$id.".dat", "r");
$soubor =
File("./tema".$id.".dat");
FClose($fp);
List($tema, $autor, $email, $datum) =
Explode(";", $soubor[1]);
$data .= "<TR
bgcolor=\"#CCFFFF\"><TD><B>".$tema."</B><TD><B><A
HREF=\"mailto:
".$email."\">".$autor."</A></B><TD><B>".$datum."</B>";
$radek = $soubor[2];
for
($a = 3; (($radek[0] != "%") && ($a < Count($soubor)));
++$a) {
$text .= $radek;
$radek = $soubor[$a];
}
$data .= "<TR><TD
colspan=\"3\">".$text;
--$a;
for ($i = $a; $i < Count($soubor); ++$i) {
$radek = $soubor[$i];
$text = "";
if ($radek[0] == "%") {
$pocet = $radek;
$pocet =
IntVal(StrTr($pocet, "%", "0"));
List($tema, $autor, $email,
$datum) = Explode(";", $soubor[++$i]);
$data .= "<TR
bgcolor=\"#CCFFFF\"><TD><INPUT type=\"checkbox\"
name=\"smaz".$pocet."\" value=\"".$pocet."\">";
$data .=
$tema."<TD><A HREF=\"mailto:
".$email."\">".$autor."</A><TD>".$datum;
}
else {
while (($radek[0] != "%")
&& ($i < Count($soubor))) {
$text .=
$radek;
$radek
= $soubor[++$i];
}
--$i;
$data .= "<TR><TD colspan=\"3\">".$text;
}
}
echo $data;
?>
</TD>
</TR>
</TABLE>
<INPUT
value="Smazat" type="submit"></FORM></CENTER>
</BODY>
</HTML>
<?
exit;
}
if ($mazat == "ok") {
$fp = FOpen("./pocet.dat", "r");
$pocet = FGetS($fp, 10);
FClose($fp);
$cislo = $pocet;
//MAŽE
SOUBORY S NEVHODNÝMI TÉMATY
for ($i =
1; $i <= $pocet; ++$i) {
if (${"tema".$i} == $i) {
UnLink("tema".$i.".dat");
--$cislo;
}
}
$fp
= FOpen("./pocet.dat", "w");
FPutS($fp,
$cislo);
FClose($fp);
$cislo = 1;
//PŘEJMENOVÁVÁ
VŠECHNY SOUBORY, ABY BYLO JEJICH ČÍSLOVÁNÍ SPRÁVNÉ
for ($i = 1; $i <= $pocet; ++$i) {
if
(File_Exists("tema".$i.".dat")) {
Rename("tema".$i.".dat", "tema".$cislo.".dat");
++$cislo;
}
}
Header("Location: ./admin.php?heslo=$heslo&id=show");
}
?>