Slettet bruger
13. januar 2003 - 17:45
Der er
8 kommentarer og 1 løsning
Cookie
Hejsa eksperter. Jeg sidder med et afstemnings system. Det fungere ganske udemærket. Den logger brugerens ip, sådan at de ikke kan stemme igen. Problemet er blot, at da mange danskere køre med dynamisk ip, kan de efter at have genstartet computeren stemme igen. Derfor vil jeg gerne have lagt en cookie funktion ind også. Cookien skal forsvinde efter 7 dage, problemet er blot at jeg ikke ved hvor jeg skal ligge denne funktion ind henne. Koden på den side der viser afstemningen eller resultaterne er her: <?php function head() { include('vote_config.php'); echo "<table width=\"100%\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\"> <tr><td> <table width=\"98\" border=\"0\" cellpadding=\"0\" cellspacing=\"\"> <tr><td bgcolor=\"$bgcolor\">"; } function foot () { echo "</td></tr></table></td></tr></table>"; } function record($REMOTE_ADDR) { include('vote_config.php'); $fp=fopen("$ip_file", "a+"); fputs ($fp,$REMOTE_ADDR."][".time()."\n"); fclose($fp); } function check($REMOTE_ADDR) { include('vote_config.php'); global $valid; $ip=$REMOTE_ADDR; $data=file("$ip_file"); $now=time(); foreach ($data as $record) { $subdata=explode("][",$record); if ($now < ($subdata[1]+3600*$timeout)) { if ($ip == $subdata[0]) { $valid=0; break; }}}} //##################### Save data ############################## function save($answer){ global $answer; include('vote_config.php'); $data=file($datafile); $subdata=explode("][",$data[$answer]); $subdata[2]+=1; $data[$answer]=implode("][", $subdata); $data[$answer]=$data[$answer]."\n"; $fp=fopen($datafile,"w+"); $a=0; do{ fputs($fp,$data[$a]); $a++; }while($a<count($data)); fclose($fp); } //########################## Show Form ############################ function form($PHP_SELF){ include('vote_config.php'); head(); echo "<font size=\"$fontsize\" face=\"$font\" color=\"$textcolor\"><OBJECT><form method=\"post\" action=\"$PHP_SELF\">"; $data=file($datafile); $question=$data[0]; $nb_options=count($data)-1; echo "<b>$question</b><BR>"; for($nb=1;$nb <= $nb_options; $nb++){ $option=explode("][","$data[$nb]"); echo "<input type=\"radio\" name=\"answer\" value=\"$nb\"> "; echo "$option[0]<br>"; } echo "<input type=\"hidden\" name=\"save\" value=\"yes\">"; echo "<p align=\"center\"><input class=\"stem\" type=\"submit\" name=\"Submit\" value=\"Stem\"></form></object></font>"; echo "<font size=\"$fontsize\" face=\"$font\" color=\"$textcolor\"><a href=\""; echo $PHP_SELF; echo "?action=results\">Se stemmer</a></font>"; foot(); } //################## Function to show results ######################## function results(){ include('vote_config.php'); head(); $data=file($datafile); $nb_answers=count($data); $votes=0; $a=1; do{ $subdata=explode("][",$data[$a]); $votes += $subdata[2]; $a++; }while($a < $nb_answers); $a=1; $b="answerv"; $v=100/$votes; echo "<font size=\"$fontsize\" face=\"$font\" color=\"$textcolor\"><b>$data[0]</b><br><br>"; do{ $subdata=explode("][",$data[$a]); $av = $subdata[2] * $v; echo "<font size=\"$fontsize\" face=\"$font\" color=\"$textcolor\">$subdata[0] -"; printf(" %01.1f", $av); echo"%<br>"; $p2v = 100-$av; $a++; } while ($a < $nb_answers); echo "<br> $votes stemmer"; foot(); } //###################### Engine #################################### check($REMOTE_ADDR); if ($valid=="0"){ results();} elseif ($action=="results") { results(); } elseif ($save=="yes" && $valid!="0") { save($Answer); record($REMOTE_ADDR); results(); } elseif ($action=="save" && !empty($valid)) { results(); } elseif ($action!="save" && $valid!="0"){ form($PHP_SELF); } ?>
Annonceindlæg tema
Cloud & AI
I dette særtema ser vi på, hvordan cloud og AI bliver fundamentet for virksomhedernes digitale forretning, og hvordan de nye muligheder for automatisering og forretningsværdi kan udnyttes uden at miste overblik, sikkerhed og menneskelig kontrol.
13. januar 2003 - 17:51
#1
Placer SetCookie i din Save() funktion. Husk blot at du ikke må lave noget output for setCookie() bliver kaldt (echo, htmlkode etc.) expireValue er en konstant med den tid Cookien skal "holde" sig (i sekunder). // 60 (sekunder) * 60 (minutter) * 24 (timer) * 7 (dage) define('expireValue', 60*60*24*7); function save($answer){ global $answer; setCookie('votecookie', $answer, (time() + expireValue)); [...]
13. januar 2003 - 17:53
#2
.. nu skal du blot lave et check på om Cookien eksisterer. Lidt afhængig af om register_globals er on eller off, kan du bruge: if(isset($votecookie)) { // Cookie er sat (=bruger har stemt) }
Slettet bruger
13. januar 2003 - 18:13
#3
register_globals er sat til on. kan du give et eksempel med den kode jeg kom med? hvor du sætter cookie koden ind?
13. januar 2003 - 18:21
#4
Jeg prøver engang: //##################### Save data ############################## // 60 (sekunder) * 60 (minutter) * 24 (timer) * 7 (dage) define('expireValue', 60*60*24*7); function save($answer){ global $answer; setCookie('votecookie', $answer, (time() + expireValue)); include('vote_config.php'); $data=file($datafile); $subdata=explode("][",$data[$answer]); $subdata[2]+=1; $data[$answer]=implode("][", $subdata); $data[$answer]=$data[$answer]."\n"; $fp=fopen($datafile,"w+"); $a=0; do{ fputs($fp,$data[$a]); $a++; }while($a<count($data)); fclose($fp); } } function check($REMOTE_ADDR) { include('vote_config.php'); global $valid; if(isset($_COOKIE["votecookie"])) { valid=0; break; } $ip=$REMOTE_ADDR; $data=file("$ip_file"); $now=time(); foreach ($data as $record) { $subdata=explode("][",$record); if ($now < ($subdata[1]+3600*$timeout)) { if ($ip == $subdata[0]) { $valid=0; break; }}}}
13. januar 2003 - 18:22
#5
Det skulle være nok at ændre disse to funktioner (check() og save()). Jeg er ikke 100% sikker på $_COOKIE-syntaxen (jeg bruger den ikke selv, da register_globals er OFF her).
Slettet bruger
13. januar 2003 - 18:34
#6
Hmm... jeg får bare en fejl: Parse error: parse error, unexpected '}' in c:\apache\htdocs\madsstampe\vote_vis.php on line 54
13. januar 2003 - 19:34
#7
Hvad er linie 54?
Slettet bruger
13. januar 2003 - 21:08
#8
linje 54 er } og det der kommer efter er function...... } function check($REMOTE_ADDR) { include('vote_config.php'); global $valid;
Slettet bruger
15. januar 2003 - 19:39
#9
Jeg fik det selv ordnet :) Lavede lidt om i en anden afstemning jeg tidligere havde brugte: øverst i index filen: <?php ob_start(); $stemnu = $_SERVER["HTTP_REFERER"]; if($stem) { setcookie("status","stemt",time()+86400); $counterfile = "$stem.txt"; if(file_exists($counterfile)) { $fil = fopen($counterfile, "r"); $count = fread($fil, 8); fclose($fil); } else $count=0; $count++; $fil = fopen($counterfile, "w"); fwrite($fil, $count); fclose($fil); header("Location: $stemnu"); exit(); } $fp = fopen("god.txt", r); $god = fread($fp, filesize("god.txt")); fclose($fp); $fp = fopen("middel.txt", r); $middel = fread($fp, filesize("middel.txt")); fclose($fp); $fp = fopen("darlig.txt", r); $darlig = fread($fp, filesize("darlig.txt")); fclose($fp); $fp = fopen("ikke.txt", r); $ikke = fread($fp, filesize("ikke.txt")); fclose($fp); ?> og siden <?php if($status == "stemt") { echo " 1. Hvordan er det nye layout i forhold til det gamle? <BR><BR> Resultatet er nu: <BR><BR> Bedre ( "; readfile("god.txt"); echo " ) <BR><BR> Det samme ( "; readfile("middel.txt"); echo " stemmer ) <BR><BR> Dårligere ( "; readfile("darlig.txt"); echo " stemmer ) <BR><BR> Ved ikke ( "; readfile("ikke.txt"); echo " stemmer )<BR><BR> "; } else { echo " <table cellpadding=\"0\" cellspacing=\"0\"><tr bgcolor=\"#FFFFFF\"><td width=\"141\" height=\"400\" bgcolor=\"#B7C6D6\" valign=\"top\" align=\"left\"></td><td width=\"466\" height=\"400\" bgcolor=\"#FFFFFF\" valign=\"top\"><div align=\"center\"><p><font face=\"Verdana\" size=\"1\"><br><font size=\"2\">1. Hvordan er det nye layout i forhold til det gamle?</font></font></p><form action=\"$stemnu\" method=\"post\"><font face=\"verdana\" size=\"1\"></font><table width=\"103\" border=\"0\" cellspacing=\"0\" cellpadding=\"0\"><tr><td><font face=\"verdana\" size=\"1\"><input type=\"hidden\" name=\"cookie\" value=\"stem\"><input type=\"Radio\" name=\"stem\" value=\"god\">Bedre</font></td></tr><tr><td><font face=\"verdana\" size=\"1\"><input type=\"Radio\" name=\"stem\" value=\"middel\">Det samme</font></td> </tr><tr><td><font face=\"verdana\" size=\"1\"><input type=\"Radio\" name=\"stem\" value=\"darlig\">Dårligere </font></td></tr><tr><td><font face=\"verdana\" size=\"1\"><input type=\"Radio\" name=\"stem\" value=\"ikke\">Ved ikke</font></td></tr><tr><td><font face=\"verdana\" size=\"1\"><input type=\"submit\" value=\"Stem\" class=\"css\" name=\"submit\"></font></td></tr></table></div></td></tr></table>"; } ?>
Vi tilbyder markedets bedste kurser inden for webudvikling