skip to Main Content

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>

2

Answers


  1. Your POST request produces 500 error.

    Check the error_reporting, display_errors and display_startup_errors settings in your php.ini file. They should be set to E_ALL and "On" respectively or change through code as follows. This will display the actual error produced. That will give insight on what goes wrong.

    error_reporting(E_ALL);
    ini_set('display_errors', 'On');
    
    Login or Signup to reply.
  2. Add the following on the top of your code.

    ini_set('display_errors', 1); 
    ini_set('display_startup_errors', 1); 
    error_reporting(E_ALL); 
    

    Always, use the try-catch exception method.
    Exceptions are used to change the normal flow of a script if a specified error occurs.

    Moreover, you can always check apache2 error logs from where you will get error logs based on timestamps.

    Login or Signup to reply.
Please signup or login to give your own answer.
Back To Top
Search