Novinky na serveru JPHomepage Programovíní v PHP Programování v Delphi Novinky ze světa Software Novinky ze světa Hardware Webdesign Grafika - Vlastni tvorba Ostatní

Vytvořte si anketu v php(díl 1.)

Předem musím poznamenat že nejsem žádný profesionál v psaní PHP.Takže se nemusíte bát že by následující kód byl nějak zvláštní. A pokud se vám zdá že něco není správně, tak mě rozhodně napište na adresu která bude někde dole.

Základním předpokladem pro tuhle 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 pak vypadá asi takto:

 
Jak se vám líbí nový design na SNY.PROVAZ.CZ ?
Na tuto anketu odpovědělo celkem 29414 lidí
 Moc se mi to líbí
 17751 (60,3%)
 Nic moc
 5868 (19,9%)
 Hrůza ... nic horšího jsem neviděl
 5795 (19,7%)

 
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 procentuelní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:

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:

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ěd.
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("db/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\">\n";
echo "<TBODY>\n";
echo "<tr><td bgcolor=\"#000000\" align=\"center\"><div align=\"center\"><font color=\"White\"><b>$otazka</b></font></div></td></tr>\n";
echo "<tr><td align=\"top\"><FONT size=1 color=\"White\">\n";
echo "<div align=\"center\">Na tuto anketu odpovědělo celkem $celkem lidí</div>\n";

$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>\n";
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>\n";
endwhile;

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

?>

 
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é hlasi a jejich procentuelní zobrazení. Po stisknutí grafu jse zavolá jednoduchý script který zvyšuje hodnotu hlasů v databázi.
 

<?
require ("db/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í "db/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);
}
?>

 
Všechny tyto scripty si můžete stáhnout .....zde
Obrázky pro grafi jsou také ke stáhnutí .....zde
Pokud používáte phpMyAdmin můžete si do něho stáhnout SQL script pro vytvoření tabulek ..... zde
 
 
 
Příště pro vás připravím pár scriptů které budou sloužit jako prostředí pro přípravu vašich anket. Pokud budete mít nějaké otázky klidně napište na adresu provaz@volny.cz
 

 

 



Připomínky posílejte na email: provaz@volny.cz
Testováno na prohlížeči Microsoft Internet Explorer 5.003103
v rozlišení 1024x768 při Hi-Color (16bit)