Šablony webových stránek a php skriptů

  • php skripty
  • šablony www
  • Anketa

    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.

    Skript pro zpracování hlasů ankety

    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*/ ?>

    Výsledky hlasování

    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*/
    
    ?>
    

    Zobrazení ankety

    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; ?> %;">&nbsp;</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; ?>%;">&nbsp;</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; 

    Pozor!!

    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.

    Příklad

    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.

    Maillist


    Přidáním mailu budete dostávat e-mailem nepravidelně informace o novinkách na tomto webu. Zrušit zasílání těchto informací je možné zde.

    Nově přidané stránky

    Tylova léta


    Obsah této stránky vyžaduje novější verzi aplikace Adobe Flash Player.

    Získat aplikaci Adobe Flash Player

    Autor: Otakar Hypš | výměna odkazů | mapa stránek | tisk | nahoru Reklama na auto | Burza učebnic GJKT | Hudební festival Tylova léta | fBrigády.cz - Brigády pro studenty CNW:Counter