PHP php-script mit Button Klick ausführen ohne Seite neu zu laden

Sarius87

Banned
Registriert
Mai 2016
Beiträge
888
hallo, ich habe eine form mit einigen eingabefeldern. mit dem Absenden will ich jetzt quasi ein php-script im Hintergrund ausführen ohne die Seite neu zu laden, doch wie mache ich das ? in diesem script steht sowas, hier etwas gekürzt :
PHP:
<?php
session_start();

if($anzahl>0)
{
	$_SESSION['result']=true;
}else{
	$_SESSION['result']=false;
}
?>

das ergebnis soll dann auf der seite in der nähe des buttons stehen , wie mache ich das ? in der form zur script.php leiten geht schlecht da beim fehler ja alle Felder wieder leer sind und einige Felder werden mit einem JS erst hinzugefügt wenn die anderen ausgefüllt sind sodass ich da keine Werte als placeholder eintragen kann...
 
Stichwort AJAX.

Mit einem Framework wie jQuery recht simpel auszuführen.
Hier wird es kurz und knackig erklärt (die offizielle Doku ist zwar gut aber man braucht länger): https://www.w3schools.com/jquery/ajax_ajax.asp
Wäre dann aber clientseitig mit Javascript.

Du kannst das ganze aber auch serverseitig machen, z.B. mit cURL.
 
Zuletzt bearbeitet:
Wie schon geschrieben wurde, musst du dein PHP Skript asynchron ausführen und das Ergebnis dann dynamisch in deine Seite einbauen.

Hintergrund: Die Webseite wird im Browser auf dem Gerät des Endbenutzers angezeigt. Das PHP Skript läuft aber auf deinem Webserver. Willst du jetzt die Webseite nicht neuladen, muss das PHP Skript quasi im Hintergrund von der Webseite aus angesprochen werden. Dein Skript läuft dann ab und liefert ein Ergebnis zurück, das du anschließend per Javascript in deine weiterhin angezeigte Webseite einbauen musst.
 
okay, generell funktioniert das bei mir jetzt schon mit einer einfachen Test-seite, aber wie genau füge ich das jetzt in den button von der form ein ? hier mein JS :

PHP:
<script>
$(document).ready(function(){
    $("#create").click(function(){
        $.ajax({url: "assets/php/check.php", success: function(result){
            $("#div1").html(result);
        }});
    });
});
</script>

der button in der form :

Code:
<button id="create" type="submit">Go</button>


test.php wo es geht :

Code:
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script>
<script>
$(document).ready(function(){
    $("#create").click(function(){
        $.ajax({url: "assets/php/check.php", success: function(result){
            $("#div1").html(result);
        }});
    });
});
</script>
</head>
<body>

<div id="div1"><h2>das ergebnis ist...</h2></div>

<button id="button">ergebnis sehen</button>
 
Zuletzt bearbeitet:
Du packst deinen AJAX Call in eine Funktion:

Code:
function callPHP()
{
   $.ajax(
   {
     url: "assets/php/check.php", 
     success: function(result){ $("#div1").html(result);}
   });
}

und beim Button

HTML:
<button id="button" onclick="callPHP()">ergebnis sehen</button>
 
Zuletzt bearbeitet:
ah danke, so oder wie also ? aber geht immer noch nicht :/

Code:
<?php
session_start();
?>

<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script>
<script>
function callPHP()
{
	$.ajax(
	{
		url: "assets/php/check.php", 
		success: function(result){ $("#div1").html(result);}
	});
}
</script>

<div id="div1"></div>

<form>
	<input type="text" name="titel"><br><br>
	<div id="antworten">
		<label for="antwort1">
			<input type="text" name="antwort1" style="text-align: center">
		</label><br>
		<label for="antwort2">
			<input type="text" name="antwort2" style="text-align: center">
		</label>
	</div>
	
	<button id="create" onClick="callPHP()" type="submit">ergebnis sehen</button>
</form>

und fehlt in deinem script nicht die button-id ?
 
Zuletzt bearbeitet:
Der Ajax Aufruf sieht noch ein wenig falsch aus, so müsste es gehen:

Code:
function callPHP()
{
    $("#div1").html('Load...');
    
    $.ajax(
    {
        url: "assets/php/check.php"
    })
    .success(function(result)
    { 
        $("#div1").html(result);
    });
}

Der Button wird ja so nicht angesprochen, braucht also auch keine ID in dem Moment (Du könntest jetzt natürlich den onclick dynamisch hinzufügen, dann wäre die ID wiederrum hilfreich).
Falls der "Load..." schon gar nicht kommt, ersetze das ganze Button Element mal mit

HTML:
<input type="button" onclick="callPHP()" value="ergebnis sehen">

Weiterhin sind die F12 Tools im Browser deine Freunde da sie Fehler ausgeben können.
 
Zuletzt bearbeitet:
hm jetzt sehe ich ganz kurz das "Load..." :D aber ich will ja die ausgabe aus meinem script haben wenns zumindest zu nem fehler kommt, wie geht das dann ?
 
Das wäre ja eigentlich korrekt, dann wird der "Load..." von der Ausgabe des PHP überschrieben - so wie es sein müsste.
Fragt sich ob das PHP überhaupt was zurückgibt? Hast Du das schon mal so einfach gemacht dass nur eine Ausgabe "Hallo Welt" oder sowas zurückgeliefert wird?
 
Zuletzt bearbeitet:
naja ich sehe das "Load..." halt nur für den Bruchteil einer sekunde während die seite wegen dem form neu lädt, vom echo aus der check.php sehe ich nix.

in der check.php habe ich testweise

PHP:
<?php
session_start();
echo "Hallo Welt!";
?>
 
Zuletzt bearbeitet:
Ah so, ändere demfall den Button so wie im #7 vorgeschlagen; wenn der als Submit behandelt wird, wird das Formular regulär abgeschickt und das ist in dem Fall nicht gewollt.
 
ah ok. jetzt sehe ich halt load aber die ausgabe von check.php kommt nicht :/
 
Irgendwelche Fehler in der Konsole?

Ansonsten irgendwie möglich das Beispiel auf ein Webspace zu laden damit man das im Browser Live sehen kann?
 
Stimmt, das habe ich da vertauscht, success wäre innerhalb des ajax() Calls.
Probiers anstatt
Code:
.success(function(result)

mit

Code:
.done(function(result)
 
ah ok danke :D jetzt soll ja die meldung nur kommen wenn wenn es bei der check.php zu einem fehler kommt, wie mache ich das am besten ? wenn es zu keinem Fehler kommt wird das formular "weitergegeben", wie es standard so ist.
 
Du könntest im PHP einfach "error" schreiben (anstatt "Hallo Welt") und den mit Javascript auswerten (im Stil von if (result == 'error')).
 
Zuletzt bearbeitet:
aber was wenn kein fehler kommt ? dann soll die Seite ja neu laden quasi, denn in der form habe ich eine action zu send.php die dann wo anders hinleitet. nur wenn es zu einem fehler kommt soll die Ausgabe mit dem JS kommen.
 
Irgendwie so?

Code:
.success(function(result) 
{ 
  if (result == 'error')
    $("#div1").html('Es ist ein Fehler aufgetreten');
  else
    window.location.href = 'success.html';
});
 
Zuletzt bearbeitet:
Zurück
Oben