Avatar billede m_bold Praktikant
15. november 2004 - 15:40 Der er 53 kommentarer og
1 løsning

Udtræk statistik fra MySql

Jeg har prøvet at få svar på dette tidligere, men har ikke fået svar, så jeg prøver lige på en anden måde.

Jeg har lavet en afstemning med 4 svarmuligheder, som jeg har gemt i en mysql-DB. Disse data vil jeg gerne trække ud og vise til brugeren efter han har stemt. Evt. ved % eller liggende søjler.

Er der nogen, der kan hjælpe mig med noget kode?
Avatar billede henninghabor Nybegynder
15. november 2004 - 15:48 #1
Hej,

Det er faktisk ikke så svært.

1. Lav en SUM(antalstemmer) AS sum.
2. Udregn hvor mange hits hver enkelt svar har i procent ($percent = ($hits * 100) / $sum;
3. Lav et billede på 1 x 5 pixel.
4. <img src="billede.png" style="width: " . $percent . "px; height: 5px; border: 0px;" alt="">
Avatar billede henninghabor Nybegynder
15. november 2004 - 15:49 #2
Hvis du vil ha' det udpenslet mere, kan jeg godt lave det, men så skal jeg lige ha' nogle informationer om din database (Navne på kolonner etc.) :)
Avatar billede m_bold Praktikant
15. november 2004 - 16:09 #3
Ok. Det ville være fedt, hvis du kunne gøre det mere konkret. Du kan lige få mine DB oplysninger:

Tabellerne er opbygget meget ligesom på http://www.udvikleren.dk/article.php?aid=115.

Tabel 'polls': 'id','question','numofanswers','answer1','answer2','answer3','answer4','nowactive'.

Tabel 'pollvotes': 'id','pollid','vote'.

Ved ikke om det er nok for dig?
Avatar billede henninghabor Nybegynder
15. november 2004 - 16:19 #4
Jeg prøver at bikse noget sammen til dig.
Avatar billede m_bold Praktikant
15. november 2004 - 16:23 #5
tak for det...
Avatar billede henninghabor Nybegynder
15. november 2004 - 16:33 #6
Her er hvad jeg har bikset sammen:

<?php
create table pollquestion (

  questionid      integer not null primary key auto_increment,
  question varchar(255) not null,
  start    date not null,
  end      date not null
);

create table pollanswer (

  id        integer not null primary key auto_increment,
  questionid integer not null,
  answer    varchar(255) not null,
  hits      integer not null
);

echo "<table>\n";

$conn = mysql_connect("server", "brugernavn", "kodeord");
mysql_select_db("database");
$result = mysql_query("select * from pollquestion WHERE start <= now() AND end >= now()");
while ($row = mysql_fetch_array($result)) {
  echo "<tr><td colspan=\"2\">" . htmlentities($row["Navn"]) . "</td></tr>\n";

  $id = $row["questionid"];

  $result = mysql_query("select sum(hits) as sum from pollanser where questionid = '$questionid'");
  while ($row = mysql_fetch_array($result)) {
  $sum = $sum;

  echo "<tr><td colspan=\"2\">$sum stemme(r)</td></tr>\n";
  }

  $result = mysql_query("select * from pollanswer WHERE questionid = '$questionid'");
  while ($row = mysql_fetch_array($result)) {
  $papercent = 0;
  if($hits > 0) {
    $percent = ($hits * 100) / $sum;
  }
    echo "<tr><td>" . htmlentities($row["answer"]) . "</td>";
    echo "<td>" . $percent . "%</td></tr>\n";
  }
}

mysql_close($conn);

echo "</table>\n";
?>

Som du kan se har jeg ændret lidt i dine tabeller, da det vil gi' dig en bedre løsning. :)
Avatar billede m_bold Praktikant
15. november 2004 - 16:45 #7
Hehe. Udemærket, men nu er jeg lidt forvirret, fordi så skal jeg vel også gemme mine data på en anden måde i tabellerne. For en god ordens skyld for du lige mit kode, så du kan se om det er let at ændre:

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


Længere nede i index.php:
<?
$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å hele pollfunctions:
<?
$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;
}

?>

Er det til at overskue?
Avatar billede henninghabor Nybegynder
15. november 2004 - 16:57 #8
########## POLL QUESTION ##########

echo "<form action=\"poll.php?action=vote\" method=\"post\">\n";
echo "<table>\n";

$conn = mysql_connect("server", "brugernavn", "kodeord");
mysql_select_db("database");
$result = mysql_query("select * from pollquestion WHERE start <= now() AND end >= now()");
while ($row = mysql_fetch_array($result)) {
  echo "<tr><td>" . htmlentities($row[question]) . "</td></tr>\n";

  $questionid = $row[questionid];

  $result = mysql_query("select * from pollanswer WHERE questionid = '$questionid'");
  while ($row = mysql_fetch_array($result)) {

  ########## POLL ANSWERS ##########

  echo "<tr><td style=\"text-align: center;\"><input type=\"hidden\" name=\"pqid\" value=\"" . $row[id] . "\">\n";
  }
}

echo "<input type=\"submit\" value=\"Stem\"></td></tr>\n";
echo "</table>\n";
echo "</form>\n";
Avatar billede henninghabor Nybegynder
15. november 2004 - 17:02 #9
Og den der opdaterer pollanswer:
UPDATE pollanswer SET hits = hits + 1 WHERE questionid = '$_REQUEST[questionid]' AND id = '$_REQUEST[id]'
Avatar billede m_bold Praktikant
15. november 2004 - 17:05 #10
ehh - det er jeg bange for, at du lige må skære ud i pap for mig... Hvor skal jeg sætte de forskellige ting ind henne?
Avatar billede henninghabor Nybegynder
15. november 2004 - 18:21 #11
Min kommentar 15/11-2004 16:33:40 kan du f.eks. kalde poll.php.

Min kommentar 15/11-2004 17:02:15 kan du indsætte i en if($_REQUEST[action] == "vote")
{
Her
}

i filen poll.php

Min kommentar 15/11-2004 16:57:18 kan du indsætte under f. eks. din menu eller et andet sted på din hjemmeside.
Avatar billede m_bold Praktikant
15. november 2004 - 18:52 #12
Right. Det har jeg gjort nu. Jeg er ikke helt med på hvad jeg skal indsætte i de to tabeller. Du kan kigge forbi www.boldsens.dk. Den skriver også noget med 'Resource id #3'. Hvad er det?
Avatar billede henninghabor Nybegynder
15. november 2004 - 19:02 #13
Jeg er ikke lige klar over hvorfor den skriver det med resource id #3.

I min kommentar 15/11-2004 16:57:18 skal du skifte denne linie echo "<tr><td style=\"text-align: center;\"><input type=\"hidden\" name=\"pqid\" value=\"" . $row[id] . "\">\n";

ud med

echo "<tr><td style=\"text-align: center;\"><input type=\"radio\" name=\"id\" value=\"" . $row[id] . "\"></td></tr>\n";

Og før echo "<input type=\"submit\" value=\"Stem\"></td></tr>\n";
echo "</table>\n";
echo "</form>\n";

skal du skrive

echo "<tr><td style=\"text-align: center;\"><input type=\"hidden\" name=\"questionid\" value=\"" . $row[questionid] . "\">\n";
Avatar billede henninghabor Nybegynder
15. november 2004 - 19:03 #14
Beklager at det er blevet så rodet... Jeg kan godt starte forfra, hvis det gør det nemmere for dig.
Avatar billede m_bold Praktikant
15. november 2004 - 19:40 #15
Yes. Men jeg får stadig ikke udskrevet svarmulighederne, og når man har stemt, så bliver man redirect'ed til en anden side, og jeg ville egentlig gerne have det på den samme side. Kan du klare det?
Avatar billede m_bold Praktikant
15. november 2004 - 19:45 #16
'Resource id #3' var min fejl - det var bare noget debug, som jeg ikke havde fået fjernet....
Avatar billede henninghabor Nybegynder
16. november 2004 - 09:24 #17
< -- Selve afstemningen. Kan indsættes på alle sider - F. eks. under din menu. -- >

<?php
########## POLL QUESTION ##########

echo "<form action=\"poll.php?action=vote\" method=\"post\">\n";
echo "<table>\n";

