Doporučujeme: PHP hosting od 23 Kč | TV program | Psí Park | Snadné sdílení souborů | Zkracovač dlouhých adres | Měření rychlosti internetu | Italo.cz
| Zavřít |
klikni pro zmenšení fotky

Můj blog – až 10 % špičkového kódu navíc!

Jednoduchá kniha návštěv v php, 3.část

Datum: 8. 3. 2006 13.20 | Autor: Lukáš | 29650× | Kategorie: PHP | Komentáře: 20
Tak už máme formulář pro psaní vzkazu a přidávání vzkazů, takže už zbývá téměř poslední věc a tou je výpis vzkazů včetně stránkování po deseti vzkazech. Zda ho budete mít nad či pod formulářem, už nechám na vás.


Jako první si nadefinujeme funkci "odkazy", která zajistí, aby veškeré textové odkazy v textu byly převedeny na živé linky. Umí ftp,http,https a mailto. Podotýkám, že fci jsem já nedělal, našel jsem ji kdesi na netu pomocí google.

 1 <?

 2
function odkazy($text){
 3
 4
$slovo split("[[:blank:]]+"$text);
 5
 6 for (
$y 0$y count($slovo); $y++)
 7 {
 8 if (
eregi("^(www\..+\..{2,4}/?.*)"$slovo[$y])) //jedna se odkaz typu www...
 9
10
11
{
12
$odkaz eregi_replace("^(www\..+\..{2,4}/?.*)",
13
"<a href=\"http://\\1\" onclick=\"return!window.open(this.href);\">\\1</a> "$slovo[$y]);
14 } elseif (
eregi("^([fh]{1}[t]{1,2}[p]?[s]?://.+\..{2,4}/?.*)"$slovo[$y])) //jedna se odkaz typu http://...,ftp://... nebo https://...
15
{
16
$odkaz eregi_replace("^([fh]{1}[t]{1,2}[p]?[s]?://.+\..{2,4}/?.*)",
17
"<a href=\"\\1\" target=\"_blank\">\\1</a> "$slovo[$y]);
18 } elseif (
eregi("^(mailto:.+@.+\..{2,4})"$slovo[$y]))
19 {
20
$odkaz eregi_replace("^(mailto:(.+@.+\..{2,4}))",
21
"<a href=\"\\1\" onclick=\"return!window.open(this.href);\">\\2</a> "$slovo[$y]);
22 }else
23 {
24
$odkaz $slovo[$y] . " "//jedna se o normalni slovo
25
}
26
$zprava .= $odkaz//spojime vsechny slova opet dohromady
27
}
28 return 
$zprava;
29
30
?>




A teď už ten výpis vzkazů :).

 1 <?

 2
echo "<div id='prispevky'>
 3 <ol id='prispevek'>"
;
 4
 5
// pokud proměnná $stranka není definována, přiřadíme jí nulu
 6
if(empty($stranka) OR !ereg("^[0-9]*$"$stranka)){
 7
$stranka=0;
 8 }
 9
