Beste phphulp,
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:


<?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>";
    }

?>


Database:

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 ; 


Met vriendelijke groet,
Slenger
Het is me gelukt met cookies.
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
OMG gebruik database!!
wanneer er al een antwoord is met dat ip dan word het geblokt of dergelijke

Ik werk met database?
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.
Peter schreef op 20.12.2008 23:49
OMG gebruik database!!
OMG leer nederlands!!
Ik snap niet precies hoe ik dat moet gaan doen met ip per antwoord blokken.
Want ip hoort bij het ID dan word hij toch helemaal gebant of zit ik dan fout?

Reageren