[RESOLU] Aide bouton sans rechargement de page

Eléphant du PHP | 282 Messages

25 mars 2017, 16:48

Bonjour,

Je bloque depuis plusieurs semaines maintenant sur quelque chose qui peut paraitre idiot : L'envoie d'un formulaire via bouton sans que ça ne recharge la page.
J'arrive à faire la partie php mais je ne vois vraiment pas comment faire la partie ajax ? Il s'agit d'un bouton qui permet aux membre d'informer les autres qu'ils ont envie de voir une série tv.

Voilà mon code pour le moment :
	$succes=0;
	$erreur=0;
	if (isset ($_GET['id']) && isset ($_SESSION['id'])){
				$posteur = $_SESSION['id'];;
				$id_serie = $_GET['id'];
				$date = date('Y-m-d');
				$getEnvieMembre = $bdd->query("SELECT * FROM `envie_serie` WHERE id_membre=$posteur AND id_serie=$id_serie");
if( $getEnvieMembre->fetch() !== false )
{  
  $erreur=1;
 }
			else
{
				$addwatchliste = $bdd->prepare("INSERT INTO `envie_serie` VALUES ('', ?, ?, ?)");
				$addwatchliste->execute(array($id_serie, $posteur, $date));			
				$succes=1;
	}
	}
                            <div class="movie__btns">
                               	<form method="post" action="">
                                <a href="?mod=top-serie&id=<?=$getTop['id']; ?>" name="envie_add" class="watchlist">Envie de voir cette série</a>
			      </form>
                            </div>
Merci d'avance pour votre aide ! Je bloque vraiment dessus et je ne comprends vraiment pas comment faire. :/

Mammouth du PHP | 1396 Messages

25 mars 2017, 17:09


Eléphant du PHP | 282 Messages

25 mars 2017, 17:16

D'accord merci je vais tester ! Mais du coup je voulais savoir pour le $get je met le fichier ou se trouve mon envoie de formulaire ?

Eléphant du PHP | 282 Messages

25 mars 2017, 17:27

ça ne fonctionne pas. En fait c'est sur un lien donc je modifie bien cette ligne : $("a").click(function(){
Sauf que je voulais savoir comment préciser le name du lien envie_add car j'ai plusieurs envoies de formulaire sur cette page et je voudrais tester avec un seul pour le moment.
Pour le moment ça recharge toujours la page.

Eléphant du PHP | 282 Messages

26 mars 2017, 15:02

Bon du coup j'ai modifié un peu le code. Maintenant le rechargement de la page est bloqué. par contre l'envoie à la bdd ne fonctionne pas.
<script>
$(document).ready(function(){
    $("a.watchlist").click(function(e){
	e.preventDefault();
        $.get("module-top-serie.php", function(data, status){
            alert("Data: " + data + "\nStatus: " + status);
        });
    });
});
</script>
<?php
 $succes=0;
  $erreur=0;
  if (isset ($_GET['id']) && isset ($_SESSION['id'])){
        $posteur = $_SESSION['id'];;
        $id_serie = $_GET['id'];
        $date = date('Y-m-d');
        $getEnvieMembre = $bdd->query("SELECT * FROM `envie_serie` WHERE id_membre=$posteur AND id_serie=$id_serie");
if( $getEnvieMembre->fetch() !== false )
{  
  $erreur=1;
 }
      else
{
        $addwatchliste = $bdd->prepare("INSERT INTO `envie_serie` VALUES ('', ?, ?, ?)");
        $addwatchliste->execute(array($id_serie, $posteur, $date));			
        $succes=1;
  }
  }
?>
 <a href="?mod=top-serie&id=<?=$getTop['id']; ?>" name="envie_add" class="watchlist">Envie de voir cette série</a>

Eléphant du PHP | 282 Messages

02 avr. 2017, 16:48

Personne pour m'aider ? je sens que je suis tout prêt de la solution mais je ne vois pas pourquoi ça ne fonctionne pas.

Le code :
Page header:
<script>
$(document).ready(function(){
    $("a.watchlist").click(function(e){
  e.preventDefault();
        $.get("module-top-serie.php", function(data, status){
            alert("Data: " + data + "\nStatus: " + status);
        });
    });
});
</script>

Page module-top-serie.php
<?php
 $succes=0;
  $erreur=0;
  if (isset ($_GET['id']) && isset ($_SESSION['id'])){
        $posteur = $_SESSION['id'];;
        $id_serie = $_GET['id'];
        $date = date('Y-m-d');
        $getEnvieMembre = $bdd->query("SELECT * FROM `envie_serie` WHERE id_membre=$posteur AND id_serie=$id_serie");
if( $getEnvieMembre->fetch() !== false )
{  
  $erreur=1;
 }
      else
{
        $addwatchliste = $bdd->prepare("INSERT INTO `envie_serie` VALUES ('', ?, ?, ?)");
        $addwatchliste->execute(array($id_serie, $posteur, $date));			
        $succes=1;
  }
  }
?>
 <a href="?mod=top-serie&id=<?=$getTop['id']; ?>" name="envie_add" class="watchlist">Envie de voir cette série</a>
Merci d'avance !

ViPHP
ViPHP | 1996 Messages

02 avr. 2017, 23:33

Je pense que tu as un problème dans ton lien.
Je te propose ceci :

le bout de javascript doit envoyer vers module-top-serie.php les données quand tu cliques sur le DOM qui possède la classe .whatchlist (pourquoi se limiter à la balise <a>?)
$(document.body).on({
	click : function (event) {
		event.stopPropagation(); //on bloc sur l'élément clické
		event.preventDefault();  //on enlève l'action par défaut
		var element = event.target||event.srcElement; //on récupère l'élement dans le DOM
		var f = $(element);  //puis on le définit dans jQuery
		
		if (f.is('a')) { //est ce que c'est un lien <a> ?
			$.ajax ({
				url : "module-top-serie.php",
				data : {id : f.attr('hrefid'), mod : f.attr('mod')},
				type : "get",	
				cache : false,
				complete : function (xhr, result) {
					if (result != "success") return;				
					var reponse = xhr.responseText;	
					//autre code de réponse si module-top-serie retourne un texte par exemple.
				}
			});
		}
	}
},'.whatchlist');
et les liens devront avoir cette forme pour que cela fonctionne
 <a hrefid="<?php echo $getTop['id']; ?>" mod="top-serie" class="watchlist">Envie de voir cette série</a>
It is nice to be important but it is more important to be nice
http://www.aureuswebfactory.fr

Eléphant du PHP | 282 Messages

06 avr. 2017, 00:56

Merci ! Je vais tester ça demain et je te dirais ce qu'il en est ! Merci encore pour ton aide !

Eléphant du PHP | 282 Messages

06 avr. 2017, 17:24

Ca ne fonctionne pas. Quand je vais dans le log j'ai ceci : <a hrefid="2754" mod="top-serie" class="watchlist">
Ca ne recharge pas la page mais le soucis c'est que le formulaire ne s'envoie pas. :/

Eléphant du PHP | 282 Messages

06 avr. 2017, 17:25

Pas dans le log, dans la cpnsole *

Eléphant du PHP | 282 Messages

06 avr. 2017, 18:38

Du coup la fonction marche correctement. C'est l'envoie à la bdd qui bloque. Je pensais que ça pouvait peut être venir de là : $id_serie = $_GET['id'];
Vu qu'il n'y a plus de rechargement de page avec url comment faire ? Le GET ne peut pas fonctionner techniquement ?