anketa php+mysql
4 příspěvky
Archiv diskusního fóra
Fórum je uzavřené a slouží pouze ke čtení. Některé informace mohou být zastaralé.
-
dobrý den, snažím se vytvořit anketu podle článku:http://www.pcsvet.cz/art/article.php?id=418 datábáze obou tabulek jsou vytvořeny, nehází to žádnou chybu, ale nevím, kam doplnit tu otázku a 3 možné odpovědi a také ty obrázky, které tvoří grafickou podobu, poradíte prosím? anketa se jinak vůbec nezobrazuje...připojuji ještě kód anketa.php: <? require("obecne.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 = "co chlastáte na výletech?"; $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> $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 " $pocet (".Number_Format($pocet_proc,1,","," ")."%)<br>\n"; endwhile; // Ukončení tabulky ankety echo "</FONT></td></tr>\n"; echo "</TBODY>\n"; echo "</TABLE><BR>\n"; } ?> omlouvám se, jsem začátečník a nikde jsem nenašel návod, jak to tam vložit.
-
Toto jsou ony dvě tabulky, ovšem nevím, kam do nich v phpAdmin napsat tu otázku a odpovědi...poraďte please...) CREATE TABLE anketa_hlavicka ( id_anketa int(11) NOT NULL auto_increment, otazka varchar(255) NOT NULL, active char(2) DEFAULT 'A' NOT NULL, sirka int(11) DEFAULT '0' NOT NULL, PRIMARY KEY (id_anketa) ); CREATE TABLE anketa_odpoved ( id_odpoved int(11) NOT NULL auto_increment, id_anketa int(11) DEFAULT '0' NOT NULL, odpoved varchar(255) NOT NULL, pocet int(11) DEFAULT '0' NOT NULL, barva varchar(255) NOT NULL, PRIMARY KEY (id_odpoved), KEY id_anketa (id_anketa)
-
to co jsi sem vypsal je pouze sql kód pro vytvoření tabulek které se musí naplnit nějakými údaji ... viz příklad níže ... nezaručuji funkčnost .. ;) INSERT INTO anketa_hlavicka (otazka, active, sirka) VALUES ('Libi se vam muj veb ?', 'A', '150'); INSERT INTO anketa_odpoved (id_anketa, odpoved, barva) VALUES ('zde musi byt id ankety', 'ano libi', 'zde bude odkaz na obrazek'); tak nějak by to asi mělo fungovat ..
-
ja mam ankety ve trech tabulkach. Do jedne ukladam definice anket, do druhe moznosti (s id_moznosti+id_ankety jako klicem) a do treti nashromazdene odpovedi (id_ankety, id_moznosti, user_id). Anketu provozuji v systemu pro prihlasene uzivatele (kazdy ma svoje user_id): CREATE TABLE `ankety` ( `id` smallint(5) unsigned NOT NULL auto_increment, `title` varchar(255) collate utf8_czech_ci NOT NULL, `otazka` varchar(255) collate utf8_czech_ci NOT NULL, `user_id` tinyint(4) NOT NULL, `timestamp` timestamp NOT NULL default CURRENT_TIMESTAMP, `aktivni` tinyint(1) NOT NULL default '1', PRIMARY KEY (`id`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_czech_ci AUTO_INCREMENT=8 ; CREATE TABLE `ankety_moznosti` ( `id` mediumint(9) NOT NULL, `id_ankety` smallint(6) NOT NULL, `title` varchar(255) collate utf8_czech_ci NOT NULL, PRIMARY KEY (`id`,`id_ankety`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_czech_ci; CREATE TABLE `ankety_odpovedi` ( `id_ankety` smallint(6) NOT NULL, `id_odpovedi` mediumint(9) NOT NULL, `user_id` tinyint(4) NOT NULL, PRIMARY KEY (`id_ankety`,`user_id`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_czech_ci; Pouzivam u toho nasledujici dotazy: Seznam aktivnich anket: SELECT ankety.id,ankety.title,users.prezdivka,ankety.timestamp FROM ankety JOIN users ON users.id=ankety.user_id WHERE ankety.aktivni=TRUE ORDER BY ankety.timestamp DESC Detaily ankety: SELECT ankety.title,users.prezdivka,ankety.timestamp,ankety.otazka FROM ankety JOIN users ON user_id=users.id WHERE ankety.id='$id_ankety' Vypis moznosti: SELECT ankety_moznosti.id,ankety_moznosti.title FROM ankety_moznosti WHERE ankety_moznosti.id_ankety='$id_ankety' ORDER BY id ASC Hlasovani: /* kazdy uzivatel se svym ID muze hlasovat jednou, pozdejsi hlasovani prepise to minule */ INSERT INTO ankety_odpovedi (id_ankety, id_odpovedi, user_id) VALUES ('$id_ankety','$id_odpovedi','$user_id') ON DUPLICATE KEY UPDATE id_odpovedi='$id_odpovedi' Vypis, kdo jak hlasoval: SELECT ankety_moznosti.title, users.prezdivka FROM ankety_odpovedi JOIN users ON ankety_odpovedi.user_id = users.id JOIN ankety_moznosti ON ankety_odpovedi.id_odpovedi = ankety_moznosti.id AND ankety_odpovedi.id_ankety = ankety_moznosti.id_ankety WHERE ankety_odpovedi.id_ankety = '$_GET[id]' ORDER BY ankety_odpovedi.id_odpovedi, ankety_odpovedi.user_id Zobrazeni vysledku: $result = mysql_query("SELECT ankety_moznosti.title, count(ankety_odpovedi.id_odpovedi) as pocet FROM ankety_odpovedi JOIN ankety_moznosti ON ankety_moznosti.id=ankety_odpovedi.id_odpovedi AND ankety_moznosti.id_ankety=ankety_odpovedi.id_ankety WHERE ankety_odpovedi.id_ankety='$id_ankety' GROUP BY ankety_odpovedi.id_odpovedi ORDER BY pocet DESC"); while($row = mysql_fetch_array($result, MYSQL_NUM)) $odpovedi[$row[0]]=$row[1]; @reset($odpovedi); $celkem = @array_sum($odpovedi); if (!is_array($odpovedi)) {$odpovedi = array("Ještě nikdo na tuto otázku neodpověděl." => "1");$celkem++;} foreach ($odpovedi as $key => $value) echo round(100*$value/$celkem)." % --> $key<br /><br />"; vytvoreni ankety: INSERT INTO ankety VALUES (NULL,'$nazev_ankety','$anketni_otazka','$user_id',NOW(),'1') /* $_POST["odpoved"] je pole vytvorene z textovych inputu ve formulari, ktery vytvari ankety */ foreach ($_POST["odpoved"] as $value) $odpoved[] = get_magic_quotes_gpc()? $value : add_slashes($value); for ($i=1;$i<10;$i++) { if ($odpoved[$i]=="") continue; $dotaz .= "('" . ($i+1) . "','$last_id','$odpoved[$i]'), "; } $dotaz .= "('1','$last_id','$odpoved[0]')"; $result = mysql_query($dotaz);