Comment appeler une fonction PHP en un clic


151

J'ai créé une page appelée functioncalling.php qui contient deux boutons, Soumettre et Insérer . En tant que débutant en PHP, je souhaite tester quelle fonction est exécutée lorsqu'un bouton est cliqué. Je veux que la sortie soit sur la même page. J'ai donc créé deux fonctions, une pour chaque bouton. Le code source de functioncalling.php est le suivant:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html>
    <body>
        <form action="functioncalling.php">
            <input type="text" name="txt" />
            <input type="submit" name="insert" value="insert" onclick="insert()" />
            <input type="submit" name="select" value="select" onclick="select()" />
        </form>

        <?php
            function select(){
               echo "The select function is called.";
            }
            function insert(){
               echo "The insert function is called.";
            }
        ?>

Le problème ici est que je n'obtiens aucune sortie après avoir cliqué sur l'un des boutons.

Où est-ce que je me trompe exactement?


10
PHP s'exécute sur le serveur. Vos gestionnaires de clics s'exécutent sur le client. Vous ne pouvez pas exécuter des fonctions PHP en cliquant sur un bouton comme celui-ci. Vous pouvez cependant le faire en Javascript.

1
Les questions demandant du code doivent démontrer une compréhension minimale du problème à résoudre. Incluez les solutions tentées, pourquoi elles n'ont pas fonctionné et les résultats attendus.

4
Merci d'avoir répondu. Pourriez-vous s'il vous plaît me dire comment j'appelle exactement ces fonctions PHP à partir de JavaScript?
Razor

Réponses:


93

Oui, vous avez besoin d'Ajax ici. Veuillez vous référer au code ci-dessous pour plus de détails.

 

Changez votre balisage comme ceci

<input type="submit" class="button" name="insert" value="insert" />
<input type="submit" class="button" name="select" value="select" />

 

jQuery:

$(document).ready(function(){
    $('.button').click(function(){
        var clickBtnValue = $(this).val();
        var ajaxurl = 'ajax.php',
        data =  {'action': clickBtnValue};
        $.post(ajaxurl, data, function (response) {
            // Response div goes here.
            alert("action performed successfully");
        });
    });
});

Dans ajax.php

<?php
    if (isset($_POST['action'])) {
        switch ($_POST['action']) {
            case 'insert':
                insert();
                break;
            case 'select':
                select();
                break;
        }
    }

    function select() {
        echo "The select function is called.";
        exit;
    }

    function insert() {
        echo "The insert function is called.";
        exit;
    }
?>

Ce code ne fonctionne pas pour moi: Uncaught ReferenceError: $ is not defined
Benjamin

Avez-vous inclus la bibliothèque JQuery avant d'utiliser ce code.
Roopendra

9
Je l'ai fait mais je viens de réaliser que //code.jquery.com/...etc ne se charge pas sur localhost, https: // fait! le code fonctionne bien désolé mon erreur.
Benjamin

1
Belle! exactement ce que je cherchais.

1
J'adore le gestionnaire de classe de bouton. bravo pour le code générique qui fonctionne dans de nombreux scénarios.
Pablo Contreras le

64

Les clics sur les boutons sont côté client alors que PHP est exécuté côté serveur , mais vous pouvez y parvenir en utilisant Ajax :

$('.button').click(function() {
  $.ajax({
    type: "POST",
    url: "some.php",
    data: { name: "John" }
  }).done(function( msg ) {
    alert( "Data Saved: " + msg );
  });
});

Dans votre fichier PHP:

<?php
    function abc($name){
        // Your code here
    }
?>

5
Merci d'avoir donné la solution. Dans l'extrait de code AJAX que vous m'avez fourni, comment appeler les fonctions PHP dans la propriété .done?
Razor

une fois que vous utilisez ajax pour appeler le fichier php, y a-t-il un moyen d'appeler la fonction php spécifique? ou vais-je devoir mettre chacun dans un fichier différent?
Lordbug

1
utilisez également JS preventdefault pour empêcher la soumission du formulaire afin que la page ne se recharge pas. w3schools.com/jsref/…
csandreas1

En tant que débutant, je veux dissiper mon doute. Faut-il empêcher ces pages de se développer où les codes HTML et PHP sont fusionnés dans une seule page avec HTML servant à l'interaction avec le client comme les formulaires et PHP servant de réponse à ces formulaires HTML comme l'impression de résultats en fonction du fait qu'un bouton dans un le formulaire est cliqué?
KPMG

Comment cela fonctionne-t-il? J'ai mis une instruction echo dans le corps de la fonction abc et j'ai mis des points d'arrêt à la fois sur la ligne de déclaration de fonction et sur l'appel echo dans la fonction. Lorsque je clique sur le bouton, le premier point d'arrêt est touché (c'est-à-dire que la fonction est déclarée) mais celui du corps ne frappe jamais, ce que je suppose que la fonction n'est jamais appelée.
Shaggydog

41

Vous devez faire en sorte que le bouton appelle la même page et dans une section PHP, vérifiez si le bouton a été enfoncé:

HTML:

<form action="theSamePage.php" method="post">
    <input type="submit" name="someAction" value="GO" />
