Avatar billede j-roar-h Nybegynder
15. marts 2009 - 11:31 Der er 9 kommentarer og
1 løsning

Problemer med afstemning

Hej.

Jeg skal have lavet en afstemning i php / msql, og har jeg lavet denne kode:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>PHP/MySQL-afstemning</title>
<style type="text/css">
body {
    font-family:Verdana, Geneva, sans-serif;
    font-size:11px;
    background-color: #f1f1f1;
}
#header {
    font-size:12px;
    font-weight:bold;
}
body,td,th {
    color: #666666;
}
</style>
</head>
<body>
<?php
$host = "localhost"; //din host (ofte localhost)
$username = "?"; //dit brugernavn
$password = "?";    //dit password
$database = "?"; //navn på din database

//opretter forbindelse til MySQL
$db = mysql_connect($host, $username, $password);
if(!$db) {
    print "Error - Could not connect to MySQL";
    exit;
    }
//opretter forbindelse til databasen
$er = mysql_select_db($database);
if(!$er) {
    print "Error - Could not select the test database";
    exit;
    }
$ip = $_SERVER["REMOTE_ADDR"];

if(is_numeric($_POST['answer'])){
    //echo 'INSERT INTO `afstemning` (`svarID`, `svar`, `ip`) VALUES (NULL, \''.$_POST['answer'].'\', \''.$ip.'\');';
    mysql_query('INSERT INTO `afstemning` (`svarID`, `svar`, `ip`) VALUES (NULL, \''.$_POST['answer'].'\', \''.$ip.'\');');
}

//tjekker ip adresse for at se om brugeren tidligere har stemt
if(mysql_num_rows(mysql_query('SELECT * FROM afstemning WHERE ip = "'.$ip.'"')) < 0){
    $totalVotes = mysql_num_rows(mysql_query('SELECT `svar` FROM `afstemning`'));

    echo "
    <p id='header'>Hvor skal træningslejren holdes?</p>
  <table>
    <tr>
      <td>Ølstykke - ";
      $votes0 = mysql_num_rows(mysql_query('SELECT `svar` FROM `afstemning` WHERE `svar` = 0'));
      $votes0Pct = round((($votes0/$totalVotes)*100),0);
   
      echo "<img src='billeder/afstemning_procent.gif' alt='".$votes0." stemmer' width='".$votes0Pct."px' height='10px' /> (".$votes0Pct." %)";
        echo "</td>
    </tr>
    <tr>
      <td>Roskilde - ";
      $votes1 = mysql_num_rows(mysql_query('SELECT `svar` FROM `afstemning` WHERE `svar` = 1'));
      $votes1Pct = round((($votes1/$totalVotes)*100),0);
     
      echo "<img src='billeder/afstemning_procent.gif' alt='".$votes1." stemmer' width='".$votes1Pct."px' height='10px' /> (".$votes1Pct." %)";
        echo "</td>
    </tr>
    <tr>
      <td>Holbæk - ";
      $votes2 = mysql_num_rows(mysql_query('SELECT `svar` FROM `afstemning` WHERE `svar` = 2'));
      $votes2Pct = round((($votes2/$totalVotes)*100),0);
     
      echo "<img src='billeder/afstemning_procent.gif' alt='".$votes2." stemmer' width='".$votes2Pct."px' height='10px' /> (".$votes2Pct." %)";
        echo "</td>
    </tr>
    <tr>
    <td>Birkerød - ";
      $votes3 = mysql_num_rows(mysql_query('SELECT `svar` FROM `afstemning` WHERE `svar` = 3'));
      $votes3Pct = round((($votes3/$totalVotes)*100),0);
     
      echo "<img src='billeder/afstemning_procent.gif' alt='".$votes3." stemmer' width='".$votes3Pct."px' height='10px' /> (".$votes3Pct." %)";
        echo "</td>
  </tr>
  <tr>
      <td>KB - ";
      $votes4 = mysql_num_rows(mysql_query('SELECT `svar` FROM `afstemning` WHERE `svar` = 4'));
      $votes4Pct = round((($votes4/$totalVotes)*100),0);
     
      echo "<img src='billeder/afstemning_procent.gif' alt='".$votes4." stemmer' width='".$votes4Pct."px' height='10px' /> (".$votes4Pct." %)";
        echo "</td>
    </tr>
  </table>
</form>";
} else {
    echo "
    <form action='poll.php' method='post'>
  <p id='header'>Hvor skal træningslejren holdes?</p>
  <table width='120px'>
    <tr>
      <td>Ølstykke</td>
      <td align='right'><input type='radio' name='answer' value='0' /></td>
    </tr>
    <tr>
      <td>Roskilde</td>
      <td align='right'><input type='radio' name='answer' value='1' /></td>
  </tr>
    <tr>
      <td>Holbæk</td>
      <td align='right'><input type='radio' name='answer' value='2' /></td>
    </tr>
    <tr>
      <td>Birkerød</td>
    <td align='right'><input type='radio' name='answer' value='3' /></td>
    </tr>
    <tr>
      <td>KB</td>
      <td align='right'><input type='radio' name='answer' value='4' /></td>
    </tr>
    <tr>
    <td></td>
    <td align='right'><input type='submit' value='Stem' name='stem' /></td>
    </tr>
  </table>
</form>";
}
?>
</body>
</html>

Jeg har bare det problem, at andre ikke kan få lov at stemme, kun se hvad der er blevet stemt.

Håber der er nogen der kan hjælpe?

På forhånd tak!
Avatar billede nicklasb Nybegynder
15. marts 2009 - 11:39 #1
Skal man ikke først se svaret, når der netop findes en stemme fra den pågældende IP? I så falde skal

mysql_num_rows(mysql_query('SELECT * FROM afstemning WHERE ip = "'.$ip.'"')) < 0

være

mysql_num_rows(mysql_query('SELECT * FROM afstemning WHERE ip = "'.$ip.'"')) > 0

Desuden er det ikke særlig kønt, med alle de SELECT-statements du sender mod databasen, hver gang scriptet afvikles. Du burde køre det i en enkelt forespørgsel og tælle på en gruppering af de enkelte resultater.
Avatar billede j-roar-h Nybegynder
15. marts 2009 - 15:02 #2
tak. tror det hjalp. men vender lige tilbare, når jeg har fået en anden til at tjekke den.
Avatar billede nicklasb Nybegynder
15. marts 2009 - 19:37 #3
Det er bare i orden :D

Prøv at udskrifte indholdet imellem <table> og </table> med noget lignende:

$arr = array();
$result = mysql_query('SELECT `svar`, count(`svar`) AS `num` FROM `afstemning` GROUP BY `svar`);
while ($row = mysql_fetch_assoc($result)) {
    $arr[$row['svar']] = $row['num'];
}

$total = array_sum($arr);
foreach($arr as $key => $val) {
    $vote = round((($val/$total)*100),0);

    echo '<tr>' . "\n";
    echo "\t" . '<td>' . "\n";
    echo "\t\t" . Svar ' . $key . ' - ';
    echo "\t\t" . '<img src="billeder/afstemning_procent.gif" alt="' . $val . ' stemmer" style="width: ' . $vote . 'px; height: 10px;" /> (' . $vote . ' %)';
    echo "\t" . '</td>';
    echo '</tr>';
}
Avatar billede j-roar-h Nybegynder
16. marts 2009 - 11:09 #4
Jeg har nu testet det på min computer på arbejdet, og der virkede det ikk...

Jeg har nu også prøvet at indsætte det du skrev ind, men får en fejl. se her: http://rtktennis.wep.dk/poll.php
Avatar billede nicklasb Nybegynder
16. marts 2009 - 11:26 #5
Jeg har ingen anelse om, hvad der står i din linje 57 ..
Avatar billede j-roar-h Nybegynder
16. marts 2009 - 14:05 #6
Selvfølgelig ikk.. glemte at poste koden, men her er den:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>PHP/MySQL-afstemning</title>
<style type="text/css">
body {
    font-family:Verdana, Geneva, sans-serif;
    font-size:11px;
    background-color: #f1f1f1;
}
#header {
    font-size:12px;
    font-weight:bold;
}
body,td,th {
    color: #666666;
}
</style>
</head>
<body>
<?php
$host = "localhost"; //din host (ofte localhost)
$username = "rtktennis"; //dit brugernavn
$password = "tennis";    //dit password
$database = "rtktennis"; //navn på din database

//opretter forbindelse til MySQL
$db = mysql_connect($host, $username, $password);
if(!$db) {
    print "Error - Could not connect to MySQL";
    exit;
    }
//opretter forbindelse til databasen
$er = mysql_select_db($database);
if(!$er) {
    print "Error - Could not select the test database";
    exit;
    }
$ip = $_SERVER["REMOTE_ADDR"];

if(is_numeric($_POST['answer'])){
    //echo 'INSERT INTO `afstemning` (`svarID`, `svar`, `ip`) VALUES (NULL, \''.$_POST['answer'].'\', \''.$ip.'\');';
    mysql_query('INSERT INTO `afstemning` (`svarID`, `svar`, `ip`) VALUES (NULL, \''.$_POST['answer'].'\', \''.$ip.'\');');
}

//tjekker ip adresse for at se om brugeren tidligere har stemt
if(mysql_num_rows(mysql_query('SELECT * FROM afstemning WHERE ip = "'.$ip.'"')) > 0){
    $totalVotes = mysql_num_rows(mysql_query('SELECT `svar` FROM `afstemning`'));

    echo "
    <p id='header'>Hvor skal træningslejren holdes?</p>
  <table>
    $arr = array();
$result = mysql_query('SELECT `svar`, count(`svar`) AS `num` FROM `afstemning` GROUP BY `svar`);
while ($row = mysql_fetch_assoc($result)) {
    $arr[$row['svar']] = $row['num'];
}

$total = array_sum($arr);
foreach($arr as $key => $val) {
    $vote = round((($val/$total)*100),0);

    echo '<tr>' . "\n";
    echo "\t" . '<td>' . "\n";
    echo "\t\t" . Svar ' . $key . ' - ';
    echo "\t\t" . '<img src="billeder/afstemning_procent.gif" alt="' . $val . ' stemmer" style="width: ' . $vote . 'px; height: 10px;" /> (' . $vote . ' %)';
    echo "\t" . '</td>';
    echo '</tr>';
}
  </table>
</form>";
} else {
    echo "
    <form action='poll.php' method='post'>
  <p id='header'>Hvor skal træningslejren holdes?</p>
  <table width='120px'>
    <tr>
      <td>Ølstykke</td>
      <td align='right'><input type='radio' name='answer' value='0' /></td>
    </tr>
    <tr>
      <td>Roskilde</td>
      <td align='right'><input type='radio' name='answer' value='1' /></td>
  </tr>
    <tr>
      <td>Holbæk</td>
      <td align='right'><input type='radio' name='answer' value='2' /></td>
    </tr>
    <tr>
      <td>Birkerød</td>
    <td align='right'><input type='radio' name='answer' value='3' /></td>
    </tr>
    <tr>
      <td>KB</td>
      <td align='right'><input type='radio' name='answer' value='4' /></td>
    </tr>
    <tr>
    <td></td>
    <td align='right'><input type='submit' value='Stem' name='stem' /></td>
    </tr>
  </table>
</form>";
}
?>
</body>
</html>
Avatar billede nicklasb Nybegynder
16. marts 2009 - 18:38 #7
Du skal i hvert falde afslutte din echo, før du begynder på den øvrige kode, altså noget alá:

...
echo "
    <p id='header'>Hvor skal træningslejren holdes?</p>
  <table>";
    $arr = array();
...
Avatar billede j-roar-h Nybegynder
16. marts 2009 - 18:41 #8
Kan jeg ikke få dig til at skrive hele den kode jeg skal bruge? Skal jeg også ændre noget i phpmyadmin?
Avatar billede j-roar-h Nybegynder
18. marts 2009 - 17:56 #9
kunne jeg få dig til at skrive den kode jeg skal bruge? Jeg er ikke så god til det der php.

På forhånd tak!
Avatar billede j-roar-h Nybegynder
22. marts 2009 - 11:45 #10
Nogen der kan hjælpe her?
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