Návštěvní kniha

mam problém když dojde při odeslání formuláře k chybě tak se smažou veškerá data
zde zdrojoví kod :
-----------------------------------------------------
kniha.php
----------------------------------------------

<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1250">
<LINK href="styl.css" rel="stylesheet" type="text/css">
<title>Kniha návštev</title>
<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 width="50%" align="center">
<tr><td width="100%" class=nadpis>
<center>Kniha návštev</center><br><br>

<table border="0" cellspacing="0" cellpadding="0" align="center">
<form action="insert.php3" method="post" onSubmit="return zkontroluj(this)">
<tr><td width=120 class=povinne>
Jméno:
</td><td>
<input type="text" name="jmeno" size="30" maxlength="60" class="inputbook">
</td></tr>
<tr><td width=120 class=povinne>
E-mail:
</td><td>
<input type="text" name="email" value="@" size="30" maxlength="60" class="inputbook">
</td></tr>
<tr><td width=120 class=nepovinne>
Web (i s http://):
</td><td>
<input type="text" name="web" value="http://" size="30" maxlength="60" class="inputbook">
<input type="hidden" name="odeslano" value="ano">
</td></tr>
<tr><td valign=top width=120 class=povinne>
Text zprávy: <font size="-2" color="Black">jsou povoleny tagy <b>, <u> a <i>, můžete psát i odkazy ve tvaru www.neco.cz nebo http://neco.neco.cz</font>
</td><td>
<textarea cols="29" rows="5" class=inputbook name="zprava"></textarea>
</td></tr>
<tr><td width=120> </td><td>
<center><input type="submit" class=bluebutton value="Odeslat">   <input type="Reset" class=bluebutton value="Vymazat"></center>
</form></td></tr></table>


<hr color="#00008B">
<?
function Odkaz()
{
if (File_Exists ("book.dat")):
echo "<center><font class=cas>Zobrazit příspevky:<br><br>";

$prispevek = File("book.dat"); //načte obsah souboru do pole
$strana = Ceil(Count($prispevek)/20); //vypocita kolik zaberou příspěvky stran (po 20)

for ($x=1;$x<=$strana;$x++): //zobrazí tolik odkazů kolik je stran
echo "<a href=kniha.php3?idprispevek=$x>" . ($x*20-19) . "-" . $x*20 . "</a>  &nbsp";//do každého odkazu přidá číslo strany a jaké příspěvky budou zobrazovány
endfor;
echo "</center>";
endif;
}
Odkaz();
?>
<hr color="#00008B">
<?
if (File_Exists ("book.dat")): //existuje soubor book.dat
if (!IsSet($idprispevek)) $idprispevek=1; //je zinicializována proměnná id, pokud ne přiřadí standartní jedničku
$pocatek = $idprispevek*20-20; //podle id spočítá od kolikátého
$konec = $idprispevek*20-1; //... do kolikáté příspěvku se bude zobrazovat

$prispevek = File("book.dat"); //načte do pole obsah book.dat
for ($i=$pocatek;$i<=$konec;$i++):
echo $prispevek[$i]; //vypíše příspěvky mezi $prispevek a $konec
endfor;
endif;

Odkaz();
?>
<hr color="#00008B">
</td>
</tr>
</table>
------------------------------------------------------
insert.php
----------------------------------------------------
<?
//odstraneni nebezpecnych znaku
$jmeno = HTMLSpecialChars($jmeno);
$email = HTMLSpecialChars($email);
$web = HTMLSpecialChars($web);

//formatovani prispevku
$jmeno = "<table><tr><td class=jmeno>$jmeno</td></tr>";
$email = "<tr><td class=odkaz><A HREF=mailto:$email>$email</A></td></tr>";
if ($web!="" && $web!="http://"):
$www = "<tr><td class=odkaz><A HREF=\"$web\">$web</A></td></tr>";
endif;
$cas = "<tr><td class=cas>" . Date("j. " . "m. " . "Y, " . "H:i:s") . "</td></tr>";

$zprava = SubStr($zprava, 0, 1500); //bereme pouze 1500 znaku
$zprava = Trim($zprava); //odstraneni mezer z konce retezce
$zprava = HTMLSpecialChars($zprava); //odstraneni nebezpecnych znaku
$zprava = Str_Replace("\n"," <BR> ", $zprava); //nahrazeni koncu radku na tagy <BR>

$znak = 66; //dlouha slova delit po .. znacich
$slovo = Split("[[:blank:]]+", $zprava); //rozdeleni textu na slova
for($y=0;$y<Count($slovo);$y++):
$slovo[$y] = Trim($slovo[$y]); //odstraneni mezer na konci slova
if (Strlen($slovo[$y])<=$znak): //nebudeme delit
if (EregI("^(www\..+\..{2,3})$", $slovo[$y])): //jedna se odkaz typu www......
$odkaz = EregI_Replace("^(www\..+\..{2,3})$", "<a href=http://\\1>\\1</a> ", $slovo[$y]);
elseif (EregI("^(http://.+\..{2,3})$", $slovo[$y]))://jedna se odkaz typu http://.......
$odkaz = EregI_Replace("^(http://.+\..{2,3})$", "<a href=\\1>\\1</a> ", $slovo[$y]);
else:
$odkaz = $slovo[$y] . " "; //jedna se o normalni slovo
endif;
$celek .= $odkaz; //spojime vsechny slova opet dohromady
else:
$delit = Ceil(StrLen($slovo[$y])/$znak); //delime dlouhe slovo
for($z=0;$z<$delit;$z++):
$cast = Substr($slovo[$y], $z*$znak, $znak);
$celek .= $cast . " - "; //na konec jednotlivych casti pridame pomlcku
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 class=text><br>$zprava</td></tr></table><hr color=#00008B>\n";

$write = StripSlashes($jmeno . $email . $www . $cas . $zprava); //odstraneni escape sekvenci

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
?>
<head>
<META HTTP-EQUIV="Refresh" CONTENT="0; URL=kniha.php3">
</head>

---------------------------------------
obsahuje ještě styl.css

ví někdo jak to předělat ? aby k tomu nedocházelo ?
Je to moc dlouhý.....

Používej databázi.
pruser je to že za se nevyznam v databázích a neumim jí připojit :-)
>> mam problém když dojde při odeslání formuláře k chybě tak se smažou veškerá data

Tomu nerozumím, k jaký chybě?
Pokud se soubor otevře ve stejnou dobu několikrát (několik uživatelů zapisuje do knihy ve stejným čase), tak se potom smaže. Zde pomůže fce flock().
Hledej zde ve všech diskusích, už tady o tom bylo nedávno psáno a i její použití.

Petr
Tak se uč: interval.cz ->vývoj aplikací ->databáze
Bohužel ani flock() není stoprocentní, používám ho na počítadlo (počet návštěvníků se ukládá do souboru) a čas od času stejně dojde k vynulování :-/.