The user submits the response to the poll it's not displaying the results from the database. This is the website http://josietaylor.byethost14.com/poll/ I'm unsure what's wrong and why nothing is showing? I didn't think I needed to add the HOST USER PASS BASE but I included it to see if it would work, still won't.
- After submitting the answer it's just blank, nothing at all is showing. Below is the code. It should show on the same page just reload it.
*** Update Thank you to Ken Lee, I made a rookie mistake of not including the 'includes' file when uploading to my server. I fixed that, and now it's showing the "results" page but not actually displaying the results. I want it to show the different options and the results with the % from highest to lowest. This database isn't supposed to be safe as it's a project for college (first PHP/SQL class) and we aren't yet making it all secure.
<?php
include 'includes/dp.php';
//Function to create the page
function createPage(){
if(!isset($_POST['food'])){
echo createQuestionare();
}
//If all variables are set, add to database and display results
else{
addToDataBase($_POST['food'], 'poll');
displayResults();
}
}
define("HOST", "****");
define("USER", "****");
define("PASS", "****");
define("BASE", "****");
$conn = mysqli_connect(HOST, USER, PASS, BASE);
//Create questionare
function createQuestionare(){
$content = "";
$content .= "<div class='main'>";
$content .= "<h1 class='title'>Food Poll</h1>";
$content .= "<form action='.' method='post'>";
$content .= createQuestion();
//Close form
$content .= "<input type='submit'>";
$content .= "</form>";
$content .= "</div>";
return $content;
}
//Create question
function createQuestion(){
$arr = ["Pizza", "Burger", "Salad", "Pasta"];
//Question to ask
$content = "";
$content .= "<h1 class='question-text'>Which food is most satisfying?</h1>";
//Create radio button and label for each possible question
foreach($arr as $subject){
$content .= "<input type='radio' id='$subject' value='$subject' name='food'>";
$content .= "<label for='$subject'>$subject</label><br>";
}
return $content;
}
//Function adds data to DB
function addToDataBase($data, $DBName){
//Edit string to be lowercase
$data = strtolower($data);
$conn = connectToDB();
//Check database for primary key of answer
$sql = "SELECT * FROM $DBName WHERE name='$data';";
$results = mysqli_query($conn, $sql);
if(mysqli_num_rows($results) != 0){
$key = mysqli_fetch_array($results, MYSQLI_ASSOC)['id'];
}
//Increment vote number and insert value
$sql = "UPDATE $DBName SET votes = votes + 1 WHERE id=$key;";
mysqli_query($conn, $sql);
mysqli_close($conn);
}
//Function to display results
function displayResults(){
$arr = ['poll'];
//Create results content
$content = '';
$content = '<div class="main">';
$content .= "<h1 class='title'>Thank You!</h1>";
foreach($arr as $DBName){
$content .= '<div class="result-container">';
$content .= getResults($DBName);
$content .= '</div>';
}
$content .= '</div>';
echo $content;
}
//Function will display results highest to lowest
function getResults($DBName){
$conn = connectToDB();
//Results
$sql = "SELECT * FROM $DBName;";
$results = mysqli_query($conn, $sql);
//Total
$sql = "SELECT SUM(votes) as total FROM $DBName;";
$total = mysqli_query($conn,$sql);
$total = mysqli_fetch_assoc($total)['total'];
//Create an associate array with percentage and name
$sortedArray = array();
while($row = mysqli_fetch_array($results, MYSQLI_ASSOC)){
$name = $row['name'];
$percentage = round($row['votes']/$total * 100);
$sortedArray[$name] = $percentage;
}
//Sort by percentage
$content = '';
$content = '<h1 class="result-text">Results</h1>';
arsort($sortedArray);
//Display results
foreach($sortedArray as $name => $percentage ){
$content .= "<h2>". ucwords($name) ." has $percentage% of the votes</h2>";
}
mysqli_close($conn);
return $content;
}
?>
<!DOCTYPE html>
<html lang="en" xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta charset="utf-8" />
<title>Poll</title>
<link rel="stylesheet" href="css/style.css">
</head>
<body>
<?php
createPage();
?>
</body>
</html>
ini_set('display_errors', 1); ini_set('display_startup_errors', 1); error_reporting(E_ALL);to the top of your file and you'll se whatever is wrongDEFINEfor setting constants that you are only ever going to use once. Simply use standard variables you can unset once used (for db connection)<input type="radio" id="Pizza" value="0'; DROP TABLE poll; --" name="food">? You currently do abolsutely NO checking the data received from the client is safe (pssst, it won't be safe); READ HERE to learn how to fix this.