Php v praxi – tretia časť: Náhodné vypísanie informácie do Vašich stránok

Rasťo Turek  /  29. 10. 2003, 00:00

Vítam Vás pri treťom seriáli o programovaní v php. Dnes si ukážeme, ako si môžete vypísať do Vašich stránok náhodné informácie, teda ako napríklad typ pre Vašich návštevníkov. Môžete si vybrať z dvoch možností. Po prvé môžete tieto tipy čítať z databáze a po druhé si ich môžete načítavať z externého súboru. Takže začneme možnosťou číslo jeden a to je načítavanie z databáze. ...

Najskôr si musíme navrhnúť tabuľku. Tabuľka sa bude volať Tipy a stĺpce, budeme mať id s vlastnosťou auto_increment, aby sme si mohli vkladať tipy cez vlastného admina a ďalším stĺpcom bude položka tipy do ktorej budeme ukladať samotné tipy. Takže tu je kompletný návrh tabuľky tipov.

CREATE TABLE tipy (
  id int(8) NOT NULL auto_increment,
  tipy text,
  PRIMARY KEY (id)
) TYPE=MyISAM;

Jediné, čo by Vás mohlo na tejto tabuľke zaujať je to, že tipy majú prioritu text, aby ste si mohli ukladať tipy o veľkých dĺžkach.
A tu je kompletný script tip_sql.php aj s popisom.

<?php
// načítame si pripojenie k službe MySQL a pripojíme sa k databáze
include("config.php");
// vytvoríme si funkciu pre zobrazovanie tipov
function tip()
{
  // načítame si tipy z databáze a vyberieme si priamo z tabuľky tipy
  @$citaj = mysql_query("SELECT tipy FROM tipy");
  // zistíme, koľko sa nachádza tipov tabuľke
  @$tipov = mysql_num_rows($citaj);
  // zabezpečí, aby sme nikdy nedostali prázdny riadok
  $tipov--;
  // vygenerujeme si náhodne číslo
  $rand = Rand(0,$tipov);
  // vygenerujeme si jeden z tipov ktorý nám vyšiel podľa náhodného čísla
  @$generuj = mysql_result($citaj,$rand,0);
  // orežeme koniec riadku, aby sa tipy zobrazovali stále rovnako formatované
  $generuj = trim($generuj);
  // vrátime $generuj von z funkcie
  return $generuj;
}
// vypíšeme si tip (je možné použiť aj print)
echo tip();
?>

Script je vysvetlený už v komentároch, ale aj tak by asi stálo za to trošku to opísať. Prvotne si načítame config.php, ktorý si tu už však opisovať nebudeme, nájdete ho v prvej časti nášho seriálu. Vytvoríme si funkciu, ktorú nazveme tip a ktorá nám bude vracať náhodne vygenerovaný tip. Vyberieme si tipy z tabuľky a zo stĺpca tipy. Následne zistíme ich počet v tabuľke a pomocou funkcie rand vygenerujeme náhodné číslo. Zápis do funkcie rand() je nasledovný:

rand(0,x) kde 0 je začiatočné číslo, od ktorého sa počíta a x je konečné číslo. Medzi týmito dvomi číslami si funkcia rand náhodne vyberie jedno číslo a my sme si namiesto x zapísali výsledok o počte záznamov v tabuľke. Ďalej si pomocou funkcie mysql_result() načítame konkrétny tip a to nasledovným spôsobom. Najskôr zapíšeme výber z databáze teda u nás $citaj.

Ďalším parametrom je číslo riadku a my si tam zapíšeme naše náhodne vygenerované číslo. No a posledným parametrom je u nás 0. Hoci je tento parameter nepovinný, my si tam dáme 0, pretože by nám funkcia spravila posun stĺpca. No a napokon si výsledok orežeme funkciou trim(), ktorá nám zabezpečí, že výstupy budú orezané od prípadných medzier, tabulátorov, nových riadkov, ktoré sa môžu nechcene nachádzať na začiatku či konci tipu. Nakoniec vrátime tip von z funkcie a vypíšeme si do stránky. Samozrejme, že sa dajú tieto tipy akokoľvek formátovať.

Ak však na serveri nemáte prístup do služby MySQL, tak máte ešte jednu možnosť. Čítať tipy zo súboru. Poďme si navrhnúť celú aplikáciu. Pre celú aplikáciu potrebujeme mať script, ktorý si nazveme napríklad tip_txt.php a jeden súbor, z ktorého budeme načítavať. Ten si nazveme napríklad tipy. Tento súbor si môžete určiť s koncovkami napríklad txt, dat, alebo aj žiadnou, čo bude náš prípad. Takže tu je celý script na náhodné načítavanie zo súboru bez použitia databáze, ktorý sme si teda nazvali tip_txt.php

