Autor | Zpráva | ||
---|---|---|---|
Eryx Profil |
#1 · Zasláno: 23. 3. 2012, 11:05:14
Ahoj,
dělám nástěnku v php. (Zdrojáky jsem stáhnul z Internetu a mírně upravil) Mám problém s tim že, když ve formuláři vyplním jméno a text, odešlu to z formuláře do skriptu pro zápis, tak se mi do souboru správně zapíše Jméno uživatele, datum a čas vložení příspěvku a odeslaný text, a potom o pár sekund později se do souboru zapíše ještě nový datum a čas bez jména uživatele a textu. Při ladění skriptu na PC se to neděje. Děje se to jen na hostitelském webu. Dá se tomu nějak zabránit? Děkuji za pomoc. Zde si to můžete vyzkoušet: http://jkrepinsky.sweb.cz/test/index.php index.php <title>Nástěnka představenstva</title><script language="JavaScript"><!-- function zkontroluj(formular) { if (formular.jmeno.value=="") { alert("Vaše jméno musíte vyplnit!"); formular.jmeno.focus(); return false; } else if (formular.zprava.value=="") { alert("Text zprávy musíte vyplnit!"); formular.zprava.focus(); return false; } else return true; } // --> </script></head> <body style="color: rgb(0, 0, 0); background-color: rgb(210, 255, 255);" alink="#000099" link="#000099" vlink="#990099"> <table align="center" width="80%"> <tbody><tr><td class="nadpis" width="100%"> <center>VIP - Nástěnka představenstva</center><div style="text-align: center;"><small style="font-weight: normal;"><small><span style="color: black;">(Maximální délka jednoho příspěvku je omezena na 5000 znaků a mezer.)</span></small></small></div><br> <table border="0" cellspacing="0" cellpadding="0" align="center"> <form action="insert.php" 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 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="50" 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"> <?php function Odkaz() { if (File_Exists ("book.dat")): echo "<center><font class=jmeno>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=index.php?idprispevek=$x>" . ($x*20-19) . "-" . $x*20 . "</a>  ";//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"> <?php if (File_Exists ("book.dat")): //existuje soubor book.dat $idprispevek = $_GET[idprispevek]; 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(); ?> insert.php <?php $jmeno = $_POST['jmeno']; $email = $_POST['email']; $web = $_POST['web']; $zprava = $_POST['zprava']; $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 ?> <?php $data = File ("adresy.txt"); for ($i = 0; $i < Count ($data); $i++) $eladresa[$i]="$data[$i]"; for ($op=0;$op<$i;$op++): if ($op!=0): $seznam .=","; endif; $seznam .=$eladresa[$op]; endfor; $seznam = Str_Replace("\r\n","", $seznam); $predmet = "Webove stranky druzstva"; $email = "Druzstvo@seznam.cz"; $zprava = ' !!! POZOR - na VIP Nastenku byl vlozen novy prispevek !!! '; Mail($seznam, $predmet, $zprava, "From: " . $email); ?> <html><head> <META HTTP-EQUIV="Refresh" CONTENT="0; URL=index.php"> </head></html> |
||
peta Profil |
#2 · Zasláno: 23. 3. 2012, 13:18:39
Proti dvojimu zapisu je mozne s formularem odesila skryty kontrolni kod. Pokud uz je takovy kod zapsany v souboru, tak tam zpravu neprida.
Html kod formulare neni validni. Pod ta TABLE tag FORM nepatri. Ja bych to dal nad TABLE. Mozna bych rekl, ze ti prohlizec vyrobi 2 formulare a oba odesle. alidaci muzes testovat pres http://validator.w3.org/check?uri=http%3A%2F%2Fjkrepinsky.sweb.cz%2Ftest%2Findex.php&charset=%28detect+automatically%29&doctype=Inline&group=0 Pri zapisovani do souboru si jej nezamykas pres flock, takze muze dojit k tomu, ze 2 lide soucasne zapisuji do souboru. Obsah souboru se vymaze a soubor zustane ve stavu poskozeny, neumozni php dalsi praci s nim. |
||
Eryx Profil |
#3 · Zasláno: 23. 3. 2012, 14:16:36
peta:
Děkuji moc za odpověď. Jen by mne ještě zajímalo, proč se to při ladění na PC neprojeví. |
||
Časová prodleva: 12 let
|
0