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

jQuery Discussion :

Appeler une fonction php avec arguments par un script jquery/ajax


Sujet :

jQuery

  1. #1
    Membre éclairé
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Juin 2014
    Messages
    744
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Juin 2014
    Messages : 744
    Par défaut Appeler une fonction php avec arguments par un script jquery/ajax
    Bonjour.
    Je ne me souviens plus comment faire mon script jquery pour qu'il provoque l'éxécution d'une fonction php qui attends 3 paramètres et renvoie ce résultat dans ma page web.

    La signature de ma fonction php :
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    function resultatsParcours($typeS, $parcours, $top=0)

    Code javascipt : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    		$.ajax({
    		type : "POST",
    		url: './BDD/reqAnalyseresultats.php',
    		dataType: "html",
    		data : {
    			 fonction:'resultatsParcours',
                 params: {param1: typeP, param2: idParcours, param3: topp},
    				},
    		success: function (data) {
     
    			$('#liste').html( data);
    		}
    		});
    Je rentre bien dans mon fichier php mais pas moyen de rentrer dans la fonction. je ne sait plus comment faire pour passer la fonction avec ses paramètres.
    Merci de votre aide.

  2. #2
    Membre extrêmement actif Avatar de psychadelic
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    2 532
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 2 532
    Par défaut
    et un simple
    Code JavaScript : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    var
    Call_Args = {
      fonction:'resultatsParcours',
      params: {
        param1: typeP, 
        param2: idParcours, 
        param3: topp
      },
    };
     
    $('#liste').load( "BDD/reqAnalyseresultats.php", Call_Args );

    tout simplement ??

  3. #3
    Membre éclairé
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Juin 2014
    Messages
    744
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Juin 2014
    Messages : 744
    Par défaut
    Oui merci.
    En fait j'ai une liste déroulante avec un bouton valider.
    au click, je veux demander à la BDD de me renvoyer des infos sur la page que je consulte.
    Le jquery sert a récupérer l’événement onclick, appeler la fonction php avec ses paramètres, récupérer ce que le SELECT renvoi et l'afficher dans un tableau sur ma page courante.

  4. #4
    Membre extrêmement actif Avatar de psychadelic
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    2 532
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 2 532
    Par défaut
    Et alors, c'est bon ?
    pas de "résolu" sur le message ?

  5. #5
    Membre éclairé
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Juin 2014
    Messages
    744
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Juin 2014
    Messages : 744
    Par défaut
    Non.
    Je n'ai pas compris.
    J'ai essayé ce que tu me propose et je ne rentre pas dans ma fonction php.

  6. #6
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 659
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 75
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 659
    Billets dans le blog
    1
    Par défaut
    Oui mais là cela n'a plus rien à voir avec javascript ...
    Comment récupères tu les paramètres coté php ? Et surtout comment lances tu la fonction coté php ... ?
    Ma page Developpez - Mon Blog Developpez
    Président du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts)
    Deux règles du succès: 1) Ne communiquez jamais à quelqu'un tout votre savoir...
    Votre post est résolu ? Alors n'oubliez pas le Tag

    Venez sur le Chat de Développez !

  7. #7
    Membre éclairé
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Juin 2014
    Messages
    744
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Juin 2014
    Messages : 744
    Par défaut
    Bonjour.
    Comme je l'ai dit ma fonction a besoin de 3 paramètres, et renvoi un tableau HTML avec des données issues d'une requête MySQL.
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    function resultatsParcours($typeS, $parcours, $top=0)

  8. #8
    Membre extrêmement actif Avatar de psychadelic
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    2 532
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 2 532
    Par défaut
    Nan,

    D'apres ce que l'on peut voir de ton appel Ajax, il va chercher la page reqAnalyseresultats.php pracé dans le répertoire BDD/

    et qui en toute logique devrait commencer par

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    <?php
    	$fonction	= (isSet($_POST['fonction']))		? $_POST['fonction']		: '';
     
    ...
    d'ailleurs au passage, je ne sais pas trop si le php peut vraiment récupérer les sous éléments en jso que tu lui envoi.. ?

  9. #9
    Membre Expert

    Homme Profil pro
    Ingénieur Hospitalier
    Inscrit en
    Juillet 2004
    Messages
    993
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur Hospitalier
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2004
    Messages : 993
    Billets dans le blog
    1
    Par défaut Appel d'une function PHP à partir d'un appel Ajax
    Salut tu t'engage vers une voie très dangereuse d'après ce que tu souhaite faire "appeler une function PHP a partir d'une requête Ajax soit le navigateur. Sauf que tu es parti pour jouer avec le feu et ouvrir une faille plus grosse que tes ambitions risque d'injection si j'ai bien compris tu souhaite utiliser la fonction PHP call_user_func récupérer le paramètre qui porte le nom de ta function, le risque ici c'est les possibilités de détourner vers des function natives plus dangereuse, si tu ne vérifie pas dans un tableau les functions autorisés seulement.

    exemple vite fait a adapter et a sécuriser pour les autres données :

    page que doit appeler le script ajax
    function.php
    Code PHP : 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
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
     
    <?php
    /**
     * Created by PhpStorm.
     * User: headmax
     * Date: 15/02/18
     * Time: 02:45
     */
     
    //Securité implémente en début de page si le token est valide ici sinon exit(json_encode($data['callback']=false));
     
    $p = Array();
    //utilisation de filter_var et du pattern REGEXP sur la variable du nom de la function constituée de la chaine "function_" et une lettre comprise entre a et z ... a toi de filtrer la tienne selon tes critères...
    $p['function'] = (isset($_POST['function'])) ? filter_var($_POST['function'], FILTER_VALIDATE_REGEXP,
        array("options"=>array("regexp"=>"/^function_[a-z]$/"))) : 'function_a';
     
    //ICI test functions autorisés a être appelé
    $functions_authorized = array("function_a", "function_b", "function_c");
     
    /**
     * @param $p
     * @return string
     */
    function function_a($p){
        return "PHP return de la function " . $p['function'];
    }
     
    /**
     * @param $p
     * @return string
     */
    function function_b($p){
        return "PHP return de la function " . $p['function'];
    }
     
    /**
     * @param $p
     * @return string
     */
    function function_c($p){
        return "PHP return de la function " . $p['function'];
    }
     
    /**
     * @param $p
     * @param $functions_authorized
     * @return mixed
     */
    function routing($p, $functions_authorized){
     
        if(in_array($p['function'], $functions_authorized)){
            $data['callback'] = call_user_func($p['function'], $p); // function à risque.
            $data['params'] = json_encode($_POST); //ici tu devra filtrer les données en amonts et les injecter dans le tableau $p et passer $p au lieu de $_POST
        }else{
            $data['bad_function'] = false;
            $data['params'] = $p;
     
        }
        return ($data);
    }
     
    header('Content-Type: application/json');
    if(isset($p['function']))
    echo json_encode(routing($p, $functions_authorized));

    Dans la page test je me sert d'un select pour appeler les function test nommées : function_a, function_b, function_c

    page test.php
    Code PHP : 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
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
     
    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
        <script src="https://dev.lacourseauxpoints.fr/core/assets/vendor/jquery/jquery.min.js?v=3.2.1"></script>
    </head>
    <body>
    <div id="liste"></div>
    <div id="params">dd</div>
    <form name="test_form" id="test_form">
        <select id="callfunctions" name="callfunctions">
            <option value="function_a">Appel de la function A</option>
            <option value="function_b">Appel de la function B</option>
            <option value="function_c">Appel de la function C</option>
        </select>
        <input type="submit" value="envoyer"/>
    </form>
    <script>
        $('#test_form').submit(function(event){
            console.log($("#callfunctions").val());
            event.stopImmediatePropagation();
            event.preventDefault();
            $.ajax({
                type : "POST",
                url: 'function.php',
                dataType: "json",
                data : {
                    function: $("#callfunctions").val(),
                    params: {param1: "monparam1", param2: 'param2', param3: '3param'}
                },
                success: function (data) {
                    console.log("success");
                    $('#liste').html( data.callback);
                    console.log(data);
                    $('#params').html( data.params);
                }
            });
            return false;
        });
     
    </script>
    </body>
    </html>
    Il faut sécuriser le formulaire et ajouter un token pour plus de sécurité http://randriano.developpez.com/php/...rrespondantes/

  10. #10
    Membre éclairé
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Juin 2014
    Messages
    744
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Juin 2014
    Messages : 744
    Par défaut
    Bonjour.
    Je note vos remarques.
    Ce que je voulais faire n'est probablement pas possible.
    Même si ça l'était ce serait dangereux.
    Je vais faire de manière un peu plus classique, à appelant un fichier php avec des arguments.
    Merci à vous.

  11. #11
    Membre Expert

    Homme Profil pro
    Ingénieur Hospitalier
    Inscrit en
    Juillet 2004
    Messages
    993
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur Hospitalier
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2004
    Messages : 993
    Billets dans le blog
    1
    Par défaut
    La possibilité d'appelé des function nommées à l’extérieur comme des frameworks Zend ou Symfony utilise cette fonction de l’extérieur mais avec un arsenal pour récupérer un GET pour les actions des functions. Dans ton cas on part pas d'une variable placé dans l'URL mais appelé en POST donc facilement bypass si tu ne vérifie pas les dites functions autorisées et que ton formulaire provient de ton domaine (token oblige).

    Le procédé marche bien pour te montré un exemple, mais c'est pas la manière de faire en PHP d'ailleurs rare tu trouvera se genre de procédé en AJAX, a toi de voir sur l'utilisation ou pas de ce procédé.

  12. #12
    Membre éclairé
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Juin 2014
    Messages
    744
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Juin 2014
    Messages : 744
    Par défaut
    Bonjour.
    J'ai fait avec un fichier php intermédiaire.
    Jquery/ajax envoi 3 variables au fichier intermédiaire qui appelle la fonction (avec ses 3 arguments) qui se trouve dans un autre fichier php.
    Jquery/ajax affiche le résultat obtenu.
    Merci de votre aide.

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

Discussions similaires

  1. [MySQL] Appeler une fonction php avec un bouton
    Par Megchan dans le forum PHP & Base de données
    Réponses: 9
    Dernier message: 18/12/2014, 14h11
  2. Réponses: 4
    Dernier message: 24/08/2007, 15h56
  3. [JQUERY] Comment appeler une fonction php avec jquery
    Par popogendarme dans le forum jQuery
    Réponses: 1
    Dernier message: 20/03/2007, 16h07
  4. Réponses: 13
    Dernier message: 01/10/2006, 15h52
  5. [PHP-JS] une fonction php avec parametres javascript
    Par kagura dans le forum Langage
    Réponses: 1
    Dernier message: 02/03/2006, 18h10

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