SMART PoLL 0.7.1
Over SMART PoLL 0.7 : - Adminfunctie - Archieffunctie - Makkelijke installatie middels instal.php - Radios worden automatisch gemaakt aan de hand van het aantal antwoorden, maw er zijn erg veel antwoorden mogelijk. - Ip logging zodat er per poll maar 1x gestemd kan worden - Grafische en procentuele indicator - Polls makkelijk te herkennen aan weergegeven nummer en bijhorende datum Installatie : - Download of kopier de bestanden naar een map (bijv. poll) - Verander in database.php de gegevens zodat ze op jouw db van kracht zijn. - Open de browser en ga naar .../poll/instal.php en de SQL tabellen worden weggeschreven Let op! als de tabellen poll en/of votes al bestaan worden deze overschreven! - Met de browser nog open ga je naar .../poll/admin.php en type je de vraag en de antwoorden gescheiden door een comma. - Je poll is nu operationeel! Voor vragen of suggesties: mailto:[email protected] Succes ermee! Update: 16 augustus 2004 De installbug is gefixed! :) 0.8 is in de maak, maar nog errug buggy ;)
<?
# Filename : admin.php
# Author : Mitch Vroege
# Projectname : SMART PoLL
# Projectversion : 0.7.1
# Releasedate : 16-08-2004
# Include database classfile
include("database.php");
# Class new_poll
class new_poll
{
function showAdmin()
{
$admin .= "<form method=\"POST\" ation=\"" . $_SERVER['PHP_SELF'] . "\">";
$admin .= "Vraag :<br />";
$admin .= "<input type=\"text\" name=\"q\" maxlength=\"255\" /><br />";
$admin .= "Antwoorden : (gescheiden door een komma en zonder spaties)<br />";
$admin .= "<input type=\"text\" name=\"a\" /><br />";
$admin .= "<input type=\"submit\" name=\"add\" value=\"Voeg toe!\" />";
$admin .= "</form>";
return $admin;
}
function makeScores($num)
{
for($i=1;$i<=$num;$i++)
{
if($i == $num)
{
$scores .= "0";
}
else
{
$scores .= "0,";
}
}
return $scores;
}
}
# Check if user is Admin
# Hier kun je je eigen log systeem in verwerken
$admin = 1;
if($admin)
{
# Show options
$np = new new_poll;
$db = new database;
# Check if form is submitted
if(!$_POST['add'])
{
# Show admin
echo $np->showAdmin();
}
else
{
# Set some vars
$a = $_POST['a'];
$total = count(explode(",", $a));
$q = htmlentities($_POST['q']);
$a = $_POST['a'];
# calc null values
$null = $np->makeScores($total);
# Insert new poll
$sql1 = "INSERT INTO `poll` SET `poll_stelling` = '" . $q . "', `poll_keuzes` = '" . $a . "', `poll_scores` = '" . $null . "', `poll_datum` = '" . time() . "'";
# Reset votes
$sql2 = "DELETE FROM `votes`";
$res1 = $db->execute($sql1);
$res2 = $db->execute($sql2);
echo "Nieuwe poll toegevoegd!";
}
}
else
{
# User isnt an admin
die("INVALID ACCESLEVEL!");
}
?>
----------------------------------------------------------------------------------------------------
<?
# Filename : archives.php
# Author : Mitch Vroege
# Projectname : SMART PoLL
# Projectversion : 0.7.1
# Releasedate : 16-08-2004
# Include database classfile
include("database.php");
# Include poll classfile
include("poll.php");
# Archives class
class archive
{
function showAll()
{
# Run database class
$db = new database;
# Get the number of rows
$sql = "SELECT * FROM `poll` ORDER BY `poll_id` DESC";
$aantal = $db->num_rows($sql);
$archives .= "<b>Er zijn " . $aantal . " polls in het archief!</b><br />";
# Get all rowvalues
$data = $db->get_array($sql);
# Set paragraph start
$archives .= "<p>";
# Loop to make the URLs
for($i=0; $i<$aantal; $i++)
$archives .= "<a href=\"" . $_SERVER['PHP_SELF'] . "?ArchID=" . $data[$i]['poll_id'] . "\">" . date("j-n-Y", $data[$i]['poll_datum']) . "</a><br />";
# End paragraph
$archives .= "</p>";
# Link back to mainpage
$archives .= "<p><a href=\"index.php\">Terug</a>";
return $archives;
}
function showSingle($id)
{
# Run poll class
$poll = new poll;
# Get the results
$single = $poll->archResults($id);
return $single;
}
}
# Run archive class
$ac = new archive;
# Check for $_GET data
if($_GET['ArchID'] && is_numeric($_GET['ArchID']))
echo $ac->showSingle($_GET['ArchID']);
else
echo $ac->showAll();
?>
----------------------------------------------------------------------------------------------------
<?
# Filename : database.php
# Author : Mitch Vroege
# Projectname : SMART PoLL
# Projectversion : 0.7.1
# Releasedate : 16-08-2004
class database
{
# Database vars
var $user = "User";
var $pass = "Pass";
var $host = "localhost";
var $name = "DBname";
# Functie die mysql_num_rows teruggeeft
function num_rows($sql)
{
$this->connect();
$res = mysql_query($sql);
$aantal = mysql_num_rows($res);
mysql_close();
return $aantal;
}
# Functie de mysql_fetch_array teruggeeft
function get_array($sql)
{
$this->connect();
$res = mysql_query($sql);
while($data = mysql_fetch_array($res))
$row[] = $data;
mysql_close();
return $row;
}
# Zelfde als hierboven maar dan 1 row
function get_single($sql)
{
$this->connect();
$res = mysql_query($sql);
$data = mysql_fetch_array($res);
mysql_close();
return $data;
}
# Functie die een normale query runt
function execute($sql)
{
$this->connect();
$res = mysql_query($sql);
mysql_close();
return $res;
}
# Functie die de database connectie maakt
function connect()
{
return mysql_select_db($this->name, mysql_connect($this->host, $this->user, $this->pass));
}
}
?>
----------------------------------------------------------------------------------------------------
<?
# Filename : index.php
# Author : Mitch Vroege
# Projectname : SMART PoLL
# Projectversion : 0.7.1
# Releasedate : 16-08-2004
# Include database classfile
include("database.php");
# Include poll classfile
include("poll.php");
# Run database class
$db = new database;
# Set query to see if voted already
$ip = $_SERVER['REMOTE_ADDR'];
$sql = "SELECT * FROM `votes` WHERE `vote_ip` = '" . $ip . "'";
# Run poll class
$poll = new poll;
# If a match is found show results only
if($db->num_rows($sql) == 1)
{
# Show results
echo $poll->showResults();
}
else
{
# Check if form submitted
if(!$_POST['vote'])
{
# Show form
echo $poll->showOptions();
}
else
{
# Add data to database
# Check for a value
if(!$_POST['poll'])
{
# No option selected
# Show poll again
echo $poll->showOptions();
}
else
{
# A radio is checked
# Update votes
$poll->updateVotes($_POST['poll']);
# Show results
echo $poll->showResults();
}
}
}
?>
-----------------------------------------------------------------------------------------------------
<?
# Filename : install.php
# Author : Mitch Vroege
# Projectname : SMART PoLL
# Projectversion : 0.7.1
# Releasedate : 16-08-2004
# Include database classfile
include("database.php");
# Instal class
class install
{
# Instal function
function insPoll()
{
$sql1 .= "DROP TABLE IF EXISTS `poll`;";
$sql2 .= "CREATE TABLE `poll` (";
$sql2 .= "`poll_id` int(11) primary key auto_increment,";
$sql2 .= "`poll_stelling` varchar(255) not null default '',";
$sql2 .= "`poll_keuzes` longtext not null default '',";
$sql2 .= "`poll_scores` longtext not null default '',";
$sql2 .= "`poll_datum` int(20) not null default '0'";
$sql2 .= ") TYPE=MyISAM;";
$sql3 .= "DROP TABLE IF EXISTS `votes`;";
$sql4 .= "CREATE TABLE `votes` (";
$sql4 .= "`vote_id` int(11) primary key auto_increment,";
$sql4 .= "`vote_ip` varchar(16) not null default '',";
$sql4 .= "`vote_datum` int(20) not null default '0'";
$sql4 .= ") TYPE=MyISAM;";
# Run db class
$db = new database;
# Execute
$res1 = $db->execute($sql1);
$res2 = $db->execute($sql2);
$res3 = $db->execute($sql3);
$res4 = $db->execute($sql4);
if($res2 && $res4)
{
$install .= "<b>Succesvol geinstalleerd!</b><br />";
$install .= "<a href=\"admin.php\">Klik hier om een vraag in te stellen!</a>";
}
else
{
$install .= "<b>Er is iets fout gegegaan probeer het opnieuw!</b><br />";
$install .= $this->insMenu();
$install .= "<p><b>Is dit al de zoveelste keer dat het mislukt?</b><br />";
$install .= "Voer dan handmatig deze code in in je db:<br />";
$install .= $sql2 . $sql4;
}
return $install;
}
# Show menu
function insMenu()
{
$menu .= "<p><b>SMART PoLL 0.7 INSTALLER</b><br />";
$menu .= "<u>LeT oP!</u> zodra je op <i>install</i> klikt zullen de tabellen genaamd<br />";
$menu .= "<i>'poll'</i> en <i>'votes'</i>, mits ze al bestaan, overschreven worden!<br />";
$menu .= "<a href=\"" . $_SERVER['PHP_SELF'] . "?ins=1\">INSTALL SMART PoLL 0.7 NOW!</a></p>";
return $menu;
}
}
# Run install class
$ins = new install;
# Check for $_GET data
if($_GET['ins'] && is_numeric($_GET['ins']))
echo $ins->insPoll();
else
echo $ins->insMenu();
?>
----------------------------------------------------------------------------------------------------
<?
# Filename : poll.php
# Author : Mitch Vroege
# Projectname : SMART PoLL
# Projectversion : 0.7.1
# Releasedate : 16-08-2004
class poll
{
# Show options function
function showOptions()
{
# Get newest poll
$data = $this->getPoll();
# Split options
$options = explode(",", $data['poll_keuzes']);
# Count options for loop
$aant = count($options)-1;
$poll .= "<b>" . $data['poll_stelling'] . "</b><br />";
$poll .= "<form method=\"POST\" action=\"" . $_SERVER['PHP_SELF'] . "\">";
# Loop and make input radios
for($i = 0; $i <= $aant; $i++)
{
$j = $i+1;
$poll .= "<input type=\"radio\" value=\"" . $j . "\" name=\"poll\" />" . $options[$i] . "<br />";
}
# End form
$poll .= "<input type=\"submit\" name=\"vote\" value=\"Stem!\" />";
$poll .= "</form>";
# Show pollid no. and poll date
$poll .= "<p>PollID: " . $data['poll_id'] . " - PollDatum: " . date("j-n-Y", $data['poll_datum']);
# Show link to archives
$poll .= "<p><a href=\"archives.php\">Bekijk archief!</a>";
return $poll;
}
function updateVotes($vote)
{
# Get newest poll
$data = $this->getPoll();
# Split the vote scores
$stemmen = explode(",", $data['poll_scores']);
# add one to the selected option
$vote--;
(int) $stemmen[$vote]++;
# Remake the data
$stem = implode(",", $stemmen);
# Add to database
$sql1 = "UPDATE `poll` SET `poll_scores` = '" . $stem . "' WHERE `poll_id` = '" . $data['poll_id'] . "'";
$ip = $_SERVER['REMOTE_ADDR'];
$sql2 = "INSERT INTO `votes` SET `vote_ip` = '" . $ip . "', `vote_datum` = '" . time() . "'";
# Run db class
$db = new database;
$res1 = $db->execute($sql1);
$res2 = $db->execute($sql2);
}
function getPoll()
{
# Select the newest poll
$sql = "SELECT * FROM `poll` ORDER BY `poll_id` DESC LIMIT 1";
# Run db class
$db = new database;
# Get array
$data = $db->get_single($sql);
return $data;
}
function showResults()
{
# Get data
$data = $this->getPoll();
# Split options and scores
$options = explode(",", $data['poll_keuzes']);
$scores = explode(",", $data['poll_scores']);
$option = count($options)-1;
# Count the votes
$votes = array_sum($scores);
# Show total votes
$results .= "<b>" . $data['poll_stelling'] . "</b><br />";
$results .= "Totaal aantal stemmen: " . $votes . "<br />";
$results .= "<p>";
# Loop through results
for($i = 0;$i <= $option; $i++)
{
$results .= $options[$i] . "<br />";
$results .= "<img src=\"indicator.png\" width=\"" . $this->imgPXL($votes, $scores[$i]) . "\" height=\"15\" />" . $this->imgPXL($votes, $scores[$i]) . "%";
$results .= "<br />";
}
$results .= "</p>";
# Show pollid no. and poll date
$results .= "<p>PollID: " . $data['poll_id'] . " - PollDatum: " . date("j-n-Y", $data['poll_datum']);
# Show link to archives
$results .= "<p><a href=\"archives.php\">Bekijk archief!</a>";
return $results;
}
function archResults($id)
{
# Get data
$data = $this->archPoll($id);
# Split options and scores
$options = explode(",", $data['poll_keuzes']);
$scores = explode(",", $data['poll_scores']);
$option = count($options)-1;
# Count the votes
$votes = array_sum($scores);
# Show total votes
$results .= "<b>" . $data['poll_stelling'] . "</b><br />";
$results .= "Totaal aantal stemmen: " . $votes . "<br />";
$results .= "<p>";
# Loop through results
for($i = 0;$i <= $option; $i++)
{
$results .= $options[$i] . "<br />";
$results .= "<img src=\"indicator.png\" width=\"" . $this->imgPXL($votes, $scores[$i]) . "\" height=\"15\" />" . $this->imgPXL($votes, $scores[$i]) . "%";
$results .= "<br />";
}
$results .= "</p>";
# Show pollid no. and poll date
$results .= "<p>PollID: " . $data['poll_id'] . " - PollDatum: " . date("j-n-Y", $data['poll_datum']);
# Show link to archives
$results .= "<p><a href=\"archives.php\">Terug!</a>";
return $results;
}
function archPoll($id)
{
# Select the newest poll
$sql = "SELECT * FROM `poll` WHERE `poll_id` = '" . $id . "' ORDER BY `poll_id` DESC LIMIT 1";
# Run db class
$db = new database;
# Get array
$data = $db->get_single($sql);
return $data;
}
# Calculate indicator size
function imgPXL($tot, $opt)
{
$pro = $tot / 100;
$num = $opt / $pro;
return (int) $num;
}
}
?>
-----------------------------------------------------------------------------------------------------
En dat was het :)
Reacties
0