| 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
