Esegui la funzione PHP con onclick


92

Sto cercando una soluzione semplice per chiamare una funzione PHP solo quando si fa clic su un tag .

PHP:

function removeday() { ... }

HTML:

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

AGGIORNAMENTO: il codice html e PHP sono nello stesso file PHP


5
HTML esegue funzioni Javascript, che vengono eseguite sul client. PHP viene eseguito sul server. Devi conoscere AJAX.
Barmar

ma perché AJAX? l'intero codice è nello stesso file PHP.
Mike

1
Perché AJAX? Bene, per scoprirlo, puoi semplicemente eseguire qualsiasi script php e vedere il codice della sua esecuzione. Di nuovo, l' Ajax è l'unico modo per farlo .
Yang

2
La risposta spuntata sembrerà un pulsante se usi il punto in <a role="button" href="?action=removeday" class="debatebtn">Delete</a>cui viene rilevata l'azione ed esegui la funzione removeday () simile a if($action == 'removeday'){ removeday(); }. So che è tardi, ma immagino che potrebbe ancora aiutare qualcuno con questo problema. C§
CSS

Risposte:


142

Innanzitutto, comprendi che hai tre lingue che lavorano insieme:

  • PHP: viene eseguito solo dal server e risponde a richieste come fare clic su un collegamento (GET) o inviare un modulo (POST).

  • HTML e JavaScript: funziona solo nel browser di qualcuno (escluso NodeJS).

Presumo che il tuo file abbia un aspetto simile a:

<!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>

Poiché PHP risponde solo alle richieste (GET, POST, PUT, PATCH e DELETE tramite $ _REQUEST), è così che devi eseguire una funzione PHP anche se si trovano nello stesso file. Questo ti dà un livello di sicurezza, "Devo eseguire questo script per questo utente o no?".

Se non desideri aggiornare la pagina, puoi fare una richiesta a PHP senza aggiornare tramite un metodo chiamato Asynchronous JavaScript and XML (AJAX).

Questo è qualcosa che puoi cercare su YouTube però. Cerca "jquery ajax"

Consiglio Laravel a chiunque sia nuovo per iniziare bene: http://laravel.com/


3
Solo per menzionare, presumo che tu sia abbastanza nuovo in PHP, vorrei raccomandare laravel.com come framework. Personalmente mi sarebbe piaciuto saltare l'intero "apprendimento di php generico" e passare direttamente a un framework potente. Questo è anche quello che uso adesso.
Michael J. Calkins,

5
Amico, grazie mille, la tua risposta non solo mi ha aiutato con questo dubbio, ma mi ha anche fatto capire molto meglio php! Grazie ancora!
Feel The Noise

Grazie, lo sto cercando. Come posso implementarlo con wordpress
Firefog

1
Grazie, inizierò a concentrarmi su Laravel a causa della tua menzione.
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).Bene, ha incluso onclicknella domanda, quindi è abbastanza chiaro che l'obiettivo è eseguire un'azione senza aggiornare. ¬_¬
Synetech

38

In javascript, crea una funzione ajax,

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

      });
 }

Quindi chiama da html,

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

E nel tuo ajax.php,

if($_POST['action'] == 'call_this') {
  // call removeday() here
}

Giusto per chiarire: typedovrebbe essere usato in jQuery prima della 1.9.0, mentre methodè un alias e dovrebbe essere usato sulle versioni più recenti.
Alejandro Nava

1
La stessa soluzione fornita anche in Vanilla JavaScript aiuta i principianti molto meglio. Lo dico come un utente più esperto di JavaScript che una volta era un principiante assoluto ma esperto con PHP.
Ken Ingram

11

Dovrai farlo tramite AJAX . Consiglio vivamente di usare jQuery per renderlo più facile per te ....

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

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

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


1
perché AJAX? sarebbe lo stesso file PHP (ho aggiornato la mia domanda)
Mike

3
A causa di ciò che ha spiegato @Barmar, non funziona così. Ti consigliamo di inserire il php in un file separato, quindi fare riferimento a quel file nella tua richiesta AJAX.
AO

1
Il parametro "url:" fa riferimento a un file php esterno, come posso fare riferimento alla funzione php nello stesso file?
Joe Doe

2
@JoeDoe non puoi, inserisci la funzione in un file esterno
AO

11

Può essere fatto e con php piuttosto semplice se questo è il tuo pulsante

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

e questo è il tuo codice php

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

il codice get viene chiamato quando submit get viene pubblicato, il che accade quando si fa clic sul pulsante.


1

Prova a fare qualcosa di simile:

<!--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>

1

Soluzione senza ricaricare la pagina

<?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>

0

Questo è il modo più semplice possibile. Se il modulo viene inviato tramite posta, eseguire la funzione php. Nota che se vuoi eseguire la funzione in modo asincrono (senza la necessità di ricaricare la pagina), allora avrai bisogno di AJAX.

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

    <?php
    if(isset($_POST['test'])){
      //do php stuff  
    }
    ?>

Note that if you want to perform function asynchronously (without the need to reload the page), then you'll need AJAX.Beh onclick, indicherebbe che è esattamente quello che vuole. ¬_¬
Synetech

0

Ecco un'alternativa con AJAX ma non jQuery, solo JavaScript normale:

Aggiungilo alla prima / principale pagina php, da cui vuoi chiamare l'azione, ma cambialo da un potenziale atag (collegamento ipertestuale) a un buttonelemento, in modo che non venga cliccato da nessun bot o app dannose (o altro).

<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>

Quando si buttonfa clic su, onclickutilizza la funzione javascript della testa per inviare $sendingValuetramite ajax a un'altra pagina php, come molti esempi prima di questa. L'altra pagina ajax-php-page.phpverifica il valore GET e restituisce 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 risposta da print_rviene quindi restituita e visualizzata con

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

Il +=popola e aggiunge agli elementi html esistenti, rimuovendo gli +aggiornamenti giusti e sostituisce i contenuti esistenti pdell'elemento html"results" .


-3

Prova questo funzionerà bene.

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

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

?>

<button onclick="echoHello()">Say Hello</button>

2
Non funziona (anche se lo pulisci), ma inoltre non può funzionare. Il codice PHP viene pre-elaborato quando viene caricato; non viene eseguito in fase di esecuzione.
Synetech

O non hai letto la domanda o non hai testato il tuo codice perché non funzionerebbe.
Mr PizzaGuy
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.