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:
1 2
|
function resultatsParcours($typeS, $parcours, $top=0) |
Code:
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.
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:
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:
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/