Avatar billede m_bold Praktikant
14. november 2004 - 17:35 Der er 27 kommentarer og
1 løsning

Lave en afstemning

Jeg vil gerne lave en afstemning, men kan ikke lige finde ud af hvordan jeg skal gribe det an. Efter man har stemt, skal man kunne se resultatet via procenter og søjler af en slags. Der skal selvfølgelig lægges en cookie, så man íkke kan stemme to gange. Jeg kører MySql.

Kan nogen hjælpe?
Avatar billede jakobdo Ekspert
14. november 2004 - 19:25 #1
Avatar billede m_bold Praktikant
14. november 2004 - 19:58 #2
Jeps. Den har jeg prøvet tidligere, men jeg får en fejl.

function ShowPoll($pid) {
    global $dbtable_polls;
    $query = mysql_query("select * from $dbtable_polls where id='$pid'");
    if(mysql_num_rows($query) > 0)
    {
        $q = stripslashes(mysql_result($query, 0, "question"));
        $num = mysql_result($query, 0, "numofanswers");
        $kode .= "<div class="pollquestion">$q</div>";
        $kode .= "<form action="$_SERVER[PHP_SELF]" method="post">";
        $i = 1;
        while($i != $num+1) {
            $a = stripslashes(mysql_result($query, 0, "answer".$i));
            $kode .= "<div class="pollanswer"><input type="radio" name="vid" value="$i" />$a</div>";
            $i++;
        }
        $kode .= "<input type="hidden" name="pid" value="$pid" />";
        $kode .= "<br /><input type="submit" name="do_vote" value=" - Stem - " class="button" />";
        $kode .= "</form>";
    }
return $kode;       
}


fejlen er på denne linie, men jeg er ikke så skarp til at gennemskue det: $kode .= "<div class="pollquestion">$q</div>";
Avatar billede jakobdo Ekspert
14. november 2004 - 20:30 #3
Hvad siger den fejl du får?
Avatar billede m_bold Praktikant
14. november 2004 - 20:50 #4
Parse error: parse error, unexpected T_STRING in /customers/boldsens.dk/boldsens.dk/httpd.www/index.php on line 225
Avatar billede m_bold Praktikant
14. november 2004 - 20:58 #5
Du får også lige noget kode:

<?
$connect = mysql_connect ("xxxxxxx","xxxxxxxx","xxxxxxx");
mysql_select_db ("boldsens_dk");
// Der SKAL være en åben MySQL forbindelse allerede her
include("pollfunctions.php");
?>

<?
$dbtable_polls = "polls";
$dbtable_pollvotes = "pollvotes";
$cookieprefix = "poll_boldsens.dk";
$redirectto = "http://www.boldsens.dk";

if($_POST[do_vote] and $_POST[pid] and $_POST[vid]) {
    CastVote($_POST[pid], $_POST[vid]);
}

function HaveVoted($pid) {
    global $cookieprefix;
    if(($_COOKIE[$cookieprefix."vote".$pid]) AND ($_COOKIE[$cookieprefix."poll".$pid] == $pid)) {
        return true;
    } else {
        return false;
    }
}

function CastVote($pid, $vote) {
    global $dbtable_pollvotes; global $cookieprefix; global $redirectto;
    if(HaveVoted($pid) != true) {   
        $addvote = mysql_query("insert into $dbtable_pollvotes (pollid, vote) values ('$pid','$vote')");
        setcookie($cookieprefix."vote".$pid, $vote, time()+999999999);
        setcookie($cookieprefix."poll".$pid, $pid, time()+999999999);   
        header("location: $redirectto");
    }
}

function ShowPoll($pid) {
    global $dbtable_polls;
    $query = mysql_query("select * from $dbtable_polls where id='$pid'");
    if(mysql_num_rows($query) > 0)
    {
        $q = stripslashes(mysql_result($query, 0, "question"));
        $num = mysql_result($query, 0, "numofanswers");
        $kode .= "<div class="pollquestion">$q</div>";
        $kode .= "<form action="$_SERVER[PHP_SELF]" method="post">";
        $i = 1;
        while($i != $num+1) {
            $a = stripslashes(mysql_result($query, 0, "answer".$i));
            $kode .= "<div class="pollanswer"><input type="radio" name="vid" value="$i" />$a</div>";
            $i++;
        }
        $kode .= "<input type="hidden" name="pid" value="$pid" />";
        $kode .= "<br /><input type="submit" name="do_vote" value=" - Stem - " class="button" />";
        $kode .= "</form>";
    }
return $kode;       
}

function ShowResults($pid) {
    global $dbtable_polls;    global $dbtable_pollvotes;
    $query = mysql_query("select * from $dbtable_polls where id='$pid'");
        $q = stripslashes(mysql_result($query, 0, "question"));
        $num = mysql_result($query, 0, "numofanswers");
        $kode .= "<div class="pollquestion">$q</div>";
            $votesquery = mysql_query("select count(id) from $dbtable_pollvotes where pollid='$pid'");
            $totalvotes = mysql_result($votesquery, 0, 0);
        $i = 1;
        $kode .= "<table style="width: 95%;" class="text">";
        while($i != $num+1) {
            $a = stripslashes(mysql_result($query, 0, "answer".$i));
            $resultquery = mysql_query("select count(id) from $dbtable_pollvotes
where pollid='$pid' and vote='$i'");
                $votes = mysql_result($resultquery, 0, 0);
                if($votes > 0) {
                    $average = round(100 * $votes / $totalvotes, 2);
                } else {
                    $average = "0";
                }
            $kode .= "<tr>";
            $kode .= "<td colspan="2"><div class="pollanswer">$a:</div></td>";   
            $kode .= "</tr><tr>";       
            $kode .= "<td style="width: 75%;"><span class="pollbar" style="width: $average%;"></td>";
            $kode .= "<td></span>  <span style="text-align: right; font-weight: bold;">$average%</span></td>";
            $kode .= "</tr>";           
            $i++;
        }
        $kode .= "</table>";
        $kode .= "<br /><div style="text-align: center;">Stemmer i alt:<br /><b>$totalvotes</b></div>";
return $kode;
}

$pid = 1; // $pid kan som sagt hentes ud af databasen, eller den kan bare sættes manuelt som her
if(HaveVoted($pid) == true) {
    echo ShowResults($pid);
} else {
    echo ShowPoll($pid);
}

?>

Altsammen ligger i index.php....
Avatar billede jakobdo Ekspert
14. november 2004 - 21:13 #6
Ok, du skal lægge alt dette i filen:

pollfunctions.php

<?
$dbtable_polls = "polls";
$dbtable_pollvotes = "pollvotes";
$cookieprefix = "poll_boldsens.dk";
$redirectto = "http://www.boldsens.dk";

if($_POST[do_vote] and $_POST[pid] and $_POST[vid]) {
    CastVote($_POST[pid], $_POST[vid]);
}

function HaveVoted($pid) {
    global $cookieprefix;
    if(($_COOKIE[$cookieprefix."vote".$pid]) AND ($_COOKIE[$cookieprefix."poll".$pid] == $pid)) {
        return true;
    } else {
        return false;
    }
}

function CastVote($pid, $vote) {
    global $dbtable_pollvotes; global $cookieprefix; global $redirectto;
    if(HaveVoted($pid) != true) { 
        $addvote = mysql_query("insert into $dbtable_pollvotes (pollid, vote) values ('$pid','$vote')");
        setcookie($cookieprefix."vote".$pid, $vote, time()+999999999);
        setcookie($cookieprefix."poll".$pid, $pid, time()+999999999); 
        header("location: $redirectto");
    }
}

function ShowPoll($pid) {
    global $dbtable_polls;
    $query = mysql_query("select * from $dbtable_polls where id='$pid'");
    if(mysql_num_rows($query) > 0)
    {
        $q = stripslashes(mysql_result($query, 0, "question"));
        $num = mysql_result($query, 0, "numofanswers");
        $kode .= "<div class="pollquestion">$q</div>";
        $kode .= "<form action="$_SERVER[PHP_SELF]" method="post">";
        $i = 1;
        while($i != $num+1) {
            $a = stripslashes(mysql_result($query, 0, "answer".$i));
            $kode .= "<div class="pollanswer"><input type="radio" name="vid" value="$i" />$a</div>";
            $i++;
        }
        $kode .= "<input type="hidden" name="pid" value="$pid" />";
        $kode .= "<br /><input type="submit" name="do_vote" value=" - Stem - " class="button" />";
        $kode .= "</form>";
    }
return $kode;     
}

function ShowResults($pid) {
    global $dbtable_polls;    global $dbtable_pollvotes;
    $query = mysql_query("select * from $dbtable_polls where id='$pid'");
        $q = stripslashes(mysql_result($query, 0, "question"));
        $num = mysql_result($query, 0, "numofanswers");
        $kode .= "<div class="pollquestion">$q</div>";
            $votesquery = mysql_query("select count(id) from $dbtable_pollvotes where pollid='$pid'");
            $totalvotes = mysql_result($votesquery, 0, 0);
        $i = 1;
        $kode .= "<table style="width: 95%;" class="text">";
        while($i != $num+1) {
            $a = stripslashes(mysql_result($query, 0, "answer".$i));
            $resultquery = mysql_query("select count(id) from $dbtable_pollvotes
where pollid='$pid' and vote='$i'");
                $votes = mysql_result($resultquery, 0, 0);
                if($votes > 0) {
                    $average = round(100 * $votes / $totalvotes, 2);
                } else {
                    $average = "0";
                }
            $kode .= "<tr>";
            $kode .= "<td colspan="2"><div class="pollanswer">$a:</div></td>"; 
            $kode .= "</tr><tr>";     
            $kode .= "<td style="width: 75%;"><span class="pollbar" style="width: $average%;"></td>";
            $kode .= "<td></span>  <span style="text-align: right; font-weight: bold;">$average%</span></td>";
            $kode .= "</tr>";         
            $i++;
        }
        $kode .= "</table>";
        $kode .= "<br /><div style="text-align: center;">Stemmer i alt:<br /><b>$totalvotes</b></div>";
return $kode;
}

$pid = 1; // $pid kan som sagt hentes ud af databasen, eller den kan bare sættes manuelt som her
if(HaveVoted($pid) == true) {
    echo ShowResults($pid);
} else {
    echo ShowPoll($pid);
}

?>

og så skal du på den side hvor du vil bruge afstemningen, lægge:

Dette øverst:

<?
// Der SKAL være en åben MySQL forbindelse allerede her
include("pollfunctions.php");
?>

Og dette hvor du vil have afstemningen vist:
$pid = 1; // $pid kan som sagt hentes ud af databasen, eller den kan bare sættes manuelt som her
if(HaveVoted($pid) == true) {
    echo ShowResults($pid);
} else {
    echo ShowPoll($pid);
}
Avatar billede m_bold Praktikant
14. november 2004 - 21:25 #7
All right. Det har jeg gjort nu.

Men jeg får stadig en fejl: $kode .= "<div class="pollquestion">$q</div>";

Parse error: parse error, unexpected T_STRING in /customers/boldsens.dk/boldsens.dk/httpd.www/pollfunctions.php on line 46
Avatar billede stalle Nybegynder
15. november 2004 - 06:29 #8
$kode .= "<div class=\"pollquestion\">$q</div>";
Avatar billede m_bold Praktikant
15. november 2004 - 09:10 #9
Ok, det hjalp på den linie, men nu er det den næste linie, det er galt med:
       
$kode .= "<form action="$_SERVER[PHP_SELF]" method="post">";
Parse error: parse error, unexpected T_VARIABLE in /customers/boldsens.dk/boldsens.dk/httpd.www/pollfunctions.php on line 47

Hvad kan det skyldes? Løsningen er jo hentet fra udvikleren.dk, kan det passe, at de har fejl der?
Avatar billede jakobdo Ekspert
15. november 2004 - 09:19 #10
Du skal rette alle " til \" inde i scriptet...
Så f.eks.

kode .= "<tag atr="test">Hej</tag>";
skal rettes til:
kode .= "<tag atr=\"test\">Hej</tag>";

Så den linie du nu får fejl i:

$kode .= "<form action="$_SERVER[PHP_SELF]" method="post">";
skal rettes til:

$kode .= "<form action=\"$_SERVER[PHP_SELF]\" method=\"post\">";
Avatar billede m_bold Praktikant
15. november 2004 - 09:46 #11
Ok, det er så også gjort.

Ny fejl: $a = stripslashes(mysql_result($query, 0, "answer".$i));

Kig lige på www.boldsens.dk for at se fejlene yderligere. Nevermind at tabellen er fucked up pt.
Avatar billede jakobdo Ekspert
15. november 2004 - 09:52 #12
Den siger den ikke kan finde det korrekte data i dit udtræk fra din database.
Avatar billede m_bold Praktikant
15. november 2004 - 10:02 #13
Ja, det forstår jeg godt, men hvad menes der med index...?

answer1 not found in MySQL result index 3

Jeg har hiver data'ene ud fra en tabel med 'id','question','numofanswers','answer 1','answer 2','answer 3','answer 4','nowactive'.

I tabellen har jeg udfyldt én tuple med spørgsmål og tilhørende svarmuligheder.
Avatar billede jakobdo Ekspert
15. november 2004 - 10:11 #14
Har du "fyret" denne af i SQL:

CREATE TABLE polls (
  id int(5) NOT NULL auto_increment,
  question varchar(255) default NULL,
  numofanswers int(1) default NULL,
  answer1 varchar(255) default NULL,
  answer2 varchar(255) default NULL,
  answer3 varchar(255) default NULL,
  answer4 varchar(255) default NULL,
  answer5 varchar(255) default NULL,
  answer6 varchar(255) default NULL,
  answer7 varchar(255) default NULL,
  answer8 varchar(255) default NULL,
  nowactive int(1) NOT NULL default '0',
  PRIMARY KEY  (id)
)

CREATE TABLE pollvotes (
  id int(10) NOT NULL auto_increment,
  pollid int(5) default NULL,
  vote int(1) default NULL,
  PRIMARY KEY  (id)
)
Avatar billede jakobdo Ekspert
15. november 2004 - 10:11 #15
Du skriver ANSWER 1, dit script vil have ANSWER1 (læg mærke til mellemrummet)
Avatar billede m_bold Praktikant
15. november 2004 - 10:24 #16
ok. Det går da klart den rigtige vej...
Afstemningen vises BÅDE for oven OG nedenfor i tabellen.

Allerøverst har jeg:
<?
$connect = mysql_connect ("xxxxxx","xxxxxxx","xxxxxxx");
mysql_select_db ("boldsens_dk");
// Der SKAL være en åben MySQL forbindelse allerede her
include("pollfunctions.php");
?>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>Velkommen til Boldsen's webgalleri</title>
Avatar billede jakobdo Ekspert
15. november 2004 - 11:00 #17
Det er vel fordi du har koden:
$pid = 1; // $pid kan som sagt hentes ud af databasen, eller den kan bare sættes manuelt som her
if(HaveVoted($pid) == true) {
    echo ShowResults($pid);
} else {
    echo ShowPoll($pid);
}
Indsat 2 steder!
Eller du har den evt også i pollfunctions.php?
Avatar billede m_bold Praktikant
15. november 2004 - 11:14 #18
Hehe. Ja den var selvfølgelig stadig i pollfunctions.php.

Når jeg har stemt får jeg tre fejl:

Warning: Cannot modify header information - headers already sent by (output started at /customers/boldsens.dk/boldsens.dk/httpd.www/pollfunctions.php:10) in /customers/boldsens.dk/boldsens.dk/httpd.www/pollfunctions.php on line 33

Warning: Cannot modify header information - headers already sent by (output started at /customers/boldsens.dk/boldsens.dk/httpd.www/pollfunctions.php:10) in /customers/boldsens.dk/boldsens.dk/httpd.www/pollfunctions.php on line 34

Warning: Cannot modify header information - headers already sent by (output started at /customers/boldsens.dk/boldsens.dk/httpd.www/pollfunctions.php:10) in /customers/boldsens.dk/boldsens.dk/httpd.www/pollfunctions.php on line 35

Det drejer sig om CastVote's sidste 3 linier:

function CastVote($pid, $vote) {
    global $dbtable_pollvotes; global $cookieprefix; global $redirectto;
    if(HaveVoted($pid) != true) { 
        $addvote = mysql_query("insert into $dbtable_pollvotes (pollid, vote) values ('$pid','$vote')");
        setcookie($cookieprefix."vote".$pid, $vote, time()+999999999);
        setcookie($cookieprefix."poll".$pid, $pid, time()+999999999); 
        header("location: $redirectto");
    }
}

Kan du gennemskue det?
Avatar billede jakobdo Ekspert
15. november 2004 - 11:36 #19
Prøv at vis alt hvad du har i filen: pollfunctions.php
Og hvis mig toppen af din forside.php
Avatar billede m_bold Praktikant
15. november 2004 - 11:43 #20
index.php:

<?
$connect = mysql_connect ("xxxxxx","xxxxxxx","xxxxxxxxx");
mysql_select_db ("boldsens_dk");
// Der SKAL være en åben MySQL forbindelse allerede her
include("pollfunctions.php");
?>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>Velkommen til Boldsen's webgalleri</title>
.... (osv.)....



pollfunctions.php:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>Velkommen til Boldsen's webgalleri</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
</head>

<body>

<?
$dbtable_polls = "polls";
$dbtable_pollvotes = "pollvotes";
$cookieprefix = "poll_boldsens.dk";
$redirectto = "http://www.boldsens.dk";

if($_POST[do_vote] and $_POST[pid] and $_POST[vid]) {
    CastVote($_POST[pid], $_POST[vid]);
}

function HaveVoted($pid) {
    global $cookieprefix;
    if(($_COOKIE[$cookieprefix."vote".$pid]) AND ($_COOKIE[$cookieprefix."poll".$pid] == $pid)) {
        return true;
    } else {
        return false;
    }
}

function CastVote($pid, $vote) {
    global $dbtable_pollvotes; global $cookieprefix; global $redirectto;
    if(HaveVoted($pid) != true) { 
        $addvote = mysql_query("insert into $dbtable_pollvotes (pollid, vote) values ('$pid','$vote')");
        setcookie($cookieprefix."vote".$pid, $vote, time()+999999999);
        setcookie($cookieprefix."poll".$pid, $pid, time()+999999999); 
        header("location: $redirectto");
    }
}

function ShowPoll($pid) {
    global $dbtable_polls;
    $query = mysql_query("select * from $dbtable_polls where id='$pid'");
    if(mysql_num_rows($query) > 0)
    {
        $q = stripslashes(mysql_result($query, 0, "question"));
        $num = mysql_result($query, 0, "numofanswers");
        $kode .= "<div class=\"pollquestion\">$q</div>";
        $kode .= "<form action=\"$_SERVER[PHP_SELF]\" method=\"post\">";
        $i = 1;
        while($i != $num+1) {
            $a = stripslashes(mysql_result($query, 0, "answer ".$i));
            $kode .= "<div class=\"pollanswer\"><input type=\"radio\" name=\"vid\" value=\"$i\" />$a</div>";
            $i++;
        }
        $kode .= "<input type=\"hidden\" name=\"pid\" value=\"$pid\" />";
        $kode .= "<p align=\"center\"><br /><input type=\"submit\" name=\"do_vote\" value=\"  Stem  \" class=\"button\" />";
        $kode .= "</form>";
    }
return $kode;     
}

function ShowResults($pid) {
    global $dbtable_polls;    global $dbtable_pollvotes;
    $query = mysql_query("select * from $dbtable_polls where id='$pid'");
        $q = stripslashes(mysql_result($query, 0, "question"));
        $num = mysql_result($query, 0, "numofanswers");
        $kode .= "<div class=\"pollquestion\">$q</div>";
            $votesquery = mysql_query("select count(id) from $dbtable_pollvotes where pollid='$pid'");
            $totalvotes = mysql_result($votesquery, 0, 0);
        $i = 1;
        $kode .= "<table style=\"width: 95%;\" class=\"text\">";
        while($i != $num+1) {
            $a = stripslashes(mysql_result($query, 0, "answer".$i));
            $resultquery = mysql_query("select count(id) from $dbtable_pollvotes
where pollid='$pid' and vote='$i'");
                $votes = mysql_result($resultquery, 0, 0);
                if($votes > 0) {
                    $average = round(100 * $votes / $totalvotes, 2);
                } else {
                    $average = "0";
                }
            $kode .= "<tr>";
            $kode .= "<td colspan=\"2\"><div class=\"pollanswer\">$a:</div></td>"; 
            $kode .= "</tr><tr>";     
            $kode .= "<td style=\"width: 75%;\"><span class=\"pollbar\" style=\"width: $average%;\"></td>";
            $kode .= "<td></span>  <span style=\"text-align: right; font-weight: bold;\">$average%</span></td>";
            $kode .= "</tr>";         
            $i++;
        }
        $kode .= "</table>";
        $kode .= "<br /><div style=\"text-align: center;\">Stemmer i alt:<br /><b>$totalvotes</b></div>";
return $kode;
}

?>

</body>
</html>
Avatar billede jakobdo Ekspert
15. november 2004 - 11:56 #21
Fjern dette fra pollfunctions.php

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>Velkommen til Boldsen's webgalleri</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
</head>

<body>

og

</body>
</html>
Avatar billede m_bold Praktikant
15. november 2004 - 12:09 #22
Right. det skal selvfølgelig ikke være HTML...

Nu er der ingen fejl længere, men efter jeg har stemt, vil jeg jo gerne kunne se resultatet... Det kan man ikke nu. Prøv ad...
Avatar billede m_bold Praktikant
15. november 2004 - 12:20 #23
data'ene bliver vel at mærke gemt i db'en....
Avatar billede jakobdo Ekspert
15. november 2004 - 12:33 #24
Og du bruger koden:
$pid = 1; // $pid kan som sagt hentes ud af databasen, eller den kan bare sættes manuelt som her
if(HaveVoted($pid) == true) {
    echo ShowResults($pid);
} else {
    echo ShowPoll($pid);
}
Avatar billede m_bold Praktikant
15. november 2004 - 12:36 #25
ja lige præcis...
Avatar billede jakobdo Ekspert
15. november 2004 - 13:00 #26
Meget mærkelig så...
Avatar billede m_bold Praktikant
15. november 2004 - 13:02 #27
All right. Jeg starter lige et nyt spørgsmål så. Men smid et svar. Du har været meget hjælpsom, så du får points. ;-)
Avatar billede jakobdo Ekspert
15. november 2004 - 13:05 #28
Svar...
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester