Requête SQL en 1 clic sans recharger la page

Résolu
kisscool73 Messages postés 79 Date d'inscription   Statut Membre Dernière intervention   -  
kisscool73 Messages postés 79 Date d'inscription   Statut Membre Dernière intervention   -
Bonjour,

Ça fait des heures que je cherche un script pour m'aider, mais je me retourne vers ce forum dans l’espoir de trouver un réponse.

Je voudrais faire un simple bouton "like" (genre un coeur qui devient rouge et envoi l'information dans ma base SQL quand on clic dessus)

Je connais bien PHP SQL CSS et HTML donc aucun problème pour le faire, c'est juste que je ne veux pas recharger la page à chaque fois, et avec les langages que je connais, c'est impossible.
Il faut utiliser du JS (jquery) je pense, mais dans ce langage je cherche toujours des sources que j'adapte, car je ne connais rien en JS.

Si quelqu'un pourrai m'aider dans mes recherche, ça serai vraiment sympas.


A voir également:

5 réponses

jordane45 Messages postés 38486 Date d'inscription   Statut Modérateur Dernière intervention   4 752
 
0
kisscool73 Messages postés 79 Date d'inscription   Statut Membre Dernière intervention  
 
Merci jordane45.

Mais le projet ne fonctionne pas !
J'ai copier le content du zip sur mon serveur, j'ai créé la BDD avec les tables, j'ai configuré le fichier config et modifier l'url root dans le fichier monFichierAjax.ajx.php, et j'ai lancé l'index.
Mais j'ai des erreurs sur la page qui rend le projet inutilisable.
Dommage !

Je vais essayé de lire directement dans les fichiers peut être que je trouverai ce que je cherche.
0
jordane45 Messages postés 38486 Date d'inscription   Statut Modérateur Dernière intervention   4 752
 
Il fonctionne très bien.
As tu modifié le "répertoire" du site dans le fichier \ajx\monFichierAjax.ajx.php " ?? (plus exactement... qu'as tu inscris ? )
Sinon... quelles erreurs as tu ?
0
kisscool73 Messages postés 79 Date d'inscription   Statut Membre Dernière intervention  
 
J'ai mis :
$dirSite = "http://www.monsite.com/rep1/monsite/";

Et j'ai fais pareil pour les URL des .css et .js dans le fichier index

Et voici à quoi ressemble l'index :
http://www.image-heberg.fr/files/1525285344648855966.png
0
jordane45 Messages postés 38486 Date d'inscription   Statut Modérateur Dernière intervention   4 752
 
C'est le répertoire (le chemin) pas l'URL qu'il faut mettre...
0
jordane45 Messages postés 38486 Date d'inscription   Statut Modérateur Dernière intervention   4 752
 
Tu es en local ou sur un serveur ?
Si local... Tu as créé un virtualhost ? (Sinon... d'où vient cette url...? )

Mais d'après ce que je vois.. le vhemin a mettre c'est. rep1/monsite/
0
kisscool73 Messages postés 79 Date d'inscription   Statut Membre Dernière intervention  
 
C'est pareil vu que j'ai retiré
$doc_root

Mais de toute façon j'ai essayé le chemin comme tu m'as dis, ça n'a rien changé. :(
0
jordane45 Messages postés 38486 Date d'inscription   Statut Modérateur Dernière intervention   4 752
 
Déjà... avec le script que je t'ai donné tu as forcément quelquechose....
Il faut juste savoir regarder.
Si tu utilises CHROME tu dois installer le plugin https://chrome.google.com/webstore/detail/ajax-debugger/lgfefckpdealogpcfjdhinecfbcgedam
Une fois que ça sera fait, lorsque tu vas faire une requête AJAX, tu pourras voir dans la console (dans l'onglet network) le résultat.
Par exemple :


Perso, pour debuguer l'ajax, je préfère largement utiliser firefox.



Ensuite, concernant le fait que tu aies encore une erreur... c'est normal.
Tu as oublié de fermer une accolade et tu mélanges du mysql_ avec du mysqli->
Bref:
<?php
//affichage des erreurs PHP
error_reporting(E_ALL);
ini_set('display_errors', TRUE);
ini_set('display_startup_errors', TRUE);

//initialisation de la variable de retour
$result = array();


//connexion à la bdd
$mysqli = new mysqli('mysql5-10.pro', 'XXXXXXX', 'XXXXXXX', 'XXXXXXX');
if($mysqli->connect_error) {
 $result['erreur'] = 'Erreur de connexion (' . $mysqli->connect_errno . ') ' . $mysqli->connect_error;
}


//récupération PROPRE des variables AVANT de les utiliser
$sid = !empty($_POST['id']) ? $_POST['id'] : NULL;


if ($sid){
  $sql = "UPDATE base_gallery SET coeur = coeur+1 WHERE sid = '".$sid."'";
  $upd = $mysqli->query($sql);
  if (!$upd) {
    $result['erreur'] = "Message d'erreur : %s\n", $mysqli->error);
  }else{
    $result['success'] = $upd;
  }
}


//on retourne au format json le resultat
echo json_encode($result);




0
kisscool73 Messages postés 79 Date d'inscription   Statut Membre Dernière intervention  
 
Merci,

Pour le mélange entre mysql_ et mysqli-> j'avais vu, et j'ai modifier mon message, mais tu avais dû déjà le lire.
Parcontre, j'avais pas vu l'accolade, et maintenant ça fonctionne si j'ajoute l'accolade qui manque, mais j'ai un message "pareserror".
Et si j'utilise le code de ton dernier message, ça marche plus, et j'ai de nouveau la même erreur 500.

Et j'ai installé l’extension de chrome comme tu me l'avais dis, mais ya jamais rien dans la console network.
0
jordane45 Messages postés 38486 Date d'inscription   Statut Modérateur Dernière intervention   4 752
 
Vérifie les options dans la console pour y activer le xhr
Ou installes firefox... On gagnera du temps
0
kisscool73 Messages postés 79 Date d'inscription   Statut Membre Dernière intervention  
 
Quand j'active XHR dans la console, j'ai "XHR loaded (vote.ajx.php - 200 OK)"
Et sur FireFox je suis allé sur Développement web puis sur débogueur, mais j'ai pas d'erreur.

J'ai rapidement vu dans google, que l'erreur "parsererror" signifie que il faut du json ?
0
kisscool73 Messages postés 79 Date d'inscription   Statut Membre Dernière intervention  
 
ah ben c'est bon, j'ai supprimé la ligne
dataType: "json"
du fichier vote.js
Et plus d'erreur tout fonctionne parfaitement MERCI :)

Puis je abuser de t'as gentillesse, et te demander encore une dernière chose sur ton script JS ?
0
jordane45 Messages postés 38486 Date d'inscription   Statut Modérateur Dernière intervention   4 752 > kisscool73 Messages postés 79 Date d'inscription   Statut Membre Dernière intervention  
 
Vu que dans mon code j'en ai mis....
Si tu continus à avoir ce message d'erreur cela signifie que ton code php retourne une erreur...
As tu biens pris mon code ?

Dans ton JS, fais:
function showUser(sid){
var data = {id:sid };
  $.ajax({ 
        type: "POST",
        url: 'modules/Gallery/vote.ajx.php',
        data: data,
        async: true,
        dataType: "json"
  })
  .done(function(reponse){
      console.log(reponse);
      
  })
  .fail(function(jqXHR, textStatus){
       console.log(textStatus);
       console.log(jqXHR);
       alert(textStatus);
 });
}

les console.log dans le .fail devraient t'afficher plus d'infos dans la console de ton navigateur.
0
jordane45 Messages postés 38486 Date d'inscription   Statut Modérateur Dernière intervention   4 752
 

ah ben c'est bon, j'ai supprimé la ligne dataType: "json" du fichier vote.js
Et plus d'erreur tout fonctionne parfaitement MERCI :)

Si tu as été obligé de faire ça... peut-être que ça "marchouille...." mais ce n'est pas la meilleur solution.
Si tu as du json parse failed .. c'est que ton code dans ton fichier vote.ajx.php retourne du text qu'il ne devrait pas....
La seule façon de le savoir est d'ajouter les console.log que je t'ai indiqué et de nous dire ce qu'ils t'affichent exactement.
Le plus souvent c'est lié à des erreurs dans le code php (parfois juste des warning ou des notice )
Il faudrait aussi nous montrer le code que tu as réellement utilisé dans ton fichier vote.ajx.php ... j'ai l'impression que tu n'as pas pris le mien.

Pour ton autre question... sache qu'ici il est préférable de ne poser qu'une question par discussion.
Ca permet, à d'autres visiteurs, de pouvoir chercher/trouver des réponses à leurs propres questions pour peu que ton souci soit équivalent au leur.
De toutes façons, le code
 $(this).prop('src','modules/Gallery/images/coeur2.png')

serait a placer là où je t'avais mis le texte
//ici tu peux éventuellement coder le changement
      // de couleur de ton bouton...
      //....

C'est à cet endroit précis que tu dois exécuter une action SI (et seulement si) ton code a fonctionné.
Sinon, là où tu l'as mis c'est exécuté systématiquement....


0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
kisscool73 Messages postés 79 Date d'inscription   Statut Membre Dernière intervention  
 
Pour ceux qui peuvent avoir besoins, voici les sources final simplifier :

Dans le fichier PHP de la page :
echo "<script type=\"text/javascript\" src=\"modules/Gallery/jquery-3.3.1.js\"></script>";
echo "<script type=\"text/javascript\" src=\"modules/Gallery/vote.js\"></script>";

echo "<a href='javascript:void(0)' onclick='showUser($sid);'>like</a>";


Le fichier modules/Gallery/vote.js
function showUser(sid){
var data = {id:sid };
  $.ajax({ 
        type: "POST",
        url: 'modules/Gallery/vote.ajx.php',
        data: data,
        async: true,
  })
  .done(function(reponse){
      console.log(reponse);
      //ici tu peux éventuellement coder le changement
      // de couleur de ton bouton...
      //....
  })
  .fail(function(jqXHR, textStatus){
    alert(textStatus);
 });
}


Et le fichier modules/Gallery/vote.ajx.php
<?php 

$sid = !empty($_POST['id']) ? $_POST['id'] : NULL;

$mysqli = new mysqli('localhost', 'user', 'password', 'name');
if($mysqli->connect_error) {
	die('Erreur de connexion (' . $mysqli->connect_errno . ') ' . $mysqli->connect_error);
	}

if ($sid)
{
$mysqli->query("UPDATE votre_table SET coeur = coeur+1 WHERE sid = '".$sid."'");
}

?>


J’espère que j'ai rien oublié.
0
jordane45 Messages postés 38486 Date d'inscription   Statut Modérateur Dernière intervention   4 752
 
En gros... tu n'as tenu compte d'aucun de mes codes .........
- Il n'y as pas les console.log dans le fail de ton js
- Tu ne gères pas les éventuelles erreurs de requêtes dans ton fichier ajax.php
- Tu n'a pas mis le changement d'image dans le done du JS

Sans compter que tu ne répondais que partiellement aux questions que je te posais....
Bref... Désormais je passe mon tour .....

Bonne chance pour la suite....
-1
kisscool73 Messages postés 79 Date d'inscription   Statut Membre Dernière intervention  
 
Je suis vraiment désolé, pourtant je t'ai dis que le code du fichier vote.ajx.php que tu avais modifié ne fonctionnait pas alors que l'autre avec l'accolade qui manquait fonctionné, j'ai donc pensais évident de conserver celui qui fonctionnait.

Bref, dans tous les cas merci beaucoup pour ton aide.
Et désolé d'avoir laissé plané un climat d'incompréhension, c'été pas mon intention.
0
jordane45 Messages postés 38486 Date d'inscription   Statut Modérateur Dernière intervention   4 752
 
0
kisscool73 Messages postés 79 Date d'inscription   Statut Membre Dernière intervention  
 
Ok, je vais le faire.
Merci
0