Autor Zpráva
Rudy
Profil
Dobrý den,
Vytvořil jsem si návštěvní knihu v php. Jediný problém je, že se do textového pole vloží smajlící v podobě textu např.<IMG SRC=\"smileys/9.gif\" alt=\"\">. Je to tím, že mám na 135 řádku zakodovány znaky html ($vzkaz = HTMLSpecialCHars($vzkaz);). Když, tento řádek smažu, tak se smajlíci zobrazí v grafické podobě, ale bylo mi řečeno, že se toto nemá dělat zdůvodu bezpečnosti, jelikož by mi někdo mohl lehce ovládnout web. Kód
<html><body>
<?php
$action = $_POST['action'];
$jmeno = $_POST['jmeno'];
$mail = $_POST['mail'];
$vzkaz = $_POST['vzkaz'];
$kontrola = $_POST['kontrola'];

function antispam($email, $jmeno){
    $return = "<script type=\"text/javascript\"><!--\ndocument.write('<a href=\"' + 'mailto:' + '";
    for($i=0;$i<strlen($email);$i++){
        $code .= $email{$i}=='@' ? "' + '&#".ord("@")."' + '"
                                   : "&#".ord($email{$i}).";";
    }
    $return .= $code."' + '\">' + '".$jmeno."' + '<\/a>');\n--></script>";
RETURN $return;
}
?>
<form method="post"
action="kniha.php" name="f">
<table><tr><td>jméno:</td>
<input type="hidden" value="uloz" name="action" />
<td><input type="text" name="jmeno" value="<?php echo $jmeno ?>" size="50" /</td>
</tr><tr><td>e-mail:</td>
<td><input type="text" name="mail" value="<?php echo $mail ?>" size="50" /></td>
</tr><tr></tr>
<tr><td valign="top">Vzkaz</td>
<td><textarea name="vzkaz" cols="40" value="<?php echo $vzkaz ?>" rows="5"><?php echo $vzkaz ?>
</textarea></td></tr>
<tr><td></td><td>Ochrana proti spamu: 4 plus 5 =
<input type="text" name="kontrola" value="<?php echo $kontrola ?>" size="8" />
</td>
<tr><td></td><td>
<input type="submit" value="odeslat"></td>
</tr>
</table>
</form>
<table>
</td></tr> 
<tr><td> <font size="2"><font color="008000">
<script type="text/javascript">
function Smile(what)
{
  document.forms.f.vzkaz.focus();
  document.forms.f.vzkaz.value=document.forms.f.vzkaz.value+what;
}
</script>
 <b>Smajlíci: 

&nbsp;&nbsp;
<img  onclick="Smile('**01 ')" src="smileys/1.gif">
&nbsp;&nbsp; 
<img  onclick="Smile('**01 ')" src="smileys/2.gif">
&nbsp;&nbsp; 
<img  onclick="Smile('**01 ')" src="smileys/3.gif">
&nbsp;&nbsp; 
<img  onclick="Smile('**01 ')" src="smileys/4.gif">
&nbsp;&nbsp;
<img  onclick="Smile('**01 ')" src="smileys/5.gif">
&nbsp;&nbsp;
<img  onclick="Smile('**01 ')" src="smileys/6.gif">
&nbsp;&nbsp;
<img  onclick="Smile('**01 ')" src="smileys/7.gif">
&nbsp;&nbsp;
<img  onclick="Smile('**01 ')" src="smileys/8.gif">
&nbsp;&nbsp;
<img  onclick="Smile('**01 ')" src="smileys/9.gif">
&nbsp;&nbsp;
<img  onclick="Smile('**01 ')" src="smileys/10.gif">
&nbsp;&nbsp;
<img  onclick="Smile('**01 ')" src="smileys/11.gif">
&nbsp;&nbsp;
<img  onclick="Smile('**01 ')" src="smileys/12.gif">
&nbsp;&nbsp;
<img  onclick="Smile('**01 ')" src="smileys/13.gif">
&nbsp;&nbsp;
<img  onclick="Smile('**01 ')" src="smileys/14.gif">
&nbsp;&nbsp;
<img  onclick="Smile('**01 ')" src="smileys/15.gif">
&nbsp;&nbsp;
<img  onclick="Smile('**01 ')" src="smileys/16.gif">