<?php
// vytvoríme si funkciu ako pri využití databáze
function tip()
{
  // cesta k súboru s tipmi (môže obsahovať takmer akékoľvek koncovky,
  // úplne záleží len na Vás) a treba cestu uviesť v tvare ./tipy ak je
  // súbor v rovnakom priečinku ako tento script, a ../tipy ak je,
  // o priečinok vyžšie
  $subor = "./tipy";
  // načítame si súbor z ktorého budeme čítať tipy
  $file = file($subor);
  // uzamkneme si súbor pre zdieľané čítanie
  flock($subor,1);
  // zistíme, koľko sa nachádza tipov v súbore
  $tipov = count($file);
  // tak ako aj pri použití MySQL si vytvoríme náhodné číslo
  $rand = Rand(0,$tipov);
  // vygenerujeme si jeden z tipov, ktorý nám vyšiel podľa náhodného čísla
  $generuj = $file[$rand];
  // orežeme koniec riadku, aby sa príspevky zobrazovali rovnako formatované
  $generuj = trim($generuj);
  // odomkneme si súbor na ďalšie použitie
  flock($subor,3);
  // uzavrieme si pripojenie k súboru
  fclose($subor);
  //  vrátime $generuj von z funkcie
  return $generuj;
}
// vypíšeme si tip (je možné použiť aj print)
echo tip();
?> 

Poďme si celý script pozrieť pekne od začiatku. Najskôr si vytvoríme funkciu, ktorá nám bude vracať nami náhodne vygenerovaný tip. Ďalej si určíme url k nášmu súboru. Použijeme funkciu na pripojenie k súboru file(), kde zapíšeme cestu k súboru. Aby sa k nášmu súboru v momente prístupu žiadny script nepokúsil pristúpiť či zapísať do súboru súčasne s našim scriptom, uzavrieme tento súbor len na čítanie pre náš script. Potom si zistíme počet tipov v súbore, a to spôsobom - jeden tip sa rovná jeden riadok v súbore. Tak ako aj pri použití databáze si vytvoríme náhodné číslo rovnakým spôsobom, ako som už hore opisoval a vyberieme práve jeden z tipov zo súboru podľa náhodného čísla. Nakoniec orežeme výstup od prípadných medzier a odomkneme súbor pre ďalšie použitie a napokon vrátime jeden z tipov von z funkcie a vypíšeme ich do stránky. Ako som už napísal do komentára, je možné použiť funkciu print aj echo. Je na Vás, ktorú si vyberiete.

Aby sme to kompletne uzavreli, tak tu máte malú časť tipov, ktoré som napísal pre túto ukážku.

TIPY
Ak použijete obrázky typu png, môžete kvalitne s nimi ďalej pracovať v php scriptoch
Ak budete využívať php na písanie kvalitných scriptov, ušetríte si hodiny námahy
Ak využijete službu MySQL, urýchlite a skrášlite Váš web o 50%
Ak budete čítať inet.sk, dozviete sa veľa zaujímavostí zo slovenského internetu J
Ak budete využívať pri práci dokumentáciu k php, napomôžete si k urýchleniu a skvalitneniu Vašej práce
Ak si budete písať scripty sami, budete mať oveľa lepší prehľad a naberiete viacej skúseností
Ak budete preferovať php, môžete vytvoriť mnoho kvalitných opensource projektov
Ak sa Vám nebude dariť programovať v php, navštívte diskusie ako forum.builder.com

Použitie:
Oba tieto scripty môžete využívať u Vás na stránkach a prinášať Vašim používateľom stále nové informácie, ktoré sa však opakujú. Scripty sa dajú využiť na zobrazovanie tipov, vtipov, trikov, citátov, informácií a mnoho iného.

Vylepšenia:
Samozrejme aj tieto scripty sa dajú všelijako vylepšiť, či zmeniť. Napríklad môžete si vytvoriť šablónu pre formátovanie a tieto tipy tak zobrazovať krajšie a oku lahodnejšie, môžete tieto tipy zasielať návštevníkovi na mail či posielať cez SMS. Samozrejme, na tieto vylepšenia potrebujete mať SMS bránu. Našlo by sa toho skutočne veľmi veľa, je len na Vás, ako si ich vylepšíte práve Vy! Rád uvítam ďalšie tipy na mojom maili, poprípade v diskusii.

Upozornenia:
Pozor na tipy načítavané z sql. Tieto tipy sa môžu zobraziť aj dva či trikrát po sebe. Je to práve tým, že náhodné číslo môže byť aj to isté. Pri veľkom množstve tipov sa však takéto prípady stávajú skôr sporadicky ako by boli pravidelnými.

Ako vždy si môžete stiahnuť zazipované zdrojáky k tomuto článku.

Dúfam, že sa Vám tento diel páčil, nabudúce nazrieme do problematiky rozkladania textu pri veľkej dĺžke, ako napríklad v internetových denníkoch a následné zabezpečenie rovnako fomrátovaného textu. Chcel by som Vás poprosiť, keďže mi dochádzajú nápady a motivácia, aby ste písali na môj e-mail o problematike, o ktorej by ste si tu chceli prečítať a dozvedieť sa niečo nové. Prosím, nepíšte nič podobné ako „Ako si vytvorím vlastný inet.sk?“, „Ako spraviť vlastný vyhľadávač“ a podobne, pretože by jeden diel seriálu mal asi tridsať strán a tieto časti sú hlavne pre začiatočníkov v php.

Dúfam, že aj naďalej budete písať do diskusie pod článkami a že budete písať aj kritiku, ktorá ma privádza na cestu, ktorou chcete, aby sa uberali tieto články.


Ďakujem,
Rastislav Turek, break.sk

Neprehliadnite: