Like Dislike rating system with jQuery, Ajax and PHP

Résolu/Fermé
placi2 Messages postés 1 Date d'inscription samedi 15 octobre 2016 Statut Membre Dernière intervention 15 octobre 2016 - Modifié par crapoulou le 15/10/2016 à 14:03
jordane45 Messages postés 38138 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 17 avril 2024 - 17 oct. 2016 à 10:27
Bonjour,

je telecharge le tuto Like Dislike rating system with jQuery, Ajax and PHP dans le site codexworld.
mais quand je lance le project il y a deux erreus que je ne parviens pas a corriger:


1. Notice: Undefined variable: data in C:\xampp\htdocs\like_dislike_jquery_ajax_php\tutorial.php on line 30
<?php
class Tutorial{
 
 function __construct(){
  //db details
  $db_host = 'localhost';
  $db_user = 'root';
  $db_pass = '';
  $db_name = 'codexworld';
  
  //connect db
  $con = mysql_connect($db_host, $db_user, $db_pass);
  
  //select db
  mysql_select_db($db_name, $con);
 }
 
 function get_rows($id = ''){
  if($id != ''){
   //fetch single row
   $query = mysql_query("SELECT * FROM tutorials WHERE id = $id");
   $data = mysql_fetch_assoc($query);
  }else{
   //fetch all rows
   $query = mysql_query("SELECT * FROM tutorials");
   while($row = mysql_fetch_assoc($query)){
    $data[] = $row;
   }
  }
  return $data;
 }
 
 function insert($data = array()){
  $data_array_num = count($data);
  $columns = "";
  $values = "";
  $i=0;
  foreach($data as $key=>$val){ 
   $i++;
   $sep = ($i == $data_array_num)?"":", ";
   $columns .= $key.$sep;
   $values .= $val.$sep;
  }
  $insert = mysql_query("INSERT INTO tutorials ($columns) VALUES ($values)");
  return $insert?TRUE:FALSE;
 }
 
 function update($data = array(), $conditions = array()){
  $data_array_num = count($data);
  $cols_vals = "";
  $condition_str = "";
  $i=0;
  foreach($data as $key=>$val){
   $i++;
   $sep = ($i == $data_array_num)?'':', ';
   $cols_vals .= $key."='".$val."'".$sep;
  }
  foreach($conditions as $key=>$val){
   $i++;
   $sep = ($i == $data_array_num)?"":" AND ";
   $condition_str .= $key."='".$val."'";
  }

  $update = mysql_query("UPDATE tutorials SET $cols_vals WHERE $condition_str");
  return $update?TRUE:FALSE;
 }
}
?>

2. Warning: Invalid argument supplied for foreach() in C:\xampp\htdocs\like_dislike_jquery_ajax_php\index.php on line 69
<?php
include_once("tutorial.php");
$tutorial = new Tutorial();
$trows = $tutorial->get_rows();
?>
<!DOCTYPE html>
<html lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Like and Dislike using jQuery, Ajax and PHP</title>
<link type="text/css" rel="stylesheet" href="css/bootstrap.min.css"/>
<script type="text/javascript" src="js/bootstrap.min.js"></script>
<style type="text/css">
.row{ margin:20px 20px 20px 20px;}
.ratings{ font-size:25px !important;}
.thumbnail img {
    width: 100%;
}

.ratings {
    padding-right: 10px;
    padding-left: 10px;
    color: #d17581;
}

.thumbnail {
    padding: 0;
}

