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 :

Mon défi : Appeler une fonction PHP en cliquant sur un lien [PHP 7]


Sujet :

Langage PHP

  1. #1
    Membre du Club Avatar de RinaBK
    Femme Profil pro
    Développeur Web
    Inscrit en
    Janvier 2021
    Messages
    92
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 48
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Janvier 2021
    Messages : 92
    Points : 64
    Points
    64
    Par défaut Mon défi : Appeler une fonction PHP en cliquant sur un lien
    Bonjour tout le monde,

    Je dois appeler une fonction PHP avec un clic sur un lien.
    Ne me dites pas que ce n’est pas possible car PHP est un langage serveur, car je le sais... C’est justement là le défi

    Voici le lien basique :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <a href="fichier.zip">fichier.zip</a>
    Et l’appel de ma fonction :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    monClick($argument1, $argument2, $argument3) ;
    Comme vous l’avez remarqué, mon lien cible sur un fichier ZIP.
    De plus, cette fonction PHP est assez complexe et longue et je l’utilise sur d’autres pages (Elle fonctionne parfaitement). Donc, impossible de la modifier. Et je n'ai pas le choix, je dois faire appel à cette fonction.

    La seule chose que je peux modifier sans problème est mon lien. Après, que j’ai un lien ou un bouton formulaire ou autres, cela ne pose aucun soucis. Du moment que si l'utilisateur clique sur le lien, il peut télécharger le fichier ZIP et en même temps faire appel à ma fonction PHP.

    Je me creuse la tête depuis un bon moment et je n’ai pas le choix, je dois vraiment trouver une solution.
    Est-ce que vous pouvez m’aider ? Je me dis qu’avec plusieurs cervelle, ce défi sera peut-être plus simple à réaliser.
    • On dit que le ridicule ne tue pas; On dit aussi que ce qui nous tue pas, nous rends plus fort; Alors pourquoi ne pas dire : Le ridicule nous rends plus fort !
    • On reproche aux gens de parler d'eux-même; C'est pourtant le sujet qu'ils traitent le mieux !

  2. #2
    Expert éminent sénior
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 234
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 234
    Points : 15 531
    Points
    15 531
    Par défaut
    dans le code PHP vous pouvez finir par une redirection qui envoie vers le fichier à télécharger

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    <?php
     
    // du code ...
     
    monClick($argument1, $argument2, $argument3);
     
    // encore du code ...
     
     
    // redirection
    header("Location: fichier.zip");
    exit();

  3. #3
    Membre du Club Avatar de RinaBK
    Femme Profil pro
    Développeur Web
    Inscrit en
    Janvier 2021
    Messages
    92
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 48
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Janvier 2021
    Messages : 92
    Points : 64
    Points
    64
    Par défaut
    Malheureusement, je ne peux pas.. Ma fonction est aussi utilisée sur d'autres pages et le problème est qu'il n'est pas possible d'utiliser la fonction header(); dans le corps d'une page.
    Mais je te remercie tout de même pour ta réponse !



    J'ai libre champs sur la création du lien sur ma page. Du moment que lorsque l'utilisateur clique dessus, cela appel la fonction ainsi que le fichier ZIP


    Schématiquement, ça donnerait ça :
    Fichier page.php
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    <? include('mesFonctions.php'); ?>
    <html>
    	<head>
    		...
    	</head>
    	<body>
    		<a href="fichier.zip"><? monClick($argument1, $argument2, $argument3) ; ?></a>
    	</body>
    </html>
    Fichier mesFonctions.php
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    <?
    function monClick($argument1, $argument2, $argument3) {
    	... (fonction qui n'affiche rien, mais qui travaille avec certaines données, dont $argument1, $argument2, $argument3)
    }
    function uneFonction() {
    	....
    }
    function uneAutreFonction() {
    	....
    }
    ?>
    • On dit que le ridicule ne tue pas; On dit aussi que ce qui nous tue pas, nous rends plus fort; Alors pourquoi ne pas dire : Le ridicule nous rends plus fort !
    • On reproche aux gens de parler d'eux-même; C'est pourtant le sujet qu'ils traitent le mieux !

  4. #4
    Membre éclairé Avatar de ypcman
    Homme Profil pro
    Retraité codeur !
    Inscrit en
    Janvier 2011
    Messages
    595
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Retraité codeur !
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Janvier 2011
    Messages : 595
    Points : 879
    Points
    879
    Par défaut
    Ne pourrais-tu pas plutôt pointer sur un fichier php qui lui, ferait l'appel à la fonction monClick() puis téléchargerait le fichier zip ?
    Participez vous aussi !
    Message utile
    Discussion résolue

  5. #5
    Membre du Club Avatar de RinaBK
    Femme Profil pro
    Développeur Web
    Inscrit en
    Janvier 2021
    Messages
    92
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 48
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Janvier 2021
    Messages : 92
    Points : 64
    Points
    64
    Par défaut
    Oui, j’y avais pensé mais je voulais éviter de faire un fichier rien que pour un clique sur un lien. Il y a déjà pas mal de fichier et si je peux éviter d’en créer un, surtout pour ça, ça m’arrangeait.


    Ceci-dit, j’ai trouvé la solution
    C’est là que je me rends compte que lorsque l’on est trop dans ces lignes de code du matin au soir et même parfois la nuit, l’on cherche parfois trop loin et on se complique la vie. Pourquoi faire compliquer lorsque l’on peut faire simple ! Ceci-dit, vos réponses m’ont remis les idées en place et j’ai trouvé directement la solution. Donc merci à vous !


    Je vous explique, si vous vous trouvez confronté au même problème que moi :

    J’ai modifié mon lien par un bouton de formulaire, qui envoi sur cette même page le lien de mon fichier ZIP ainsi qu’un des arguments demandé par ma fonction en hidden.
    Ensuite, dans le haut de ma page, j’ai créé un petit contrôle pour récupérer mes variables POST, appeler ma fonction et un header() ; pour rappeler le fichier à télécharger.

    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
    16
    17
    18
    19
    <? 
    include('mesFonctions.php');
     
    if ((!empty($_POST['pathfile'])) && (!empty($_POST['fichier']))) {
    	monClick($_POST['pathfile'],$argument2,$argument3);
    	header('Location: '.$_POST['fichier']);
    }
    ?>
    <html>
    	<head>
    		...
    	</head>
    	<body>
    		<form method="POST">
    			<input type="hidden" name="pathfile" value="<?=$pathfile;?>">
    			<input type="submit" name="fichier" value="fichier.zip">
    		</form>
    	</body>
    </html>
    Bref, rien de plus basique et de plus simple ! Je devrais songer à faire de temps en temps des pauses, ça aide
    • On dit que le ridicule ne tue pas; On dit aussi que ce qui nous tue pas, nous rends plus fort; Alors pourquoi ne pas dire : Le ridicule nous rends plus fort !
    • On reproche aux gens de parler d'eux-même; C'est pourtant le sujet qu'ils traitent le mieux !

  6. #6
    Modérateur
    Avatar de grunk
    Homme Profil pro
    Lead dév - Architecte
    Inscrit en
    Août 2003
    Messages
    6 691
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Lead dév - Architecte
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2003
    Messages : 6 691
    Points : 20 222
    Points
    20 222
    Par défaut
    Un simple appel ajax devrait faire le job ... Suffit simplement de ne pas stopper la propagation des événements pour que une fois l'appel ajax effectuer , le click se poursuive jusqu'au lien :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    <a href="fichier.zip" id="lien">LIEN</a>
    <script type="text/javascript"> 
    	const el = document.getElementById("lien");
    	el.addEventListener("click", (e)=>{
                    // Faire l'appel AJAX à la fonction PHP souhaité
                    const xhr = new XMLHttpRequest();
                    xhr.open('GET', 'mon/url/pour/appel/fonction.php');
                    // etc ...
    		console.log("Fonction PHP appelée");
    		// Si on veux éviter la navigation vers le lien pointé par href il faut appeler :
    		// e.preventDefault();
    		// e.stopPropagation();
    	}, false);
    </script>
    Avec un bouton la sémantique n'est pas respectée puisque qu'on s'attends à valider une action , pas à naviguer vers quelque chose
    Pry Framework php5 | N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  7. #7
    Membre du Club Avatar de RinaBK
    Femme Profil pro
    Développeur Web
    Inscrit en
    Janvier 2021
    Messages
    92
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 48
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Janvier 2021
    Messages : 92
    Points : 64
    Points
    64
    Par défaut
    Effectivement grunk, un bouton n’est pas l’idéal pour ce type de manœuvre. Mais avec un peu de CSS, on peut facilement arranger les choses et les rendre plus appréciable à l’œil.
    -> www.gwanda.ch/outils_office.php

    Si tu te diriges sur la page, et que tu cliques sur le bouton pour télécharger, cela fonctionne. Cependant, vu que PHP est en langage serveur, il sera nécessaire de recharger la page pour que l’on voie le nombre de click s’incrémenter. Mais, entre nous, cela ne me dérange pas du tout. Ce qui est très important pour moi, c’est que le programme permet de télécharger l’objet et incrémente via ma db le nombre de click.

    Avant toute chose, je te remercie infiniment pour ton code et je l’ai intégré à ma page pour le tester
    J’ai remarqué que tu as intégré mon fichier 'fonctions.php'. C’est une très belle intention, mais ce fichier est déjà intégré d’office sur toute mes pages, donc il n’est pas nécessaire de l’intégré une nouvelle fois. D’ailleurs, cela poserait une erreur sur mes pages si je m’amusais à cela. Ceci-dit, si l’on click sur le lien, cela ouvre la boite de téléchargement parfaitement. Le souci est que le script active la fonction PHP au chargement de la page et non au click sur le lien. Je suis assez douée en PHP, mais quand il s’agit de JS, j’avoue être une vrai novice, donc je n'ai pu arranger le problème.

    Je te remercie tout de même pour ton aide
    • On dit que le ridicule ne tue pas; On dit aussi que ce qui nous tue pas, nous rends plus fort; Alors pourquoi ne pas dire : Le ridicule nous rends plus fort !
    • On reproche aux gens de parler d'eux-même; C'est pourtant le sujet qu'ils traitent le mieux !

  8. #8
    Membre du Club Avatar de RinaBK
    Femme Profil pro
    Développeur Web
    Inscrit en
    Janvier 2021
    Messages
    92
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 48
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Janvier 2021
    Messages : 92
    Points : 64
    Points
    64
    Par défaut
    Coucou tout le monde,

    Je rouvre ce sujet, car mon nouveau problème est similaire au précédent, mis à part quelques détails. Cela fait toute la journée que je parcours le net pour trouver la solution, mais je n’ai rien trouvé qui pourrait m’aider. Aussi, je suis vraiment, mais vraiment pas douée en JavaScript, alors ça me complique le problème



    Je suis en train de créer une messagerie sur une page web. Les utilisateurs peuvent envoyer des messages via le formulaire que voici :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    <form method="POST" name="msgform" action="hd_tutos.php">
    	<textarea name="msg" cols="" rows="3" required ></textarea><br />
    	<input type="submit" name="sendmsg" value="Envoyer">
    </form>

    Pour que les utilisateurs puissent aussi utiliser des simleys dans leurs messages, j’ai préalablement enregistré via la DB les codes de mes simleys. J’ai réalisé une petite fonction que je pourrais intégrer dans mes pages l’affichage des simleys.

    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
    16
    17
    18
    19
    20
    21
    22
    <?
    function simleysInsert($nbMax) {
    	if ($sql = mySqli_query(ConnectDB,'SELECT * FROM simleys ORDER BY id ASC LIMIT 0,'.$nbMax)) {
    		if ($sql) {
    			while ($data = mysqli_fetch_array($sql)) {
    				?>
    				<a href="javascript:emoticon('<?=$data['code'];?>')" target="_parent">
    					<img src="http://simleys.gwanda.ch/<?=$data['adresse'];?>" border="0">
    				</a>
    				<?
    			}
    		}
    	}
    	?>
    	<script language="JavaScript">
    		function emoticon(code) {
    			window.document.msgform.msg.value += ' ' + code + ' ';
    		}
    	</script>
    	<?
    }
    ?>

    Je peux ainsi appeler ma fonction simleysInsert($nbMax) qui va m’afficher les simleys selon le nombre total ($nbMax) de simleys que je veux afficher sur la page.

    Seulement, si j’utilise le PHP pour appeler ma fonction afin qu’elle affiche par exemple 50 simleys, cela m’oblige de faire recharger la page,vu que PHP est un langage serveur. Donc, je suis obligée de faire appel à JavaScript. Et là, je bloque……


    J’aimerais mettre un lien ou un bouton qui lorsque l’on clique dessus, cela affiche ou pas le nombre maximum de simleys. Genre si je clic une fois cela m'affiche tous mes simleys, si je reclique sur le bouton, ça m'affiche le minimum. Et ainsi de suite.

    Grosso modo :
    Lorsque l’on arrive sur la page, ma fonction affiche ($nbMax = 10).
    simleysInsert('10');

    Mais si l’utilisateur veut afficher la totalité des simleys, il clique et ma fonction va se modifier en
    simleysInsert('50');

    Si l'utilisateur veut à nouveau le nombre minimum de simleys, il reclique et sa rappel la première fonction :
    simleysInsert('10');

    S'il veut à nouveau afficher la totalité des simleys, ça reprends la fonction
    simleysInsert('50');

    etc.


    Est-ce que quelqu'un peut m'aider à résoudre ce code en JavaScript, car je suis vraiment trop null pour y arriver seule
    • On dit que le ridicule ne tue pas; On dit aussi que ce qui nous tue pas, nous rends plus fort; Alors pourquoi ne pas dire : Le ridicule nous rends plus fort !
    • On reproche aux gens de parler d'eux-même; C'est pourtant le sujet qu'ils traitent le mieux !

  9. #9
    Membre du Club Avatar de RinaBK
    Femme Profil pro
    Développeur Web
    Inscrit en
    Janvier 2021
    Messages
    92
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 48
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Janvier 2021
    Messages : 92
    Points : 64
    Points
    64
    Par défaut
    Fallait que je poste mon message ici pour que je trouve quelque chose
    J'ai trouvé un code qui fonctionne et que j'ai pu modifier pour que cela corresponde à ce que je désir. Mais là où je coince, c'est que je n'arrive pas à changer le texte de mon lien pour qu'il affiche "plus de simleys" et "moins de simleys" lorsque l'on clique dessus.

    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
    16
    17
    18
    19
    20
    <a onclick="document.getElementById("togg1");" id="togg1">Plus de Simleys</a>
     
    <div id="d1"><? simleysInsert('10'); ?></div>
    <div id="d2" style="display: none;"><? simleysInsert('50'); ?></div>
     
    <script type="text/javascript">
     
    	let togg1 = document.getElementById("togg1");
    	let d1 = document.getElementById("d1");
     
    	togg1.addEventListener("click", () => {
    		if (getComputedStyle(d1).display != "block"){
    			d1.style.display = "block";
    			d2.style.display = "none";
    		} else {
    			d1.style.display = "none";
    			d2.style.display = "block";
    		}
    	})
    </script>
    Quelqu'un peut m'aider??
    • On dit que le ridicule ne tue pas; On dit aussi que ce qui nous tue pas, nous rends plus fort; Alors pourquoi ne pas dire : Le ridicule nous rends plus fort !
    • On reproche aux gens de parler d'eux-même; C'est pourtant le sujet qu'ils traitent le mieux !

  10. #10
    Membre du Club Avatar de RinaBK
    Femme Profil pro
    Développeur Web
    Inscrit en
    Janvier 2021
    Messages
    92
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 48
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Janvier 2021
    Messages : 92
    Points : 64
    Points
    64
    Par défaut
    C'est tout bon !!! J'ai trouvé par moi-même
    Je suis passé la journée entière sur ce problème et il a fallut que je vienne poster mon problème ici, pour que je trouve enfin la solution

    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
    16
    17
    18
    19
    20
    21
    22
    <a onclick="document.getElementById("togg1");" id="togg1">Plus de simleys</a>
     
    <div id="d1"><? simleysInsert('10'); ?></div>
    <div id="d2" style="display: none;"><? simleysInsert('50'); ?></div>
     
    <script type="text/javascript">
     
    	let togg1 = document.getElementById("togg1");
    	let d1 = document.getElementById("d1");
     
    	togg1.addEventListener("click", () => {
    		if (getComputedStyle(d1).display != "block"){
    			d1.style.display = "block";
    			d2.style.display = "none";
    			document.getElementById("togg1").innerHTML = "Plus de simleys";
    		} else {
    			d1.style.display = "none";
    			d2.style.display = "block";
    			document.getElementById("togg1").innerHTML = "Moins de simleys";
    		}
    	})
    </script>
    • On dit que le ridicule ne tue pas; On dit aussi que ce qui nous tue pas, nous rends plus fort; Alors pourquoi ne pas dire : Le ridicule nous rends plus fort !
    • On reproche aux gens de parler d'eux-même; C'est pourtant le sujet qu'ils traitent le mieux !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Lien <a href .. qui appelle une fonction php
    Par CristinaB dans le forum Langage
    Réponses: 1
    Dernier message: 30/05/2008, 16h03
  2. Appeler une fonction php toutes les x secondes
    Par alex_is_there dans le forum Langage
    Réponses: 7
    Dernier message: 20/04/2008, 11h32
  3. Réponses: 5
    Dernier message: 07/04/2008, 14h58
  4. Appeler une fonction php dans une requete mysql
    Par yobogs dans le forum Requêtes
    Réponses: 2
    Dernier message: 20/11/2007, 13h43
  5. [JQUERY] Comment appeler une fonction php avec jquery
    Par popogendarme dans le forum jQuery
    Réponses: 1
    Dernier message: 20/03/2007, 16h07

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