10
$stranka1 $stranka+10;
11
12
$dotaz MySQL_Query("SELECT datum,jmeno,email,vzkaz FROM guestbook ORDER BY id DESC LIMIT $stranka,10"); //načeteme data z databáze
13
14
while($zaznam MySQL_Fetch_Array($dotaz)){
15
16
17
// odstraníme tagy a další blbosti
18
$vzkaz=htmlspecialchars($zaznam[vzkaz]); 
19
$zaznam[jmeno]=htmlspecialchars($zaznam[jmeno]); 
20
$zaznam[email]=htmlspecialchars($zaznam[email]); 
21
22
23
$vzkaz NL2BR($zaznam["vzkaz"]); //přidáme řádkování
24
$vzkaz odkazy($vzkaz); //vytvoření odkazů
25
26
echo "<li>
27 <strong>"
;
28
29
30
// pokud je v kolonce "email" uložená internetová adresa, zobrazíme ji
31
if (ereg("^http:\/\/[[:alnum:]]+([-_\.]?[[:alnum:]])*\.[[:alpha:]]{2,4}(\/{1}[-_~&=\?\.a-z0-9]*)*$"$zaznam[email])){
32 echo 
"<a href='".$zaznam["email"]."' onclick=\"return!window.open(this.href);\">".$zaznam["jmeno"]."</a>";
33 }
34
35
36
// pokud je v kolonce "email" uložená emalová adresa, zobrazíme ji
37
elseif (ereg("^[_a-zA-Z0-9\.\-]+@[_a-zA-Z0-9\.\-]+\.[a-zA-Z]{2,4}$"$zaznam[email])){
38 echo 
"<a href='mailto:".$zaznam["email"]."'>".$zaznam["jmeno"]."</a>";
39 }
40
41
//pokud tam není ani jedno, zorazíme jen samotné jméno přispívajícího bez odkazu
42
else{
43
44 echo 
"".$zaznam["jmeno"]."";
45
46 }
47
48
49 echo 
" - ".$zaznam["datum"]."</strong><br />"//vypíšeme datum vložení
50
51 //nahradíme v textu vložená čísla za smajlíky
52
$vzkaz preg_replace('/\*(\d{1,3})\*/''<img src="images/smajly/\\1.gif" alt="smajlík \\1" />'$vzkaz);
53
54
55 echo 
"".$vzkaz." //vypíšeme samotný vzkaz
56 <br /><br /></li>"
;
57 }
58
59
60 echo 
"</ol></div>";
61
62
63
// a tady už jsou výpočty, na které stránce jste, kolik jich dohromady je a tak dále.. Já se v matice moc neorientuji, takže ač jsem to dělal, už si nepamatuju, co co počítá :)
64
$vpred=$stranka1;
65
$zpet=$stranka-10;
66
67
$vzkazu mysql_fetch_row(mysql_query("SELECT COUNT(id) FROM guestbook")); //spočítáme celkov počet vzkaů
68
69
$strana=$stranka1/10;
70
$stranek=ceil($vzkazu[0]/10);
71
72 if(
$strana==OR !ereg("^[0-9]*$"$strana)){
73
$strana=1;
74 }
75
76
//pokud jsme na stránce "0", vypíšeme stránku "1"
77
if($stranek==0){
78
$stranek=1;
79 }
80
81
$pred=$vzkazu[0]-$stranka1;
82
83 echo 
"<br /><br />";
84
85 if (
$stranka != 0){
86 echo 
"<a href=\"kniha.php?stranka=".$zpet."\"><<</a>";
87 }
88
89 echo 
" Strana $strana / $stranek (celkem $vzkazu[0] příspěvků) ";
90
91 if (
$pred 0){
92 echo 
"<a href=\"kniha.php?stranka=".$vpred."\">>></a>";
93 }
94
?>




Tak, a kniha je hotová.. ještě přidám svoje skromné CSS nastylování...

input { border: 1px solid #222222; font-size: 11px; font-family: Verdana, sans-serif; color: #333333; background-color: #DDDDDD } input:hover,input:focus { border: 1px solid #666666; background-color: #ffffff } textarea { font-size: 11px; font-family: Verdana, sans-serif; border: 1px solid #222222; color: #333333; background-color: #DDDDDD } textarea:hover,textarea:focus { border: 1px solid #666666; color: #333333; background-color: #ffffff } form { margin-top: 0px; margin-bottom: 0px; } fieldset{ padding: 5px 15px 5px 8px; margin: 10px 10px 5px 10px; border: 1px solid #9F9F9F; text-align: left; font-size: 11px; } #smajlici { display: block; float: right; padding: 0px 0px 0px 0px; margin: 0px 0px 0px 0px; text-align: center; border: 0px; width: 230px; position: relative; } #prispevky ol{ color: #444444; background: #FFE1B6; border: 1px solid #444444; padding: 10px 10px 10px 10px; margin: 0px 0px 0px 10px; font-size: 11px; width: 532px; } #prispevky li{ color: #444444; background: #FFE4BF; border: 1px solid #CCCCCC; padding: 10px 10px 0 10px; list-style: none; } #prispevky li:hover { border: 1px solid #666666; }


Tak, a to je celé. Pokud se mi bude chtít, tak sem přidám i kompletní kód ke stažení pro neznalce :)

Podobné články:
Jednoduchá kniha návštěv v php, 1.část
Jednoduchá kniha návštěv v php, 2.část


Komentáře:

  1. Michal14. 3. 2006 0.39

    Ahoj,
    supr prakticky navod :) Mozna by neskodilo dat sem celou knihu ke stazeni a treba dodelat nejakeho admina pro prohlizeni a bannovani IP, mazani prispevku, atd.....
    ... pripadne nevis o nejakem takovem skriptu nekde ke stazeni ? :)

    diky a at se dari



    odpovědět
  2. Lukáš14. 3. 2006 8.23

    Ahoj, dám to sem, jen jak budu mít chvilku. A toho admina taky ;).



    odpovědět
  3. Michal14. 3. 2006 13.00

    Cau,
    to bude uplne supr ;)
    Kdyz uz jsem tu, tak bych se chtel zeptat - nemas nejaky tip, jak udelat dejme tomu podobnou knihu, ale s moznosti reakci, aby se skladali nejak hezky pod komentar. Diiiky



    odpovědět
  4. Lukáš14. 3. 2006 13.39

    Myslíš něco jako je na http://vsevjednom.cz?



    odpovědět
  5. Michal14. 3. 2006 13.46

    Ano ano, treba neco podobneho. Staci i jednodussi...



    odpovědět
  6. Martin19. 4. 2006 21.43

    čus, mám problém s tímto guestbookem a to ten, že mi to nezobrazuje š, ž a ť ale místo toho hází otazník. Nevíš kde je chyba?



    odpovědět
  7. Lukáš19. 4. 2006 22.13

    Máš asi špatně nastaveno kódování v hlavičce...



    odpovědět
  8. Martin19. 4. 2006 23.14

    No nevím vyzkoušel jsem několik českých a žádné nefunguje, a nejde to ani když tam použiju tu samou hlavičku jakou máš ty na webu. pls. podívej se kde je chyba



    odpovědět
  9. Lukáš20. 4. 2006 14.05

    Chyba u knihy, což je zcela zřejmé, není. Podívej se, jak máš data uložená v PMA a pak použij mysql_query na převedení do normálního kódování (více na php.net).



    odpovědět
  10. Kelley24. 7. 2006 1.10

    Prosimte blbne mi pripojeni k databazi. Mam neco do databaze vkladat nebo by si to tam melo vlozit samo? prosim pomoz mi. Kdyztak pres E-Mail.



    odpovědět
  11. Lukáš24. 7. 2006 15.32

    Je třeba prvně vytvořit tabulky v databázi...



    odpovědět
  12. Ses3. 8. 2006 10.45

    Nějak nemůžu rozjed to stránkování. Vytáhl jsem si z kódu stránkování a funguje téměř dobře. Když mám víc, jak 10 záznamů, tak se mi správně ukáže šipečka na další stránku, ale když na ni kliknu, tak se nic nestane, do adresy se připíše stranka=10, ale ukazuje se pouze první stránka a nic jinýho se nezměnilo. Nevím, zda-li jsem něco špatně nepřekopíroval. Je ještě někdo, komu to dělá problémy?
    Ještě dodám, že když mám záznamů méně jak 10, tak to funguje bez problému...



    odpovědět
  13. Lukáš3. 8. 2006 10.59

    if(empty($_GET['stranka']) OR !ereg("^[0-9]*$", $_GET['stranka'])){
    $stranka=0;
    }

    Snad takto...



    odpovědět
  14. Komi8. 9. 2007 15.54

    2Ses: ještě je potřeba před to hodit $stranka=$_GET['stranka'];
    2Lukáš: dík moc, hodně mi to pomohlo ;-)



    odpovědět
  15. lolek17. 10. 2007 0.08

    potreboval bych poslat pls tu databazi, v tom su uplne jalovej...najde se nekdo? mynick2@seznam.cz



    odpovědět
  16. Laďa1. 1. 2008 17.28

    Proč tady ještě není ten kód pro neznalce.PLS HLP !!!!!!!!!



    odpovědět
  17. michal23. 4. 2008 21.44

    Tak jsem bohužel zjistil, že to není blbuvzdorný, ale to bych chtěl asi moc. Jinak máš to tu parádní a snad se mi někdy povede vyhrát nad nějakou tou návštěvní knihou.
    Ps: Jen tak dál



    odpovědět
  18. Lukáš23. 4. 2008 22.30

    No jo, úplně není. Tak detaily si už může každý vyladit sám.



    odpovědět
  19. redfrog3. 9. 2008 13.13

    dobře řesené stránkováni... super! :)



    odpovědět
  20. tester8911. 2. 2009 1.23

    Ten kod pro neznalce by se opravdu hodil....
    Nechtel bys ho prosim vystavit??

    Predem diky.



    odpovědět

Přidat nový komentář:




Ochrana proti spamu. Napište prosím číslici pět: