WebNews.cz - počítače, komunikace, mobily, internet, finance

Mapa serveru | Administrace

Vytvořte si anketu v PHP

Jiří Provazník - Profil - 24.05.2001
Příklad, jak vytvořit na svých stránkách vlastní ankety. Součástí je i jejich administrace.
V adresáři DB jsou skripty pro vytvoření potřebných tabulek v databázi.

Základním předpokladem pro tuto anketu je databáze. Veškeré otázky a odpovědi budou uloženy ve dvou tabulkách. Tímto uložením docílíme, že ke každé anketě můžeme přiřadit libovolný počet odpovědí.

Anketa je tedy určena otázkou a libovolným počtem odpovědí. Celá je pak v nějaké úhledné tabulce a odpovědi jsou samozřejmě znázorněny pěkným grafem s počtem odpovědí a procentuálním poměrem. Ale dost teorie. Pojďme se podívat na to, jak navrhnout tabulky třeba pro databázi MySQL.

První tabulka se bude jmenovat "ANKETA_HLAVICKA" a bude mít následující pole:

Název Druh Popis
ID_ANKETA INT 11 - Auto_Increment Určuje jedinečné číslo ankety a slouží k identifikaci a přiřazených odpovědí k anketě.
OTAZKA VARCHAR 255 Určuje otázku v anketě. (např.: "Jak se vám líbí nový návrh těchto stránek ?")
ACTIVE CHAR 2 Příznak, zda je anketa ještě aktivní nebo je už jen pro prohlížení
SIRKA INT 11 Šířka tabulky ankety

Druhá tabulka bude obsahovat odpovědi a bude se jmenovat "ANKETA_ODPOVED" s následujícími poli:

Název Druh Popis
ID_ODPOVED INT 11 - Auto_Increment Určuje jedinečné číslo odpovědi
ID_ANKETA INT 11 Určuje jedinečné číslo ankety, ke které odpověď patří
ODPOVED VARCHAR 255 Určuje odpověď na danou anketní otázku
POČET INT 11 Počet kliknutí na tuto odpověď
BARVA VARCHAR 255 Určuje barvu resp. odkaz na obrázek reprezentující barvu pro grafické znázornění odpovědi.

Většina z vás teď již tuší, jak to celé bude probíhat. V tomto dílu se zatím nebudeme zabývat tím, jak naplníme data do databáze, ale především tím, jak je zobrazíme. Následující script vám ukáže, jak lze například zobrazit vlastní anketu.

<? 
require("../inc/connect.php"); // vloží script který se připojí k databázi
// pokud nedošlo k nakonektování proměnná $Con2 = False 
// pokud není script volán s parametrem ID najde se poslední aktivní anketa
if (!IsSet($id) and ($Con2!=false))
{
$vysledek=mysql_query("SELECT MAX(anketa_hlavicka.id_anketa) FROM anketa_hlavicka WHERE active='A' ");
$pocet=mysql_num_rows($vysledek);
$id = 0;
if ($pocet != 0)
{
while ($zaznam = MySQL_Fetch_Array($vysledek)):
$id = $zaznam[0];
endwhile;
}
}

// Pokud byla nalezena nějaká anketa resp. nějaké id ankety a je nakonektovaná databáze můžeme pokračovat ve vykreslení ankety
if (($id!=0) and ($Con2!=false))
{
$celkem = 0;
$procento = 1;
// načteme celkový počet odpovědí
$vysledek=mysql_query("SELECT SUM(anketa_odpoved.pocet) FROM anketa_odpoved WHERE id_anketa=$id");
while ($zaznam = MySQL_Fetch_Array($vysledek)):
$celkem = $zaznam[0];
$procento = $celkem/100;
endwhile;

$otazka = "";
$a = "N";
// Načteme anketní otázku
$vysledek=mysql_query("SELECT otazka,sirka,active FROM anketa_hlavicka WHERE id_anketa=$id");
while ($zaznam = MySQL_Fetch_Array($vysledek)):
$otazka = $zaznam[0];
$sirka = $zaznam[1];
$a = $zaznam[2];
endwhile;

// Zobrazíme hlavičku ankety
echo "<table width="$sirka" border=1 align="center" bordercolor="#FFFFAA" bgcolor="#000070" style="BORDER-BOTTOM: medium none; BORDER-LEFT: medium none; BORDER-RIGHT: medium none; BORDER-TOP: medium none"> ";
echo "<TBODY> ";
echo "<tr><td bgcolor="#000000" align="center"><div align="center"><font color="White"><b>$otazka</b></font></div></td></tr> ";
echo "<tr><td align="top"><FONT size=1 color="White"> ";
echo "<div align="center">Na tuto anketu odpovědělo celkem $celkem lidí</div> ";

$a = "N";
// vykreslení jednotlivých odpovědí.
$vysledek=mysql_query("SELECT odpoved,barva,pocet,id_odpoved FROM anketa_odpoved WHERE id_anketa=$id");
while ($zaznam = MySQL_Fetch_Array($vysledek)):
$pocet = $zaznam[2];
$pocet_proc = $pocet/$procento;
$sirka_proc = (($sirka-80)/100*$pocet_proc)+10;
$barva = $zaznam[1];
$id_odpoved = $zaznam[3];
echo "<b>&nbsp;$zaznam[0]</b><br> ";
if ($a=="A") echo "<a href="anketa_a01.php?id=$id_odpoved&loc=$SCRIPT_NAME">";
echo "<IMG border="0" height="12" src="$barva" width="$sirka_proc">";
if ($a=="A") echo "</a>";
echo "&nbsp;$pocet&nbsp;(".Number_Format($pocet_proc,1,","," ")."%)<br> ";
endwhile;

// Ukončení tabulky ankety
echo "</FONT></td></tr> ";
echo "</TBODY> ";
echo "</TABLE><BR> ";
}

?>

Na začátku najdete část, která rozeznává, zda byl script ankety volán s nějakým číslem ankety. Pokud tomu tak nebylo, najde si automaticky poslední aktivní anketu. Pak již následuje celé vykreslení ankety.

Grafické zobrazení je prováděno vložením obrázku, u něhož prostě nastavíte šířku podle toho, kolik lidí na danou otázku odpovědělo. Celá anketa je doplněna o informaci, kolik lidí do ní hlasovalo. U každého grafu pak vidíte jednotlivé hlasy a jejich procentuální zobrazení.

Po stisknutí grafu se zavolá jednoduchý script, který zvyšuje hodnotu hlasů v databázi.

<?
require ("../inc/connect.php");
if (IsSet($id))
{
mysql_query("UPDATE anketa_odpoved SET pocet=pocet+1 WHERE id_odpoved=$id");

if (IsSet($loc))
{
Header("Location: $loc");
}
else
{
Header("Location: .....");
}
?>

Pokud chcete, aby se po odpovědi uživatel dostal na nějaké místo, můžete do parametru $Loc nastavit nějakou cestu nebo ho prostě někam přesměrovat pomocí zavolání HEADERS("Location ....")

Script pro konektování "../inc/connect.php"může vypadat třeba takto : 

<? 
$dbhost = "localhost";
$dbusername = "";
$dbname = "sny";
$dbpassword = ""; 
$Con2 = mysql_connect($dbhost,$dbusername,$dbpassword);

if (!$Con2)
{
}
else
{
mysql_select_db($dbname);
}
?>

Originál tohoto článku naleznete na http://www.provaz.cz/jp/php/php_anketa01.php, článek převzat se souhlasem autora.
Kompletní zde uvedené skripty - anketa.zip (14 kB)
(včetně obrázků ke grafům a SQL skriptům pro vytvoření potřebných tabulek - adresář DB)
Základní include využité v příkladu - inc.zip (7 kB)

Tisk článku - Poslat článek - (9539 zobrazení)
Redakce | | | ISSN 1213-9335 | © 2005 Developed by terc.cz