Toto by vás mohlo zajímat: Problém s jedinečností IP u ankety
Nejjednodušší komunikace mezi návštěvníkem stránek a jejich tvůrcem je anketa. Nabídnete tak komukoliv reagovat na otázku, třeba na něco co vás zajímá ohledně vašeho webu. Já vás chci naučit jak si takovou anketu můžete udělat sami. Muste k tomu chápat základy MySQL databáze a bylo by dobré zvládat i základy PHP.
Také je potřeba, aby váš webhosting podporoval PHP a MySQL. Například Webhosting C4 to podporuje a mohu ho doporučit.
Pro každý hlas vytvoříme zvlášť adresu. Každá adresa uloží něco jiného do databáze, podle toho budeme později vybírat počty hlasů. Takže adresa:
<a href="anketa.php?hlas=1"></a>
Přidá hlas volbě jedna.
<a href="anketa.php?hlas=2"></a>
Přidá druhý hlas. Takhle můžete zvolit kolik chcete hlasů, ale musíte podle toho upravit celý skript.
Zpracuje údaje odeslané pomocí URL odkazů, které jsem uvedl výše.
anketa.php
<?php
mysql_connect ( "mysql.example.com", "uzivatel", "heslo" );
mysql_select_db("anketa");
/*připojí se k databazi*/
$ip = $_SERVER['REMOTE_ADDR'];
/*načte do proměnné $ip ip adresu návštěvníka*/
$hlas = $_GET['hlas'];
/*načte z url adresy hlas*/
$vlozit = "SELECT ip FROM anketa WHERE ip = '$ip'";
$vysledky = mysql_query ($vlozit) or die (mysql_error());
$vraci = mysql_num_rows($vysledky);
if ($vraci == 0) {
/*tímhle zajistíme, aby se ip adresa nemohla opakovat*/
$vlozit = "INSERT INTO anketa (ip, hlas)" .
"VALUES ('$ipactual', '$hlas')";
mysql_query ($vlozit) or die (mysql_error());
/*vložení dat do databáze*/
}
header("Location: http://www.example.com");
/*přesměrování zpět na stránku odkud jste hlasovali*/
?>
Tenhle skript vložíme tam kde chceme mít zobrazeny průběžné výsledky ankety.
index.php
<?php
mysql_connect ( "mysql.example.com", "uzivatel", "heslo" );
mysql_select_db("anketa");
/*musíme se připojit k DB*/
$vlozit = "SELECT * FROM anketa";
$vysledky = mysql_query ($vlozit) or die (mysql_error());
$celkem = mysql_num_rows($vysledky);
/*proměnná celkem obsahuje celkový počet žádků DB, neboli celkový počet hlasů*/
$vlozit = "SELECT * FROM anketa WHERE hlas = 1";
$vysledky = mysql_query ($vlozit) or die (mysql_error());
$hlas1 = mysql_num_rows($vysledky);
/*proměnná hlas1 obsahuje počet řádků s hlasem 1*/
$vysledek1 = $hlas1/$celkem*100;
/*tady si převedeme hlasy 1 na procenta.. to vás učili ve škole, to vám vysvětlovat nebudu*/
$vlozit = "SELECT * FROM anketa WHERE hlas = 2";
$vysledky = mysql_query ($vlozit) or die (mysql_error());
$hlas2 = mysql_num_rows($vysledky);
/*proměnná hlas2 obsahuje počet řádků s hlasem 2*/
$vysledek2 = $hlas2/$celkem*100;
/*opět přepočet na procenta - hlasu 2*/
$ip = $_SERVER['REMOTE_ADDR'];
/*načte ip adresu návštěvníka*/
$vlozit = "SELECT ip FROM anketa WHERE ip = '$ip'";
$vysledky = mysql_query ($vlozit) or die (mysql_error());
$vraci = mysql_num_rows($vysledky);
/*zjistí, jestli se už daná ip adresa nachází v databázi. jestli ano, tak bude vracet jedničku, jestli ne, tak nulu - proměnná $vraci nam pozdeji rozlisi komu máme hlasování ještě nabídnout*/
?>
Tohle je konkrétní zobrazení ankety i s HTML.
index.php
<style type="text/css" media="screen">
.anketaobal {
width: 200px;
text-align: left;
}
.anketaobal .polozka {
height: 7px;
background-color: #97ADC7;
text-align: left;
margin-bottom: 5px;
}
.anketa small {
text-align: left;
font-size: 80%;
}
.anketa {
background-color: #E1EEF6;
width: 200px;
margin-left: 50px;
padding: 10px;
}
</style>
<div class="anketa">
<small>Kolik vám je let??</small><br />
<small>
<?php if ($vraci == 0 ) echo "<a href='anketa.php?hlas=1'>"; ?>
méně než 18
<?php if ($vypis == 0 ) echo "</a>"; ?>
</small>
<div class="anketaobal">
<div class="polozka" style="width:<?php echo $vysledek1; ?> %;"> </div></div>
<small>
<?php if ($vraci == 0 ) echo "<a href='anketa.php?hlas=2'>"; ?>
více než 18
<?php if ($vypis == 0 ) echo "</a>"; ?>
</small>
<div class="anketaobal">
<div class="polozka" style="width:<?php echo $vysledek2; ?>%;"> </div></div></div>
Proměnná $vraci nám k textu přidává i odkaz, kterým můžeme hlasovat. Když už bylo z této IP hlasováno, tak se text nezobrazí jako odkaz.
A divu s třídou "polozka" jsme ještě přidělili atribut "style", kterým určímě šířku tohoto divu. Šířku udáváme v procentech. Těm bystřejším už došlo, proč jsme tedy hlasy převáděli na procenta.
V tomto příkladu není zobrazen přesný počet hlasů. To byste udělali vložením tohoto kodu do skriptu.
echo $hlas1;
echo $hlas2;
Pokud nejdříve do DB nevložíte nějaký hlas, tak vám bude možná php hlásit chybu. Nebo spíš Warning. To odstraníte tak, že budete jednou hlasovat.
Doufám, že jsem vše dostatečně vysvětlil. Na příkladu si vyzkoušejte jak, to co jsem popsal výše, funguje. Samozřejmě, to co jsem popsal je jen základ. Můžete si skript vylepšit dle libosti. Pokud vás napadne nějaká pěkná "vychytávka" dejte mi vědět, rád se pokochám.