Doporučujeme: Měření rychlosti internetu | Italo.cz | Stahovač videí z YouTube | Zkus to jinak - logicky | Zkracovač dlouhých adres | TV program | Psí Park

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áš | 29872× | 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

Přidat nový komentář:




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