Efektivnější reklamní systém v PHP

23. září 2003

Pod názvem reklamní sytém si možná představíte systém, kde se registrují uživatelé, kteří umisťují výměnnou reklamu a za to se jim přičítají kredity. Já vám ale chci ukázat příklad reklamního systému, určeného pro všechny servery, které právě už jsou v takové službě registrovány, ale chtějí z reklam na svých stránkách vytěžit co nejvíce kreditů.

Naprostá většina výměnných reklamních systémů započítává kredity ne za jedno zobrazení reklamy, ale za jedno shlédnutí reklamy jedním unikátním uživatelem. Takže pokud uživatel navštíví vaši stránku, započítá se kredit, ovšem když ji obnoví nebo spustí odkaz, ale stejná reklama tam zůstane, kredit se nepřičte. Jakmile ale zobrazíte na tom samém místě vždy jinou reklamu, bude se kredit připočítávat po každém obnovení dané reklamní pozice. Ukážeme si tedy, jak efektivně a zcela automaticky měnit reklamu na jedné reklamní pozici za pomoci databáze.

Jako první musíme vytvořit příslušné tabulky v databázi. Celkem budou dvě (v příkladu byla použita MySQL). Tabulky se budou jmenovat „pozice“ a „reklama“:

CREATE TABLE `pozice` (
`id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
`nazev` VARCHAR(255),
`stav` ENUM(‚a‘,’b‘)
);
CREATE TABLE `reklama` (
`id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
`id_pozice` INT(10) UNSIGNED,
`text` TEXT,
`zobrazeno` INT(10) UNSIGNED,
`stav` ENUM(‚a‘,’n‘)
);

Tabulka „pozice“ bude mít tři sloupečky, a to „id“, které bude primárním klíčem a bude mu jeho hodnota přiřazena automaticky, sloupeček „nazev“, kde uložíme vámi zadaný název reklamní pozice a sloupeček „stav“, kde se bude indikovat, zda je reklamní pozice aktivní či dočasně vyřazená. V druhé tabulce bude ukládán reklamní kód. Sloupeček „id“ je asi jasný, sloupeček „id_pozice“ nám určí, ke které reklamní pozici kód pro zobrazení patří, ve sloupečku „text“ je kód reklamního zobrazení, sloupeček „zobrazeno“ indikuje počet shlédnutí reklamního zobrazení a sloupeček „stav“ indikuje, zda jste tento konkrétní reklamní kód aktivovali či deaktivovali.

Nyní musíme vytvořit mechanismus, pomocí něhož budeme vkládat námi žádaná data do databáze, editovat je či mazat, a poté si vytvoříme i stránku, kde bude funkce tohoto systému demonstrována. Protože budeme potřebovat spojení s databází a některé speciální proměnné, vytvořím nejprve soubor „conn.php“, kde tato data budou shromážděna a do potřebných PHP skriptů se budou vkládat pomocí funkce include ():

conn.php

<?
// přístup k databázi (tato data změňte podle vlastních nastavení)
$dbserver = „localhost“; // mySQL server
$dbuser = „“; // uživatel
$dbpass = „“; // heslo
$dbname = „“; // název databáze
// spojení s databází
@$conn = mysql_connect(„$dbserver“,“$dbuser“,“$dbpass“) or die („Spojení se serverem selhalo. Zkuste to prosím později.“);
@$sdb = mysql_select_db(„$dbname“) or die („Požadovaná databáze nenalezena. Zkuste to prosím později.“);
// tyto proměnné zadávají, jaké bude už. jméno a heslo do systému
$user = „admin“;
$heslo = „heslo“;
?>

Proměnné $user a $heslo použijeme při přihlašování se do administračního systému. Nyní si popíšeme soubor admin.php, v němž budeme pohodlně editovat veškeré reklamní pozice a jejich reklamní zobrazení a také se tam dozvíme, jaká pozice byla kolikrát zobrazená. Nejprve logovací část:

admin.php

