Autor | Zpráva | ||
---|---|---|---|
peklis Profil * |
#1 · Zasláno: 23. 1. 2012, 17:09:45
Ahoj,
rád bych dal na web (bez RS) možnost primitivního komentování článků. Na Googlu jsem hledal, ale nikde jen jednoduchý kód. Já se s php teprv učím, a zatim mi to moc nejde :D. Představoval bych si to nějak takhle, ale jednodušeji, v tom formuláři na přidávání by stačilo jen jméno a text komentáře.. Pomůžete mi pls? Díky |
||
ninja Profil |
#2 · Zasláno: 23. 1. 2012, 17:21:25
Můžete využít třeba Facebook komentáře, nepotřebujete ani PHP.
|
||
Chamurappi Profil |
#3 · Zasláno: 23. 1. 2012, 17:31:40
Reaguji na ninju:
Čímž si odřízne nemalou část lidí, kteří kašlou na Facebook. |
||
peklis Profil * |
#4 · Zasláno: 23. 1. 2012, 17:31:57
To je zajímavé řešení, ale radši bych měl ten php kód, protože se php učím a postupně bych to vylepšoval..
|
||
nemeja Profil |
Tady jsem ti napsal na rychlo jednoduchý systém na komentáře, kde se to ukládá do souboru.
Kod vlož do souboru.php <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <meta http-equiv="content-type" content="text/html; charset=UTF-8"> <meta name="generator" content="PSPad editor, www.pspad.com"> <title></title> </head> <body> <?php $delimeter="/*f1f*\\"; // delimeter můžeš ponechat $cesta_souboru="log.txt"; // cesta k souboru TXT, do kterého se budou daný komentáře ukládat $umisteni_scriptu=""; //umístění tohoto souboru if(isset($_POST['komentar'])){ //pokud kliknou na odeslat tak se to začne zpracovávat if(!in_array("",array($_POST['jmeno'],$_POST['email'],$_POST['text']))){ //zkontroluje, zda vyplnili všechny položky $soubor=file_get_contents($cesta_souboru); // načtu si soubor s předchozíma komentářema $zapis=$soubor."\n".$_POST['jmeno'].$delimeter.$_POST['email'].$delimeter.$_POST['text']; //přidám starý text + si dám delimetr mezi jednotlivé nové stringy file_put_contents($cesta_souboru, $zapis); //přepíšu soubor } else { echo "<b>Nemáte zadané všechny hodnoty.</b><br>"; // pokud nejsou zadané všechny hodnoty, vypíše to tuto hlášku } } $komentare=file_get_contents($cesta_souboru); // načtení souboru do proměnné $rozdeleni_radky=explode("\n",$komentare); // rozdělení dle řádků => na jednotlivé příspěvky if(count($rozdeleni_radky)!=0){ // pokud je v něm víc jak jeden komentář for($i=0;$i<count($rozdeleni_radky);$i++){ // cyklus, pro všechny komentáře $roztrzeni=explode($delimeter,$rozdeleni_radky[$i]); // roztržení dle delimetru $koment=array("jmeno" => $roztrzeni[0] , "email" => $roztrzeni[1], "text" => $roztrzeni[2]); // pro hezčí vypisování přidáno do array echo "<b>Jmeno:</b> ".$koment['jmeno']."<br>"; // jednoduché vypsání echo "<b>Email:</b> ".$koment['email']."<br>"; echo "<b>Text:</b> ".$koment['text']."<br>"; echo "<hr><br>"; } } else { echo "Nebyl zatím zadán žádný komentář"; // vypsání hlášky, že zatím nebyl zadán žádný komentář } ?> <form method="POST"> Jmeno:<input type="text" name="jmeno"><br> Email:<input type="email" name="email"><br> Text:<textarea name="text"></textarea><br> <input type="submit" value="Odeslat" name="komentar"> </form> </body> </html> |
||
peklis Profil * |
#6 · Zasláno: 23. 1. 2012, 19:22:40
Díky moc, jdu to vyzkoušet :)
|
||
nemeja Profil |
#7 · Zasláno: 23. 1. 2012, 19:33:07
Jj, jako update navrhuji:
-Změna editoru na nějakej hezčí + podporu BB kodu( stačí preg_replace(); -Ošetření aby nešel vložit jscript -přejít na databázové řešení |
||
peklis Profil * |
#8 · Zasláno: 23. 1. 2012, 19:53:27
Je to přesně co jsem potřeboval, díky..
Ale má to pár chybek, je tam napsane "Nemáte zadané všechny hodnoty." ještě před pokusem to komentovat, divné je že je tam Jmeno, text a email také ještě než to bylo komentovane, a je tam nějaká chyba nebo poznámka k řádku číslo 29, což je tady: <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <meta http-equiv="content-type" content="text/html; charset=ISO8859-2"> <title>Komentáře</title> </head> <body> <p>Tohle je článek který má být komentován</p> <?php $delimeter=" - "; // delimeter můžeš ponechat $cesta_souboru="log.txt"; // cesta k souboru TXT, do kterého se budou daný komentáře ukládat $umisteni_scriptu=""; //umístění tohoto souboru if(isset($_POST['komentar'])){ //pokud kliknou na odeslat tak se to začne zpracovávat if(!in_array("",array($_POST['jmeno'],$_POST['email'],$_POST['text']))){ //zkontroluje, zda vyplnili všechny položky $soubor=file_get_contents($cesta_souboru); // načtu si soubor s předchozíma komentářema $zapis=$soubor."\n".$_POST['jmeno'].$delimeter.$_POST['email'].$delimeter.$_POST['text']; //přidám starý text + si dám delimetr mezi jednotlivé nové stringy file_put_contents($cesta_souboru, $zapis); //přepíšu soubor } else { echo "<b>Nemáte zadané všechny hodnoty.</b><br>"; // pokud nejsou zadané všechny hodnoty, vypíše to tuto hlášku } } $komentare=file_get_contents($cesta_souboru); // načtení souboru do proměnné $rozdeleni_radky=explode("\n",$komentare); // rozdělení dle řádků => na jednotlivé příspěvky if(count($rozdeleni_radky)!=0){ // pokud je v něm víc jak jeden komentář for($i=0;$i<count($rozdeleni_radky);$i++){ // cyklus, pro všechny komentáře $roztrzeni=explode($delimeter,$rozdeleni_radky[$i]); // roztržení dle delimetru $koment=array("jmeno" => $roztrzeni[0] , "email" => $roztrzeni[1], "text" => $roztrzeni[2]); // pro hezčí vypisování přidáno do array echo "<b>Jmeno:</b> ".$koment['jmeno']."<br>"; // jednoduché vypsání echo "<b>Email:</b> ".$koment['email']."<br>"; echo "<b>Text:</b> ".$koment['text']."<br>"; echo "<hr><br>"; } } else { echo "Nebyl zatím zadán žádný komentář"; // vypsání hlášky, že zatím nebyl zadán žádný komentář } ?> <form method="POST"> Jmeno:<input type="text" name="jmeno"><br> Email:<input type="email" name="email"><br> Text:<textarea name="text"></textarea><br> <input type="submit" value="Odeslat" name="komentar"> </form> </body> </html> přidám radši ještě screen: ještě jednou díky |
||
nemeja Profil |
#9 · Zasláno: 23. 1. 2012, 20:03:38
vložte na první řádek první komentář
|
||
ninja Profil |
#10 · Zasláno: 23. 1. 2012, 20:15:47
Kód od nemeja není ošetřen ani základně ošetřen proti zneužití, toto bych kamkoliv jinam než na localhost rozhodně nenasazoval.
Chamurappi: Sice odříznu určitou část uživatelů (v ČR je zrovna penetrace facebookem relativně velká), na druhou stranu mám ale bez práce funkční komentáře, které může další přinášet nemalou návštěvnost. O pohodlnosti pro uživatele (facebooku) ani nemluvě... |
||
peklis Profil * |
#11 · Zasláno: 23. 1. 2012, 20:46:59
nemeja
Tohle nechápu, ten script je funkční jen když je tam alespoň 1 komentář? Nešlo by to udělat tak že když tem nebude žádný, vypíše to třeba "tento článek ještě nikdo nekomentoval", nebo něco podobného? mimochodem četl jsem o těch databázích a docela mě to zaujalo, neznáte nějaký web kde je to srozumitelně vysvětleno? ninja zneužití mě netrápí, jsem začátečník a stejně bych to nepochopil.. navíc nevidím důvod proč by někdo chtěl zneužít můj web, nic by z toho neměl.. |
||
nemeja Profil |
#12 · Zasláno: 23. 1. 2012, 20:55:48
ninja:
„Kód od nemeja není ošetřen ani základně ošetřen proti zneužití, toto bych kamkoliv jinam než na localhost rozhodně nenasazoval.“ Ano není nijak ošetřen: peklis: „rád bych dal na web (bez RS) možnost primitivního komentování článků“ „To je zajímavé řešení, ale radši bych měl ten php kód, protože se php učím a postupně bych to vylepšoval..“ to zabezpečení si může dát jako první vylepšení ;) |
||
peklis Profil * |
#13 · Zasláno: 23. 1. 2012, 21:14:07
nemeja:
„vložte na první řádek první komentář“ I když tam přidám komentář, nápis "nemáte zadané všechny hodnoty" zmizí, ale stejně tam zůstane toto: Notice: Undefined offset: 1 in C:\Program Files\EasyPHP-5.3.8.1\www\komenty.php on line 29 Notice: Undefined offset: 2 in C:\Program Files\EasyPHP-5.3.8.1\www\komenty.php on line 29 Jmeno: Email: Text: |
||
nemeja Profil |
Upravil jsem to, ted stačí jen zadat název souboru, pokud neexistuje tak se vytvoří. Dále jsem udělal, že pokud je řádek prázdný, tak ho to přeskočí
upravený kod <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <meta http-equiv="content-type" content="text/html; charset=UTF-8"> <meta name="generator" content="PSPad editor, www.pspad.com"> <title></title> </head> <body> <?php $delimeter="/*f1f*\\"; // delimeter můžeš ponechat $cesta_souboru="log.txt"; // cesta k souboru TXT, do kterého se budou daný komentáře ukládat $umisteni_scriptu=""; //umístění tohoto souboru if(!file_exists($cesta_souboru)){ // pokud neexistuje soubor do kterého se má zapisovat, tak ho vytvoří file_put_contents($cesta_souboru,""); } if(isset($_POST['komentar'])){ //pokud kliknou na odeslat tak se to začne zpracovávat if(!in_array("",array($_POST['jmeno'],$_POST['email'],$_POST['text']))){ //zkontroluje, zda vyplnili všechny položky $soubor=file_get_contents($cesta_souboru); // načtu si soubor s předchozíma komentářema $zapis=$soubor."\n".$_POST['jmeno'].$delimeter.$_POST['email'].$delimeter.$_POST['text']; //přidám starý text + si dám delimetr mezi jednotlivé nové stringy file_put_contents($cesta_souboru, $zapis); //přepíšu soubor } else { echo "<b>Nemáte zadané všechny hodnoty.</b><br>"; // pokud nejsou zadané všechny hodnoty, vypíše to tuto hlášku } } $komentare=file_get_contents($cesta_souboru); // načtení souboru do proměnné $rozdeleni_radky=explode("\n",$komentare); // rozdělení dle řádků => na jednotlivé příspěvky if(count($rozdeleni_radky)!=0){ // pokud je v něm víc jak jeden komentář for($i=0;$i<count($rozdeleni_radky);$i++){ // cyklus, pro všechny komentáře if($rozdeleni_radky[$i]!=""){ $roztrzeni=explode($delimeter,$rozdeleni_radky[$i]); // roztržení dle delimetru $koment=array("jmeno" => $roztrzeni[0] , "email" => $roztrzeni[1], "text" => $roztrzeni[2]); // pro hezčí vypisování přidáno do array echo "<b>Jmeno:</b> ".$koment['jmeno']."<br>"; // jednoduché vypsání echo "<b>Email:</b> ".$koment['email']."<br>"; echo "<b>Text:</b> ".$koment['text']."<br>"; echo "<hr><br>"; } echo "Nebyl zatím zadán žádný komentář<br>"; // vypsání hlášky, že zatím nebyl zadán žádný komentář } } else { echo "Nebyl zatím zadán žádný komentář<br>"; // vypsání hlášky, že zatím nebyl zadán žádný komentář } ?> <form method="POST"> Jmeno:<input type="text" name="jmeno"><br> Email:<input type="email" name="email"><br> Text:<textarea name="text"></textarea><br> <input type="submit" value="Odeslat" name="komentar"> </form> </body> </html> |
||
Keeehi Profil |
#15 · Zasláno: 23. 1. 2012, 21:58:36
Problém dělá (nebo bude dělat) pokud někdo v komentáři použije enter.
Nějaká vylepšení: ř. 13-15: smazat ř. 18-20: file_put_contents($cesta_souboru, str_replace("\n","",htmlspecialchars($_POST['jmeno'])).$delimeter. str_replace("\n","",htmlspecialchars($_POST['email'])).$delimeter. str_replace("\n","",nl2br(htmlspecialchars($_POST['text'])))."\n", FILE_APPEND);
ř. 29, 36: smazat Po těchto úpravách nebude ani enter vadit a mělo by to být snad i bezpečné. Jinak to ošetření jsem musel udělat už při ukládání. To není správný postup, ale to by těch úprav pak muselo být více. Jinak v ostrém provozu by to chtělo vypnout vypisování chybových hlášek. |
||
peklis Profil * |
#16 · Zasláno: 24. 1. 2012, 18:22:47
Keeehi:
Díky moc, ale když to upravím jak jsi psal, vypíše to chbu na řádku 25, což je $koment=array("jmeno" => $roztrzeni[0] , "email" => $roztrzeni[1], "text" => $roztrzeni[2]); a nevím proč.. |
||
Keeehi Profil |
#17 · Zasláno: 24. 1. 2012, 18:48:57
Důležité je znění té chyby.
|
||
peklis Profil * |
#18 · Zasláno: 24. 1. 2012, 19:03:10
Notice: Undefined offset: 1 in C:\Program Files\EasyPHP-5.3.8.1\www\komenty.php on line 25
Notice: Undefined offset: 2 in C:\Program Files\EasyPHP-5.3.8.1\www\komenty.php on line 25 |
||
nemeja Profil |
#19 · Zasláno: 24. 1. 2012, 19:12:18
vypiš sem co máš v proměnné cesta_souboru a pak sem hod co máš v tom souboru, dej to do uvozovek at jsou videt i prázdné řádky.
|
||
Keeehi Profil |
peklis:
Aha, asi jsem měl zdůraznit, že je potřeba ten původní soubor vymazat, protože ty staré řádky způsobují tyto hlášky. Ty nově přidané už by měly být v pořádku. |
||
peklis Profil * |
#21 · Zasláno: 25. 1. 2012, 12:21:39
Díky :)
|
||
Časová prodleva: 2 měsíce
|
|||
Patrick Profil * |
#22 · Zasláno: 2. 4. 2012, 20:09:42
peklis jo jen takovou maalou prozbu kde by se to mělo ukládat ty komenty co tam někdo napíše ? taky jsem takovej nováček :D
|
||
Someone Profil |
#23 · Zasláno: 2. 4. 2012, 20:11:46
Nečetl jsem zbylé komentáře, ale asi bych tipoval, že do souboru. Nedávno jsem tvořil jednodušší návod na návštěvní knihu (může posloužit stejně jako komentáře pod článek).
|
||
Časová prodleva: 2 měsíce
|
|||
zalesak05 Profil |
Ahoj,
trochu jsem s tím experimentoval, ale vždy mi po odeslání vyskočila tato chyba: Fatal error: Call to undefined function: file_put_contents() in /3w/czechian.net/k/kozubova/komentare/1.php on line 15 Kód tam mám takový: <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <meta http-equiv="content-type" content="text/html; charset=UTF-8"> <meta name="generator" content="PSPad editor, www.pspad.com"> <title>Komentáře</title> </head> <body> <?php $delimeter="/*f1f*"; // delimeter můžeš ponechat $cesta_souboru="koment.txt"; // cesta k souboru TXT, do kterého se budou daný komentáře ukládat $umisteni_scriptu="kozubova.czechian.net/komentare/"; //umístění tohoto souboru if(isset($_POST['komentar'])){ //pokud kliknou na odeslat tak se to začne zpracovávat if(!in_array("",array($_POST['jmeno'],$_POST['text']))){ //zkontroluje, zda vyplnili všechny položky file_put_contents($cesta_souboru, str_replace("n","",htmlspecialchars($_POST['jmeno'])).$delimeter. str_replace("n","",htmlspecialchars($_POST['email'])).$delimeter. str_replace("n","",nl2br(htmlspecialchars($_POST['text'])))."n", FILE_APPEND); } else { echo "<b>Nemáte zadané všechny hodnoty.</b><br>"; // pokud nejsou zadané všechny hodnoty, vypíše to tuto hlášku } } $komentare=file_get_contents($cesta_souboru); // načtení souboru do proměnné $rozdeleni_radky=explode("n",$komentare); // rozdělení dle řádků => na jednotlivé příspěvky if(count($rozdeleni_radky)!=0){ // pokud je v něm víc jak jeden komentář for($i=0;$i<count($rozdeleni_radky);$i++){ // cyklus, pro všechny komentáře $roztrzeni=explode($delimeter,$rozdeleni_radky[$i]); // roztržení dle delimetru $koment=array("jmeno" => $roztrzeni[0] , "email" => $roztrzeni[1], "text" => $roztrzeni[2]); // pro hezčí vypisování přidáno do array echo "<b>Jmeno:</b> ".$koment['jmeno']."<br>"; // jednoduché vypsání echo "<b>Email:</b> ".$koment['email']."<br>"; echo "<b>Text:</b> ".$koment['text']."<br>"; echo "<hr><br>"; } } else { echo "Nebyl zatím zadán žádný komentář<br>"; // vypsání hlášky, že zatím nebyl zadán žádný komentář } ?> <form method="POST"> Jmeno:<input type="text" name="jmeno"><br> Email:<input type="email" name="email"><br> Text:<textarea name="text"></textarea><br> <input type="submit" value="Odeslat" name="komentar"> </form> </body> </html> PS: jsem úplný začátečník, tak prosím tak, abych tomu rozumněl, díky ;) |
||
Davex Profil |
#25 · Zasláno: 2. 6. 2012, 23:59:35
zalesak05:
Zkus jiný webhosting. Na tom tvém je zastaralá verze PHP, kde ještě nebyly funkce file_put_contents() a file_get_contents() .
Nebo si je doprogramuj podle http://atom.dosimple.ch/docs/html/d6/d2/fct_8inc_8php-source.html. |
||
zalesak05 Profil |
#26 · Zasláno: 3. 6. 2012, 11:22:45
díky :)
|
||
Časová prodleva: 13 let
|
0