<head>
<script language="javascript">
function addQuestion(){
var baseElem = document.getElementById("b");
var p = baseElem.parentNode;
var c = p.getElementsByTagName("input");
if (c[c.length - 1].value != ""){
var newElem = baseElem.cloneNode(true);
newElem.Id = '';
var i = newElem.getElementsByTagName("input");
i[0].value="";
p.appendChild(newElem);
}
}
</script>
<style type="text/css">
body, input, textarea {font-family:Verdana, Arial, Helvetica, sans-serif; font-size:11px;}
fieldset {width:60%;}
.radio {width: 30px; float: left; text-align:center;}
.label {float:left; text-align:left;}
.question {width: 90%; text-align:center;}
.spacer {visibility:hidden; line-height:1px;}
a, a:visited{text-decoration:none;}
</style>
</head>
<?php
/*
assume a database structure as
create table tablePolls
(pollID int(10) auto_increment primary key,
poll_question longtext);
create table tableResponses
(responseID int(10) auto_increment primary key,
pollID int(10),
responseText varchar(255),
responseVote int(10))
*/
error_reporting (E_ALL);
switchboard();
function switchboard(){
connectToDatabase();
$action = isset($_POST['action']) ? $_POST['action'] : (isset($_GET['action']) ? $_GET['action'] : "listPolls");
switch ($action){
case "displayPoll":
displayPoll();
break;
case "listPolls":
listPolls();
break;
case "processVote":
processVote();
break;
case "processNewResponse":
processNewResponse();
break;
case "createNewPoll":
createNewPoll();
break;
case "processNewPoll":
processNewPoll();
break;
}
}
function displayPoll(){
if( isset($_GET['pollID'])){
$pollID = mysql_real_escape_string(trim($_GET['pollID']));
} else {
listPolls();
exit();
}
$sql = "Select poll_question from tablePolls where pollID='$pollID'";
$sql2 = "Select responseID, responseText from tableResponses where pollID='$pollID'";
$result = mysql_query($sql) or die(mysql_error());
$question = mysql_result($result, 0, 0);
$result2 = mysql_query($sql2) or die(mysql_error());
while ($row = mysql_fetch_assoc($result2)){
$responses[] = $row;
}
echo <<<HTML
<form method="post" action="{$_SERVER['PHP_SELF']}">
<fieldset>
<legend>Vote Here</legend>
<div class="row">
<span class="question">
$question
</span>
</div>
HTML;
foreach ($responses as $response){
echo <<<HTML
<div class="row">
<span class="radiobox">
<input type="radio" name="response" value="{$response['responseID']}" />
</span>
<span class="label">
{$response['responseText']}
</span>
</div>
HTML;
} //end of the foreach
echo <<<HTML
<div class="row">
<span class="radiobox">
</span>
<span class="label">
<input type="submit" value="submit" name="submit" />
<input type="hidden" value="{$pollID}" name="pollID" />
<input type="hidden" value="processVote" name="action"/>
</span>
</div>
<div class="spacer"> </div>
</fieldset>
</form>
HTML;
}
function listPolls(){
$sql = "select pollID, poll_question from tablepolls";
$result = mysql_query($sql) or die (mysql_error());
if (mysql_num_rows($result) > 0 ) {
while ($row = mysql_fetch_assoc($result)){
echo <<<HTML
<a href="{$_SERVER['PHP_SELF']}?action=displayPoll&pollID={$row['pollID']}">
{$row['poll_question']}
</a>
<br/>
HTML;
}
} else {
echo "No polls created yet\r\n";
}
echo <<<HTML
<br/><a href="{$_SERVER['PHP_SELF']}?action=createNewPoll">Create New Poll</a>
HTML;
}
function processVote(){
$e = true;
if (isset($_POST['pollID'])){
$pollID = mysql_real_escape_string(trim($_POST['pollID']));
} else {
$e = false;
}
if (isset($_POST['response'])){
$responseID = mysql_real_escape_string(trim($_POST['response']));
} else {
$e=false;
}
if (!$e) {
listPolls();
exit();
}
$sql = "Update tableResponses
set
responseVote = responseVote + 1
where
responseID = '$responseID'";
if (!mysql_query($sql)){
die ("problem updating record");
}
displayPollResults($pollID);
exit();
}
function displayPollResults($pollID){
$sql = "Select poll_question from tablePolls where pollID='$pollID'";
$sql2 = "Select responseText, responseVote from tableResponses where pollID='$pollID'";
$result = mysql_query($sql) or die(mysql_error());
$question = mysql_result($result, 0, 0);
$result = NULL;
$result = mysql_query($sql2) or die(mysql_error());
$sum = 0;
while ($row = mysql_fetch_assoc($result)){
$sum = $sum + $row['responseVote'];
$questions[] = $row;
}
$result = NULL;
echo <<<HTML
<fieldset>
<legend>Poll Results - Thank you for voting!</legend>
<div class="row">
<span class="question">
$question
</span>
</div>
HTML;
foreach ($questions as $question){
$pc = number_format(($question['responseVote']/$sum) * 100,2);
echo <<<HTML
<div class="row">
<span class="radiobox">
{$question['responseVote']} ({$pc}%)
</span>
<span class="label">
{$question['responseText']}
</span>
</div>
HTML;
} //end of the foreach
echo <<<HTML
<div class="spacer"> </div>
</fieldset>
HTML;
}
function createNewPoll(){
echo <<<HTML
<form method="post" action="{$_SERVER['PHP_SELF']}">
<fieldset>
<legend>New Poll Question</legend>
<div class="row">
<span class="question">
<textarea name="question"></textarea>
</span>
</div>
<div class="row">
<span class="question">
<input type="submit" value="submit" name="submit" />
<input type="hidden" value="processNewPoll" name="action"/>
</span>
</div>
<div class="spacer"> </div>
</fieldset>
</form>
HTML;
}
function processNewPoll(){
if (isset($_POST['question'])){
$question = mysql_real_escape_string(trim($_POST['question']));
} else {
createNewPoll();
exit();
}
$sql = "Insert into tablePolls set poll_question = '$question', pollID=NULL";
mysql_query($sql) or die(mysql_error());
$pollID = mysql_insert_id();
createNewResponse($pollID);
}
function createNewResponse($pollID){
$sql = "Select poll_question from tablePolls where pollID='$pollID'";
$result = mysql_query($sql) or die(mysql_error());
$question = mysql_result($result, 0, 0);
echo <<<HTML
<form method="post" action="{$_SERVER['PHP_SELF']}">
<fieldset>
<legend>Create a new Answer</legend>
<div class="row">
<span class="question">
$question
</span>
</div>
<div id="holder">
<div class="row" id="b">
<span class="response">
<input type="text" name="response[]" />
</span>
</div>
</div>
<div class="row">
<span class="response">
<input type="button" value="Add New Response" onClick="addQuestion(); return false;">
<input type="submit" value="Save Questions" name="submit">
<input type="hidden" value="{$pollID}" name="pollID" />
<input type="hidden" value="processNewResponse" name="action"/>
</span>
</div>
<div class="spacer"> </div>
</fieldset>
</form>
HTML;
}
function processNewResponse(){
$e= true;
if(isset($_POST['response'])){
$response = $_POST['response'];
} else {
$e = false;
}
if(isset($_POST['pollID'])){
$pollID = mysql_real_escape_string(trim($_POST['pollID']));
} else {
$e = false;
}
if (!$e){
die ("error processing responses");
}
foreach ($response as $r){
$values[] = "('".mysql_real_escape_string(trim($r))."',0, $pollID, null)";
}
$sql = "Insert into tableResponses (responseText, responseVote, pollID, responseID) values " . implode(",", $values);
mysql_query($sql);
listPolls();
}
function connectToDatabase(){
mysql_connect("localhost", "root", "root") or die (mysql_error());
mysql_select_db("polls") or die(mysql_error());
}
?>