<?php
// načtení souboru s připojením se k databázi
include „conn.php“;
// spuštění session proměnných
session_start();
if (isset($login)) { // jestliže uživatel právě odeslal data z přihlašovacího formuláře…
  /*
  $_SESSION[‚user_ff‘];
  $_SESSION[‚heslo_ff‘];
  $_SESSION[‚log‘];
  */
  session_register(‚user_ff‘);
  session_register(‚heslo_ff‘);
  session_register(‚log‘);
    $user_ff = $user_f;
    $heslo_ff = $heslo_f;
    $log = TRUE;
}
?>
<!DOCTYPE HTML PUBLIC „-//W3C//DTD HTML 4.0 Transitional//EN“>
<html>
<head>
  <title>Reklamní systém</title>
</head>
<body>
<style>
  body {font-family: tahoma; font-size: 11px;}
  table {font-family: tahoma; font-size: 11px;}
  .input {border: 1px solid black; font-family: tahoma; font-size: 11px;}
  a.modra {color: blue;}
  a.cervena {color: red;}
</style>
<?php
if (@isset($HTTP_GET_VARS[logout])) {
  session_destroy();
  echo „Proběhlo odhlášení.“;
  exit;
}
if (!isset($log)) :
?>
<table border=“0″ cellpadding=“0″ cellspacing=“0″ align=“center“>
  <tbody>
  <tr>
    <td align=“center“>
    <form method=“post“ action=“<?=$PHP_SELF;?>“>
    <input type=“hidden“ name=“login“ value=“true“>
    Login:<br><input type=“text“ name=“user_f“ size=“20″ maxlength=“20″ class=“input“><br><br>
    Heslo:<br><input type=“password“ name=“heslo_f“ size=“20″ maxlength=“20″ class=“input“>
  </td>
  </tr>
  <tr>
    <td align=“center“><br><input type=“submit“ name=“submit“ value=“ Odeslat “ class=“input“></td>
  </tr>
  </tbody>
</table>
</form>
<?php
else :
if (($user_ff == $user) && ($heslo_ff == $heslo)) {
// zde patří další část kódu
<?php
} else {
  echo „Špatně zadané jméno či heslo.“;
}
endif;
?>
</body>
</html>

Pro spojení s databází musíme nejprve načíst funkcí include() soubor conn.php. Poté se v případě, že uživatel odeslal formulář, spustí registrace session proměnných, jež nám zajistí i při obnovování stránky stálou platnost přihlášení. První způsob registrování proměnných, který je umístěn mezi hvězdičkami v komentáři, je novější a doporučuje se. Funguje ale jen s PHP 4.1.x, takže kdo má starší verzi, bude muset použít způsob, který je hned pod tím. Po hlavičce HTML dokumentu a definici stylů jsem umístil podmínku pro odhlášení. Funkcí session_destroy() zrušíme veškeré session proměnné, tudíž po dalším obnovení stránky budeme nasměrováni na přihlašovací formulář. (Všechny další části kódu souboru admin.php, patří postupně na místo v předchozí části, kde je komentář „zde patří další část kódu“.)

admin.php

if (@isset($HTTP_POST_VARS[pozice_text])) {
    $query_pozice = „insert into pozice values(“, ‚$pozice_text‘, ‚a‘)“;
    if (@mysql_query($query_pozice)) {
      $status = „Byla úspěšně přidána nová reklamní pozice.“;
    } else {
      $status = „Reklamní pozice nebyla přidána.“.mysql_error();
    }
  }
  if (@isset($HTTP_GET_VARS[smazat])) {
    $query_smazat = „delete from pozice where id = ‚$smazat'“;
    if (@mysql_query($query_smazat)) {
      $status = „Reklamní pozice byla úspěšně odstraněna.“;
    } else {
      $status = „Reklamní pozice nebyla odstraněna.“.mysql_error();
    }
  }
  if (@isset($HTTP_GET_VARS[deaktivovat])) {
    $query_deakt = „update pozice set stav = ‚n‘ where id = ‚$deaktivovat'“;
    if (@mysql_query($query_deakt)) {
      $status = „Reaklamní pozice byla deaktivována.“;
    } else {
      $status = „Reklamní pozice nebyla deaktivována.“.mysql_error();
    }
  }
  if (@isset($HTTP_GET_VARS[aktivovat])) {
    $query_akt = „update pozice set stav = ‚a‘ where id = ‚$aktivovat'“;
    if (@mysql_query($query_akt)) {
      $status = „Reklamní pozice byla aktivována.“;
    } else {
      $status = „Reklamní pozice nebyla aktivována.“.mysql_error();
    }
  }
?>

Asi všichni rozeznáte čtyři základní podmínky, které zjišťují, zda byla odeslána některá z proměnných metodou GET nebo POST. Každá z těchto podmínek pak obsahuje práci s tabulkou „pozice“. Přístup k této tabulce je vždy ošetřen vůči chybám. První podmínka slouží k vytvoření nové reklamní pozice, druhá k jejímu odstranění, třetí slouží pro deaktivaci a poslední slouží k aktivaci reklamní pozice.

admin.php

<table border=“0″ cellpadding=“0″ cellspacing=“0″ width=“100%“>
  <tbody>
  <tr>
    <td width=“80%“> Reklamní systém pro uživatele výměnných reklamních systémů nebo poskytovatelů reklamy, © 2003 Interval.cz</td>
    <td width=“20%“ align=“right“><a href=“admin.php?logout=true“ class=“cervena“>Odhlásit se</a></td>
  </tr>
  </tbody>
</table>
<form method=“post“ action=“<?=$PHP_SELF;?>“>
<table border=“0″ cellpadding=“0″ cellspacing=“0″ align=“center“>
  <tbody>
  <tr>
    <td><h3>Přidání nové reklamní pozice</h3></td>
  </tr>
  <tr>
    <td align=“center“>Název pozice:<br><input type=“text“ name=“pozice_text“ maxlength=“100″ class=“input“></td>
  </tr>
  <tr>
    <td align=“center“><br><input type=“submit“ value=“ Přidat “ class=“input“></td>
  </tr>
  </tbody>
</table>
</form>
<br>
<? if (!isset($status)) $status = „<br>“; ?>
<center><?=@$status;?></center><br>
<table border=“0″ cellpadding=“0″ cellpadding=“0″>
  <tbody>
  <tr>
    <td height=“18″ style=“background-color: #dff1ff;“>   Reklamní pozice</td>
  <td width=“50″> </td>

V této části jsou pouze tabulky pro uspořádání, v nich formulář pro vložení nové reklamní pozice a proměnná $status, která vypisuje různé hlášky.

admin.php

  <?
// pouze vytvoření jiného vzhledu řádku a tabulky a výpis id reklamní pozice
// při jejím otevření
  if (@isset($HTTP_GET_VARS[pozice])) {
  ?>
  <td height=“18″ style=“background-color: #dff1ff;“>   Reklamní zobrazení pozice s id <?=$pozice;?></td>
    <?
  } else {
  ?>
  <td height=“18″> </td>
  <?
  }
  ?>
  </tr>
  <tr valign=“top“>
    <td><br>
  <table border=“0″ cellpadding=“2″ cellspacing=“0″>
   <tr>
    <td>
  <?php
