Autor | Zpráva | ||
---|---|---|---|
MaxDJs Profil * |
#1 · Zasláno: 16. 6. 2011, 19:24:08
Zdravím,
máme udělat anketu v PHP pomocí session. Bylo by možno mi poradit kostru jak to udělat? Nepotřebuji kompletní řešení. To už bych měl být schopnej udělat. Děkuji za odpověď |
||
Jozin Profil |
#2 · Zasláno: 16. 6. 2011, 20:54:43
Taktéž zdravím,
jednoduše v HTML uděláš formulář. Ten odešleš a zpracuješ PHP-čkem... přičemž si uložíš do session uložíš id ankety a pokud chce hlasovat znovu, tak se to neodešle. Stačí ti to tak? |
||
ShiraNai7 Profil |
#3 · Zasláno: 16. 6. 2011, 20:59:24
Jozin:
„přičemž si uložíš do session uložíš id ankety a pokud chce hlasovat znovu, tak se to neodešle.“ Stačí smazat cookies a lze hlasovat znovu. |
||
Jozin Profil |
#4 · Zasláno: 16. 6. 2011, 21:02:19 · Upravil/a: Jozin
ShiraNai7:
To ale není zadání. Řešil si snad někdy zadání do školy naprosto do důsledků? Mají prostě udělat anketu s session a hotovo :-D EDIT: Teď mě tak napadlo, jestli nebude v zadání spíš, že se díky session má pamatovat kolikrát klepl na jakou volbu v anketě. MaxDJs jaké je přesné znění úkolu? |
||
MaxDJs Profil * |
#5 · Zasláno: 16. 6. 2011, 21:37:58
Jozin:
Máme textovej soubor kde jsou uloženy počty hlasů. Máme z nich načíst data do session a pak zobrazit anketu. Napadlo mě že na jedný stránce bude button a po kliknutí na něj se pomocí php načtou data ze souboru do jednotlivých session proměnných podle odpovědí a zobrazil by se odkaz na novou anketu, kde by se už zobrazila samotná anketa. Lze to takhle udělat? Díky za odpověď |
||
Jozin Profil |
#6 · Zasláno: 16. 6. 2011, 21:50:02
To je podle mě zbytečné... na začátku scriptu bych dal test, jestli již v session jsou data a pokud ne, tak tyto data načtu. A dále vykreslím anketu už s daty. Nemusím mít žádné tlačítka a vždy budu vykreslovat data ze session.
Snad sem ti to popsal tak, aby si to pochopil, kdyžtak ještě jednou: 1. načíst data ze souboru do session (pokud je soubor prázdný, nebo neobsahuje data do session načteš defaultní hodnoty - nejspíš nula) 2. načíst data ze session do templatu 3. vyhodnocení formuláře uložení do souboru případně i do session. |
||
MaxDJs Profil * |
#7 · Zasláno: 16. 6. 2011, 22:46:12
Nevidíte, kde tam mám chybu?? píše mi to chybu na 24 řádku.
<?php include('funkce.php'); session_start(); $obsah_souboru = nactiDataAnkety('data.dat'); $hlasy = preg_split("/,/",$obsah_souboru); $_SESSION["hlasy"] = $hlasy; $_SESSION["celkem_hlasovalo"] = $_SESSION["hlasy"][0] + $_SESSION["hlasy"][1] +$_SESSION["hlasy"][2] +$_SESSION["hlasy"][3]; $moznosti = array("Ano","Ano,ale mohla by být lepší","Ne","Vůbec ne!"); $_SESSION["moznosti"] = $moznosti; $sloupky = array("moznostA.png","moznostB.png","moznostC.png","moznostD.png"); $_SESSION["sloupky"] = $sloupky; echo "<H1>Jak se vám líbí tato anketa??</H1>"; echo "<table border=\"1\">"; for ($i=0;$i<=3;$i++){ if($_SESSION["celkem_hlasovalo"]!=0){ $sirka=round((100*$_SESSION["hlasy"][$i])/$_SESSION["celkem_hlasovalo"]); } else { $sirka=0; } echo "<tr><th>$_SESSION[\"moznosti\"][$i]</th><td width=\"100\"><img src=\"$_SESSION[\"sloupky\"][$i]\" height=\"10\" width=\"$sirka\" alt=\"$_SESSION[\"hlasy\"][$i] hlas/y/ů\" /></td><td>$sirka %</td></tr>"; } echo "<tr><td colspan=\"3\">Celkem hlasovalo: $celkem_hlasovalo</td></tr>"; echo "</table>"; ?> |
||
okolojdouci Profil * |
#8 · Zasláno: 16. 6. 2011, 22:54:13
Místo \" používej apostrof, je to přehlednější. A řetězce a proměnné spojuj tečkou a máš po problémech.
|
||
Jozin Profil |
#9 · Zasláno: 17. 6. 2011, 18:37:20
Jak radí okolojdouci a navic ty naprosto zbytečně pokaždé načítáš do session. Session zůstane tak jako tak, takže místo neustálého načítání dej prostě prvně ověření session
<?php session_start(); if(count($_SESSION['moznosti']) == 0) { include('funkce.php'); $_SESSION = nactiDataAnkety(); //vrati array a tim naplni session } $hlasy = $_SESSION['hlasy']; $moznosti = $_SESSION['moznosti']; //... //to už si doplníš Jde o to, že tak jak to máš, zbytečně přehráváš session. Moje řešení uloží co je do session a až dojde na expiraci, tak se to načte znovu ze souboru. Možná bych někde dole dal odkaz (refresh), který bude mít href třeba "?refresh=1" a v php bude <?php //... if($_GET['refresh'] == 1) session_destroy(); //... |
||
Časová prodleva: 3 dny
|
|||
MaxDJs Profil * |
#10 · Zasláno: 20. 6. 2011, 11:19:30
Jozin:
A lze něják udělat, aby se nezobrazoval notice? Protože já když nám žádnou proměnnou v session tak mi to zobrazí notice s tím že nám definovaný index Notice: Undefined index: moznosti in C:\wamp\www\anketa-session\index.php on line 3 Děkuji za odpověď |
||
Jozin Profil |
#11 · Zasláno: 20. 6. 2011, 11:39:01
Notice se dá vypnout v php.ini a nebo přímo na začátku scriptu dáš zobrazování chyb na jiné nastavení:
<?php error_reporting(E_ALL ^ E_NOTICE); error_reporting(E_ALL & ~E_NOTICE); jeden z těch dvou bude správně, teď nevím, jestli je to stejný zápis jako v php.ini (to je druhý řádek), nebo to první... zkus to ;) |
||
YoSarin Profil |
#12 · Zasláno: 20. 6. 2011, 13:32:40
Jozin:
Obojí je (v tomhle případě) stejné - první je xor, druhé je & s negovanou hodnotou E_NOTICE: 1111 ^ 0100 = 1011 1111 & (~0100) = 1111 & 1011 = 1011 |
||
Časová prodleva: 13 let
|
0