.thumbnail .caption-full {
    padding: 9px;
    color: #333;
}
.glyphicon-thumbs-up:hover{ color:#008000; cursor:pointer;}
.glyphicon-thumbs-down:hover{ color: #E10000; cursor:pointer;}
.counter{ color:#333333;}
.thumbnail img{height:200px;}
</style>

<script type="text/javascript" src="js/jquery.js"></script>
<script type="text/javascript">
/**


* Function Name: cwRating()

* Function Author: CodexWorld

* Description: cwRating() function is used for implement the rating system. cwRating() function insert like or dislike data into the database and display the rating count at the target div.

* id = Unique ID, like or dislike is based on this ID.

* type = Use 1 for like and 0 for dislike.

* target = Target div ID where the total number of likes or dislikes will display.

**/
function cwRating(id,type,target){
 $.ajax({
  type:'POST',
  url:'rating.php',
  data:'id='+id+'&type='+type,
  success:function(msg){
   if(msg == 'err'){
    alert('Some problem occured, please try again.');
   }else{
    $('#'+target).html(msg);
   }
  }
 });
}
</script>
</head>

<body>
<div class="row">
 <?php foreach($trows as $trow){ ?>
    <div class="col-sm-4 col-lg-4 col-md-4">
        <div class="thumbnail">
            <img src="<?php echo 'images/'.$trow['image']; ?>" alt="" />
            <div class="caption">
                <h4><a href="javascript:void(0);" rel="nofollow noopener noreferrer" target="_blank"><?php echo $trow['title']; ?></a></h4>
                <p><?php echo $trow['details']; ?></p>
            </div>
            <div class="ratings">
                <p class="pull-right"></p>
                <p>
                    <!-- Like Icon HTML -->
                    <span class="glyphicon glyphicon-thumbs-up" onClick="cwRating(<?php echo $trow['id']; ?>,1,'like_count<?php echo $trow['id']; ?>')"></span> 
                    <!-- Like Counter -->
                    <span class="counter" id="like_count<?php echo $trow['id']; ?>"><?php echo $trow['like_num']; ?></span>   
                    
                    <!-- Dislike Icon HTML -->
                    <span class="glyphicon glyphicon-thumbs-down" onClick="cwRating(<?php echo $trow['id']; ?>,0,'dislike_count<?php echo $trow['id']; ?>')"></span> 
                    <!-- Dislike Counter -->
                    <span class="counter" id="dislike_count<?php echo $trow['id']; ?>"><?php echo $trow['dislike_num']; ?></span>
                </p>
            </div>
        </div>
    </div>
    <?php } ?>
</div>
</body>
</html>


Merci.

EDIT : Ajout des balises de code (la coloration syntaxique).
Explications disponibles ici : ICI

Merci d'y penser dans tes prochains messages.
"
A voir également:

1 réponse

jordane45 Messages postés 38138 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 17 avril 2024 4 649
Modifié par jordane45 le 15/10/2016 à 18:12
Bonjour,

Première erreur
 function get_rows($id = ''){
  if($id != ''){
   //fetch single row
   $query = mysql_query("SELECT * FROM tutorials WHERE id = $id");
   $data = mysql_fetch_assoc($query);
  }else{
   //fetch all rows
   $query = mysql_query("SELECT * FROM tutorials");
   while($row = mysql_fetch_assoc($query)){
    $data[] = $row;
   }
  }
 // Si $data existe et n'est pas vide on retourne $datas sinon on retourne NULL
  return !empty($data) ? $data :NULL;
 }

NB: Si la requête ne retourne aucun résultat ... $data est vide... et vu que tu ne l'as pas initialisé avant.. le code t'indique qu'il est "undefined".
Avec l'écriture ternaire et le !empty tu t'assures qu'il existe avant de t'en servir.


La seconde erreur est du même genre et fait suite à la première...
Tu essaies de faire :
 <?php foreach($trows as $trow){ ?>

Sauf que $trows est le retour de la fonction get_rows ...
Vu que ta fonction ne retourne rien.... la variable ne contient rien !
Donc avant de boucler... on vérifie que la variable existe et n'est pas vide
<?php
 if(!empty($trows)){
    foreach($trows as $trow){
       // le reste du code de la boucle

    } // fin du foreach
 }// fin du if
?>
   
?>



Par contre je ne comprend pas l'interet de mettre du php dans ta page HTML si ton but est de le faire en AJAX....






Cordialement, 
Jordane                                                                 
0
jordane45 Messages postés 38138 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 17 avril 2024 4 649
15 oct. 2016 à 18:14
Je précise également que tu utilises l'extension : "MYSQL" considérée comme obsolète.
Je t'invite vivement à passer à mysqli ou à la PDO.
https://www.commentcamarche.net/faq/43261-php-l-extension-mysql-est-obsolete#top

Voici un exemple d'ajax utilisant JQUERY + PDO
https://forums.commentcamarche.net/forum/affich-33258760-remplir-un-formulaire-dynamiquement-en-fonction-d-une-combobox#2
0
Merci Jordan, maintenat ca marcher
mais je trouve que l'utilisateur peut vote autant de fois comment je peux controle le vote apartir de login
0
jordane45 Messages postés 38138 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 17 avril 2024 4 649 > placi2
17 oct. 2016 à 10:27
Si tu enregistres le login avec le vote ... il te suffit de contrôler si un vote avec ce login existe déjà.
(une simple requête de type SELECT WHERE )
Tu peux le faire au moment du vote ou avant le vote (via un AJAX par exemple).
Ceci étant une nouvelle question... je t'invite, SI TU N'Y ARRIVES PAS, à ouvrir une nouvelle discussion sur le forum.
0