Zdravím, v jednoduché knize návštěv bez databáze se po odeslání zprávy, tato nenačte do zadefinovaného souboru kniha.txt . Prosím o radu, kde může být zádrhel. Uvedený zdroják funguje bez problémů na webzdarma, ale na jiných serverech už ne, i když podporujou .php. Dík za každou pomoc.
Zdroják:
<head>
<SCRIPT LANGUAGE="JavaScript"><!--
function zkontroluj(formular)
{
if (formular.jmeno.value=="")
{
alert("Vaše jméno (přezdívku) musíte vyplnit!");
formular.jmeno.focus();
return false;
}
else if (formular.email.value=="")
{
alert("Adresu elektronické pošty musíte vyplnit!");
formular.email.focus();
return false;
}
else if (formular.zprava.value=="")
{
alert("Text zprávy musíte vyplnit!");
formular.zprava.focus();
return false;
}
else if (window.RegExp)
{
re = new RegExp("^[^.]+(\.[^.]+)*@([^.]+[.])+[a-z]{2,3}$");
if (!re.test(formular.email.value))
{
alert("Zadaná adresa není správnou adresou elektronické pošty!");
formular.email.focus();
return false;
}
}
else
return true;
}
// -->
</SCRIPT>
</head>
<body>
<table border="0" cellspacing="0" cellpadding="0" align="center">
<form action="insert.php" method="post" onSubmit="return zkontroluj(this)">
<tr><td width=30><div class="box8">
Jméno:</div>
</td><td>
<input type="text" name="jmeno" size="30" maxlength="60" >
</td></tr>
<tr><td width=30><div class="box8">
Email:</div>
</td><td>
<input type="text" name="email" value="@" size="30" maxlength="60" >
</td></tr>
<tr><td valign=top width=30><div class="box8">
Vzkaz: </div>
</td><td>
<textarea cols="29" rows="5" name="zprava"></textarea>
</td></tr>
<tr><td width=30> </td><td>
<center><input type="submit" value="Odeslat"> <input type="Reset" value="Vymazat"></center>
</form></td></tr></table>
<br><div class="vzkazy"> Příspěvky:</div>
<?
function Odkaz()
{
if (File_Exists ("kniha.txt")):
echo "<center>";
$prispevek = File("kniha.txt");
$strana = Ceil(Count($prispevek)/20);
for ($x=1;$x<=$strana;$x++):
echo "<a class=formu href=vzkazy.php?idprispevek=$x>" . ($x*20-19) . "-" . $x*20 . "</a>  ";
endfor;
echo "</center>";
endif;
}
Odkaz();
?>
<hr color="#666666">
<?
if (File_Exists ("kniha.txt")):
if (!IsSet($idprispevek)) $idprispevek=1;
$pocatek = $idprispevek*20-20;
$konec = $idprispevek*20-1;
$prispevek = File("kniha.txt");
for ($i=$pocatek;$i<=$konec;$i++):
echo $prispevek[$i];
endfor;
endif;
Odkaz();
?>
A pro úplnost soubor: insert.php
<?
$jmeno = HTMLSpecialChars($jmeno);
$email = HTMLSpecialChars($email);
$web = HTMLSpecialChars($web);
$jmeno = "<table with=\"400\"><tr><td width=\"290\"><h4>$jmeno</h4></td>";
$cas = "<td align=\"right\"><h5>" . Date("j. " . "m. " . "Y, " . "H:i:s") . "</h5></td></tr>";
$email = "<tr><td colspan=\"2\"><A class=formu HREF=mailto:$email>$email</A></td></tr>";
$zprava = SubStr($zprava, 0, 1500);
$zprava = Trim($zprava);
$zprava = HTMLSpecialChars($zprava);
$zprava = Str_Replace("\n"," <BR> ", $zprava);
$znak = 66;
$slovo = Split("[[:blank:]]+", $zprava);
for($y=0;$y<Count($slovo);$y++):
$slovo[$y] = Trim($slovo[$y]);
if (Strlen($slovo[$y])<=$znak):
if (EregI("^(www\..+\..{2,3})$", $slovo[$y])):
$odkaz = EregI_Replace("^(www\..+\..{2,3})$", "<a href=http://\\1>\\1</a> ", $slovo[$y]);
elseif (EregI("^(http://.+\..{2,3})$", $slovo[$y])):
$odkaz = EregI_Replace("^(http://.+\..{2,3})$", "<a href=\\1>\\1</a> ", $slovo[$y]);
else:
$odkaz = $slovo[$y] . " ";
endif;
$celek .= $odkaz;
else:
$delit = Ceil(StrLen($slovo[$y])/$znak);
for($z=0;$z<$delit;$z++):
$cast = Substr($slovo[$y], $z*$znak, $znak);
$celek .= $cast . " - ";
endfor;
endif;
endfor;
//povolime tyto tagy <b> <u> <i>
$zprava = Str_Replace("<b>", "<b>", $celek);
$zprava = Str_Replace("</b>", "</b>", $zprava);
$zprava = Str_Replace("<i>", "<i>", $zprava);
$zprava = Str_Replace("</i>", "</i>", $zprava);
$zprava = Str_Replace("<u>", "<u>", $zprava);
$zprava = Str_Replace("</u>", "</u>", $zprava);
$zprava = "<tr><td colspan=\"2\"><h3><br>$zprava</h3></td></tr></table><hr color=#666666>\n";
$write = StripSlashes($jmeno . $cas . $www . $email . $zprava);
if (File_Exists ("kniha.txt")):
$fp = FOpen ("kniha.txt", "r");
$data = FRead ($fp, FileSize("kniha.txt"));
FClose($fp);
endif;
$fp = FOpen ("kniha.txt", "w");
FWrite ($fp, $write.$data);
FClose ($fp);
?>
<head>
<META HTTP-EQUIV="Refresh" CONTENT="0; URL=vzkazy.php">
</head>
tie zdrojaky sa mi velmi citat nechce..
vypisuje to aj daku chybu?
si si isty, ze ten textak ma prava 770?
Tomu věřím, ale dík za ochotu. Nevypisuje žádnou chybu, prostě znovu načte stránku s formulářem a prostor kde se má zobrazit zpráva je prázdný.
Zkoušel jsem místo kniha.txt soubor book.dat, ale ani ten nepomohl.
Jo, txt ma práva 770. Ale všechno marný... Je ještě nejaký řešení?
skus pouzivat namiesto npr. $meno $_REQUEST["meno"];
$meno je opodstatnene povazovane za security hazard..
ak ti to nepojde, skus vyhodit
<head>
<META HTTP-EQUIV="Refresh" CONTENT="0; URL=vzkazy.php">
</head>
a dat tam dake debugovacie spravy..
npr. echo "Vytvaram subor";
echo "zapisujem do suboru";
..
a inac pouzivaj na redirect
headers("Location: vzkazy.php");
exit;
Zatím se to nerozběhlo. Možná dělám někde chybu. Nemůžete mi to prosím sepsat dohromady. Mockrát díky.
skus toto>
$jmeno = HTMLSpecialChars($_REQUEST["jmeno"]);
$email = HTMLSpecialChars($_REQUEST["email"]);
$web = HTMLSpecialChars($_REQUEST["web"]);
Ludko:
Měl by si se opravit, i když to fato asi pochopil. Fci headers já osobně neznám.
A mas ty vobec nainstalovane na tom pc PHP?
Díky moc všem za pomoc! Zápis v scriptě je opraven, dík. Problém byl také na straně serveru, kde jsou vypnuté globálni proměnné. Když vše nastavili, tak zápis funguje jak má.
ono tie globalne premenne si nechaj vypnute..
je to bezpecnostne riziko si to takto povolovat..
Áno. To jistě. Ještě jednou dík.