// vypsání všech reklamních pozic
  $query1 = „select * from pozice“;
  if (!(@$query_result1 = mysql_query($query1))) {
    echo „Není možné zobrazit reklamní pozice.“.mysql_error();
    return;
  }
  
  if (mysql_num_rows($query_result1) == 0) {
    echo „Doposud nebyla přidána žádná reklamní pozice.“;
  } else {
    for ($i=1; $i<=mysql_num_rows($query_result1); $i++) {
      @$row = mysql_fetch_row($query_result1);
      
      if (@$row[2] == „a“) $stav = „<a href=\“admin.php?deaktivovat=“.$row[0].“\“ class=\“modra\“>Deaktivovat</a>“; elseif (@$row[2] == „n“) $stav = „<a href=\“admin.php?aktivovat=“.$row[0].“\“ class=\“modra\“>Aktivovat</a>“;
      echo $i.“. <a href=\“admin.php?pozice=“.$row[0].“\“ class=\“modra\“>(„.$row[0].“) „.$row[1].“</a>   [„.$stav.“]  [<a href=\“admin.php?smazat=“.$row[0].“\“ onclick=\“return confirm(‚Opravdu chcete pozici s id „.$row[0].“ odstranit?‘)\“ class=\“cervena\“>Smazat</a>]<br><br>“;
    }
  }
  ?>
    </td>
   </tr>
  </table>
  </td>
  <td width=“50″> </td>
  <td>
  <table border=“0″ cellpadding=“2″ cellspacing=“0″>
  <tr>
    <td>

Tato část kódu jako první zjišťuje, zda již existují v tabulce pozice nějaké záznamy, a pokud ano, všechny je vypíše. Podmínka na začátku cyklu „for“ zjistí, zda je aktuální reklamní pozice aktivní či deaktivovaná, a podle toho nastaví odkaz pro rychlou změnu tohoto stavu. Po podmínce následuje vypsání nového řádku – v závorce id reklamní pozice, kterým budeme později na stránkách volat reklamní zobrazení, poté název reklamní pozice (jen orientačně), již zmíněný odkaz pro aktivaci či deaktivaci a nakonec odkaz pro smazání reklamní pozice.

admin.php

  <?php
  if (@isset($HTTP_GET_VARS[pozice])) :
    if (@isset($HTTP_GET_VARS[smazat_r])) {
      $query_smazat_r = „delete from reklama where id = ‚$smazat_r'“;
      if (@mysql_query($query_smazat_r)) {
        $status = „Reklamní zobrazení bylo úspěšně odstraněno..“;
      } else {
        $status = „Reklamní zobrazení nebylo odstraněno.“.mysql_error();
      }
    }
    
    if (@isset($HTTP_GET_VARS[deaktivovat_r])) {
      $query_deakt_r = „update reklama set stav = ‚n‘ where id = ‚$deaktivovat_r'“;
      if (@mysql_query($query_deakt_r)) {
        $status = „Reklamní zobrazení bylo deaktivováno.“;
      } else {
        $status = „Reklamní zobrazení nebylo deaktivováno.“.mysql_error();
      }
    }
    
    if (@isset($HTTP_GET_VARS[aktivovat_r])) {
      $query_akt_r = „update reklama set stav = ‚a‘ where id = ‚$aktivovat_r'“;
      if (@mysql_query($query_akt_r)) {
        $status = „Reklamní pozice byla aktivována.“;
      } else {
        $status = „Reklamní pozice nebyla aktivována.“.mysql_error();
      }
    }
    if (@isset($HTTP_POST_VARS[text_reklamy])) {
      if ($nazev_reklamy == „“) $nazev_reklamy = „Reklamní zobrazení“;
      if (!isset($stav_reklamy)) $stav_reklamy = „n“;
      $query_text = „insert into reklama values (“, ‚$pozice‘, ‚$nazev_reklamy‘, ‚$text_reklamy‘, ‚0‘, ‚$stav_reklamy‘)“;
      if (@mysql_query($query_text)) {
        $status = „Reklamní zobrazení bylo úspěšně přidáno.“;
      } else {
        $status = „Reklamní zobrazení nebylo přidáno.“.mysql_error();
      }
    }
    
    if (@isset($HTTP_POST_VARS[text_edit])) {
      if ($nazev_edit == „“) $nazev_edit = „Reklamní zobrazení“;
      if (!isset($stav_edit)) $stav_edit = „n“;
      $query_edit = „update reklama set nazev = ‚$nazev_edit‘, text = ‚$text_edit‘, stav = ‚$stav_edit‘ where id = ‚$id'“;
      if (@mysql_query($query_edit)) {
        $status = „Reklamní zobrazení bylo úspěšně editováno.“;
      } else {
        $status = „Reklamní zobrazení nebylo editováno.“.mysql_error();
      }
    }

