Anketa

V tejto téme sa nachádzajú snippety (rozšírenia) pre Etomite.

Moderátor: Moderators

Používateľov profilový obrázok
Marek Adamec
Medium Star
Medium Star
Príspevky: 246
Dátum registrácie: Pi Dec 28, 2007 7:58 pm
Bydlisko: Dubnica nad Váhom
Kontaktovať používateľa:

Anketa

Príspevok od používateľa Marek Adamec »

Nasiel som na nete konecke anketu, ktora sa da aj rozbehat, len je tu maly problem je to PHP a ja to neviem previest do snippetu :(

databaza

Kód: Vybrať všetko

CREATE TABLE ip (
  ip CHAR(15) NOT NULL,
  PRIMARY KEY (ip)
);

CREATE TABLE otazka (
  id MEDIUMINT(8) unsigned NOT NULL auto_increment,
  otazka VARCHAR(150) NOT NULL,
  PRIMARY KEY (id)
);

CREATE TABLE odpoved (
  id MEDIUMINT(8) unsigned NOT NULL auto_increment,
  odpoved VARCHAR(150) NOT NULL,
  k_otazke MEDIUMINT(8) NOT NULL,
  pocet INT(15) NOT NULL,
  PRIMARY KEY (id)
);
php

Kód: Vybrať všetko

<?php #index.php

header('Content-Type:text/html; charset=iso-8859-2');

$dbc = @mysql_connect('localhost','login','heslo') or die('Pripojenie do databázy zlyhalo!');

$dbs = @mysql_select_db('databaza') or die('Nebola nájdená požadovaná databáza!');

$anketa = 1; // ID aktívnej ankety
/*****************************************************************************/
if(!isset($_GET['anketa'])){
      $sql = mysql_query("SELECT id,otazka FROM otazka WHERE id='$anketa' LIMIT 1");
      $zaznam = mysql_fetch_object($sql);
      $anketa = $zaznam->id;
      $otazka = $zaznam->otazka;
      if(mysql_num_rows($sql) == NULL){
            echo "<p>Požadovaná anketa nie je aktivovaná!</p>n";
      } else {
            echo "<p>$otazka</p>n<hr />n";
            $sql = mysql_query("SELECT id,odpoved,pocet FROM odpoved WHERE k_otazke='$anketa'");
            if(mysql_num_rows($sql) == NULL){
                  echo "<p>K tejto ankete zatiaľ neboli pridané žiadne odpovede!</p>n";
            } else {
                  while($zaznam = mysql_fetch_object($sql)){
                        $id      = $zaznam->id;
                        $odpoved = $zaznam->odpoved;
                        $pocet   = $zaznam->pocet;
                        echo "[$pocet] <a href='?anketa=$anketa&odpoved=$id' title='$odpoved'>$odpoved</a><br />n";
                        echo "<img src='http://www.pabi3.com/layout/images/line.gif' alt='$odpoved' width='".ceil($pocet)."%' height='10' /><br />n";
                        $celkovo = $celkovo+$pocet;
                  }
                  echo "<p>Celkový počet hlasov je <strong>$celkovo</strong></p>n";
            }
      }
} elseif(isset($_GET['anketa'])){
      if($_GET['anketa'] == $anketa){
            if($_GET['odpoved'] == is_numeric($_GET['odpoved'])){
                  $sql = mysql_query("SELECT id FROM otazka WHERE id='$anketa' LIMIT 1");
                  if(mysql_num_rows($sql) == NULL){
                        echo "<p>Požadovaná anketa nieje aktívna!</p>n";
                  } else {
                      $sql = mysql_query("SELECT id FROM odpoved WHERE k_otazke='$anketa' AND id='{$_GET['odpoved']}'");}
                      if(mysql_num_rows($sql) == NULL){
                            echo "<p>Nastala chyba pri odosielaní odpovede!</p>n";
                            echo "<p><a href='index.php' title='Späť k ankete'>Späť k ankete</a></p>n";
                      } else {
                            $sql = mysql_query("INSERT INTO ip(ip) VALUES('{$_SERVER['REMOTE_ADDR']}')");
                            if(!$sql){
                                  echo "<p>Je možné hlasovať iba 1x!</p>n";
                            } else {
                                  $sql = mysql_query("SELECT pocet FROM odpoved WHERE k_otazke='$anketa' AND id='{$_GET['odpoved']}' LIMIT 1");
                                  $pocet = mysql_fetch_object($sql);
                                  $pocet = $pocet->pocet+1;
                                  $sql = mysql_query("UPDATE odpoved SET pocet='$pocet' WHERE k_otazke='$anketa' AND id='{$_GET['odpoved']}' LIMIT 1");
                                  if($sql){
                                        echo "<p>Váš hlas bol úspešne pripočítaný!</p>n";
                                  } else {
                                        echo "<p>Nastala chyba pri odosielaní odpovede!</p>n";
                                  }
                                  echo "<p><a href='index.php' title='Späť k ankete'>Späť k ankete</a></p>n";
                            }
                      }
                  }
            } else {
                  echo "<p>Požadovaná odpoveď neexistuje!!</p>n";
            }
} else {
      echo "<p>Požadovaná anketa nieje aktívna!</p>n";
}
/******************************************************************************/
@mysql_free_result($sql);
@mysql_close();
?>
tu je moja funkcna skusobna anketa http://montblanc.navrchol.sk/anketa.php, original navod je tu http://pabi3.com/blog/anketa-v-php-a-mysql/ ja som to skusal vlozit do snippetu ale dopadlo to asi takto http://navrchol.sk/kontakt
Používateľov profilový obrázok
_rasel^
ETOMITE Admin
ETOMITE Admin
Príspevky: 1122
Dátum registrácie: Ut Sep 20, 2005 1:03 am
Bydlisko: Košice (SR)
Kontaktovať používateľa:

Re: Anketa

Príspevok od používateľa _rasel^ »

Ahoj, našiel som trocha lepšiu anketu, ktorá nepotrebuje obnoviť stránku, po potvrdení hlasovania: http://webdeveloperplus.com/php/ajax-us ... y-and-php/

Snippet s názvom anketa zobrazí náhodnú anketu z databázy mySQL. V ankete je možné zahlasovať po kliknutá na možnosť a odpoveď sa odosiela tlačidlom Odoslať. Je možné zobraziť aj odpovede z príslušnej ankety. V prípade, že sa anketu zahlasuje, tak sa automatický zobrazí príslušná odpoveď. To či niekto za anketu hlasoval, alebo nie, sa rozlišuje len na základe cookies.

Postup inštalácie:
  • súbory z archívu v prílohe je potrebné nahrať prostredníctvom FTP do Etomite,
  • prihlásiť sa do phpMyAdmina, v priavo kliknúť na databázu Etomite (tak, aby sa zobrazili tabuľky) a hore kliknúť na záložku SQL a dať vykonať SQL príkaz, ktorý vytvorí tri tabuľky (otázky, možnosti a hlasy):

    Kód: Vybrať všetko

    CREATE TABLE IF NOT EXISTS `poll_options` (
      `id` int(11) NOT NULL auto_increment,
      `ques_id` int(11) NOT NULL,
      `value` varchar(300) NOT NULL,
      PRIMARY KEY  (`id`)
    ) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
    
    CREATE TABLE IF NOT EXISTS `poll_questions` (
      `id` int(11) NOT NULL auto_increment,
      `ques` text NOT NULL,
      `created_on` datetime NOT NULL,
      PRIMARY KEY  (`id`)
    ) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
    
    CREATE TABLE IF NOT EXISTS `poll_votes` (
      `id` int(11) NOT NULL auto_increment,
      `option_id` int(11) NOT NULL,
      `voted_on` datetime NOT NULL,
      `ip` varchar(16) default NULL,
      PRIMARY KEY  (`id`)
    ) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
  • do šablóny, v dokumentoch, kde sa bude zobrazovať anketa je potrebné niekde medzi tagy head vložiť:

    Kód: Vybrať všetko

    <link rel="stylesheet" type="text/css" href="snippets/poll/styles.css" />
    <script type="text/javascript" src="snippets/poll/jquery-1.3.2.js"></script>
    <script type="text/javascript" src="snippets/poll/poll.js"></script>
  • vytvoriť chunk napr. s názvom Anketa a doň vložiť kód nižšie a chunk umiestniť do šablóny pomocou {{Anketa}}, alebo priamo do šablóny vložiť kód na miesto, kde sa má zobrať anketa:

    Kód: Vybrať všetko

    <div id="container" >
    	<h1>Anketa</h1>
    	<div id="pollcontainer" >
    	</div>
    	<p id="loader" >Nahrávam...</p>
    </div>
    Poznámka k funkcionalite: o vloženie príslušného HTML do DIV s id pollcontainer sa postará JavaScript poll.js z poll.php
  • Otázky a odpovede sa vkladajú do ankety cez phpMyAdmin - v pravo kliknúť na databázu (tak, aby sa zobrazili tabuľky),
    1. otázky: vyhľadáme tabuľku poll_questions a klikneme na ikonku Vložiť (pruhy so znamienkom +) v hornej pravej časti vyplníme iba položky ques (názov samotnej otázky) a created_on (dátum vyvorenia) a klikneme na Vykonaj.
    2. odpovede: postupujem pri vytváraní možností k otázke poll_options, len s tým rozdielom, že je potrebné vyplniť položku ques_id (podľa čísla otázky podľa tabuľky poll_questions) a text odpovede value.
Prílohy
poll_ver-0.1-alpha.zip
Poll (anketa) verzia 0.1 alpha
(22.86 KiB) 405 stiahnutí
..:: Etomite CMS → Rulezzz !.!.!. ::..
Používateľov profilový obrázok
Marek Adamec
Medium Star
Medium Star
Príspevky: 246
Dátum registrácie: Pi Dec 28, 2007 7:58 pm
Bydlisko: Dubnica nad Váhom
Kontaktovať používateľa:

Re: Anketa

Príspevok od používateľa Marek Adamec »

Anketu som uz vyskusal (trochu som si upravil design...) funguje na 100%. Len som este neskumal ako funguje nahodne generovanie na akom algoritme. Aby som nezabudol vyskitol sa mi jeden mensi problem ze sa mi biju JS subory pretoze na indexovej stranke pouzivam prezentaciu ktora pouziva tiez JS.. ked budem mat viac casu tak sa nato kuknem a dam sem vediet..

Co sa tyka overovania hlasovania pouzitie cookies ma svoje vyhody aj nevyhody, pre mna vyhodou je ze si nezapraskam SQL...

DAKUJEM
Používateľov profilový obrázok
_rasel^
ETOMITE Admin
ETOMITE Admin
Príspevky: 1122
Dátum registrácie: Ut Sep 20, 2005 1:03 am
Bydlisko: Košice (SR)
Kontaktovať používateľa:

Re: Anketa

Príspevok od používateľa _rasel^ »

Náhodné generovanie funguje na základe SQL príkazu - náhodný select na jednu otázku ku ktorej sa zobrazia možnosti. Ak by tam bolo potrebné dopracovať filter na hlasovanie podľa IP, tak do SQL by už nebolo nič potrebné ukladať, pretože ku každému hlasu sa ukladá aj IP adresa.
Som rád, že anketa funguje, nech slúži.
..:: Etomite CMS → Rulezzz !.!.!. ::..
Napísať odpoveď