$conn = mysql_connect("server", "brugernavn", "kodeord");
mysql_select_db("database");
$result = mysql_query("select * from pollquestion WHERE start <= now() AND end >= now()");
while ($row = mysql_fetch_array($result)) {
  echo "<tr><td>" . htmlentities($row[question]) . "</td></tr>\n";

  $questionid = $row[questionid];
}

########## POLL ANSWERS ##########

$result = mysql_query("select * from pollanswer WHERE questionid = '$questionid'");
while ($row = mysql_fetch_array($result)) {
  echo "<tr><td><input type=\"hidden\" name=\"id\" value=\"" . $row["id"] . "\">" . $row["answer"]</td></tr>\n";
}

echo "<tr><td><input type=\"hidden\" name=\"questionid\" value=\"$questionid\">\n";
echo "<input type=\"submit\" value=\"Stem\"></td></tr>\n";
echo "</table>\n";
echo "</form>\n";
?>

< -- POLL.PHP -- >

<?php
########## POLL QUESTION ##########

echo "<table>\n";

$conn = mysql_connect("server", "brugernavn", "kodeord");
mysql_select_db("database");
$result = mysql_query("select * from pollquestion WHERE start <= now() AND end >= now()");
while ($row = mysql_fetch_array($result)) {
  echo "<tr><td colspan=\"2\">" . htmlentities($row["Navn"]) . "</td></tr>\n";

  $id = $row["questionid"];
}

########## SUM OF POLLANSWERS ##########

$result = mysql_query("select sum(hits) as sum from pollanswer where questionid = '$questionid'");
while ($row = mysql_fetch_array($result)) {
  $sum = $sum;

  echo "<tr><td colspan=\"2\">$sum stemme(r)</td></tr>\n";
}

$result = mysql_query("select * from pollanswer WHERE questionid = '$questionid'");
while ($row = mysql_fetch_array($result)) {
  $percent = 0;
  if($hits > 0) {
    $percent = ($hits * 100) / $sum;
  }
    echo "<tr><td>" . htmlentities($row["answer"]) . "</td>";
    echo "<td>" . $percent . "%</td></tr>\n";
}

mysql_close($conn);

echo "</table>\n";

########## VOTE ##########
// INDSÆTTES I BUNDEN AF POLL.PHP

if($_REQUEST[action] == "vote") {
  $conn = mysql_connect("server", "brugernavn", "kodeord");
  mysql_select_db("database");
  mysql_query("UPDATE pollanswer SET hits = hits + 1 WHERE questionid = '$_REQUEST[questionid]' AND id = '$_REQUEST[id]'");
  mysql_close($conn);
}
?>
Avatar billede m_bold Praktikant
16. november 2004 - 17:17 #18
Ok. Så er jeg tilbage.
Jeg går ud fra at det her skal sættes ind, i stedet for alt det vi havde før - så det er en slags opdatering???

Det har jeg prøvet i hvert fald, men det giver en fejl:
Parse error: parse error, unexpected '/' in /customers/boldsens.dk/boldsens.dk/httpd.www/index.php on line 248

Det drejer sig om denne linie:
echo "<tr><td><input type=\"hidden\" name=\"id\" value=\"" . $row["id"] . "\">" . $row["answer"]</td></tr>\n";
Avatar billede henninghabor Nybegynder
16. november 2004 - 18:05 #19
Fjern gåseøjnene (") imellem [] alle steder hvor der står $row["EtEllerAndet"]
Avatar billede m_bold Praktikant
16. november 2004 - 18:28 #20
Sådan?:  echo "<tr><td><input type=\"hidden\" name=\"id\" value=\"" . $row[id] . "\">" . $row[answer]</td></tr>\n";

Det giver den samme fejl....
Avatar billede hmortensen Nybegynder
16. november 2004 - 18:33 #21
Nej, du skal ik fjerne "" eller '' fra et index i et array, når det er en streng.
Der var blot en fejl efter $row["answer"]:

echo "<tr><td><input type=\"hidden\" name=\"id\" value=\"" . $row["id"] . "\">" . $row["answer"]."</td></tr>\n";
Avatar billede m_bold Praktikant
16. november 2004 - 18:33 #22
Der mangler vist et (") somewhere. Men jeg kan ikke se hvor....
Avatar billede m_bold Praktikant
16. november 2004 - 18:36 #23
Ja ok. Så mangler der radio buttons... hehe
Avatar billede henninghabor Nybegynder
16. november 2004 - 19:57 #24
< -- Selve afstemningen. Kan indsættes på alle sider - F. eks. under din menu. -- >

<?php
########## POLL QUESTION ##########

echo "<form action=\"poll.php?action=vote\" method=\"post\">\n";
echo "<table>\n";

$conn = mysql_connect("server", "brugernavn", "kodeord");
mysql_select_db("database");
$result = mysql_query("select * from pollquestion WHERE start <= now() AND end >= now()");
while ($row = mysql_fetch_array($result)) {
  echo "<tr><td>" . htmlentities($row[question]) . "</td></tr>\n";

  $questionid = $row[questionid];
}

########## POLL ANSWERS ##########

$result = mysql_query("select * from pollanswer WHERE questionid = '$questionid'");
while ($row = mysql_fetch_array($result)) {
  echo "<tr><td><input type=\"hidden\" name=\"id\" value=\"" . $row["id"] . "\">" . $row["answer"]</td></tr>\n";
}

echo "<tr><td><input type=\"hidden\" name=\"questionid\" value=\"$questionid\">\n";
echo "<input type=\"submit\" value=\"Stem\"></td></tr>\n";
echo "</table>\n";
echo "</form>\n";
?>

ændres til:

########## POLL ANSWERS ##########

$result = mysql_query("select * from pollanswer WHERE questionid = '$questionid'");
while ($row = mysql_fetch_array($result)) {
  echo "<tr><td><input type=\"radio\" name=\"id\" value=\"" . $row["id"] . "\">" . $row["answer"]</td></tr>\n";
}
Avatar billede henninghabor Nybegynder
16. november 2004 - 19:58 #25
Beklager at det bli'r sådan noget juks, men jeg plejer at bruge en anden sql struktur. :\
Avatar billede m_bold Praktikant
16. november 2004 - 20:16 #26
Okay. Jeg er helt ok med at det er noget juks, bare det kommer til at virke. Nu ser det godt ud på forsiden, men når man stemmer går noget galt. Prøv ad. Jeg vil gerne have at resultatet bliver vist på index.php også, hvis det kan lade sig gøre...
Avatar billede henninghabor Nybegynder
16. november 2004 - 21:59 #27
Den første fejl er denne:

  $id = $row["questionid"];

ændres til

  $questionid = $row["questionid"];

Også på siden hvor man afgiver sin stemme!

-------------------------

Den anden fejl er:
  echo "<tr><td colspan=\"2\">" . htmlentities($row["Navn"]) . "</td></tr>\n";

ændres til:

  echo "<tr><td colspan=\"2\">" . htmlentities($row["question"]) . "</td></tr>\n";
Avatar billede henninghabor Nybegynder
16. november 2004 - 22:00 #28
For at resultatet skal vises på index.php, kræves det at du indsætter indholdet af poll.php med dertil hørende rettelser fra min kommentar 16/11-2004 21:59:03. :)
Avatar billede m_bold Praktikant
16. november 2004 - 22:11 #29
Ja ok. Der er stadig nogle mangler med udskrivningen af procenter og antal stemmer...

Jeg kan da vel ikke bare kopiere alt fra poll.php over i index.php uden videre. Skal jeg ikke ændre i kald fra index.php?

Hvis du forstår...?
Avatar billede henninghabor Nybegynder
16. november 2004 - 22:20 #30
At hente det fra index.php er samme procedure.

Det eneste du måske skal ændre, er måden det kommer til at se ud - Altså det for øjnene.
Avatar billede henninghabor Nybegynder
16. november 2004 - 22:21 #31
Kan du fortælle mig værdierne i pollanswer databasen? Bare lige så jeg er sikker på at den opdaterer...
Avatar billede henninghabor Nybegynder
16. november 2004 - 22:23 #32
Og mens du er i gang, må du også gerne lige skrive hele indholdet af poll.php her, så jeg kan rette i rettelserne... ;)
Avatar billede m_bold Praktikant
16. november 2004 - 22:24 #33
men så kan man jo altid se resultatet af afstemningen - også før man har stemt. Der skal vel tjekkes efter en cookie, altså om man har stemt...???
Avatar billede m_bold Praktikant
16. november 2004 - 22:26 #34
<?php
########## POLL QUESTION ##########

echo "<table>\n";
$conn = mysql_connect ("xxxxxxxx","xxxxxxxx","xxxxxxxx");
mysql_select_db("boldsens_dk");
$result = mysql_query("select * from pollquestion WHERE start <= now() AND end >= now()");
while ($row = mysql_fetch_array($result)) {
echo "<tr><td colspan=\"2\">" . htmlentities($row["question"]) . "</td></tr>\n";

$questionid = $row["questionid"];
}

########## SUM OF POLLANSWERS ##########

$result = mysql_query("select sum(hits) as sum from pollanswer where questionid = '$questionid'");
while ($row = mysql_fetch_array($result)) {
  $sum = $sum;

  echo "<tr><td colspan=\"2\">$sum stemme(r)</td></tr>\n";
}

$result = mysql_query("select * from pollanswer WHERE questionid = '$questionid'");
while ($row = mysql_fetch_array($result)) {
  $percent = 0;
  if($hits > 0) {
    $percent = ($hits * 100) / $sum;
  }
    echo "<tr><td>" . htmlentities($row["answer"]) . "</td>";
    echo "<td>" . $percent . "%</td></tr>\n";
}

mysql_close($conn);

echo "</table>\n";

########## VOTE ##########
// INDSÆTTES I BUNDEN AF POLL.PHP

if($_REQUEST[action] == "vote") {
$conn = mysql_connect ("xxxxxxxx","xxxxxxxx","xxxxxxxx");
  mysql_select_db("boldsens_dk");
  mysql_query("UPDATE pollanswer SET hits = hits + 1 WHERE questionid = '$_REQUEST[questionid]' AND id = '$_REQUEST[id]'");
  mysql_close($conn);
}
?>
Avatar billede m_bold Praktikant
16. november 2004 - 22:29 #35
pollanswer: 

id  questionid  answer  hits 
      1 1 Jeg er en ven fra København 1
      2 1 Jeg er en ven fra Kjellerup 1
      3 1 Jeg er familie 2
      4 1 Ingen af de ovenstående 0
      5 1 Jeg kender ham ikke 4
Avatar billede henninghabor Nybegynder
16. november 2004 - 22:30 #36
Prøv at ændre til dette:

########## SUM OF POLLANSWERS ##########

$result = mysql_query("select sum(hits) as hits from pollanswer where questionid = '$questionid'");
while ($row = mysql_fetch_array($result)) {
  $sum = $row["hits"];
Avatar billede m_bold Praktikant
16. november 2004 - 22:33 #37
Antal stemmer virker nu....
Avatar billede henninghabor Nybegynder
16. november 2004 - 22:33 #38
Hvis du vil ha' at man kun skal kunne stemme en gang kan du gøre følgende (Gør at man kun, medmindre man sletter sine cookies, kan stemme en gang hver 24. time:

########## VOTE ##########
// INDSÆTTES I BUNDEN AF POLL.PHP

if(!$_REQUEST[action]) {
if($_COOKIE[voted] == "false") {
$conn = mysql_connect ("xxxxxxxx","xxxxxxxx","xxxxxxxx");
  mysql_select_db("boldsens_dk");
  mysql_query("UPDATE pollanswer SET hits = hits + 1 WHERE questionid = '$_REQUEST[questionid]' AND id = '$_REQUEST[id]'");
  mysql_close($conn);
  setcookie("voted", "true", time() + 86400);
}
}
Avatar billede henninghabor Nybegynder
16. november 2004 - 22:35 #39
Nedenstående skal ændres...

########## SUM OF POLLANSWERS ##########

$result = mysql_query("select sum(hits) as sum from pollanswer where questionid = '$questionid'");
while ($row = mysql_fetch_array($result)) {
  $sum = $sum;

  echo "<tr><td colspan=\"2\">$sum stemme(r)</td></tr>\n";
}

$result = mysql_query("select * from pollanswer WHERE questionid = '$questionid'");
while ($row = mysql_fetch_array($result)) {
  $percent = 0;
  if(row["hits"] > 0) {
    $percent = (row["hits"] * 100) / $sum;
  }
    echo "<tr><td>" . htmlentities($row["answer"]) . "</td>";
    echo "<td>" . $percent . "%</td></tr>\n";
}

mysql_close($conn);

echo "</table>\n";
Avatar billede m_bold Praktikant
16. november 2004 - 22:36 #40
ok...
Avatar billede henninghabor Nybegynder
16. november 2004 - 22:36 #41
I min kommentar 16/11-2004 22:35:53 er det kun det under $percent = 0; du skal ændre!
Avatar billede henninghabor Nybegynder
16. november 2004 - 22:37 #42
Ellers vil det ødelægge en af mine tidligere rettelser!
Avatar billede m_bold Praktikant
16. november 2004 - 22:41 #43
Perfekt. Det ser godt ud...
Er du sikker på det med de der cookies virker. Jeg kan jo godt stemme flere gange?
Avatar billede m_bold Praktikant
16. november 2004 - 22:43 #44
kan man lave procent-tallet med 1 decimal bare?
Avatar billede hmortensen Nybegynder
16. november 2004 - 22:44 #45
echo round($tal, 1);
Avatar billede henninghabor Nybegynder
16. november 2004 - 22:46 #46
Nedenstående runder op til en decimal.

    echo "<tr><td>" . htmlentities($row["answer"]) . "</td>";
    echo "<td>" . round($percent, 1) . "%</td></tr>\n";
Avatar billede henninghabor Nybegynder
16. november 2004 - 22:47 #47
Med denne rettelse skulle du kun kunne stemme en gang

########## VOTE ##########
// INDSÆTTES I BUNDEN AF POLL.PHP

if(!$_REQUEST[action]) {
if($_COOKIE[voted] != "true") {
$conn = mysql_connect ("xxxxxxxx","xxxxxxxx","xxxxxxxx");
  mysql_select_db("boldsens_dk");
  mysql_query("UPDATE pollanswer SET hits = hits + 1 WHERE questionid = '$_REQUEST[questionid]' AND id = '$_REQUEST[id]'");
  mysql_close($conn);
  setcookie("voted", "true", time() + 86400);
}
}
Avatar billede m_bold Praktikant
16. november 2004 - 22:52 #48
Nææ. Det fungerer vist ikke helt...
Avatar billede henninghabor Nybegynder
16. november 2004 - 22:57 #49
Nej, det kan jeg desværre godt se...

Du får den fejl fordi jeg har fortalt dig at vi skal indsætte en cookie. Jeg har bare ikke lige tænkt over at cookie skal køres inden der kommer noget html output.

Du afhjælper fejlen ved at flytte
Avatar billede henninghabor Nybegynder
16. november 2004 - 22:57 #50
al hvad der står under

########## VOTE ##########
// INDSÆTTES I BUNDEN AF POLL.PHP

til toppen af siden!
Avatar billede m_bold Praktikant
16. november 2004 - 23:04 #51
Det har jeg gjort nu, men stadig det samme. Kan det være fordi vi skal starte med at kalde poll.php allerførst i index.php?
Avatar billede henninghabor Nybegynder
16. november 2004 - 23:12 #52
Har du msn?

Så kan du adde mig: henninghabor@hotmail.com
Avatar billede m_bold Praktikant
18. november 2004 - 10:25 #53
Hej igen, henning. Mange tak for hjælpen. Jeg fiksede selv lige det sidste. Men du får klart points, fordi jeg kom næsten hele vejen. Nu mangler kun lige at finjustere skrifttype mm. For en god ordens skyld lægger jeg lige min færdige løsning op. ALT ligger nu i index.php:

Øverst:
<?
function VoteNow() {
global $cookieprefix;
    if(!$_REQUEST[action]) {
        if($_REQUEST[action] == "vote") {
            $conn = mysql_connect ("xxxxxxx","xxxxxx","xxxxxxxx");
                mysql_select_db("boldsens_dk");
                mysql_query("UPDATE pollanswer SET hits = hits + 1 WHERE questionid = '$_REQUEST[questionid]' AND id = '$_REQUEST[id]'");
                mysql_close($conn);
                setcookie($cookieprefix."vote", "true", time()+999999);
        }
    }
}
?>


Og der, hvor jeg ønsker afstemningen:
<?
                      if(HaveVoted() != true) {
            echo VoteNow();
            echo ShowResults();
            } else {
            echo ShowPoll();
            }
           
            function HaveVoted() {
            global $cookieprefix;
            if($_COOKIE[$cookieprefix."vote"]) {
            return true;
            } else {
            return false;
            }
            }
           

function ShowResults() {

########## POLL QUESTION ##########

$kode .= "<table>\n";
$conn = mysql_connect ("xxxxxxx","xxxxxx","xxxxx");
mysql_select_db("boldsens_dk");
$result = mysql_query("select * from pollquestion WHERE start <= now() AND end >= now()");
while ($row = mysql_fetch_array($result)) {
$kode .= "<tr><td colspan=\"2\">" . htmlentities($row["question"]) . "</td></tr>\n";

$questionid = $row["questionid"];
}

########## SUM OF POLLANSWERS ##########

$result = mysql_query("select sum(hits) as hits from pollanswer where questionid = '$questionid'");
while ($row = mysql_fetch_array($result)) {
  $sum = $row["hits"];
 

}

$result = mysql_query("select * from pollanswer WHERE questionid = '$questionid'");
while ($row = mysql_fetch_array($result)) {
  $percent = 0;
  if($row["hits"] > 0) {
    $percent = ($row["hits"] * 100) / $sum;
  }
    $kode .= "<tr><td>" . htmlentities($row["answer"]) . "</td>";
    $kode .= '<td><img src="hl.jpg" style="width: ' . $percent . 'px; height: 13px; border: 0px;" alt=""></td>';
    $kode .= "<td>" . round($percent , 1). "%</td></tr>\n";
   
}
  $kode .= "<td><tr><td colspan=\"2\">$sum stemme(r) i alt</td></tr>\n";
mysql_close($conn);

$kode .= "</table>\n";

########## VOTE ##########
// INDSÆTTES I BUNDEN AF POLL.PHP

if($_REQUEST[action] == "vote") {
$conn = mysql_connect ("xxxxxxx","xxxxxx","xxxxxxxx");
  mysql_select_db("boldsens_dk");
  mysql_query("UPDATE pollanswer SET hits = hits + 1 WHERE questionid = '$_REQUEST[questionid]' AND id = '$_REQUEST[id]'");
  mysql_close($conn);
}
return $kode;
}

function ShowPoll() {
    ########## POLL QUESTION ##########
   
    $kode .=  "<form action=\"index.php?action=vote\" method=\"post\">\n";
    $kode .= "<table>\n";
   
    $conn = mysql_connect("xxxxxxx", "xxxxxx", "xxxxxxx");
    mysql_select_db("boldsens_dk");
    $result = mysql_query("select * from pollquestion WHERE start <= now() AND end >= now()");
   
    while ($row = mysql_fetch_array($result)) {
    $kode .= "<tr><td>" . htmlentities($row[question]) . "</td></tr>\n";
   
    $questionid = $row[questionid];
    }
?>
                </td>
            </tr>
          </table>
          <font size="1" face="Arial, Helvetica, sans-serif"><br>
          </font></div>
      </div>
      <div align="center"></div>
      <table width="181" cellspacing="0">
        <tr>
          <td font size="1" face="Arial, Helvetica, sans-serif">
            <?
    ########## POLL ANSWERS ##########
   
    $result = mysql_query("select * from pollanswer WHERE questionid = '$questionid'");
    while ($row = mysql_fetch_array($result)) {
    $kode .= "<tr><td><input type=\"radio\" name=\"id\" value=\"" . $row["id"] . "\">" . $row["answer"]."</td></tr>\n";
    }
    $kode .= "<tr><td><input type=\"hidden\" name=\"questionid\" value=\"$questionid\">\n";
?>
            <div align="center"> <font size="1" face="Arial, Helvetica, sans-serif">
              <?
    $kode .= "<br>";
    $kode .= "<input type=\"submit\" value=\"Stem\"></td></tr>\n";
    $kode .= "</table>\n";
    $kode .= "</form>\n";

    return $kode;
}
?>
Avatar billede henninghabor Nybegynder
18. november 2004 - 10:32 #54
Hey,

Jeg er glad for at du endelig fandt ud af det - Beklager at det skulle trække så meget i langdrag. Takker for points.
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