Exécuter la fonction PHP avec onclick

92

Je recherche une solution simple pour appeler une fonction PHP uniquement lorsque l'utilisateur clique sur une balise .

PHP:

function removeday() { ... }

HTML:

<a href="" onclick="removeday()" class="deletebtn">Delete</a>

UPDATE: le code html et PHP sont dans le même fichier PHP

Mike
la source
5
HTML exécute des fonctions Javascript, qui s'exécutent sur le client. PHP fonctionne sur le serveur. Vous devez en savoir plus sur AJAX.
Barmar
mais pourquoi AJAX? tout le code est dans le même fichier PHP.
Mike
1
Pourquoi AJAX? Eh bien, pour le savoir, vous pouvez simplement exécuter n'importe quel script php et voir le code de son exécution. Encore une fois, Ajax est le seul moyen de le faire .
Yang
2
La réponse cochée fonctionnera pour ressembler à un bouton si vous utilisez <a role="button" href="?action=removeday" class="debatebtn">Delete</a>là où l'action est interceptée et exécute la fonction removeay () similaire à if($action == 'removeday'){ removeday(); }. Je sais que c'est tard, mais je pense que cela pourrait encore aider quelqu'un avec ce problème. C§
CSS

Réponses:

142

Tout d'abord, sachez que trois langues fonctionnent ensemble:

  • PHP: Il ne fonctionne que par le serveur et répond aux demandes telles que cliquer sur un lien (GET) ou soumettre un formulaire (POST).

  • HTML et JavaScript: il ne fonctionne que dans le navigateur de quelqu'un (à l'exclusion de NodeJS).

Je suppose que votre fichier ressemble à quelque chose comme:

<!DOCTYPE HTML>
<html>
<?php
  function runMyFunction() {
    echo 'I just ran a php function';
  }

  if (isset($_GET['hello'])) {
    runMyFunction();
  }
?>

Hello there!
<a href='index.php?hello=true'>Run PHP Function</a>
</html>

Parce que PHP ne répond qu'aux requêtes (GET, POST, PUT, PATCH et DELETE via $ _REQUEST), c'est ainsi que vous devez exécuter une fonction PHP même si elles sont dans le même fichier. Cela vous donne un niveau de sécurité, "Dois-je exécuter ce script pour cet utilisateur ou non?".

Si vous ne souhaitez pas actualiser la page, vous pouvez faire une requête à PHP sans actualiser via une méthode appelée JavaScript asynchrone et XML (AJAX).

C'est quelque chose que vous pouvez rechercher sur YouTube. Recherchez simplement "jquery ajax"

Je recommande Laravel à tous les nouveaux pour bien commencer: http://laravel.com/

Michael J. Calkins
la source
3
Juste pour mentionner, je suppose que vous êtes assez nouveau en PHP, je voudrais recommander laravel.com comme framework. Personnellement, j'aurais adoré ignorer l'intégralité de «l'apprentissage du php générique» et passer directement à un cadre puissant. C'est aussi celui que j'utilise maintenant.
Michael J.Calkins
5
Mec, merci beaucoup, ta réponse ne m'a pas seulement aidé avec ce doute, mais elle m'a aussi fait comprendre tellement mieux le php! Merci encore!
Feel The Noise
Merci je cherche ça. Comment puis-je implémenter cela avec wordpress
Firefog
1
Merci, je vais commencer à me concentrer sur laravel à cause de votre mention.
Mohamed Abulnasr
1
If you don't want to refresh the page, you can make a request to PHP without refreshing via a method called Asynchronous JavaScript and XML (AJAX).Eh bien, il l'a inclus onclickdans la question, il est donc assez clair que le but est d'effectuer une action sans rafraîchir. ¬_¬
Synetech
38

En javascript, créez une fonction ajax,

function myAjax() {
      $.ajax({
           type: "POST",
           url: 'your_url/ajax.php',
           data:{action:'call_this'},
           success:function(html) {
             alert(html);
           }

      });
 }

Puis appelez depuis html,

<a href="" onclick="myAjax()" class="deletebtn">Delete</a>

Et dans votre ajax.php,

if($_POST['action'] == 'call_this') {
  // call removeday() here
}
devo
la source
Juste pour clarifier: typedevrait être utilisé dans jQuery antérieur à 1.9.0, tandis que methodc'est un alias et devrait être utilisé sur les versions plus récentes.
Alejandro Nava
1
La même solution également fournie dans Vanilla JavaScript aide les débutants beaucoup mieux. Je dis cela en tant qu'utilisateur plus expérimenté de JavaScript qui était autrefois un débutant complet mais maîtrisant PHP.
Ken Ingram
11

Vous devrez le faire via AJAX . Je vous recommande vivement d'utiliser jQuery pour vous faciliter la tâche ....

$("#idOfElement").on('click', function(){

    $.ajax({
       url: 'pathToPhpFile.php',
       dataType: 'json',
       success: function(data){
            //data returned from php
       }
    });
)};

http://api.jquery.com/jQuery.ajax/

AO
la source
1
pourquoi AJAX? ce serait le même fichier PHP (j'ai mis à jour ma question)
Mike
3
À cause de ce que @Barmar a expliqué, cela ne fonctionne pas comme ça. Vous voudrez placer le php dans un fichier séparé, puis référencer ce fichier dans votre requête AJAX.
AO
1
Le paramètre "url:" fait référence à un fichier php externe, comment puis-je référencer la fonction php dans le même fichier?
Joe Doe
2
@JoeDoe vous ne pouvez pas, placez la fonction dans un fichier externe
AO
11

Cela peut être fait et avec un php assez simple si c'est votre bouton

<input type="submit" name="submit>

et ceci est votre code php

if(isset($_POST["submit"])) { php code here }

le code get est appelé lorsque soumettre get est publié, ce qui se produit lorsque l'utilisateur clique sur le bouton.

Vamps
la source
1

Essayez de faire quelque chose comme ceci:

<!--Include jQuery-->
<script type="text/javascript" src="jquery.min.js"></script> 

<script type="text/javascript"> 
function doSomething() { 
    $.get("somepage.php"); 
    return false; 
} 
</script>

<a href="#" onclick="doSomething();">Click Me!</a>
Simpel
la source
1

Solution sans rechargement de page

<?php
  function removeday() { echo 'Day removed'; }

  if (isset($_GET['remove'])) { return removeday(); }
?>


<!DOCTYPE html><html><title>Days</title><body>

  <a href="" onclick="removeday(event)" class="deletebtn">Delete</a>

  <script>
  async function removeday(e) {
    e.preventDefault(); 
    document.body.innerHTML+= '<br>'+ await(await fetch('?remove=1')).text();
  }
  </script>

</body></html>
Kamil Kiełczewski
la source
0

C'est la manière la plus simple possible. Si le formulaire est posté par courrier, utilisez la fonction php. Notez que si vous souhaitez exécuter une fonction de manière asynchrone (sans avoir besoin de recharger la page), vous aurez besoin d'AJAX.

<form method="post">
    <button name="test">test</button>
</form>

    <?php
    if(isset($_POST['test'])){
      //do php stuff  
    }
    ?>
csandreas1
la source
Note that if you want to perform function asynchronously (without the need to reload the page), then you'll need AJAX.Eh bien, onclickcela indiquerait que c'est exactement ce qu'il veut. ¬_¬
Synetech
0

Voici une alternative avec AJAX mais pas de jQuery, juste du JavaScript normal:

Ajoutez ceci à la première / principale page php, à partir de laquelle vous souhaitez appeler l'action, mais changez-la d'une abalise potentielle (lien hypertexte) en un buttonélément, afin qu'elle ne soit pas cliquée par des robots ou des applications malveillantes (ou autre).

<head>
<script>
  // function invoking ajax with pure javascript, no jquery required.
  function myFunction(value_myfunction) {
    var xmlhttp = new XMLHttpRequest();
    xmlhttp.onreadystatechange = function() {
      if (this.readyState == 4 && this.status == 200) {
        document.getElementById("results").innerHTML += this.responseText; 
        // note '+=', adds result to the existing paragraph, remove the '+' to replace.
      }
    };
    xmlhttp.open("GET", "ajax-php-page.php?sendValue=" + value_myfunction, true);
    xmlhttp.send();
  }

</script>
</head>

<body>

  <?php $sendingValue = "thevalue"; // value to send to ajax php page. ?> 

  <!-- using button instead of hyperlink (a) -->
  <button type="button" onclick="value_myfunction('<?php echo $sendingValue; ?>');">Click to send value</button>

  <h4>Responses from ajax-php-page.php:</h4>
  <p id="results"></p> <!-- the ajax javascript enters returned GET values here -->

</body>

Quand le button on clique sur, onclickutilise la fonction javascript de la tête pour envoyer $sendingValuevia ajax vers une autre page php, comme beaucoup d'exemples avant celle-ci. L'autre page, ajax-php-page.phpvérifie la valeur GET et retourne avec print_r:

<?php

  $incoming = $_GET['sendValue'];

  if( isset( $incoming ) ) {
    print_r("ajax-php-page.php recieved this: " . "$incoming" . "<br>");
  } else {
    print_r("The request didn´t pass correctly through the GET...");
  }

?>

La réponse de print_rest ensuite renvoyée et affichée avec

document.getElementById("results").innerHTML += this.responseText;

Le +=remplit et ajoute aux éléments html existants, supprimant les +mises à jour et remplace le contenu existant de l' pélément html"results" .

andyNilson
la source
-3

Essayez ceci, cela fonctionnera très bien.

<script>
function echoHello(){
 alert("<?PHP hello(); ?>");
 }
</script>

<?PHP
FUNCTION hello(){
 echo "Call php function on onclick event.";
 }

?>

<button onclick="echoHello()">Say Hello</button>
Vidya
la source
2
Cela ne fonctionne pas (même si vous le nettoyez), mais en plus, cela ne peut pas fonctionner. Le code PHP est prétraité lors du chargement; il n'est pas exécuté au moment de l'exécution.
Synetech
Soit vous n'avez pas lu la question, soit vous n'avez pas testé votre code car cela ne fonctionnerait pas.
Mr PizzaGuy le