[RESOLU] Enregistrer dans base sql quand on clique sur un lien

Eléphant du PHP | 233 Messages

24 déc. 2016, 17:51

Bonjour à tous et joyeux noël :-D

je voudrais savoir comment faire pour effectuer un enregistrement dans ma base si je clique sur un lien qui renvoi sur un autre site.
Le lien vers l'autre site est direct avec la balise target="_blank"

Tant que mes liens renvoient sur les pages de mon site pas de souci de sait faire. Mais quand le lien pointe vers l'extérieur ?

Merci d'avance.

:wink:

Eléphant du PHP | 83 Messages

25 déc. 2016, 23:15

Bonsoir,
je ne comprend pas trop le problème. Peux-tu préciser avec un peu de code (et notamment quand ça marche) ?

Mammouth du PHP | 1967 Messages

25 déc. 2016, 23:50

Il faut que tu trompe ton utilisateur, en faisant un lien interne, l'enregistrement en base de donnée et puis une redirection vers le lien exterieur
Spols
pour les fan de rubik's cube ou pour les curieux ==> le portail francophone du rubik's cube

Eléphant du PHP | 233 Messages

26 déc. 2016, 12:08

Bonjour,
pour le moment j'ai pas de code, je cherche justement comment il faut que je fasse.
Un deux mots, je voudrais compter dans ma base de données chaque fois qu'un internaute clique sur un lien (mais qui va vers un autre site).
Une seule page est concernée.
Ma table : id et id_page.
Je ne peux pas utiliser la méthode GET vu que la requête ne passe pas par l'URL.
Le lien est de type href

merci encore

Eléphant du PHP | 130 Messages

26 déc. 2016, 12:48

Tu peux le faire en Ajax.
Tu ajoutes un événement à chaque fois qu'une personne clique sur le lien externe tu envois une requête au serveur qui alimentera ta base.

Eléphant du PHP | 233 Messages

26 déc. 2016, 12:59

Bonjour,

du ce style ?
document.ready(function{('a').click{  $.ajax({
        type    : "post",
        url : fichier_php_qui_traite_lesdonnees,
        data    : variableapasser
                success : function(data){//ce qu'il faut faire en cas de succes}
                error   : function(obj,msg,objEvent){//ce qu'il faut ffaire en cas d'erreur}
}});

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

26 déc. 2016, 13:41

salut,

oui, ceci dit cela n'est pas fiable car certain navigateur pourrait ne pas exécuter ta requête.
depuis i faut peut être filtrr un peu parce que la même le changement de page de ton site est prit en compte dans la requête cela va vite être lourd coté requête.

le plus simple c'est de remplacer les liens directs par des lien vers un fichier php de ton site qui lui fera la redirection.
par exemple
<a href="autresite.com'" >autresite.com</a> devient <a href="redirection.php?url=autresite.com">autresite.com</a>
et redirection.php
<?php
if(empty($_GET['autresite.com)) {
// appel du fichier sans le paramètre oust
header('Location : ceque tu veux');
exit();
}

// la tu fait ta requête SQL elle ne doit pas être bloquante pour l'utilisateur donc pense à capture les exceptions et tester les retours pour que ton script ne produise pas une seule erreur. 
// la redirection

header('Location : '.$_GET['url']);
exit();
c'est simple et pour peu que l'insertion se fasse vite c'est quais transparent pour l'utilisateur.

tu peux faire la même chose en JS et lancer la redirection dans la callback de la requête serveur.


@+
Il en faut peu pour être heureux ......

Eléphant du PHP | 233 Messages

27 déc. 2016, 12:38

Bonjour,

effectivement j'avais pas pensé à cette méthode.
Du coup, j'ai raccourci en faisant ça (car le lien ne peut pas être vide).
fichier redirection.php
<?php
require('conf.inc.php');

$url=mysqli_real_escape_string($bdd, $_GET['url']);


$sql=mysqli_query($bdd, "SELECT url FROM achat WHERE url='".$url."'")or die(mysqli_error($bdd));
if (mysqli_num_rows($sql)==0) 
{

 mysqli_query($bdd, "INSERT INTO achat (clic, url) VALUES ('0', '".$url."')")or die(mysqli_error($bdd));
 }
 else 
 {
 
 mysqli_query($bdd, "UPDATE achat SET clic =clic + 1 WHERE url='".$url."'")or die(mysqli_error($bdd));
 }

header('Location: '.$_GET['url'].'');
Merci encore

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

28 déc. 2016, 11:43

de rien :)

pense à cliquer sur résolus (à gauche du titre) lorsque c'est le cas ;) (bon la je l'ai fait pour toi, mais que ça se reproduise pas hein :mrgreen:)

merci
Il en faut peu pour être heureux ......

Eléphant du PHP | 233 Messages

02 janv. 2017, 16:32

Bonjour et bonne année à tous,

c'est noté, merci de la réponse et de l'action

:)