Führen Sie die PHP-Funktion mit einem Klick aus

92

Ich suche nach einer einfachen Lösung, um eine PHP-Funktion nur aufzurufen, wenn auf ein Tag geklickt wird.

PHP:

function removeday() { ... }

HTML:

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

UPDATE: HTML und PHP-Code befinden sich in derselben PHP-Datei

Mike
quelle
5
HTML führt Javascript-Funktionen aus, die auf dem Client ausgeführt werden. PHP läuft auf dem Server. Sie müssen etwas über AJAX lernen.
Barmar
aber warum AJAX? Der gesamte Code befindet sich in derselben PHP-Datei.
Mike
1
Warum AJAX? Nun, um das herauszufinden, können Sie einfach jedes PHP-Skript ausführen und den Code seiner Ausführung sehen. Wieder - Ajax ist der einzige Weg, wie Sie das tun können .
Yang
2
Die aktivierte Antwort sieht aus wie eine Schaltfläche, wenn Sie dort verwenden, <a role="button" href="?action=removeday" class="debatebtn">Delete</a>wo die Aktion abgefangen wird, und die Funktion removeay () ähnlich wie ausführen if($action == 'removeday'){ removeday(); }. Ich weiß, dass dies spät ist, aber ich denke, es könnte immer noch jemandem bei diesem Problem helfen. C§
CSS

Antworten:

142

Verstehen Sie zunächst, dass drei Sprachen zusammenarbeiten:

  • PHP: Es wird nur vom Server ausgeführt und reagiert auf Anfragen wie das Klicken auf einen Link (GET) oder das Senden eines Formulars (POST).

  • HTML & JavaScript: Es wird nur im Browser einer anderen Person ausgeführt (ausgenommen NodeJS).

Ich gehe davon aus, dass Ihre Datei ungefähr so ​​aussieht:

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

Da PHP nur auf Anforderungen reagiert (GET, POST, PUT, PATCH und DELETE über $ _REQUEST), müssen Sie auf diese Weise eine PHP-Funktion ausführen, obwohl sie sich in derselben Datei befinden. Dies gibt Ihnen eine Sicherheitsstufe: "Soll ich dieses Skript für diesen Benutzer ausführen oder nicht?".

Wenn Sie die Seite nicht aktualisieren möchten, können Sie eine Anforderung an PHP senden, ohne sie über eine Methode namens Asynchronous JavaScript and XML (AJAX) zu aktualisieren.

Das kannst du aber auf YouTube nachschlagen. Suchen Sie einfach nach "jquery ajax"

Ich empfehle Laravel jedem, der neu anfängt: http://laravel.com/

Michael J. Calkins
quelle
3
Um nur zu erwähnen, ich gehe davon aus, dass Sie ziemlich neu in PHP sind. Ich möchte laravel.com als Framework empfehlen . Persönlich hätte ich gerne das gesamte "Learning Generic PHP" übersprungen und wäre direkt zu einem leistungsstarken Framework übergegangen. Dies ist die, die ich jetzt auch benutze.
Michael J. Calkins
5
Mann, vielen Dank, Ihre Antwort hat mir nicht nur bei diesem Zweifel geholfen, sondern mich auch dazu gebracht, PHP so viel besser zu verstehen! Danke nochmal!
Fühle den Lärm
Danke, ich suche das. Wie kann ich dies mit WordPress implementieren
Firefog
1
Vielen Dank, ich werde mich wegen Ihrer Erwähnung auf Laravel konzentrieren.
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).Nun, er hat onclickin die Frage aufgenommen, daher ist es ziemlich klar, dass das Ziel darin besteht, eine Aktion auszuführen, ohne sie zu aktualisieren. ¬_¬
Synetech
37

Erstellen Sie in Javascript eine Ajax-Funktion.

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

      });
 }

Dann rufen Sie von HTML,

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

Und in Ihrer ajax.php,

if($_POST['action'] == 'call_this') {
  // call removeday() here
}
devo
quelle
Nur zur Verdeutlichung: typeSollte in jQuery vor 1.9.0 verwendet werden, methodist ein Alias ​​und sollte in neueren Versionen verwendet werden.
Alejandro Nava
1
Die gleiche Lösung, die auch in Vanilla JavaScript bereitgestellt wird, hilft Anfängern viel besser. Ich sage dies als erfahrener Benutzer von JavaScript, der einmal ein Anfänger war, aber mit PHP vertraut war.
Ken Ingram
11

Sie müssen dies über AJAX tun . Ich empfehle Ihnen dringend, jQuery zu verwenden, um dies für Sie einfacher zu machen.

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

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

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

AO
quelle
1
warum AJAX? Es wäre die gleiche PHP-Datei (ich habe meine Frage aktualisiert)
Mike
3
Aufgrund dessen, was @Barmar erklärt hat, funktioniert es nicht so. Sie möchten das PHP in einer separaten Datei platzieren und dann in Ihrer AJAX-Anfrage auf diese Datei verweisen.
AO
1
Der Parameter "url:" verweist auf eine externe PHP-Datei. Wie kann ich auf eine PHP-Funktion in derselben Datei verweisen?
Joe Doe
2
@ JoeDoe können Sie nicht, platzieren Sie die Funktion in einer externen Datei
AO
11

Es kann und mit ziemlich einfachem PHP gemacht werden, wenn dies Ihre Schaltfläche ist

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

und das ist dein PHP-Code

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

Der Code wird aufgerufen, wenn das Senden veröffentlicht wird. Dies geschieht, wenn auf die Schaltfläche geklickt wird.

Vamps
quelle
1

Versuchen Sie so etwas zu tun:

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

Lösung ohne erneutes Laden der Seite

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

Dies ist der einfachste Weg. Wenn das Formular per Post verschickt wird, führen Sie die PHP-Funktion aus. Beachten Sie, dass Sie AJAX benötigen, wenn Sie die Funktion asynchron ausführen möchten (ohne die Seite neu laden zu müssen).

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

    <?php
    if(isset($_POST['test'])){
      //do php stuff  
    }
    ?>
csandreas1
quelle
Note that if you want to perform function asynchronously (without the need to reload the page), then you'll need AJAX.Nun, das onclickwürde darauf hinweisen, dass er genau das will. ¬_¬
Synetech
0

Hier ist eine Alternative mit AJAX, aber ohne jQuery, nur normales JavaScript:

Fügen Sie dies der ersten / Haupt-PHP-Seite hinzu, von der aus Sie die Aktion aufrufen möchten, ändern Sie sie jedoch von einem potenziellen aTag (Hyperlink) in ein buttonElement, damit keine Bots oder bösartigen Apps (oder was auch immer) darauf klicken.

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

Wenn auf das buttongeklickt wird, onclickwird die Javascript-Funktion des Kopfes verwendet, um $sendingValueüber Ajax an eine andere PHP-Seite zu senden , wie in vielen Beispielen vor dieser. Die andere Seite ajax-php-page.phpsucht nach dem GET-Wert und gibt Folgendes zurück 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...");
  }

?>

Die Antwort von print_rwird dann zurückgegeben und mit angezeigt

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

Das +=füllt vorhandene HTML-Elemente auf und fügt sie hinzu, entfernt die +gerechten Aktualisierungen und ersetzt den vorhandenen Inhalt des HTML- pElements "results".

andyNilson
quelle
-3

Versuchen Sie dies, es wird gut funktionieren.

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

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

?>

<button onclick="echoHello()">Say Hello</button>
Vidya
quelle
2
Das funktioniert nicht (auch wenn Sie es aufräumen), aber darüber hinaus kann es nicht funktionieren. Der PHP-Code wird beim Laden vorverarbeitet. Es wird nicht zur Laufzeit ausgeführt.
Synetech
Entweder haben Sie die Frage nicht gelesen oder Sie haben Ihren Code nicht getestet, da dies nicht funktionieren würde.
Mr PizzaGuy