IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

Désactivation d'un lien une fois visité


Sujet :

Langage PHP

  1. #1
    Invité
    Invité(e)
    Par défaut Désactivation d'un lien une fois visité
    Bonjour! Je viens demander votre aide car j'ai passé trop d'heures a essayer tous les codes inimaginables pour mon problème.
    Je veux faire en sorte qu'une fois que le lien <a></a> est cliqué par l'utilisateur, celui-ci soit désactivé pour les 5 prochaines minutes, même si la page est actualisé il doit demeuré désactivé. Je cherche une solution simple même si contournable par les érudies du php, le but étant de décourager l'internaute commun de re-clicker sur le lien des dizaines de fois de suite, voici mon code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    <?php
    error_reporting(E_ALL ^ E_NOTICE);
    $rep="CLICS";    
    $fichier="Clics_re_up56";    
    $url="http://www.click.fr";   
    ?>
    <a href="clics1.php?fichier=<?php print("$fichier"); ?>&rep=<?php print("$rep"); ?>&url=<?php print("$url"); ?>" >
    <img class="up" src="up.png" /></a>
    <?php
    $fp=fopen("$rep/$fichier.txt","r+");
    $clics=fgets($fp,10);
    fclose($fp);
    echo $clics;
    ?>

  2. #2
    Membre expert
    Avatar de Spartacusply
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2011
    Messages
    1 723
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2011
    Messages : 1 723
    Points : 3 274
    Points
    3 274
    Par défaut
    Hello ! (oui je sais il est 6h du mat et j'ai des insomnies)

    Deux solutions :

    - Tu passes par un cookie dans lequel tu indiques l'heure à laquelle l'utilisateur pourra de nouveau cliquer. Simple et pas compliqué, mais il suffit d'effacer ses cookies pour pouvoir recliquer sur le lien.
    - Tu stockes en base de données l'adresse IP du client (qui peut-être obtenu avec $_SERVER['REMOTE_ADDR']) et l'heure à laquelle il pourra recliquer.
    Un message utile vous a aidé ? N'oubliez pas le

    www.simplifions.fr - Simplifier vos comptes entre amis !

  3. #3
    Membre actif
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2004
    Messages
    144
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : Vatican

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Mai 2004
    Messages : 144
    Points : 238
    Points
    238
    Par défaut
    bonjour,

    tu peux ajouter un événement sur click dans la balise de ton lien, cet événement tu lui associe un script php qui créé une variable session avec l'ID du lien et l'heure cliqué. puis dans ta page tu fais le test de la différence d'heure pour savoir si 5 mn se sont écoulés.
    .
    . . Savoir, savoir faire, faire , faire savoir...

  4. #4
    Membre expert
    Avatar de Spartacusply
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2011
    Messages
    1 723
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2011
    Messages : 1 723
    Points : 3 274
    Points
    3 274
    Par défaut
    Il suffit dans ce cas là de fermer son navigateur pour cliquer de nouveau sur le lien (et qui plus est cette méthode a recourt à de l'ajax, pas sur que ça soit vraiment nécessaire).
    Un message utile vous a aidé ? N'oubliez pas le

    www.simplifions.fr - Simplifier vos comptes entre amis !

  5. #5
    Invité
    Invité(e)
    Par défaut
    Merci pour ces réponses! l'idées des cookies me plait davantage je crois, mais je ne sais absolument pas comment faire passer par un cookie l'utilisateur, je ne veux pas abuser de ton aide alors seulement si tu veux m'indiquer + de détails concernant les cookies j'en serais ravi

  6. #6
    Membre expert
    Avatar de Spartacusply
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2011
    Messages
    1 723
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2011
    Messages : 1 723
    Points : 3 274
    Points
    3 274
    Par défaut
    Pour envoyer un cookie, fonction setcookie()

    Les cookies se trouvent dans la variable superglobale $_COOKIE.

    Un ptit tuto sur les cookies : http://php.developpez.com/cours/sessions/?page=page_1
    Un message utile vous a aidé ? N'oubliez pas le

    www.simplifions.fr - Simplifier vos comptes entre amis !

  7. #7
    Invité
    Invité(e)
    Par défaut
    Un gros merci! très apprécié

  8. #8
    Invité
    Invité(e)
    Par défaut
    La commande setcookie je la met dans le head ou le body?

  9. #9
    Membre expert
    Avatar de Spartacusply
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2011
    Messages
    1 723
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2011
    Messages : 1 723
    Points : 3 274
    Points
    3 274
    Par défaut
    Peut-importe, c'est une fonction php, elle sera de toute façon interprétée avant même que ton html ne soit rendu (c'est une notion importante du php qui ne sert au final qu'à rendre du html, celui-ci est toujours exécuté côté serveur avant que la page ne soit envoyé au client).

    Le plus propre, c'est de la mettre tout en haut de ta page qui apparaît au clic sur le lien.
    Un message utile vous a aidé ? N'oubliez pas le

    www.simplifions.fr - Simplifier vos comptes entre amis !

  10. #10
    Invité
    Invité(e)
    Par défaut
    J'ai essayé quelque chose, mais ça fonctionne pas dutout, désolé j'ai besoin d'un coach voilà mon essai infructueux:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <?php
    	  setCookie('clickonce',time()+24*3600);
    	  if (isset($_COOKIE['clickonce'])){
    	  $removeattr ('href')}
    	  ?>

    pour le temps c'est correct j'ai décidé de le fixer à 24 heures plutôt que 5 minutes, mais le reste n'est pas convaincant

  11. #11
    Membre expert
    Avatar de Spartacusply
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2011
    Messages
    1 723
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2011
    Messages : 1 723
    Points : 3 274
    Points
    3 274
    Par défaut
    Voici qui pourrait faire l'affaire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
     
    //Sur la page où il y a ton lien
    if (!isset($_COOKIE['clickonce'])) {
        //Affichage du lien
    } else {
        // Affichage d'un texte alternatif non clickable (ou de rien du tout d'ailleurs)
    }
     
    //TOut en haut de la page où on arrive après avoir cliqué sur le lien
    if (!isset($_COOKIE['clickonce'])) {
        setcookie('clickonce', time() + 5 * 60);
    } else {
        //Y en a un qui essaye de gruger, redirection vers la page ou il y a le lien
        header('Location:maPage.php');
    }
    Un message utile vous a aidé ? N'oubliez pas le

    www.simplifions.fr - Simplifier vos comptes entre amis !

  12. #12
    Invité
    Invité(e)
    Par défaut
    Excellent!
    Dernière modification par Invité ; 03/03/2014 à 19h26.

  13. #13
    Invité
    Invité(e)
    Par défaut
    Léger problème.. le lien est inactif même sans avoir cliqué dessus, jvous montre le code que ça me donne au final:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    <?php
    if (!isset($_COOKIE['clickonce'])) {
    	echo '<a href="clics1.php?fichier=<?php print("$fichier"); ?>
    	&rep=<?php print("$rep"); ?>&url=<?php print("$url"); ?>" ><img class="up" src="up.png" /></a>';
    } else { echo '<img class="up" src="up.png" />';}
    ?>
    Il faut noter que la page sur laquelle le lien amène est en faite une simple page qui exécute une fonction et qui redirige automatiquement sur la page du lien
    Dernière modification par Bovino ; 04/03/2014 à 07h50. Motif: Réduction d'indentation ! Merci de penser à ceux qui lisent le code !

  14. #14
    Rédacteur

    Avatar de Bovino
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2008
    Messages
    23 647
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2008
    Messages : 23 647
    Points : 91 220
    Points
    91 220
    Billets dans le blog
    20
    Par défaut
    Mais tu te rends compte que tu mets des balises PHP à l'intérieur d'autres balises PHP ?
    Pas de question technique par MP !
    Tout le monde peut participer à developpez.com, vous avez une idée, contactez-moi !
    Mes formations video2brain : La formation complète sur JavaScriptJavaScript et le DOM par la pratiquePHP 5 et MySQL : les fondamentaux
    Mon livre sur jQuery
    Module Firefox / Chrome d'intégration de JSFiddle et CodePen sur le forum

  15. #15
    Membre expert
    Avatar de Spartacusply
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2011
    Messages
    1 723
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2011
    Messages : 1 723
    Points : 3 274
    Points
    3 274
    Par défaut
    Bovino a tout dit... Soit tu mets tout dans un echo global, soit tu ouvres et fermes tes balises à chaque fois que c'est nécessaire (c'est mieux, ça prends en compte la coloration syntaxique) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    <?php if (!isset($_COOKIE['clickonce'])) {  ?>
        <a href="clics1.php?fichier=<?php echo $fichier; ?>&rep=<?php echo $rep; ?>&url=<?php echo $url; ?>"><img class="up" src="up.png" /></a>
    <?php } else { ?> 
        <img class="up" src="up.png" />
     <?php } ?>
    Un message utile vous a aidé ? N'oubliez pas le

    www.simplifions.fr - Simplifier vos comptes entre amis !

  16. #16
    Invité
    Invité(e)
    Par défaut
    Bonjour, j'ai essayé ce nouveau code et maintenant l'image du lien n'apparait plus dutout... et je voudrais savoir pourquoi avoir enlevé le print

  17. #17
    Membre expert
    Avatar de Spartacusply
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2011
    Messages
    1 723
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2011
    Messages : 1 723
    Points : 3 274
    Points
    3 274
    Par défaut
    Tu es bien dans la page qui est rendu à l'utilisateur ?

    Si tu veux tout encapsulé par un echo (ce qui dans ce dernier cas n'est normalement pas nécessaire) :

    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    <?php
    if (!isset($_COOKIE['clickonce'])) {  
        echo '<a href="clics1.php?fichier='.$fichier.'&rep='.$rep.'&url='.$url.'"><img class="up" src="up.png" /></a>';
     } else { 
        echo '<img class="up" src="up.png" />';
    } 
    ?>
    Un message utile vous a aidé ? N'oubliez pas le

    www.simplifions.fr - Simplifier vos comptes entre amis !

  18. #18
    Invité
    Invité(e)
    Par défaut
    Serait-il possible que je doive inverser le if et le else? parce que si je lis le code j'ai l'impression de lire: Si le cookie est présent, permettre le click. Sinon, simplement afficher l'image du click.
    Alors que ça devrait être le contraire, lorsque le cookie est présent ça devrait ne pas être cliquable il me semble?

  19. #19
    Membre expert
    Avatar de Spartacusply
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2011
    Messages
    1 723
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2011
    Messages : 1 723
    Points : 3 274
    Points
    3 274
    Par défaut
    Noon non c'est bien s'il n'est PAS présent (c'est le "!" qui fait la négation), permettre le clic.
    Un message utile vous a aidé ? N'oubliez pas le

    www.simplifions.fr - Simplifier vos comptes entre amis !

  20. #20
    Invité
    Invité(e)
    Par défaut
    D'accord, j'ai essayé ton dernier code avec tout encapsulé dans le echo, cette fois on voit l'image, donc j'imagine que le else fonctionne, j'vais tenter des trucs pour faire fonctionner le if

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Désactiver un lien une fois cliqué
    Par Invité dans le forum jQuery
    Réponses: 5
    Dernier message: 02/03/2014, 20h40
  2. Il était une fois les liens
    Par @po©alypse dans le forum Mise en page CSS
    Réponses: 1
    Dernier message: 07/07/2010, 15h40
  3. [AJAX] IE7 : lien qui ne fonctionne qu'une fois :(
    Par NoobX dans le forum Général JavaScript
    Réponses: 17
    Dernier message: 25/08/2008, 16h34
  4. probleme de contour lien une fois selectionné
    Par amarcil dans le forum Mise en page CSS
    Réponses: 2
    Dernier message: 08/07/2008, 12h25

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo