Potřeboval bych pomoc, mám knihu hostů, je dost rozšířená, určitě jste se s ní setkali a potřeboval bych, aby byla chráněna moje přezdívka, prostě aby nikdo nemohl poslat příspěvek přes mou přezdívku. Tady je výpis souboru insert.php, kterej spracovává příspěvek a ukládá ho do souboru:
<?
if ($jmeno=="" || $email=="" || $popis==""): //kontrola zadaných udajů, pokud nebyly zadány všechny povinné údaje, do knihy se nic nezapíše
echo "<center><br><table><tr><td class=cervene>musíte vyplnit všechny povinné údaje</td></tr></table></center>";
else: //včechny povinné údaje jsou zadány
$name0 = HTMLSpecialChars($jmeno);
$e_mail0 = HTMLSpecialChars($email);
$web0 = HTMLSpecialChars($web);
$name = "<table><tr><td class=jmeno>$name0</td></tr>"; //do proměnné "name" uloží Jméno, zformátuje jej pomocí tagu <FONT> a otevře nový řádek
$e_mail = "<tr><td class=odkaz><A HREF=mailto:$e_mail0>$e_mail0</A></td></tr>"; //do proměnné "e_mail" uloží Email, zformátuje jej pomocí tagu <FONT>, přidá odkaz typu MAILTO a otevře nový řádek
if ($web!="" && $web!="http://"): //pokud byl zadán Web, vytvoří proměnnou "www"
$www = "<tr><td class=odkaz><A HREF=\"$web0\">$web0</A></td></tr>"; //do proměnné "www" uloží Web, zformátuje jej pomocí tagu <FONT>, přidá odkaz na danou stránku a otevře nový řádek
endif;
$cas = "<tr><td class=cas>" . Date("j. " . "m. " . "Y, " . "H:i:s") . "</td></tr>"; //do promenne "cas" uloží aktuální datum a čas ve formátu (př. 5. 11. 2000, 13:54:53), zformátuje a načne další řádek
$tag = HTMLSpecialChars($popis); //změna konců řádků na tagy <BR> a ostraní znaky, které by mohly porušit formátování
$br = str_replace("\n"," <BR> ", $tag); //všechny konce řádků nahradí tagem <BR>
$slovo = Split("[[:blank:]]+", $br);
for($y=0;$y<Count($slovo);$y++):
if (Strlen($slovo[$y])<=40):
if (EregI("^(www.*)", $slovo[$y])):
$anchor = Ereg_Replace("^(www\..+\..{2,3})", "<a href=http://\\1>\\1</a> ", $slovo[$y]);
elseif (EregI("^(http://.*)", $slovo[$y])):
$anchor = Ereg_Replace("^(http://.+\..{2,3})", "<a href=\\1>\\1</a> ", $slovo[$y]);
else:
$anchor = $slovo[$y] . " ";
endif;
$popis2 .= $anchor;
else:
$delit = Ceil(StrLen($slovo[$y])/40);
for($z=0;$z<$delit;$z++):
$cast = Substr($slovo[$y], $z*40, 40);
$popis2 .= $cast . " - ";
endfor;
endif;
endfor;
if ($popis2==""):
$ulozit=false;
else:
$ulozit=true;
endif;
$bold1 = Str_Replace("<b>", "<b>", $popis2);
$bold2 = Str_Replace("</b>", "</b>", $bold1);
$italic1 = Str_Replace("<i>", "<i>", $bold2);
$italic2 = Str_Replace("</i>", "</i>", $italic1);
$under1 = Str_Replace("<u>", "<u>", $italic2);
$under2 = Str_Replace("</u>", "</u>", $under1);
$zprava = "<tr><td class=text><br>$under2</td></tr></table><HR size=1 color=black>\n";//do proměnné "www" uloží $popis2, zformátuje, přidá čáru, která bude oddělovat příspěvky a otevře nový řádek
$write = StripSlashes($name . $e_mail . $www . $cas . $zprava); //do proměnné "write" uloží všechna data, která se budou zapisovat a odstraní escape sekvence
if ($ulozit):
if (File_Exists ("book.dat")): //existuje soubor book.dat
$fp = FOpen ("book.dat", "r"); //otevře soubor book.dat pro čtení
$data = FRead ($fp, FileSize("book.dat")); //přečte data ze souboru a uloží do proměnné "data" - kvůli tomu aby se zobrazoval poslední příspěvek nahoře
FClose($fp); //zavře book.dat
endif;
$fp = FOpen ("book.dat", "w"); //otevře book.dat pro přepis nebo vytvoření
FWrite ($fp, $write.$data); //zápis do souboru book.dat (nejprve aktuální příspěvek, poté předešlý obsah souboru book.dat)
FClose ($fp); //zavře soubor book.dat
endif;
endif;
?>
<head>
<META HTTP-EQUIV="Refresh" CONTENT="0; URL=kniha.php3">
</head>
No a tady mi jeden člověk poslal kód, tak jak ho mám upravit, aby to pod tim heslem fungovalo, tak jsem to tak udělal a ono to nefunguje.
Tady je ten příspěvek společně s kódem od toho člověka.
Ano, staci do souboru insert.php3 pridat podmniku, ktera zjisti, zda se nejedna se o "chranenou" prezdivku a popr. si vyzada zadani hesla:
<?
$zapsat = "";
$zakazano = Array("webmaster", "Moje Jmeno");
for ($i=0;$i<Count($zakazano);$i++):
if (EregI($zakazano[$i], $prezdivka)):?>
Pro tuto prezdivku musite zadat heslo:<br><br>
<form action="" method="post">
<input type=text name=heslo>
<input type=hidden name="jmeno" value="<?echo $prezdivka?>">
..... zde obodbne jako JMENO pridejte dalsi polozky z puvodniho formulare
<input type=submit>
</form>
<?
$zapsat = "ne";
endif;
endfor;
?>
Jeste jednu podminku u zaverecenho zapisu
if ($zapsat!= "ne" || ($zapsat=="ne" && $heslo=="to je VASE HESLO")):
if (File_Exists ("book.dat")):
$fp = FOpen ("book.dat", "r");
$data = FRead ($fp, FileSize("book.dat"));
FClose($fp);
endif;
$fp = FOpen ("book.dat", "w");
FWrite ($fp, $write.$data);
FClose ($fp);
?>
<head>
<META HTTP-EQUIV="Refresh" CONTENT="0; URL=kniha.php3">
</head>
<?endif;?>
Snad to bude fungovat.
---------
Prosím pomocte jak to upravit aby to fungovalo, nebo navrhněte lepší řešení, díky moc.