Comment puis-je appeler les fonctions PHP par JavaScript?

j'essaie d'appeler une fonction PHP à partir d'un fichier PHP externe dans un script JavaScript. Mon code est différent et grand, donc j'écris un exemple de code ici.

Voici mon code PHP:

<?php
function add($a,$b){
  $c=$a+$b;
  return $c;
}
function mult($a,$b){
  $c=$a*$b;
  return $c;
}

function divide($a,$b){
  $c=$a/$b;
  return $c;
}
?>

Voici mon code JavaScript:

<script>
  var phpadd= add(1,2); //call the php add function
  var phpmult= mult(1,2); //call the php mult function
  var phpdivide= divide(1,2); //call the php divide function
</script>

c'est Donc ce que je veux faire.

origine le fichier PHP n'inclut pas ces fonctions mathématiques mais l'idée est la même.

Si il n'est pas une bonne solution, vous pouvez merci propose une alternative, mais elle devrait appeler des valeurs de PHP externes.

35
demandé sur Edwin Pratt 2013-04-02 10:41:42

9 réponses

Oui, vous pouvez faire une requête ajax vers le serveur avec vos données dans les paramètres de la demande, à l'instar de ce (très simple):

Notez que le code suivant utilise jQuery

jQuery.ajax({
    type: "POST",
    url: 'your_functions_address.php',
    dataType: 'json',
    data: {functionname: 'add', arguments: [1, 2]},

    success: function (obj, textstatus) {
                  if( !('error' in obj) ) {
                      yourVariable = obj.result;
                  }
                  else {
                      console.log(obj.error);
                  }
            }
});

et your_functions_address.php comme ceci:

    <?php
    header('Content-Type: application/json');

    $aResult = array();

    if( !isset($_POST['functionname']) ) { $aResult['error'] = 'No function name!'; }

    if( !isset($_POST['arguments']) ) { $aResult['error'] = 'No function arguments!'; }

    if( !isset($aResult['error']) ) {

        switch($_POST['functionname']) {
            case 'add':
               if( !is_array($_POST['arguments']) || (count($_POST['arguments']) < 2) ) {
                   $aResult['error'] = 'Error in arguments!';
               }
               else {
                   $aResult['result'] = add(floatval($_POST['arguments'][0]), floatval($_POST['arguments'][1]));
               }
               break;

            default:
               $aResult['error'] = 'Not found function '.$_POST['functionname'].'!';
               break;
        }

    }

    echo json_encode($aResult);

?>
59
répondu Victor 2015-02-19 22:10:08

Essayez Ceci

<script>
  var phpadd= <?php echo add(1,2);?> //call the php add function
  var phpmult= <?php echo mult(1,2);?> //call the php mult function
  var phpdivide= <?php echo divide(1,2);?> //call the php divide function
</script>
24
répondu Sandeep Kapil 2013-04-02 06:53:55

utiliser le document.écrire par exemple,

<script>
  document.write(' <?php add(1,2); ?> ');
  document.write(' <?php milt(1,2); ?> ');
  document.write(' <?php divide(1,2); ?> ');
</script>
8
répondu Vidya 2015-07-06 21:24:17

vous devez créer une API : Vos fonctions js exécutent des requêtes AJAX sur votre service web

  var mult = function(arg1, arg2)
    $.ajax({
      url: "webservice.php?action=mult&arg1="+arg1+"&arg2="+arg2
    }).done(function(data) {
      console.log(data);
    });
  }

du côté de php, vous devrez vérifier le paramètre d'action afin d'exécuter la fonction propre (essentiellement une instruction switch sur la variable $_GET["action"])

6
répondu Romain Durand 2013-04-02 10:49:16

index.php

<body>
...
<input id="Div7" name="Txt_Nombre" maxlenght="100px" placeholder="Nombre" />
<input id="Div8" name="Txt_Correo" maxlenght="100px" placeholder="Correo" />
<textarea id="Div9" name="Txt_Pregunta" placeholder="Pregunta" /></textarea>

<script type="text/javascript" language="javascript">

$(document).ready(function() {
    $(".Txt_Enviar").click(function() { EnviarCorreo(); });
});

function EnviarCorreo()
{
    jQuery.ajax({
        type: "POST",
        url: 'servicios.php',
        data: {functionname: 'enviaCorreo', arguments: [$(".Txt_Nombre").val(), $(".Txt_Correo").val(), $(".Txt_Pregunta").val()]}, 
         success:function(data) {
        alert(data); 
         }
    });
}
</script>

servicios.php

<?php   
    include ("correo.php");

    $nombre = $_POST["Txt_Nombre"];
    $correo = $_POST["Txt_Corro"];
    $pregunta = $_POST["Txt_Pregunta"];

    switch($_POST["functionname"]){ 

        case 'enviaCorreo': 
            EnviaCorreoDesdeWeb($nombre, $correo, $pregunta);
            break;      
    }   
?>

correo.php

<?php
    function EnviaCorreoDesdeWeb($nombre, $correo, $pregunta)
    { 
       ...
    }
?>
3
répondu Hernaldo Gonzalez 2013-08-05 02:11:37

Essayez de regarder les CASSIS. L'idée est de mélanger PHP avec JS pour que les deux puissent fonctionner du côté client et du côté serveur.

1
répondu radmen 2013-04-02 08:14:38

j'ai écrit un script pour moi son travail .. J'espère que cela peut être utile pour vous

<?php
if(@$_POST['add'])
{
function add()
{
   $a="You clicked on add fun";
   echo $a;
}
add();
}
else if (@$_POST['sub']) 
{
function sub()
{
   $a="You clicked on sub funn";
echo $a;  
}
sub();  
}
?>
<form action="<?php echo $_SERVER['PHP_SELF'];?>" method="POST">

<input type="submit" name="add" Value="Call Add fun">
<input type="submit" name="sub" Value="Call Sub funn">
<?php echo @$a; ?>

</form>
1
répondu Naresh 2013-10-18 13:03:17

Si vous voulez vraiment envoyer des données à un script php par exemple, vous pouvez faire ceci:

php:

<?php
$a = $_REQUEST['a'];
$b = $_REQUEST['b']; //totally sanitized

echo $a + $b;
?>

Js (à l'aide de jquery):

$.post("/path/to/above.php", {a: something, b: something}, function(data){                                          
  $('#somediv').html(data);
});
1
répondu Lemon Drop 2014-05-04 20:12:40

Cela fonctionne parfaitement pour moi:

pour appeler une fonction PHP (avec des paramètres aussi) vous pouvez, comme beaucoup de gens l'ont dit, envoyer un paramètre ouvrant le fichier PHP et de là vérifier la valeur du paramètre pour appeler la fonction. Mais vous pouvez aussi faire que beaucoup de gens disent que c'est impossible: appeler directement la bonne fonction PHP, sans ajouter de code au fichier PHP.

j'ai trouvé un moyen:

ceci pour JavaScript:

function callPHP(expression, objs, afterHandler) {
        expression = expression.trim();
        var si = expression.indexOf("(");
        if (si == -1)
            expression += "()";
        else if (Object.keys(objs).length > 0) {
            var sfrom = expression.substring(si + 1);
            var se = sfrom.indexOf(")");
            var result = sfrom.substring(0, se).trim();
            if (result.length > 0) {
                var params = result.split(",");
                var theend = expression.substring(expression.length - sfrom.length + se);
                expression = expression.substring(0, si + 1);
                for (var i = 0; i < params.length; i++) {
                    var param = params[i].trim();
                    if (param in objs) {
                        var value = objs[param];
                        if (typeof value == "string")
                            value = "'" + value + "'";
                        if (typeof value != "undefined")
                            expression += value + ",";
                    }
                }
                expression = expression.substring(0, expression.length - 1) + theend;
            }
        }
        var doc = document.location;
        var phpFile = "URL of your PHP file";
        var php =
            "$docl = str_replace('/', '\\', '" + doc + "'); $absUrl = str_replace($docl, $_SERVER['DOCUMENT_ROOT'], str_replace('/', '\\', '" + phpFile + "'));" +
            "$fileName = basename($absUrl);$folder = substr($absUrl, 0, strlen($absUrl) - strlen($fileName));" +
            "set_include_path($folder);include $fileName;" + expression + ";";
        var url = doc + "/phpCompiler.php" + "?code=" + encodeURIComponent(php);
        $.ajax({
            type: 'GET',
            url: url,
            complete: function(resp){
                var response = resp.responseText;
                afterHandler(response);
            }
        });
    }



ceci pour un fichier PHP qui n'est pas votre fichier PHP, mais un autre, dont le chemin est écrit enurl variable de la fonction JScallPHP, et il est nécessaire d'évaluer le code PHP. Ce fichier est appelé ' phpCompiler.php' et c'est dans le répertoire racine de votre site:

<?php
$code = urldecode($_REQUEST['code']);
$lines = explode(";", $code);
foreach($lines as $line)
    eval(trim($line, " ") . ";");
?>



ainsi, votre code PHP reste égal sauf retour valeurs, qui feront écho:

<?php
function add($a,$b){
  $c=$a+$b;
  echo $c;
}
function mult($a,$b){
  $c=$a*$b;
  echo $c;
}

function divide($a,$b){
  $c=$a/$b;
  echo $c;
}
?>



je vous suggère de rappeler que jQuery est requise:

Télécharger à partir de Google CA:

<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.1/jquery.min.js"></script>

ou à partir de Microsoft CAN: "je préfère Google! :)"

<script src="https://ajax.aspnetcdn.com/ajax/jQuery/jquery-3.1.1.min.js"></script>

mieux est de télécharger le fichier à partir de L'un des deux CDNs et de le mettre en fichier local, de sorte que le chargement de démarrage de votre site web plus vite!

Le choix est à vous!



Maintenant vous avez fini! Je viens de vous dire comment l'utilisercallPHPfonction. C'est le JavaScript pour appeler PHP:

//Names of parameters are custom, they haven't to be equals of these of the PHP file.
//These fake names are required to assign value to the parameters in PHP
//using an hash table.
callPHP("add(num1, num2)", {
            'num1' : 1,
            'num2' : 2
        },
            function(output) {
                alert(output); //This to display the output of the PHP file.
        });
1
répondu 2017-01-06 12:49:55