-2

im trying to build a rating system of which you can rate from 1-5 stars and then the average rating is displayed.

For this im using Ajax, jQuery, PHP, MySQL, and HTML ofc.

Here is the base code with the script and basic html:

<?php 
    include('includes/config.php');
    $post_id = '1';
?>
<div class="ratesite">
    <h4>Betygssätt denna webbplats!</h4>
        <div class="rate-ex1-cnt">
            <div id="1" class="rate-btn-1 rate-btn"></div>
            <div id="2" class="rate-btn-2 rate-btn"></div>
            <div id="3" class="rate-btn-3 rate-btn"></div>
            <div id="4" class="rate-btn-4 rate-btn"></div>
            <div id="5" class="rate-btn-5 rate-btn"></div>
        </div>
<?php require_once 'includes/avgrate.php'; ?>
        <div id="avg-rate">
            <h5>Snittvärdet är <strong><?php echo $rate_value; ?></strong>.</h5>
        </div>
</div>
<!-- Script för rating -->
    <script>
        $(function(){ 
            $('.rate-btn').hover(function(){
                $('.rate-btn').removeClass('rate-btn-hover');
                var therate = $(this).attr('id');
                for (var i = therate; i >= 0; i--) {
                    $('.rate-btn-'+i).addClass('rate-btn-hover');
                };
            });

            $('.rate-btn').click(function(){    
                var therate = $(this).attr('id');
                var dataRate = 'act=rate&post_id=<?php echo $post_id; ?>&rate='+therate; //
                $('.rate-btn').removeClass('rate-btn-active');
                for (var i = therate; i >= 0; i--) {
                    $('.rate-btn-'+i).addClass('rate-btn-active');
                };
                $.ajax({
                    type : "POST",
                    url : "includes/ajax.php",
                    data: dataRate,
                    success:function(){}
                });

            });
        });
    </script>

From what i can tell using 'console.log' to search for a fault in the script, the script is working as it should, so i figure the fault is within my ajax.php here: (Im getting 0 PHP errors, and no errors in console)

<?php
require_once 'config.php';
    if($_POST['act'] == 'rate'){
        //Kontrollera ifall användaren (IP) redan röstat.
        $ip = $_SERVER["REMOTE_ADDR"];
        $therate = $_POST['rate'];
        $thepost = $_POST['post_id'];
        $sql = "SELECT * FROM ratings where ip= '$ip'";
        $result = mysqli_query($conn, $sql); 
        while($data = mysqli_fetch_assoc($result)){
            $rate_db[] = $data;
        }
        if(@count($rate_db) == 0 ){
            mysqli_query("INSERT INTO ratings (id_post, ip, rate)VALUES('$thepost', '$ip', '$therate')");
        }else{
            mysqli_query("UPDATE ratings SET rate= '$therate' WHERE ip = '$ip'");
        }
    } 
?>

The database connection is working properly, as i am a beginner with ajax i figured it would be good to ask someone here if someone could find the fault..

ALSO, HTML head for the script links etc.

<!DOCTYPE html>
<html>
<head>
<meta content="text/html; charset=utf-8" />
<!-- Visa användarnamn som titel i sidfliken -->
<title>Album</title>
<link rel="stylesheet" href="css/stylesheet.css" type="text/css" />
<!-- PIROBOX -->
<!--         -->
<link rel="stylesheet" type="text/css" href="css_pirobox/style_1/style.css"/>
<!--::: OR :::-->
<!-- <link rel="stylesheet" type="text/css" href="css_pirobox/style_2/style.css"/> -->
<script type="text/javascript" src="js/jquery.min.js"></script>
<script type="text/javascript" src="js/jquery-ui-1.8.2.custom.min.js"></script>
<script type="text/javascript" src="js/pirobox_extended.js"></script>
<script type="text/javascript">
$(document).ready(function() {
    $().piroBox_ext({
        piro_speed : 900,
        bg_alpha : 0.1,
        piro_scroll : true //pirobox always positioned at the center of the page
    });
});
</script>
</head>

**EDIT

I am including the connection like so:

<?php 
    $dbhost = 'xxxxx';
    $dbuser = 'xxxxx';
    $dbpass = 'xxxxx';
    $dbname = 'xxxxx';
    $conn = mysqli_connect($dbhost, $dbuser, $dbpass, $dbname) 
    or die('Kunde inte ansluta till databas');
    $db_connected  = mysqli_select_db($conn, $dbname);
?>
  • 2
    It looks like your update and insert queries are missing the connection variable. The general format is mysqli_query( $connection, $query ); it looks like you are missing $connection. That's my quick guess at your issue. – Nicholas Byfleet Mar 01 '16 at 21:12
  • [Your script is at risk for SQL Injection Attacks.](http://stackoverflow.com/questions/60174/how-can-i-prevent-sql-injection-in-php) Learn about [prepared](http://en.wikipedia.org/wiki/Prepared_statement) statements for [MySQLi](http://php.net/manual/en/mysqli.quickstart.prepared-statements.php). – Jay Blanchard Mar 01 '16 at 21:16
  • You're making assumptions that your queries just work. You need to perform some error checking. – Jay Blanchard Mar 01 '16 at 21:16
  • @NicholasByfleet I'am including the dbconnection in which $conn is the connection, so that couldn't be the issue – Douglas Pettersson Mar 01 '16 at 21:16
  • If you look in the error logs you will see that your INSERT and UPDATE queries lack the `$conn`. @NicholasByfleet is totally right here. – Jay Blanchard Mar 01 '16 at 21:22
  • 1
    Yeah it's been a while since I wrote my own queries (these days I almost exclusively use an ORM) but I'm pretty sure you need to add $conn to each of the mysqli_query() calls. Your existing code only specifies the connection in the first query. Or maybe I'm missing something? – Nicholas Byfleet Mar 01 '16 at 21:22
  • You need to get in the habit of [accepting answers](http://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work) which help you to solve your issues. You'll earn points and others will be encouraged to help you. – Jay Blanchard Mar 01 '16 at 21:35

2 Answers2

0

From php.net...

mysqli_query ( mysqli $link , string $query [, int $resultmode = MYSQLI_STORE_RESULT ] );

You dont provide a $link for your mysqli_query

Gavin
  • 2,123
  • 1
  • 15
  • 19
0
<?php
require_once 'config.php';
    if($_POST['act'] == 'rate'){
        //Kontrollera ifall användaren (IP) redan röstat.
        $ip = $_SERVER["REMOTE_ADDR"];
        $therate = $_POST['rate'];
        $thepost = $_POST['post_id'];

Notice where you declare $sql as your SQL query? Notice the $conn in mysqli_query ? The $conn is your pointer/connector to the database. It allows you to run different queries to different servers in parallel.

    $sql = "SELECT * FROM ratings where ip= '$ip'";
    $result = mysqli_query($conn, $sql); 

Now... where is your $conn in the mysqli_fetch_assoc below ?

    while($data = mysqli_fetch_assoc($result)){
        $rate_db[] = $data;
    }

And why is the mysqli_query below not have a $conn when previously you had?

    if(@count($rate_db) == 0 ){
        mysqli_query("INSERT INTO ratings (id_post, ip, rate)VALUES('$thepost', '$ip', '$therate')");
    }else{
        mysqli_query("UPDATE ratings SET rate= '$therate' WHERE ip = '$ip'");
    }
} 

?>

Lastly, your console.log will show errors only from client/browser. You should have a php.log file on your server that will contain errors about your misuse of mysqli_query - if you don't know where these are, you are only going to bring extra work and head ache on to yourself when in practise you are within reaching distance of your goals.

Best of luck!