Je n'arrive pas à trouver un script de vote +1/ -1

Résolu/Fermé
gwen007 Messages postés 78 Date d'inscription mardi 24 février 2015 Statut Membre Dernière intervention 23 juin 2023 - 15 févr. 2020 à 11:45
gwen007 Messages postés 78 Date d'inscription mardi 24 février 2015 Statut Membre Dernière intervention 23 juin 2023 - 15 févr. 2020 à 15:56
Bonjour, je souhaiterai afficher un script ou module de vote +1/-1
A savoir que ca fait des années que j'aimerai pouvoir faire ca. Mais mes connaissance en bd sont nul.

J ai essayé pendant tout ce temps des scripts mais en vain ! C'est tellement frustrant.
Le dernier test date de ce matin, celui ci https://phppot.com/jquery/php-voting-system-with-jquery-ajax/
J 'ai créé une base donnée, puis télécharger les tables. J'ai ajouter mes id de connexion database puis ca ne fonctionne pas , comme d'habitude.

En plus ce genre de script est difficile à trouver ou alors je cherche mal.

J'ai fini, hier par demander à un freelance de le faire. J'ai eu 3 propositions.
J ai choisis une personne qui disais que c'était SON metier et qu il avait l habitude de faire ca.
Je lui est dit qu il fallait surement ajouter une base de donnée pour compter les votes, il me disait que non. Puis finalement ce matin il me dit le contraire et me demande plus cher. Donc ce gars ne si connait finalement pas plus que moi! J'ai laissé tombé.

Retour à la case départ.
C'est ca que je voudrai


Quelqu 'un pour me guider ? svp

3 réponses

jordane45 Messages postés 38145 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 25 avril 2024 4 650
15 févr. 2020 à 12:53
Bonjour,

Le script que tu as trouvé est pas mal ... à l'exception qu'il utilise ( dans le fichier dbcontroler ) l'ancienne technologie mysql qui est désormais obsolète.
A la place des instructions mysql_* il faut utiliser soit mysqli_* soit pdo.

Mais sur le principe le script reste valable.
- Une table dans une bdd pour stocker les votes
- Un script Javascript ( qui exécuteras des appels AJAX ) sur ta page principale afin de detecter les différents votes
- Un script PHP (dans un fichier différent de celui de ta page principale) qui va recevoir les appels ajax et stocker les votes dans la tables

Bien entendu, il faut un minimum de connaissances en
PHP, SQL, Javascript ( et pour design, html et css )

Quoi qu'il en soit, ici, ce n'est pas un salon de recrutement.... on ne fourni pas de code à la demande ( même contre rémunération ). Par contre on veut bien t'aider à condition que tu sois en mesure de nous expliquer exactement sur quel point précis tu bloques.

En repartant du script que tu nous montres, la première chose à faire serait de corriger toutes les vielles instructions mysql.

Ton fichier de gestion de la bdd deviendrait donc un truc du genre
<?php
class DBController {
	private $host = "localhost";
	private $user = "root";
	private $password = "";
	private $database = "blog_samples";
  private $bdd=null;
	
	function __construct() {
		$this->connectDB();
	}
	
	public function connectDB() {
		try{
       $con = new PDO('mysql:host='.$this->host.';dbname='.$this->database.'; charset=utf8', $this->user, $this->password);
       // Activation des erreurs PDO
       $con->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
       // mode de fetch par défaut : FETCH_ASSOC / FETCH_OBJ / FETCH_BOTH
       $con->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC);
       $this->bdd = $con;
    } catch(PDOException $e) {
       die('Erreur : ' . $e->getMessage());
    }
   
	}
  
  public function queryExec($sql,$datas=NULL){
    global $bdd;
    $result = NULL;
    //Execution de la requete
    try{
      $requete = $this->bdd->prepare($sql) ;
      $requete->execute($datas) ;
      $result = $requete->rowCount(); //on retourne le nombre de lignes impactés par cette requête
    }catch(Exception $e){
      // en cas d'erreur :
       echo " Erreur ! ".$e->getMessage();
       echo " Les datas : " ;
      print_r($datas);
    }
    return $result;
  }
	
	public function runQuery($query) {
		$result = NULL;
    //Execution de la requete
    try{
      $requete = $this->bdd->prepare($sql) ;
      $requete->execute($datas) ;
      //on retourne un array contenant les résultats
      $result = $requete->fetchAll();
    }catch(Exception $e){
      // en cas d'erreur :
       echo " Erreur ! ".$e->getMessage();
       echo " Les datas : " ;
      print_r($datas);
    }
    return $result;
	}
  
  public function insertQuery($query) {
		 $result = NULL;
    //Execution de la requete
    try{
      $requete = $this->bdd->prepare($sql) ;
      $resultatRequete = $requete->execute($datas) ;
      $result = $returnNewId == true ?  $requete->rowCount() : $resultatRequete;
    }catch(Exception $e){
      // en cas d'erreur :
       echo " Erreur ! ".$e->getMessage();
       echo " Les datas : " ;
      print_r($datas);
    }
    return $result;
	}
	
	public function numRows($query) {
		$result  = $this->runQuery($query);
		$rowcount = !empty($result) ? count($result) : 0;
		return $rowcount;	
	}
	
	public function updateQuery($query) {
		$result = $this->queryExec($query);
		return $result;
	}
	
  
	function deleteQuery($query) {
		$result = $this->queryExec($query);
		return $result;
	}
  
  //---------------------------------------//
  //fin de la class
  //---------------------------------------//
}
?>

Avec cette simple mise à jour du script... tout devrait fonctionner normalement.

Je te laisse essayer et revenir vers nous en expliquant ce que tu as testé, où se trouvent les différents fichiers et également si il y a des erreurs dans la console Javascript de ton navigateur.


NB:

ce genre de script est difficile à trouver ou alors je cherche mal.

je pense que tu cherches mal ... du moins.. lorsque l'on a un minimum de connaissances en DEV.
Si toi tu espères trouver un script totalement prêt à l'emploi sans avoir à mettre les mains dans le cambouis..oui là ça devient rare.. voir introuvable

NB²: ça ne m'a pris que 10 minutes pour faire cette correction. (et rédigér mon message sur le forum )
A ça, il faut rajouter éventuellement du temps pour faire les tests (que je n'ai pas fait) et du temps pour mettre le code exactement là où tu le souhaites sur ton site ( ce que je ne ferai pas non plus )
bref..; une personne qui te demanderai plus de 100 euros pour ça... c'est de l'arnaque.(sans savoir combien il voulait te prendre )

NB3 : La BDD n'est pas une obligation.. il n'avait pas tout à fait tord... mais c'est quand même vachement plus simplet et plus performant que de stocker dans des fichiers.
De là à te demander plus.. c'est exagérer !



1
jordane45 Messages postés 38145 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 25 avril 2024 4 650
15 févr. 2020 à 15:43
Petit oubli de ma part.
Il faut retirer les $datas.

Voici le code corrigé
<?php
class DBController {
	private $host = "localhost";
	private $user = "root";
	private $password = "";
	private $database = "blog_samples";
  private $bdd=null;
	
	function __construct() {
		$this->connectDB();
	}
	
	public function connectDB() {
		try{
       $con = new PDO('mysql:host='.$this->host.';dbname='.$this->database.'; charset=utf8', $this->user, $this->password);
       // Activation des erreurs PDO
       $con->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
       // mode de fetch par défaut : FETCH_ASSOC / FETCH_OBJ / FETCH_BOTH
       $con->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC);
       $this->bdd = $con;
    } catch(PDOException $e) {
       die('Erreur : ' . $e->getMessage());
    }
   
	}
  
  public function queryExec($sql){
    global $bdd;
    $result = NULL;
    //Execution de la requete
    try{
      $requete = $this->bdd->prepare($sql) ;
      $requete->execute() ;
      $result = $requete->rowCount(); //on retourne le nombre de lignes impactés par cette requête
    }catch(Exception $e){
      // en cas d'erreur :
       echo " Erreur ! ".$e->getMessage();
    }
    return $result;
  }
	
	public function runQuery($query) {
		$result = NULL;
    //Execution de la requete
    try{
      $requete = $this->bdd->prepare($sql) ;
      $requete->execute() ;
      //on retourne un array contenant les résultats
      $result = $requete->fetchAll();
    }catch(Exception $e){
      // en cas d'erreur :
       echo " Erreur ! ".$e->getMessage();
    }
    return $result;
	}
  
  public function insertQuery($query) {
		 $result = NULL;
    //Execution de la requete
    try{
      $requete = $this->bdd->prepare($sql) ;
      $resultatRequete = $requete->execute() ;
      $result = $returnNewId == true ?  $requete->rowCount() : $resultatRequete;
    }catch(Exception $e){
      // en cas d'erreur :
       echo " Erreur ! ".$e->getMessage();
    }
    return $result;
	}
	
	public function numRows($query) {
		$result  = $this->runQuery($query);
		$rowcount = !empty($result) ? count($result) : 0;
		return $rowcount;	
	}
	
	public function updateQuery($query) {
		$result = $this->queryExec($query);
		return $result;
	}
	
  
	function deleteQuery($query) {
		$result = $this->queryExec($query);
		return $result;
	}
  
  //---------------------------------------//
  //fin de la class
  //---------------------------------------//
}
?>

1
gwen007 Messages postés 78 Date d'inscription mardi 24 février 2015 Statut Membre Dernière intervention 23 juin 2023 4
15 févr. 2020 à 15:56
Merci infiniment ..
Je viens (infiin) de réussir à installer celui-ci https://coursesweb.net/php-mysql/voting-up-down-script-ajax_s2
Merci pour ton aide Jordan^^
0
gwen007 Messages postés 78 Date d'inscription mardi 24 février 2015 Statut Membre Dernière intervention 23 juin 2023 4
15 févr. 2020 à 14:26
Merci, c'est super gentil de me donner du temps et ton aide.
J'ai posé ce topic en etant vraiment désespéré. En générale j arrive à mes fins grace à des recherche mais la non, je n'y arrive vraiment pas.

Parfois j arrive à trouver des solutions , alors que je n ai pas appris à le faire et c'est à force de chercher que j'y arrive.

Mais la je suis bloqué.

J'ai donc recommencé à installer ce script car j étais déjà parti sur un autre.
Au départ ce qui clochait, c'était que la page index ne s'affichait pas (Cette page ne fonctionne pas)

J'ai donc utilisé ta correction et maintenant j ai une erreur (Erreur ! SQLSTATE[42000]: Syntax error or access violation: 1065 Query was empty Les datas :)

Qui est donc une erreur de base donnée, définition de Microsoft: Les indicateurs de verrou NOLOCK et READUNCOMMITTED ne sont pas autorisés pour les tables cibles des instructions INSERT, UPDATE DELETE ou MERGE.

J'ai trouvé ca aussi : https://community.librenms.org/t/production-error-sqlstate-42000-syntax-error-or-access-violation-1065-query-was-empty-sql-sql/7360
La personne à pu corriger l erreur : J'ai changé l'association de port de périphérique en «ifIndex», fonctionne.

Suis-je sur le bon chemin ?
C'est vraiment à s 'arracher les cheveux
0