Pokud uživatel přejde na odkaz některé reklamní pozice, nastaví se a přes URL předá proměnná $pozice. Hned první podmínka bude tedy pravdou a postoupí se k reklamnímu zobrazení. Následují další podmínky, které nějak upravují reklamní zobrazení. V každé z nich je opět proveden ošetřený vstup do tabulky „reklama“. První podmínka po svém vyvolání odstraní dané reklamní zobrazení, druhá je deaktivuje, třetí aktivuje, čtvrtá vloží nové reklamní zobrazení a pátá je edituje.

admin.php

    if (@!isset($HTTP_GET_VARS[edit])) :
  ?>
    <form method=“post“ action=“<?=$PHP_SELF.“?pozice=“.$pozice;?>“>
    <h3>Přidat reklamní zobrazení</h3>
    Název:<br>
    <input type=“text“ name=“nazev_reklamy“ size=“20″ class=“input“ maxlength=“255″><br>
    Reklamní kód:<br>
    <textarea name=“text_reklamy“ rows=“8″ cols=“60″></textarea><br>
    <input type=“checkbox“ name=“stav_reklamy“ value=“a“ checked> Aktivní<br><br>
    <span style=“padding-left: 220px;“><input type=“submit“ value=“ Přidat “ class=“input“></span>
    </form><br>
  <?php
    else :
      $query2 = „select * from reklama where id = ‚$edit'“;
      if (@$query_result2 = mysql_query($query2)) {
        @$red = mysql_fetch_row($query_result2);
      } else {
        echo „Není možné editovat reklamní zobrazení.“.mysql_error();
        return;
      }
  ?>
    <form method=“post“ action=“<?=$PHP_SELF.“?pozice=“.$pozice;?>“>
    <input type=“hidden“ name=“id“ value=“<?=$edit;?>“>
    <h3>Editace reklamního zobrazení</h3>
    Název:<br>
    <input type=“text“ name=“nazev_edit“ size=“20″ class=“input“ maxlength=“255″ value=“<?=$red[2];?>“><br>
    Reklamní kód:<br>
    <textarea name=“text_edit“ rows=“8″ cols=“60″><?=$red[3];?></textarea><br>
    <input type=“checkbox“ name=“stav_edit“ value=“a“ <? if ($red[5] == „a“) echo „checked“; ?>> Aktivní<br><br>
    <span style=“padding-left: 220px;“><input type=“submit“ value=“ Editovat “ class=“input“></span>
    </form><br>
  <?php
    endif;

Tato část kódu popisuje dva formuláře. Jeden pro vložení nového reklamního zobrazení a třetí pro jeho editaci, přičemž nemohou být zobrazeny oba dva současně. Vše tedy začíná podmínka, která zjišťuje existenci proměnné $edit. Ta bude vytvořena pouze při přejití na odkaz některého reklamního zobrazení a bude mít hodnotu id reklamního zobrazení. Oba formuláře vypadají stejně, jen jeden je už vyplněný starými údaji.

admin.php

    $query3 = „select * from reklama where id_pozice = ‚$pozice‘ order by id“;
    if (!(@$query_result3 = mysql_query($query3))) {
      echo „Není možné zobrazit reklamní zobrazení.“.mysql_error();
      return;
    }
    if (mysql_num_rows($query_result3) == 0) {
      echo „Pro tuto pozici zatím nejsou zaznamenána žádná reklamní zobrazení.“;
    } else {
      for ($i=1; $i<=mysql_num_rows($query_result3); $i++) {
        @$rek = mysql_fetch_row($query_result3);
        
        if (@$rek[5] == „a“) $stav = „<a href=\“admin.php?pozice=“.$pozice.“&deaktivovat_r=“.$rek[0].“\“ class=\“modra\“>Deaktivovat</a>“; elseif (@$rek[5] == „n“) $stav = „<a href=\“admin.php?pozice=“.$pozice.“&aktivovat_r=“.$rek[0].“\“ class=\“modra\“>Aktivovat</a>“;
        
        echo $i.“. <a href=\“admin.php?pozice=“.$pozice.“&edit=“.$rek[0].“\“ class=\“modra\“>“.$rek[2].“</a>  [„.$stav.“]  [<a href=\“admin.php?pozice=“.$pozice.“&smazat_r=“.$rek[0].“\“ onclick=\“return confirm(‚Opravdu chcete reklamní zobrazení s id „.$rek[0].“ odstranit?‘)\“ class=\“cervena\“>Smazat</a>] (Zobrazeno: „.$rek[4].“)<br><br>“;
      }
    }
  endif;
  ?>
    </td>
   </tr>
  </table>
  </td>
  </tr>
  </tbody>
</table>

Poslední část souboru admin.php vypisuje všechny reklamní zobrazení stejně, jako se vypisují reklamní pozice. Nejprve je proveden výtah z tabulky „reklama“, poté je zjištěno, zda v tabulce již jsou nějaké záznamy a pokud ano, budou všechny postupně vypsány. Podmínka v cyklu „for“ opět zajistí odkaz pro aktivaci či deaktivaci, poté následuje vypsání aktuálního řádku. To probíhá stejně jako u vypsání řádku reklamní pozice, jen na konci za odkazem pro smazání je ještě v závorce udán počet, kolikrát již bylo toto reklamní zobrazení ukázáno návštěvníkovi.

index.php

<?
include „conn.php“;
?>
<!DOCTYPE HTML PUBLIC „-//W3C//DTD HTML 4.0 Transitional//EN“>
<html>
<head>
  <title>Reklamní systém</title>
</head>
<body>
<style>
body {font-family: tahoma; font-size: 11px;}
table {font-family: tahoma; font-size: 11px;}
.input {border: 1px solid black; font-family: tahoma; font-size: 11px;}
a.modra {color: blue;}
a.cervena {color: red;}
</style>
<center>Na této stránce je ukázka funkčnosti reklamního systému (stačí jen několikrát za sebou obnovit stránku).</center><br><br><br>
<?
function reklama($id)
{
  $query1 = „select stav from pozice where id = ‚$id'“;
  if (@$query_result1 = mysql_query($query1)) {
    @$overa = mysql_fetch_row($query_result1);
  } else {
    return;
  }
  if ($overa[0] == „a“) :
    $query2 = „select * from reklama where id_pozice = ‚$id'“;
    if (@$query_result2 = mysql_query($query2)) {
      @$pocet = mysql_num_rows($query_result2);
    } else {
      return;
    }
    $vyber = Rand (0, $pocet-1);
    mysql_data_seek($query_result2, $vyber);
    $prom = mysql_fetch_row($query_result2);
    if ($prom[5] == „n“) {
      $vyber_nah = Rand (1, 3);
    }
    if (@$vyber_nah == 1) {
      $sort = „id“;
    } elseif (@$vyber_nah == 2) {
      $sort = „nazev“;
    } elseif (@$vyber_nah == 3) {
      $sort = „text“;
    }
    if (isset($sort)) {
      $query3 = „select * from reklama where id_pozice = ‚$id‘ and stav = ‚a‘ order by „.$sort;
      if (@$query_result = mysql_query($query3)) {
        $prom = mysql_fetch_row($query_result3);
      } else {
        return;
      }
    }
    $zob = $prom[4]+1;
    $query4 = „update reklama set zobrazeno = ‚$zob‘ where id = ‚$prom[0]'“;
    @mysql_query($query4);
    echo $prom[3];
  endif;
}
?>
<h4 align=“center“>
<?
reklama (1);
?>
</h4>
</body>
</html>

Všechnu práci zastává funkce reklama($id). Vstupem pro tuto funkci bude id hodnota reklamní pozice, kterou chcete zobrazit. Funkce nejprve provede výtah z databáze pozice podle proměnné $id. Ta tu samozřejmě nyní zastupuje vámi později zadané číslo. Následuje ovšem ověření, zda výtah, který byl proveden, má sloupeček „stav“ nastaven na aktivní. Pokud ne, nic se nestane a nic nebude zobrazeno. Pokud ano, pokračujeme dál. Vybereme z tabulky „reklama“ všechny reklamní zobrazení, které připadají spouštěné reklamní pozici. Funkce mysql_num_rows(identifikátor_výsledku) spočítá všechny řádky, jež nám byly nabídnuty, a výsledek uloží do proměnné $pocet.

Všechny řádky už máme venku a teď potřebujeme nastavit ukazatele a aktivovat nějaký náhodně vybraný řádek. Do proměnné $vyber uložíme náhodnou, počítačem vybranou hodnota. K tomu nám skvěle poslouží funkce Rand(minimální_hodnota, maximální_hodnota). Funkce má dva vstupy, a to minimální hodnotu a maximální hodnotu. Číslo pak bude vybráno z tohoto rozsahu. Do výběru bude zavzata i ona minimální a maximální hodnota. Minimální hodnotu musíme nastavit na 0 a maximální na proměnnou $pocet, ovšem sníženou o jedna, protože v proměnné sice máme počet řádků v tabulce, jenže první řádek tabulky nemá pořadové číslo jedna, ale nula (při funkci pro zjištění počtu řádků v tabulce se samozřejmě začíná počítat od jedničky).

Funkce Rand() tedy náhodně vybere nějaké z čísel v rozsahu a uloží jej do proměnné $vyber. Následuje funkce mysql_data_seek (identifikátor_výsledku, číslo_řádku). Hodnota proměnné $vyber se vloží do funkce jako číslo řádku. Výtah z databáze, který jsme už provedli a který je uložen v proměnné $query_result2, bude nastaven na řádek podle náhodně vybraného čísla a nakonec funkcí mysql_fetch_row(identifikátor_výsledku) bude hodnota každého sloupečku označeného řádku vložena do pole proměnné $prom.

Popis je možná trochu matoucí, princip je ale velmi jednoduchý. Teď už by stačilo jen vypsat reklamní kód z řádku a vše by bylo hotové, protože při každém dalším obnovení stránky bude vybrán další náhodný řádek. Jenže je tady ještě problém – co když bude vybrán řádek s reklamním kódem, který byl deaktivován? To vyřešíme znovu velice jednoduše. Necháme PHP, aby opět vybralo náhodné číslo, tentokrát od jedné do tří, kdy jednička bude představovat „id“, dvojka „nazev“ a trojka „text“. Toto číslo určí, podle jaké položky se mají roztřídit řádky v tabulce „reklama“ poté, co ji znova načteme. Pokud se nyní vybere řádek tabulky, který nebude aktivní, udělá se nový výpočet, kdy se vybere první aktivní řádek z tabulky „reklama“ dané reklamní pozice a řádky se vždy roztřídí podle jiného klíče a tudíž se vždy vybere jiná položka. Nakonec ještě aktualizujeme údaj o počtu shlédnutí reklamního zobrazení v tabulce „reklama“ a vypíšeme do kódu stránky reklamní kód, který byl vybrán, příkazem echo $prom[3].

Když budete chtít kamkoli umístit některou z definovaných reklamních pozic, stačí jen volat funkci reklama() a do závorky doplnit id číslo reklamní pozice, kterou chcete zobrazit. Doporučuji vytvořit si reklamní pozici a do ní několik reklamních kódů, kdy každý bude obsahovat jen číslo 1, 2 a tak dále, a potom několikrát obnovovat stránku index.php. Uvidíte, jak se čísla mění. Musím vás ale upozornit, že počítač občas vybere stejné číslo. To se dá samozřejmě také ošetřit – můžete si to sami zkusit (zdrojové kódy).

Starší komentáře ke článku

Pokud máte zájem o starší komentáře k tomuto článku, naleznete je zde.

Předchozí článek msvolejbal
Štítky: Články

Mohlo by vás také zajímat

Nejnovější

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *