Poll systeem met 7 stemmen
Hier mijn eerste topic.
Ik heb een poll systeem gevonden op internet.(kan zelf niet scripten).
Maar nu zet hij de votes in de database.
Maar ik wil dat als je 7x hebt gestemd niet meer kan stemmen.
hier de code:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
<?php
mysql_connect("localhost", "#", "#");
mysql_select_db("#");
if( isset( $_GET['p_id'] ) )
// Id opgegeven, geselecteerde poll pakken
$query = "SELECT * FROM polls WHERE id = '" . intval( $_GET['p_id'] ) . "' LIMIT 1";
else
// Geen id, laatst toegevoegde poll pakken
$query = "SELECT * FROM polls ORDER BY id DESC LIMIT 1";
$result = mysql_query( $query ) or die( mysql_error() );
if( mysql_num_rows( $result ) == 0 ) {
echo "Geen poll geselecteerd!";
} else {
$fetch = mysql_fetch_assoc( $result );
$voted = unserialize( $fetch['voted'] );
// Kijken of het IP al gestemd heeft
if( isset( $voted[ $_SERVER['REMOTE_ADDR'] ] ) )
$canvote = true;
else
$canvote = true;
// Antwoorden deserializen en sorteren
$answers = unserialize( $fetch['answers'] );
// Kijken of er deze keer gestemd is
if( isset( $_POST['voteon'] ) and $canvote ) {
$voteon = base64_decode( $_POST['voteon'] );
if( isset( $answers[ $voteon ] ) ) {
// Klopt, stem verwerken
$answers[ $voteon ]++;
$voted[ $_SERVER['REMOTE_ADDR'] ] = $_POST['voteon'];
mysql_query( "UPDATE polls SET votes = votes + 1, answers = '" . serialize( $answers ) . "', voted = '" . serialize( $voted ) . "' WHERE id = '" . $fetch['id'] . "' LIMIT 1" ) or die( mysql_error() );
$canvote = false;
}
}
arsort( $answers );
if( $canvote )
echo "<form method='POST'>";
echo "<span style='font-weight: bold; font-family: arial;'>" . $fetch['question'] . "</span> (" . $fetch['votes'] . ")<hr style='width: 250px;' align='left' />";
foreach( $answers as $name => $count ) {
if( $canvote )
echo "<input type='radio' name='voteon' value='" . base64_encode( $name ) . "'> ";
echo $name . "<br />";
// Maten uitrekenen
@$onepercent = 100 / $fetch['votes'];
$percent = round( $onepercent * $count , 1 );
$width = 200 * ( $percent / 100 ) + 1;
$margin = 200 - $width;
// Als er al gestemd is, de gekozen optie een aner kleurtje geven
$color = "#61a2f3";
if( !$canvote ) {
if( trim( $voted[ $_SERVER['REMOTE_ADDR'] ] ) == trim( base64_encode( $name ) ) )
$color = "navy";
}
echo "<div style='background-color: " . $color . "; border-top: 1px solid black; margin-right: " . $margin . "px; border-bottom: 1px solid black; width: " . $width . "px; height: 8px; overflow: hidden; display: inline;'></div> (" . $percent . "%)</span><hr style='width: 250px;' align='left' />";
}
if( $canvote )
echo "<input type='submit' value='Stemmen'></form>";
}
?>
mysql_connect("localhost", "#", "#");
mysql_select_db("#");
if( isset( $_GET['p_id'] ) )
// Id opgegeven, geselecteerde poll pakken
$query = "SELECT * FROM polls WHERE id = '" . intval( $_GET['p_id'] ) . "' LIMIT 1";
else
// Geen id, laatst toegevoegde poll pakken
$query = "SELECT * FROM polls ORDER BY id DESC LIMIT 1";
$result = mysql_query( $query ) or die( mysql_error() );
if( mysql_num_rows( $result ) == 0 ) {
echo "Geen poll geselecteerd!";
} else {
$fetch = mysql_fetch_assoc( $result );
$voted = unserialize( $fetch['voted'] );
// Kijken of het IP al gestemd heeft
if( isset( $voted[ $_SERVER['REMOTE_ADDR'] ] ) )
$canvote = true;
else
$canvote = true;
// Antwoorden deserializen en sorteren
$answers = unserialize( $fetch['answers'] );
// Kijken of er deze keer gestemd is
if( isset( $_POST['voteon'] ) and $canvote ) {
$voteon = base64_decode( $_POST['voteon'] );
if( isset( $answers[ $voteon ] ) ) {
// Klopt, stem verwerken
$answers[ $voteon ]++;
$voted[ $_SERVER['REMOTE_ADDR'] ] = $_POST['voteon'];
mysql_query( "UPDATE polls SET votes = votes + 1, answers = '" . serialize( $answers ) . "', voted = '" . serialize( $voted ) . "' WHERE id = '" . $fetch['id'] . "' LIMIT 1" ) or die( mysql_error() );
$canvote = false;
}
}
arsort( $answers );
if( $canvote )
echo "<form method='POST'>";
echo "<span style='font-weight: bold; font-family: arial;'>" . $fetch['question'] . "</span> (" . $fetch['votes'] . ")<hr style='width: 250px;' align='left' />";
foreach( $answers as $name => $count ) {
if( $canvote )
echo "<input type='radio' name='voteon' value='" . base64_encode( $name ) . "'> ";
echo $name . "<br />";
// Maten uitrekenen
@$onepercent = 100 / $fetch['votes'];
$percent = round( $onepercent * $count , 1 );
$width = 200 * ( $percent / 100 ) + 1;
$margin = 200 - $width;
// Als er al gestemd is, de gekozen optie een aner kleurtje geven
$color = "#61a2f3";
if( !$canvote ) {
if( trim( $voted[ $_SERVER['REMOTE_ADDR'] ] ) == trim( base64_encode( $name ) ) )
$color = "navy";
}
echo "<div style='background-color: " . $color . "; border-top: 1px solid black; margin-right: " . $margin . "px; border-bottom: 1px solid black; width: " . $width . "px; height: 8px; overflow: hidden; display: inline;'></div> (" . $percent . "%)</span><hr style='width: 250px;' align='left' />";
}
if( $canvote )
echo "<input type='submit' value='Stemmen'></form>";
}
?>
Database:
Code (php)
1
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
9
CREATE TABLE `polls` (
`id` int(10) NOT NULL auto_increment,
`createdon` int(10) NOT NULL,
`question` varchar(255) NOT NULL,
`answers` text NOT NULL,
`votes` int(10) NOT NULL,
`voted` text NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=2 ;
`id` int(10) NOT NULL auto_increment,
`createdon` int(10) NOT NULL,
`question` varchar(255) NOT NULL,
`answers` text NOT NULL,
`votes` int(10) NOT NULL,
`voted` text NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=2 ;
Met vriendelijke groet,
Slenger
Een andere manier is er in feite niet.
Als de bezoeker niet is ingelogd kun je het beste kiezen voor een sessie. Die bestaat niet meer bij het volgende bezoek, maar het voorkomt in ieder geval excessief spammen.
Kan je het met iets á la dit oplossen:
Code (php)
1
2
2
INSERT INTO `polls` (`id`, `createdon`, `question`, `answers`, `votes`, `voted`) VALUES
(1, 1229649445, 'Slenger', 'a:3:{s:21:"<img src="index.png">";i:4;s:5:"chill";i:0;s:3:"hoi";i:1;}', 5, 'a:1:{s:13:"212.178.82.23";s:4:"aG9p";}');
(1, 1229649445, 'Slenger', 'a:3:{s:21:"<img src="index.png">";i:4;s:5:"chill";i:0;s:3:"hoi";i:1;}', 5, 'a:1:{s:13:"212.178.82.23";s:4:"aG9p";}');
Die 5 staat voor aantal votes.
Kan ik daar ook niks mee?
Wat moet 1229649445 voorstellen? Wat is er mis met een echte datum met tijd? Lijkt mij toch minstens 100 keer eenvoudiger, kun je er nog eens iets mee gaan doen. Gebruik dus een DATETIME als datatype en zet daar een echte datumtijd in.
Verder horen backticks ` niet thuis in SQL, gooi die rotzooi weg, het zorgt voor bugs.
Het is niet mijn script.
Ik zocht gewoon een poll die ik kon bijwerken.
Maar dat lukt mij niet.
Dus daarom hoop ik dat iemand hier mij wil helpen.
Er zijn vast wel betere polls te vinden op internet, en anders heb ik ook nog wel een goed idee: zelf maken.
als je mijn profiel had gelezen had je gezien dat ik geen php ken
http://www.phphulp.nl/php/tutorials/3/576/
http://www.phphulp.nl/php/tutorials/8/575/
Edit: Ik lees niet het profiel van elke gebruiker in een topic waarin ik een reactie post.
Gewijzigd op 01/01/1970 01:00:00 door --
Maar een poll systeem maken lukt me echt niet.
ik snap alleen nog maar echo enzo.
Dan leer je even verder ;) echo is echt de aller-aller-basis...
Echt hartstikke bedankt.
Nu had ik nog een klein vraagje.
Hoe kan ik nu zorgen dat ze op 7 verschillenden moeten stemmen?
Kan dat ook met cookies of ergens neerzetten dat hij maar 1 per antwoord van af dat ip kan krijgen ofzo?
mvg,
Hans
wanneer er al een antwoord is met dat ip dan word het geblokt of dergelijke
Gewijzigd op 01/01/1970 01:00:00 door Kumkwat Trender
Alleen om te kijken hoe vaak je op pagina bent geweest gebruikt hij cookies.
EDIT:/
ik heb checkbox geprobeerd.
maar hij pakt alleen maar de bovenste die je selecteert.
Gewijzigd op 01/01/1970 01:00:00 door Hans Slenger
Peter schreef op 20.12.2008 23:49:
OMG leer nederlands!!OMG gebruik database!!
Want ip hoort bij het ID dan word hij toch helemaal gebant of zit ik dan fout?