</center>






</font></b>
<?php 
//zde se ptame, zda byla odeslana pomoci formulare promenna $text
if(isset($vzkaz)):
/* a zde jiz nahrazujeme urcitz smajlik nasim obrazkem umistenym ve stejne
slozce jako nas skript*/
$vzkaz = str_replace("**01", "<IMG SRC=\"smileys/1.gif\" alt=\"\">", $vzkaz);
$vzkaz = str_replace("**02", "<IMG SRC=\"smileys/2.gif\" alt=\"\">", $vzkaz);
$vzkaz = str_replace("**03", "<IMG SRC=\"smileys/3.gif\" alt=\"\">", $vzkaz);
$vzkaz = str_replace("**04", "<IMG SRC=\"smileys/4.gif\" alt=\"\">", $vzkaz);
$vzkaz = str_replace("**05", "<IMG SRC=\"smileys/5.gif\" alt=\"\">", $vzkaz);
$vzkaz = str_replace("**06", "<IMG SRC=\"smileys/6.gif\" alt=\"\">", $vzkaz);
$vzkaz = str_replace("**07", "<IMG SRC=\"smileys/7.gif\" alt=\"\">", $vzkaz);
$vzkaz = str_replace("**08", "<IMG SRC=\"smileys/8.gif\" alt=\"\">", $vzkaz);
$vzkaz = str_replace("**09", "<IMG SRC=\"smileys/9.gif\" alt=\"\">", $vzkaz);
$vzkaz = str_replace("**10", "<IMG SRC=\"smileys/10.gif\" alt=\"\">", $vzkaz);
$vzkaz = str_replace("**11", "<IMG SRC=\"smileys/11.gif\" alt=\"\">", $vzkaz);
$vzkaz = str_replace("**12", "<IMG SRC=\"smileys/12.gif\" alt=\"\">", $vzkaz);
$vzkaz = str_replace("**13", "<IMG SRC=\"smileys/13.gif\" alt=\"\">", $vzkaz);
$vzkaz = str_replace("**14", "<IMG SRC=\"smileys/14.gif\" alt=\"\">", $vzkaz);
$vzkaz = str_replace("**15", "<IMG SRC=\"smileys/15.gif\" alt=\"\">", $vzkaz);
$vzkaz = str_replace("**16", "<IMG SRC=\"smileys/16.gif\" alt=\"\">", $vzkaz);
endif;
?>

<?php
if ($action=='uloz'):
$soubor = "kniha.body.php";
@$ext = fopen($soubor, "r");
@$obsah = fread($ext, filesize($soubor));
@FClose($ext);

if($kontrola != "9"):
echo "<h6>_patná odpov__</h6>";
elseif(($vzkaz=="") or ($jmeno=="")):
echo "<h6>Nejsou vypln_ny po_adované údaje</h6>";
else:
$ext = fopen("kniha.body.php", "w");
$mail = HTMLSpecialCHars($mail);

if($mail == "")
$mail = "";
else $mail = antispam($mail,$mail);

$jmeno = HTMLSpecialCHars($jmeno);
$vzkaz = HTMLSpecialCHars($vzkaz);
$tab = "<tr><td width=\"300\" >".$jmeno."</td>
<td align=\"right\">".Date(" d/m/Y  H:i:s")."</td>
</tr><tr><td colspan=\"2\">".$vzkaz."</td>
</tr><tr><td width=\"150\">".$mail."</td>
</tr><tr><td colspan=\"2\"><hr size=\"1\"></td>
</tr>";
fputs($ext, "$tab");
fputs ($ext, "$obsah");
FClose($ext);
@$ext = fopen("kniha.body.php", "r");
@fpassThru($ext);

endif;
else: @$ext = fopen("kniha.body.php", "r");
@fpassThru($ext); endif;

?>
</table>
</body>
</html>
Ps: Prosím berte tento kód s nadhledem v Php teprve začínám, respektivě se tímto jazykem zabývám teprve měsíc, takže jestli tam jsou chyby budu rád za upozornění. Za případné odpovědi děkuji všem.
ShiraNai7
Profil
Tak smajlíky nahrazuj až po tom, co voláš htmlspecialchars().
Rudy
Profil
ShiraNai7:
To jsem zkoušel, ale pořád nic.

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: