web-dev-qa-db-fra.com

Comment appeler une fonction PHP au clic d'un bouton

J'ai créé une page appelée functioncalling.php qui contient deux boutons, Submit et Insert. En tant que débutant en PHP, je souhaite tester quelle fonction est exécutée lorsqu'un clic est effectué sur un bouton. Je veux que la sortie vienne 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 ne reçois aucune sortie après avoir cliqué sur l'un des boutons.

Où est-ce que je me trompe?

132
Razor

Les clics de bouton 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
    }
?>
60
Moeed Farooqui

Oui, vous avez besoin d'Ajax ici. Veuillez vous reporter 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;
    }
?>
73
Roopendra

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     
    }
?>
29
DavidS

Vous ne pouvez pas appeler PHP comme par exemple en cliquant sur un bouton HTML. Parce que HTML est du côté client alors que PHP exécute le côté serveur.

Soit vous devez utiliser un peu d'Ajax ou 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 vos données de formulaire, puis rechercher le bouton approprié sur lequel vous cliquez.

15
Jason W

Pour afficher le 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 en tant que fichier externe, vous devez l'inclure d'une manière ou d'une autre dans votre document HTML.

12
user5253060

Essaye ça:

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

Vous pouvez écrire comme ceci 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
        }
    }
?>
7
Vipul Tank

L'attribut onclick du code HTML appelle des fonctions JavaScript, et non des fonctions PHP.

4
linesarefuzzy

Utilisez un appel récursif où l'action de formulaire s'appelle elle-même. Ajoutez ensuite le code PHP dans le même formulaire pour le récupérer. Dans foo.php votre formulaire appellera foo.php sur post

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

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

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

J'étais coincé là-dedans et je l'ai résolu avec un champ caché:

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

Dans value, vous pouvez ajouter ce que vous voulez ajouter.

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

3
Sanya Zahid

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";
    }
?>
2
Sagar Mali