Autor | Zpráva | ||
---|---|---|---|
Babameta Profil * |
#1 · Zasláno: 11. 9. 2010, 08:28:30
Dobrý den,
mám problém s jednoduchou diskusí v php... V tomto jazyku jsem naprostý začátečník takže to určitě bude nějaká banální chyba :-). Předem se za to omlouvám :-). Ale k věci: Mám soubor navstevnikniha.php: <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <title>Návštěvní kniha</title> <meta http-equiv="Content-Type" content="text/html; charset=windows-1250"> <link rel="stylesheet" href="style.css" type="text/css" media="screen, projection"> </head> <body> <form action="vyhodnoceni.php" method="post"> <b>Jméno:*</b><input type="text" name="jmeno"><br> <b>E-mail:</b><input type="text" name="email"><br> <input type="text" name="text"><br> <input type="submit" value="Odeslat" cols="50" rows="30"> </form> <p>* položky označené hvězdičkou jsou povinné</p> <?php $handle = fopen("diskuse.txt", "r"); if ($handle) echo "<br>"; else die("Otevření souboru selhalo."); $nacteno = fread($handle); echo "<b>Diskuse:</b><br> ", $nacteno; ?> <div id="diskuse"> </div> </body> </html> </body> </html> a pak soubor vyhodnoceni.php: <?php $jmeno = $_POST["jmeno"]; $email = $_POST["email"]; $text = $_POST["text"]; $handle = fopen("diskuse.txt","a"); fclose($handle); $handle = fopen("diskuse.txt","a"); fwrite($handle, ".$jmeno"); fwrite($handle, ".$email"); fwrite($handle, ".$text"); fclose($dhandle); ?> Jak by to mělo fungovat asi poznáte. Zdá se že všechno funguje dobře až na zapisování do souboru (pro jistotu jsem ho i založil, kdyby byl problém v tom, že si ho php samo neumí založit ,ale nepomohlo. Web můžete najít ZDE Díky moc za odpovědi Babameta |
||
Nox Profil |
#2 · Zasláno: 11. 9. 2010, 08:37:07
kromě toho že máš fclose($dhandle) ... řádky 2-4 ve vyhodnocení jsou celkem zbytečné, jinak si vypiš - var_dump() - jestli v nich je opravdu požadovaný text
na začátek skriptu dej error_reporting(E_ALL); a mrkni se, jestli ti to nevypisuje žádnou chybu na práci se soubory (pokud nemusí být optimalizovaná) máš jednodušší file_get_contents/file_put_contents mj. jak plánuješ rozlišovat kde končí 1 záznam když ti někdo do $text dá tečku? (což je celkem používaný znak) |
||
mckay Profil |
#3 · Zasláno: 11. 9. 2010, 08:47:55
A jako dodatek… nevidím tu nikde ochranu proti XSS, nebo jsem se přehlédl?
|
||
Babameta Profil * |
#4 · Zasláno: 11. 9. 2010, 08:50:16
Díky za rychlou odpověd.
Error hlášku te nevypisuje. Pak se chci zeptat jak funguje ten var_dump()? Díky. Já jsem to dělal podle článků na www.zive.cz (třeba tady). Takže jsem se řídil tím co mají tam... Je to můj první vlastní php kód takže s tim jsem ještě nějak nepočítal. Jinak asi bych to změnil na diskuse.dat místo .txt jak to měli někde uvedený a pak bych tam dal aby se zapisovala oddělovací čára... |
||
Babameta Profil * |
#5 · Zasláno: 11. 9. 2010, 08:51:22
mckay: jsem začátečník a tomuhle ještě nerozumim :-( Rozhodně o žádné ochraně nevim. díky (sory nemůžu editovat nejsem registrovanej)
|
||
panther Profil |
#6 · Zasláno: 11. 9. 2010, 08:53:08 · Upravil/a: panther
Babameta:
„Pak se chci zeptat jak funguje ten var_dump()?“ var_dump „jak to měli někde uvedený a pak bych tam dal aby se zapisovala oddělovací čára...“ oddělovač si můžeš zvolit vlastní, téměř cokoliv, co nikdo nebude používat (např. ~~). Samozřejmě, ideální by byla databáze, co si budeme povídat. Když už sem píšu, v HTML si místo toho nataženého textového inputu chtěl využít asi textareu, tvoje stylování skrze atribut name navíc nebude fungovat v IE6. Nikde tam není ani ošetření e-mail, koukni se třeba na funkci filter_var. |
||
Babameta Profil * |
#7 · Zasláno: 11. 9. 2010, 09:02:12
panther: Díky za rady.
Už jsem to předělal na textareu. Díky Z toho anglického popisu jsem filter var moc nepochopil...přecejenom nejsem ještě dokonalý angličtinář :-) U var_dumpu jsem na tom podobně... Fakt pardon za mojí nechápavost, ale php dělám teprve pár dní jako samouk. Díky moc |
||
panther Profil |
#8 · Zasláno: 11. 9. 2010, 09:05:24
Babameta:
u obou funkcí jsou příklady, ty jsou pochopitelné. Var_dump vypíše obsah pole (zatímco echo ti napíše jen „array“). U druhé zmiňované funkce se podívej na příklad, Example #1. Poradil jsem ti to k ošetření e-mailové adresy, z těch pár řádek použití pochopíš, snad. |
||
Babameta Profil * |
#9 · Zasláno: 11. 9. 2010, 09:07:02
Ještě jak jsem tam dal to textarea tak mi nevim proč zmizelo tlačítko odeslat a ta věta podtim :-(
|
||
panther Profil |
#10 · Zasláno: 11. 9. 2010, 09:09:30
Babameta:
podívej se na JPW, jak se textarea zapisuje. Tohle jsou věci, s kterými nemusíš sem psát hned, jak ti něco nejde. Nad problémem přemýšlej, studuj odkázané materiály. Nebudu/eme ti tu všechno říkat, musíš se snažit sám taky trochu. |
||
Babameta Profil * |
#11 · Zasláno: 11. 9. 2010, 09:10:50
panther: Díky moc. To filter_var už chápu (snad): takže to zkontroluje tvar emailu, ale pokud není správný tak se stane co? Bude příkaz die? Nebo se email prostě nevypíše? Co se var_dump týče tak mám ho používat místo echo pro vypsání diskuse?
|
||
panther Profil |
#12 · Zasláno: 11. 9. 2010, 09:14:02
Babameta:
ad. filter_var: zkus si otestovat pár příkladů (platných a neplatných mailů), pochopíš. ad. var_dump: ne. Jen ke zjištění, co je obsahem pole $_POST. Podívej se na rozdíl mezi var_dump ('text'); echo 'text'; Zase, než jsi se zeptal, snad se dá ověřit, co co vypisuje. Další ze série zbytečných otázek. |
||
Babameta Profil * |
#13 · Zasláno: 11. 9. 2010, 09:15:17
Textareu jsem zapomněl uzavřít. Promiň.
|
||
Babameta Profil * |
#14 · Zasláno: 11. 9. 2010, 09:19:04
Promiň. var_dump jsem použil a opravdu ty proměnný jsou vyplňěný datama z formuláře takže chyba asi fakt bude v zápisu...
|
||
Babameta Profil * |
#15 · Zasláno: 11. 9. 2010, 09:28:17
Teď jsem zkoušel tu funkci filter_var. Už to chápu.
Myslel jsi to použití nějak takhle: $overeni = filter_var('$email', FILTER_VALIDATE_EMAIL); if ($overeni == "bool(false)") die ("Neplatný tvar e-mailu"); else echo (""); ?? |
||
Babameta Profil * |
#16 · Zasláno: 11. 9. 2010, 21:05:34
Mohl by mi prosím někdo ještě pomoci tenhle problém dořešit? Díky.
|
||
panther Profil |
#17 · Zasláno: 11. 9. 2010, 21:13:40 · Upravil/a: panther
Babameta:
nikdy nepiš více příspěvků za sebou za účelem vytažení diskuse. To, že ti nikdo nenapíše během odpoledne nic neznamená. <?php if (filter_var('mail@mail.com', FILTER_VALIDATE_EMAIL)) echo 'Je mail'; else echo 'Neni mail'; ?> |
||
Babameta Profil * |
#18 · Zasláno: 12. 9. 2010, 10:28:16
Tak jsem dosáhl jistýho pokroku. Přepnul jsem se na webzdarma, který mi začal vypisovat chyby. Prozatimně jsem zrušil filter_var, protože mi to tam hlásilo nějakou chybu (jen abych věděl jestli to půjde). A soubor txt se vytvořil a zpráva se do něj zapsala. Bohužel teď zase nefunguje čtení ze souboru hlásí mi to tuhle chybu: Warning: Wrong parameter count for fread() in /3w/wz.cz/k/ks-webs/php/navstevnikniha.php on line 27
a řádek 27: $nacteno = fread($handle); |
||
panther Profil |
#19 · Zasláno: 12. 9. 2010, 10:30:43
Babameta:
filter_var tam asi fungovat nebude, nevím, jaké tam je PHP (funguje od PHP 5.2.0). V tom případě hledej regulární výrazy. Druhou chybu si dohledej sám (manuál). |
||
Babameta Profil * |
#20 · Zasláno: 12. 9. 2010, 10:31:51
Díky. Regulární výrazy znám z zive.cz odkud se taky php učim.
|
||
Babameta Profil * |
#21 · Zasláno: 12. 9. 2010, 11:45:06
Ahoj,
teď se snažim diskusi vylepšit tak aby se příspěvky od sebe oddělovaly sepsal jsem to nějak takhle: $zprava="<br><i>"$jmeno", </i>" date("j.n.Y G:i:s) "<br>"$email"<br>"$zprava"<br><hr>"; ale nefunguje to a hází mi to: Parse error: syntax error, unexpected T_VARIABLE in /3w/wz.cz/k/ks-webs/php/vyhodnoceni.php on line 15 Mohl by mi někdo prosím vysvětlit (nebo dát odkaz, kde je to vysvětlené) jak se tedy vkládají html značky do php. Jestli je teda problém v tom. Díky |
||
panther Profil |
#22 · Zasláno: 12. 9. 2010, 11:57:01
Babameta:
řetězce se spojují tečkou. |
||
Tasartir Profil |
#23 · Zasláno: 12. 9. 2010, 12:01:18
Textové řetězce do proměnné musíš skládat pomocí tečky. A pak máš chybu v uvozovkách u date. Mělo by to být takhle nějak:
$zprava="<br><i>".$jmeno.", </i>".date("j.n.Y G:i:s")."<br>".$email."<br>".$zprava."<br><hr>"; (A myslím, že date ti nebude fungovat tak, jak chceš. Takhle ti to vždy vypíše aktuální datum a čas při načtení stránky.) A nebo pak třeba takhle: $datum = date("j.n.Y G:i:s"); $zprava = "<br><i>$jmeno, </i>$datum<br>$email<br>$zprava<br><hr>"; Pokud je v php proměnná v uvozovkách, tak se provede tak, jak má. |
||
Babameta Profil * |
#24 · Zasláno: 12. 9. 2010, 12:03:44
Taartir: Díky moc¨, že ses rozepsal :-D Už to chápu. Fakt moc díky.
|
||
Časová prodleva: 14 let
|
0