Autor Zpráva
Sirius
Profil *
S PHP začínám, ale na své stránky potřebuji nutně do konce roku dostat upload souborů a nějakou malou dikskusi bez databáze. Vůbec nevím jak na ten upload, žádný který byl uveden na netu mi nefunguje... A u diskuse mám problém, že se mi nad vzkazy zobrazují 4 řádky s oznámením a nové zprávy se přidávají až nakonec stránky, ale já je chci nahoře.
Zde je kód:

<?
$jmeno = $_POST['jmeno'];
$email = $_POST['email'];
$web = $_POST['web'];
$zprava = $_POST['zprava'];

$jmeno=HTMLSpecialChars($jmeno); //převede některé znaky na entity
$email=HTMLSpecialChars($email);
$web=HTMLSpecialChars($web);
$zprava=HTMLSpecialChars($zprava);

$jmeno=stripslashes($jmeno); //odstraní lomítka
$email=stripslashes($email);
$web=stripslashes($web);
$zprava=stripslashes($zprava);

$zprava = str_replace(" "," <br> ", $zprava); //nové řádky nahradí <br>
$zprava = substr($zprava, 0, 10000);//zpráva bude mít maximálně 10000 znaků pomocí substr

$email_celek=" | <a href='mailto:$email'>$email</a>";
$web_celek=" | <a href='$web'>$web</a>";

if ($web=="http://"){$web_celek="";} //pokud se nevyplní nic se nevypíše
if ($email==""){$email_celek="";} // -||-

if ($zprava!="" and $jmeno!=""){ //provede se pokud není prázdná zpráva a jméno
$celek="<p>Zprávu poslal <strong>$jmeno</strong>$email_celek $web_celek</p><p>$zprava</p><hr>";
$soubor = fopen ('data-2.inc','a'); //otevře soubor pro doplňování
fwrite ($soubor, $celek); //zapíše zprávu
fclose ($soubor); //zavře soubor
}
?>
<h1>Vzkazy</h1>
<? include "data-2.inc"; ?>
<h1>Přidání zprávy</h1>
<form action="vzkazy.php" method="post"></p>
<table id="table">
<tr><th>*Jméno: </th><td><input type="text" name="jmeno" maxlength="25"></td></tr>
<tr><th>E-mail: </th><td><input type="text" name="email" maxlength="25"> [nepovinné]</td></tr>
<tr><th>Web: </th><td><input type="text" name="web" value="http://" maxlength="30"> [nepovinné]</td></tr>
<tr><th>*Zpráva: </th><td><textarea cols="60" rows="5" name="zprava"></textarea></td></tr>
<tr><th></th><td><input type="submit" value="odeslat"></td></tr>
</table>
</form>


A tady jsou ty oznámení co mi to píše:


Notice: Undefined index: jmeno in c:program fileseasyphp1-8wwwavzkazy.php on line 41

Notice: Undefined index: email in c:program fileseasyphp1-8wwwavzkazy.php on line 42

Notice: Undefined index: web in c:program fileseasyphp1-8wwwavzkazy.php on line 43

Notice: Undefined index: zprava in c:program fileseasyphp1-8wwwavzkazy.php on line 44


Prosím pomožte mi.
DJ Miky
Profil
Aby se to přidávalo nové nahoru, musíš tento kód:

$soubor = fopen ('data-2.inc','a'); //otevře soubor pro doplňování
fwrite ($soubor, $celek); //zapíše zprávu

Nahradit tímto:

$soubor = fopen ('data-2.inc','r+'); // otevře soubor pro čtení a zápis
$obsah=fread($soubor,filesize('data-2.inc')); // načte aktuální obsah souboru
$data=$celek.$obsah; // vytvoření dat pro zápis
fwrite ($soubor, $data); // zapíše data
Sirius
Profil *
Díky moc jdu to hned vyzkouset, ale nevis nahodou jak odstranit ty hlášky ?
Sirius
Profil *
Tak to nefunguje pise to:

Warning: fopen(data-2.inc): failed to open stream: No such file or directory in c:program fileseasyphp1-8wwwvzkazy.php on line 28

Warning: filesize(): Stat failed for data-2.inc (errno=2 - No such file or directory) in c:program fileseasyphp1-8wwwvzkazy.php on line 29

Warning: fread(): supplied argument is not a valid stream resource in c:program fileseasyphp1-8wwwvzkazy.php on line 29

Warning: fwrite(): supplied argument is not a valid stream resource in c:program fileseasyphp1-8wwwvzkazy.php on line 31

Warning: fclose(): supplied argument is not a valid stream resource in c:program fileseasyphp1-8wwwvzkazy.php on line 32
DJ Miky
Profil
Sirius
Pošli sem řádky 41 - 44, v tomhle kódu jsou řádky 41, 43, 44 prázdné.

BTW, na nahrazení nových řádků <br> můžeš použít přímo fci nl2br().
DJ Miky
Profil
Sirius
No such file or directory

Zkus ten soubor nejprve vytvořit (data-2.inc).
Sirius
Profil *
sorry, predtim jsem to mel vlozeny do stranky, takze cisla radku nesedi.. to ze to nefungovalo byla moje chyba, snazilo se to zapisovat do neexistujiciho souboru. Ted to akorat napise:
Notice: Undefined index: jmeno in c:program fileseasyphp1-8wwwvzkazy.php on line 2

Notice: Undefined index: email in c:program fileseasyphp1-8wwwvzkazy.php on line 3

Notice: Undefined index: web in c:program fileseasyphp1-8wwwvzkazy.php on line 4

Notice: Undefined index: zprava in c:program fileseasyphp1-8wwwvzkazy.php on line 5

ale opravdu nevim jak se zbavit tohodle
Sirius
Profil *
Tak jsem prisel na chybu. Ono to znovu opisuje všechny příspěvky a přidá ten nový.. nakonec z toho vznikne strasne patlanice, kazdy texte je napsan nekolikrat. Myslim ze problem je v tom ze to zapisuje promennou data a ta obsahuje $obsah a u tehle promenne je podle me problem. Vubec tomu nerozumim jen sem se snazil logicky uvazovat proc to pise vsechno znova...
krteczek
Profil
Pokud Ti bude stačit tato kniha návštěv: http://www.krteczek.czweb.org/jpw/kniha-navstev/ je bez db, jdou v ní mazat příspěvky...
krteczek
Sirius
Profil *
Ta kniha vypada pekne akorat kdyz se ji snzaim nainstalovat tak to pise

Warning: fopen(./data/docasne.php) [function.fopen.php]: failed to open stream: Permission denied in /home/free/own.cz/t/tercieb/root/www/kniha/podminky.php on line 113

Warning: fputs(): supplied argument is not a valid stream resource in /home/free/own.cz/t/tercieb/root/www/kniha/podminky.php on line 114

Warning: fclose(): supplied argument is not a valid stream resource in /home/free/own.cz/t/tercieb/root/www/kniha/podminky.php on line 134

Je mi líto, zápis údajů se nepovedl.
krteczek
Profil
musíš nastavit adresáři data chmod 777 aby šlo do něj zapisovat.
krteczek
tcladin
Profil
to: DJ Miky
No opravdu vzniká text kde
$soubor = fopen ('data-2.inc','r+'); // otevře soubor pro čtení a zápis
$obsah=fread($soubor,filesize('data-2.inc')); // načte aktuální obsah souboru
$data=$celek.$obsah; // vytvoření dat pro zápis
fwrite ($soubor, $data); // zapíše data

zadal sem příspěvek 1 pak 2 pak 3 pak 4

výsledek:
v 08/05/2007 11:24:14 poslal t
1
v 08/05/2007 11:24:20 poslal t
2
v 08/05/2007 11:24:14 poslal t
1
v 08/05/2007 11:24:25 poslal t
3
v 08/05/2007 11:24:14 poslal t
1
v 08/05/2007 11:24:20 poslal t
2
v 08/05/2007 11:24:14 poslal t
1
v 08/05/2007 11:24:40 poslal t
4
v 08/05/2007 11:24:14 poslal t
1
v 08/05/2007 11:24:20 poslal t
2
v 08/05/2007 11:24:14 poslal t
1
v 08/05/2007 11:24:25 poslal t
3
v 08/05/2007 11:24:14 poslal t
1
v 08/05/2007 11:24:20 poslal t
2
v 08/05/2007 11:24:14 poslal t
1
tcladin
Profil
to: sirius

tak sem se do toho pustil a vymyslel sem řešení:

$celek="<h3>v $datum poslal <strong>$jmeno</strong>$email_celek $web_celek</h3> <i>$zprava</i> <br>";
$soubor = fopen ('data.inc','r'); //otevře soubor pro čtení, ukazatel na začátku souboru
$obsah = fread($soubor,filesize('data.inc')); // načte aktuální obsah souboru
$data = $celek.$obsah ; // spojení nových a minulých zpráv
fclose ($soubor); //zavře soubor
$soubor = fopen ('data.inc','w'); //otevře soubor pro zápis a nastaví jeho délku na 0, ukazatel na začátku souboru
fwrite ($soubor, $data); //zápis spojených zpráv
fclose ($soubor); //zavře soubor

a funguje to, jen pokud je filesize("data.inc")=0 tak zahlásí chybu:
Warning: fread() [function.fread]: Length parameter must be greater than 0 in /www/4/site28954/wwwroot/forum/forum.php on line 49

Ale pokud už máš alespoň jednu zprávu v data.inc, je vše ok.

Dále doporučuju tenhle web, kde je popis funkcí php : http://cz.php.net/

Jesli máte někdo nápad jak to udělat lépe(bez MySql) tak to vítám.
Toto téma je uzamčeno. Odpověď nelze zaslat.

0