</form>

PHP:

<?php
    if($_SERVER['REQUEST_METHOD'] == "POST" and isset($_POST['someAction']))
    {
        func();
    }
    function func()
    {
        // do stuff     
    }
?>

17

Vous ne pouvez pas appeler des fonctions PHP comme cliquer sur un bouton depuis HTML. Parce que HTML est côté client tandis que PHP s'exécute côté serveur.

Soit vous devez utiliser un peu d'Ajax, soit le faire comme dans l'extrait de code ci-dessous.

<?php
    if ($_GET) {
        if (isset($_GET['insert'])) {
            insert();
        } elseif (isset($_GET['select'])) {
            select();
        }
    }

    function select()
    {
       echo "The select function is called.";
    }

    function insert()
    {
       echo "The insert function is called.";
    }
?>

Vous devez publier les données de votre formulaire, puis vérifier le bouton approprié sur lequel vous avez cliqué.


Et si je veux donner un paramètre à la fonction?
Nick Alexander

Vous pouvez passer des arguments à des fonctions comme d'autres fonctions en php
Jason W

14

Pour afficher $ message dans votre entrée:

<?php
    if(isset($_POST['insert'])){
        $message= "The insert function is called.";
    }
    if(isset($_POST['select'])){
        $message="The select function is called.";
    }
?>


<form  method="post">
    <input type="text" name="txt" value="<?php if(isset($message)){ echo $message;}?>" >
    <input type="submit" name="insert" value="insert">
    <input type="submit" name="select" value="select" >
</form>

Pour utiliser functioncalling.php comme fichier externe, vous devez l'inclure d'une manière ou d'une autre dans votre document HTML.


8

Essaye ça:

if($_POST['select'] and $_SERVER['REQUEST_METHOD'] == "POST"){
    select();
}
if($_POST['insert'] and $_SERVER['REQUEST_METHOD'] == "POST"){
    insert();
}

1
c'est la meilleure réponse plutôt que d'utiliser des cadres stupides
vincent thorpe

7

Vous pouvez écrire comme ça en JavaScript ou jQuery Ajax et appeler le fichier

$('#btn').click(function(){
  $.ajax({
    url:'test.php?call=true',
    type:'GET',
    success:function(data){
    body.append(data);
    }
  });
})
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.0.1/jquery.min.js"></script>
<form  method='get' >

  <input type="button" id="btn" value="click">
</form>

<?php
    if(isset($_GET['call'])){

        function anyfunction(){
            echo "added";

            // Your funtion code
        }
    }
?>


5

L' onclickattribut en HTML appelle des fonctions JavaScript, pas des fonctions PHP.


4

J'étais coincé dans cela et je l'ai résolu avec un champ caché:

<form method="post" action="test.php">
    <input type="hidden" name="ID" value"">
</form>

Dans valuevous pouvez ajouter ce que vous voulez ajouter.

Dans test.php, vous pouvez récupérer la valeur via $_Post[ID].


Ne devrait pas IDêtre cité $_Post[ID]? PHP supporte-t-il les mots bruts, comme en Perl?
Peter Mortensen du

3

Utilisez un appel récursif où l'action de formulaire s'appelle elle-même. Ensuite, ajoutez du code PHP sous la même forme pour l'attraper. Dans foo.phpvotre formulaire fera appel foo.phpàpost

<html>
    <body>
        <form action="foo.php" method="post">

Une fois que le formulaire a été soumis, il s'appellera ( foo.php) et vous pouvez l'attraper via la variable prédéfinie PHP $_SERVERcomme indiqué dans le code ci-dessous

<?php
    if ($_SERVER['REQUEST_METHOD'] == 'POST') {
        echo "caught post";
    }
?>
        </form>
    </body>
</html>

2

Voici un exemple que vous pourriez utiliser:

<html>
    <body>
        <form action="btnclick.php" method="get">
            <input type="submit" name="on" value="on">
            <input type="submit" name="off" value="off">
        </form>
    </body>
</html>
<?php
    if(isset($_GET['on'])) {
        onFunc();
    }
    if(isset($_GET['off'])) {
        offFunc();
    }

    function onFunc(){
        echo "Button on Clicked";
    }
    function offFunc(){
        echo "Button off clicked";
    }
?>

0

Vous pouvez simplement le faire. En php, vous pouvez déterminer le clic sur le bouton en utilisant

if(isset($_Post['button_tag_name']){
echo "Button Clicked";
}

Par conséquent, vous devez modifier votre code comme suit:


<?php

if(isset($_Post['select']){
 echo "select button clicked and select method should be executed"
}
if(isset($_Post['insert']){
 echo "insert button clicked and insert method should be executed"
}

        ?>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html>
    <body>
        <form action="functioncalling.php">
            <input type="text" name="txt" />
            <input type="submit" name="insert" value="insert" onclick="insert()" />
            <input type="submit" name="select" value="select" onclick="select()" />
        </form>

<script>
//This will be processed on the client side
function insert(){
  window.alert("You click insert button");
}

function select(){
  window.alert("You click insert button");
}
</script>
</body>
</html>


En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.