Autor Zpráva
Harkonnen
Profil *
Zdravím všechy.
Pro začátek chci upozornit, že php zatím nijak extra nerozumím. Mám následující problém, se kterým už si fakt nevím rady a nikde jsem to nemohl najít a hledal jsem dost dlouho. Doufám, že mi tady někdo pomůže. Mám guestbook na adrese http://agilitydogs.tym.cz/guestbook/index.php ve kterém mám převod smajlíků, ale chtěl bych omezit jejich počet. Chci aby když nekdo vloží třeba 100 smajlíků, tak ať se na obrázek daného smajlíka převede jen prvních pět. Ale tohle nevím jak udělat. Zdrojový kód skriptu zpracovávajícího odesílání příspěvků je následující:

<?
if ($_POST['jmeno'] != "")
{
$name = "<span class="kniha_jmeno">".htmlspecialchars($jmeno)."</span><br />";
$e_mail = htmlspecialchars($e_mail);
$e_mail = "<span class="kniha_vetsi">E-mail: </span><a class="kniha_normal" href="mailto:$email">$email</a><br />";
if ($web!="" && $web!="http://"):
$web = htmlspecialchars($web);
$www = "<span class="kniha_vetsi">Web: </span><a class="kniha_normal" href="$web" onclick="return !window.open(this.href,'','');">$web</a><br />";
endif;
$cas = "<span class="kniha_vetsi">Uloženo: </span><span class="kniha_cas">".Date("j.m.Y"." v "."H:i:s", Time())."</span><br />";
$popis = htmlspecialchars($popis);
$popis = substr($popis, 0, 1000);
$popis = trim($popis);
$popis = wordwrap($popis, 90, " ", 1);
function make_clickable($text)
{
$text = preg_replace('#(script|about|applet|activex|chrome):#is', "\1:", $text);

$ret = ' ' . $text;

$ret = preg_replace("#(^|[ ])([w]+?://[w#$%&~/.-;:=,?@[]+]*)#is", "\1<a href="\2" target="_blank">\2</a>", $ret);

$ret = preg_replace("#(^|[ ])((www|ftp).[w#$%&~/.-;:=,?@[]+]*)#is", "\1<a href="http://\2" target="_blank">\2</a>", $ret);

$ret = preg_replace("#(^|[ ])([a-z0-9&-_.]+?)@([w-]+.([w-.]+.)*[w]+)#i", "\1<a href="mailto:\2@\3">\2@\3</a>", $ret);

$ret = substr($ret, 1);

return($ret);
}
$popis = make_clickable($popis);
for ($i=1; $i<=9; $i++){
$popis = str_replace("**0$i", "<img src="smileys/0$i.gif" alt="**0$i"/>", $popis);
}
for ($i=10; $i<=20; $i++){
$popis = str_replace("**$i", "<img src="smileys/$i.gif" alt="**$i"/>", $popis);
}
$popis = str_replace(" ","<br />", $popis);
$popis = "<br />$popis";
$write = stripslashes("<div class="ramecek_div"><br />" . $name . $e_mail . $www . $cas . $popis . "</div><br /><hr /> ");

if (File_Exists ("book.dat")):
$fp = FOpen ("book.dat", "r");
$zamek = flock($fp, LOCK_EX);
if ($zamek == false) {
exit ('Někdo právě zapisuje do knihy návštěv. Zkuste to prosím znovu.');}
$data = FRead ($fp, FileSize("book.dat")+1);
FClose($fp);
endif;

$fp = FOpen ("book.dat", "w");
$zamek = flock($fp, LOCK_EX);
if ($zamek == false) {
exit ('Někdo právě zapisuje do knihy návštěv. Zkuste to prosím znovu.');}
FWrite ($fp, $write.$data);
flock ($fp, LOCK_UN);
FClose ($fp);

$to = "siridar.harkonnen@gmail.com";
$subject = "=?iso-8859-2?Q?Gwen=20=2D=20Kniha=20n=E1v=B9t=ECv?=";
$mess = "Na webové stránce http://agilitydogs.tym.cz/guestbook/ právě přispěl člověk jménem "$jmeno" do knihy návštěv.";
function win2iso($mess)
{
static $tbl = array("x80"=>"EUR","x81"=>"","x82"=>"`","x83"=>"","x84"=>""","x8 5"=>"...","x86"=>"+","x87"=>"","x88"=>"","x89"=>"o/oo","x8a"=>"x a9","x8b"=>"<","x8c"=>"xa6","x8d"=>"xab","x8e"=>"xae","x8f"=>" xac","x90"=>"","x91"=>"`","x92"=>"xb4","x93"=>""","x94"=>"""," x95"=>"o","x96"=>"-","x97"=>"-","x98"=>"","x99"=>"TM","x9a"=>"xb 9","x9b"=>">","x9c"=>"xb6","x9d"=>"xbb","x9e"=>"xbe","x9f"=>" xbc","xa1"=>"xb7","xa5"=>"xa1","xa6"=>"|","xa9"=>"(c)","xab"=>" <<","xac"=>"not","xae"=>"(R)","xb1"=>"+/-","xb5"=>"u","xb6"=>"P", "xb7"=>".","xb9"=>"xb1","xbb"=>">>","xbc"=>"xa5","xbe"=>"xb5") ;
return strtr($mess, $tbl);
}
$mess = win2iso($mess);
$mess = chunk_split(Base64_Encode($mess));
$email = "chris.larys@atlas.cz";
$extra = "From: $email Reply-To: $email ".
"MIME-Version: 1.0 ".
"Content-Type: text/plain; charset="iso-8859-2" ".
"Content-Transfer-Encoding: base64";
mail($to, $subject, $mess, $extra);

Header("Location: http://agilitydogs.tym.cz/guestbook/index.php#prispevky");
}
else{
Header("Location: http://agilitydogs.tym.cz/guestbook/index.php");
}
?>

Kdyby byl někdo schopen poradit, byl bych moc vděčný.
Kryštof Laryš
djlj
Profil
V tvým kódu se nevyznám, ale já používám preg_replace s limitem.
Mastodont
Profil
A těch 5 smajlíků má být stejných nebo mohou být jiné?
Harkonnen
Profil *
To djld:
prave zkousim to preg_replace... jinak dulezite je tu tohle:
$popis = str_replace("**0$i", "<img src="smileys/0$i.gif" alt="**0$i"/>", $popis);
}
for ($i=10; $i<=20; $i++){
$popis = str_replace("**$i", "<img src="smileys/$i.gif" alt="**$i"/>", $popis);
}

To Mastodont:
To by právě mělo být tak, že by ta funkce měla procházet text od začátku a nahradit jen prvních 5 smajlíků, na které narazí, takže můžou být stejné i jiné, prostě jak jsou postupně v textu vloženy.
djlj
Profil
To djld:
Předpokládám, že myslíš mě.


$popis = preg_replace('/\*\*(\d{1,2})/', '<img src="smileys/\\1.gif" alt="** \\1" />', $popis, 5);
Mastodont
Profil
Harkonnen
Jak píše djlj, akorát ten limit si dej na 5. A poté všechny zbývající smajlíky vymaž opět přes preg_replace.
Harkonnen
Profil *
Omlouvám se, myslel jsem djlj.
Takže to nemá být vůbec v cyklu, předpokládám? Zkoušel jsem to, ale nepřevádí to nic. Můžete to zkusit přímo na té adrese agilitydogs. A jak bych pak vymazal ty zbývající smajlíky? Omlouvám se za svou blbost. :-(
djlj
Profil
Ne, do cyklu to nedávej.

Vymažeš je pak nějak takto:
$popis = preg_replace('/\*\*(\d{1,2})/', '', $popis);
Mastodont
Profil
Ne, v cyklu to už být nemusí. No a výmaz už je triviální:

$popis = preg_replace('/**(d{1,2})/', "", $popis);
Harkonnen
Profil *
$popis = preg_replace('/**(d{1,2})/', '<img src="smileys/\1.gif" alt="** \1" />', $popis, 5);

Vidím, že jste to ještě opravil. Teď už to jede. Konečně. Vy jste prostě bůh!!! Děkuji upřímně mnohokrát. Věřte nebo ne, já se s tím trápil několik hodin a nepřišel jsem na to. Moje blbost...
Už chápu, co Mastodont myslel tím smazáním zvývajících smajlíků. Myslím, že to už teď budu schopen i já vyřešit. Oběma díky moc a za rychlé reakce taky. :-)
djlj
Profil
Harkonnen
Ono mi to schramstlo všechna zpětná lomítka.

Není zač ;).

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: