Hej
Jeg har et lille problem med nogle cookies og derfor også med "min" poll. Det er den poll fra Kaspers artikel og som i artiklen har jeg et par filer:
pollfunctions.php
<?
$dbtable_polls="drm_polls";
$dbtable_pollvotes="drm_pollvotes";
$cookieprefix="drm";
$redirectto="http://denrigtigemening.dk/test2";
function HaveVoted($pollid){
global $cookieprefix;
if(($_COOKIE[$cookieprefix."vote".$pollid]) && ($_COOKIE[$cookieprefix."poll".$pollid] == $pollid)){
return true;
}
else{
return false;
}
}
function CastVote($pollid, $vote){
global $dbtable_pollvotes; global $cookieprefix; global $redirectto;
if(HaveVoted($pollid)!=true){
$addvote=mysql_query("INSERT INTO $dbtable_pollvotes (pollid, vote) VALUES ('$pollid','$vote')");
setcookie($cookieprefix."vote".$pollid, $vote, time()+3600);
setcookie($cookieprefix."poll".$pollid, $pollid, time()+3600);
header("location: $redirectto");
}
}
function ShowPoll($pollid){
global $dbtable_polls;
$query=mysql_query("SELECT * FROM $dbtable_polls WHERE id='$pollid'");
if(mysql_num_rows($query)>0){
$q=stripslashes(mysql_result($query,0,"question"));
$num=mysql_result($query,0,"numofanswers");
$kode.="$q";
$kode.="<form action='index.php?pid2=random.php' method='post'>";
$i=1;
while($i!=$num+1){
$a=stripslashes(mysql_result($query,0,"answer".$i));
$kode.="<input type='radio' name='vid' value='$i'> $a<br>";
$i++;
}
$kode.="<input type='hidden' name='pollid' value='$pollid'>";
$kode.="<br><input type='submit' name='do_vote' value='Stem' class='button'>";
$kode.="</form>";
}
return $kode;
}
function ShowResults($pollid){
global $dbtable_polls; global $dbtable_pollvotes;
$query=mysql_query("SELECT * FROM $dbtable_polls WHERE id='$pollid'");
$q=stripslashes(mysql_result($query,0,"question"));
$num=mysql_result($query,0,"numofanswers");
$kode.="$q";
$votesquery=mysql_query("SELECT count(id) FROM $dbtable_pollvotes WHERE pollid='$pollid'");
$totalvotes=mysql_result($votesquery,0,0);
$i=1;
$kode.="<table width='230'>";
while($i!=$num+1) {
$a=stripslashes(mysql_result($query,0,"answer".$i));
$resultquery = mysql_query("SELECT count(id) FROM $dbtable_pollvotes WHERE pollid='$pollid' and vote='$i'");
$votes=mysql_result($resultquery,0,0);
if($votes>0){
$average=round(100*$votes/$totalvotes);
$width=2*$average;
} else {
$average="0";
}
$kode.="<tr>";
$kode.="<td>$a: ($votes)</td>";
$kode.="</tr><tr>";
$kode.="<td><img border='1' height='5' width='$width' src='../gfx/pollbar1x1.gif'></td>";
$kode.="</tr>";
$i++;
}
$kode.="<tr>";
$kode.="<td>Stemmmer i alt: $totalvotes</td>";
$kode.="</tr>";
$kode.="</table>";
return $kode;
}
?>
poll.php
<?
$fp=fopen("php/activepoll.txt","r");
$pollid=fgetc($fp);
fclose($fp);
if(HaveVoted($pollid) == true){
echo ShowResults($pollid);
}
else{
echo ShowPoll($pollid);
}
?>
[url=http://www.denrigtigemening.dk/test2]www.denrigtigemening.dk[/url], som er sitet hvor på jeg skal bruge pollen, er opbygget på følgende måde:
Jeg har en index.php som indeholder to "områder" som hver kan include noget indhold. Områderne includer hhv. pid og pid2 fra url'en.
poll.php bliver included i højre felt som I også kan se på sitet.
Aller aller øverst i min index.php befinder pollfunctions.php sig og den stump kode som tjekker om brugeren har stemt:
index.php
<?
include "php/connect.php";
mysql_select_db("web115029",$db);
include "php/pollfunctions.php";
if($_POST[do_vote] && $_POST[pollid] && $_POST[vid]) {
CastVote($_POST[pollid], $_POST[vid]);
}
?>
<html>
<head>
<title>denRIGTIGEmening.dk CodeAlpha</title>
<link rel="stylesheet" type="text/css" href="style/style.css">
</head>
<body>
<table width="866" height="100%" align="center" cellpadding="0" cellspacing="0">
<tr>
<td id="leftshadowsite"></td>
<td width="800">
<table width="800" height="100% align="center" cellpadding="0" cellspacing="0">
<tr>
<td height="98px" colspan="5" ><a href="http://denrigtigemening.dk/test2"><img border="0" src=gfx/banner800x98.png></a></td>
</tr>
<tr>
<td height="30">
<table id="menudrop" cellpadding="0" cellspacing="0">
<tr>
<td><a href="index.php?pid=viewblog.php&pid2=blogr.php"><img src="gfx/menu_blog.png" border="0"></a></td>
<td><a href="index.php?pid=meninger.php"><img src="gfx/menu_meninger.png" border="0"></a></td>
<td><a href="index.php?pid=viewarticle.php&pid2=viewarticleright.php"><img src="gfx/menu_artikler.png" border="0"></a></td>
<td><img src="gfx/menu_forum.png" border="0"></td>
<td><img src="gfx/menu_omos.png" border="0"></td>
</tr>
</table>
</td>
</tr>
<tr>
<td id="dropshadow" colspan="6" ></td>
</tr>
<tr>
<td colspan="5">
<table height="100%" cellpadding="0" cellspacing="0">
<tr>
<td id="maincontent" valign="top">
<?
$pid=$_GET[pid];
if(!isset($pid)){
include 'php/viewblog.php';
}
else{
include 'php/'.$pid;
}
?>
</td>
<td width="264" bgcolor="#aa3e1c">
<table height="100%" cellspacing="0" cellpadding="0">
<tr>
<td id="topdose" colspan="3"><td>
</tr>
<tr>
<td id="leftdose"></td>
<td width="241">
<?
$pid2=$_GET[pid2];
if(!isset($pid2)){
include 'php/random.php';
}
else{
include 'php/'.$pid2;
}
?>
</td>
<td id="rightdose"></td>
</tr>
</table>
</td>
</tr>
</table>
</td>
</tr>
</table>
</td>
<td id="rightshadowsite"></td>
</tr>
</table>
</body>
</html>
Så til problemet. Pollen virker perfekt i 8/10 tilfælde, men nogen gange virker den bare ikke. Der kan du klikke stem op til mere end 10 gange før den registrer at cookien rent faktisk er sat, fordi cookien bliver altid sat. (med mindre man selvfølgelig blokere den, men så er man også selv ude om det.)
Jeg har inden jeg nu spørg jer til råds, fået et forslag/forklaring som lyder på den måde der redirectes på. At den ikke nødvendigvis gør det muligt at læse cookien igen. Fordi ofte er det sådan at du kan stemme de her 10-20 gange forgæves, altså uden at kunne se resultatet, men når du så lukker browservinduet og går ind på sitet igen, så finder den cookien.
Hvad gør jeg galt?
mvh Jonas
Indlæg senest redigeret d. 14.07.2006 13:14 af Bruger #7041