JavaScript führt PHP-Funktion nicht aus
Hi NG,
im beiliegenden Code:
führt JavaScript die PHP-Funktion nicht aus, obwohl die Funktion bei Aufruf in PHP funktioniert.
Wo liegt der Fehler?
Gruß
Andy
im beiliegenden Code:
<?php
function loeschen()
{
echo("test");
//ID einlesen
$id = $_GET['id'];
//Tabellenname
$daten = "adressen";
//Verbindung
$db = mysql_connect ("localhost", "root", "");
if (!$db) {
die('Verbindung schlug fehl: ' . mysql_error());
}
$select_db = mysql_select_db($daten);
//SQL-Befehl
$sql_befehl = "delete from mitglieder where ID=" .$id;
//SQL-Befehl ausführen
$result = mysql_query($sql_befehl);
//löschen bestätigen
if ($result)
{
echo '<script type="text/javascript" >';
echo 'alert("Daten geloescht");';
echo 'window.location = "tabelle3.php";';
echo '</script>';
}
else
{
echo '<script type="text/javascript" >';
echo 'alert("Daten nicht geloescht");';
echo 'window.location = "tabelle3.php";';
echo '</script>';
}
mysql_close($db);
}
?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>loeschen</title>
</head>
<body>
<script type="text/javascript">
<!--
/*Abfrage, ob JA oder NEIN */
if(window.confirm("Wollen Sie das wirklich tun?") == true)
{
//Funktion wird nicht ausgeführt
document.write("<?php"); //Den PHP-Code ins Dokument schreiben.
document.write("loeschen();");
document.write("?>");
}
else
{
history.back(); //zurück zur aufrufenden Seite
}
// -->
</script>
</body>
</html>
Wo liegt der Fehler?
Gruß
Andy
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 205269
Url: https://administrator.de/forum/javascript-fuehrt-php-funktion-nicht-aus-205269.html
Ausgedruckt am: 18.04.2025 um 06:04 Uhr
10 Kommentare
Neuester Kommentar
Moin,
Vorab:
Solcher Code ist anfällig für SQL Injections - siehe http://de.wikipedia.org/wiki/SQL-Injection
Zu Deinem Problem:
PHP wird serverseitig ausgeführt, JavaSctip läuft am Client. Was soll der Browser also mit dem PHP Code anfangen?
Du musst die Lösch Funktion in ein separates PHP File packen und das dann mit JS (z.b. per XMLHttpRequeszt) mit seiner vollen http://... URL aufrufen.
lg,
Slainte
Vorab:
$id = $_GET['id'];
....
$sql_befehl = "delete from mitglieder where ID=" .$id;
$result = mysql_query($sql_befehl);
Zu Deinem Problem:
if(window.confirm("Wollen Sie das wirklich tun?") == true)
{
document.write("<?php");
...
PHP wird serverseitig ausgeführt, JavaSctip läuft am Client. Was soll der Browser also mit dem PHP Code anfangen?
Du musst die Lösch Funktion in ein separates PHP File packen und das dann mit JS (z.b. per XMLHttpRequeszt) mit seiner vollen http://... URL aufrufen.
lg,
Slainte
Hallo,
die Idee mit PHP-Funktionen aus JS ausführen hast du ja aus diesem Thread.
Und wenn du in zu Ende gelesen hättest wüsstest du das die PHP Funktion schon beim Aufruf ausgeführt wird und das JS das dann nur mehr anzeigt.
Und wie @SlainteMhath schon sagte ändere den Code
besser auf sowas wie
Und irgendwo sollte mann auch noch überprüfen ob ID auch eine gültige ID ist.
Gruß
die Idee mit PHP-Funktionen aus JS ausführen hast du ja aus diesem Thread.
Und wenn du in zu Ende gelesen hättest wüsstest du das die PHP Funktion schon beim Aufruf ausgeführt wird und das JS das dann nur mehr anzeigt.
Und wie @SlainteMhath schon sagte ändere den Code
$id = $_GET['id'];
....
$sql_befehl = "delete from mitglieder where ID=" .$id;
$result = mysql_query($sql_befehl);
besser auf sowas wie
$id = mysql_real_escape_string($_GET['id']);
....
$sql_befehl = "delete from mitglieder where ID=" . $id;
$result = mysql_query($sql_befehl);
Gruß
Hallo,
es wird beim Aufruf der Seite ausgeführt und das JS zeigt es dann nur mehr an.
Hier versuchst du eine PHP! Funktion aufzurufen die serverseitig ausgeführt werden soll! Diese wurde aber bereits beim Aufruf der Seite ausgeführt. Wenn du nun
schreibst wird der Datensatz gelöscht wenn die Seite aufgerufen wird!
Das gleiche geschieht wenn in deinem GET Array bei Aufruf der Seite bereits eine ID definiert wurde.
Gruß
es wird beim Aufruf der Seite ausgeführt und das JS zeigt es dann nur mehr an.
Hier versuchst du eine PHP! Funktion aufzurufen die serverseitig ausgeführt werden soll! Diese wurde aber bereits beim Aufruf der Seite ausgeführt. Wenn du nun
$id = $_GET['id'];
if (!isset($id) {
$id = 1
}
.....
delete usw...
Das gleiche geschieht wenn in deinem GET Array bei Aufruf der Seite bereits eine ID definiert wurde.
Gruß
Dazu gibts ne interessante Doku von Gallileo Computing http://openbook.galileocomputing.de/javascript_ajax/
Kapitel 18
Was man Dir zu sagen versucht, ist, dass Du versuchst, eine PHP-Funktion quasi der Seite erst zur Verfügung zu stellen,
wenn die Bedingung vom User erfüllt wird...
Da Javascript aber komplett auf der Browserseite ausgeführt wird, kannst Du von Javascript alleine nicht erwarten, dass
es dafür sorgt, dass dein PHP auf dem Server ausgeführt wird, nur weil Du glaubst, dass es der Seite eine PHP-Funktion
"generiert"... PHP führt der Server aus, auf dem die Seite liegt, der kann ja nicht wissen, was dein Browser mit Javascript so macht...
Daher hat man sich für Ajax ... entschieden, um Javascript aktiv Anfragen an den Server stellen zu lassen, die in aller Regel auf
zusätzliche php-scripte zugreifen.
Man kann sagen, dass PHP-Quellcode immer Vorrang vor Javascript hat, also vom Server bereits ausgeführt wird, wenn die Seite
aufgerufen wird und bevor sie an deinen Browser gesandt wurde. Javascript wird nur vom Browser auf deinem Rechner ausgeführt,
da ist es dann schon zu spät.
Achte beim Syntax-Highlighting mal darauf, warum plötzlich der PHP-Quellcode anders aussieht als die Script-Umgebung im Editor...
Andersrum ist es möglich, mit PHP echo ein Javascript zu schreiben, das also erst während des Aufrufes generiert wird. Das JS
wird dann laufen und das ist ja der Beweis für die Reihenfolge...
Grüße,
Mondragor
Kapitel 18
Was man Dir zu sagen versucht, ist, dass Du versuchst, eine PHP-Funktion quasi der Seite erst zur Verfügung zu stellen,
wenn die Bedingung vom User erfüllt wird...
Da Javascript aber komplett auf der Browserseite ausgeführt wird, kannst Du von Javascript alleine nicht erwarten, dass
es dafür sorgt, dass dein PHP auf dem Server ausgeführt wird, nur weil Du glaubst, dass es der Seite eine PHP-Funktion
"generiert"... PHP führt der Server aus, auf dem die Seite liegt, der kann ja nicht wissen, was dein Browser mit Javascript so macht...
Daher hat man sich für Ajax ... entschieden, um Javascript aktiv Anfragen an den Server stellen zu lassen, die in aller Regel auf
zusätzliche php-scripte zugreifen.
Man kann sagen, dass PHP-Quellcode immer Vorrang vor Javascript hat, also vom Server bereits ausgeführt wird, wenn die Seite
aufgerufen wird und bevor sie an deinen Browser gesandt wurde. Javascript wird nur vom Browser auf deinem Rechner ausgeführt,
da ist es dann schon zu spät.
Achte beim Syntax-Highlighting mal darauf, warum plötzlich der PHP-Quellcode anders aussieht als die Script-Umgebung im Editor...
Andersrum ist es möglich, mit PHP echo ein Javascript zu schreiben, das also erst während des Aufrufes generiert wird. Das JS
wird dann laufen und das ist ja der Beweis für die Reihenfolge...
Grüße,
Mondragor
Beispiel:
/EDIT:
Aufruf dann in etwa
// XMLHttpRequestObject erstellen
var XMLHttpRequestObject = false;
if (window.XMLHttpRequest) {
XMLHttpRequestObject = new XMLHttpRequest();
} else if (window.ActiveXObject) { // Sonderbehandlung für IEs
XMLHttpRequestObject = new
ActiveXObject(""Microsoft.XMLHTTP"");
}
// Ruft die URL "url" auf und schreibt deren Inhalt in das HTML Element mit der ID "divID"
function getData(url, divID)
{
if(XMLHttpRequestObject) {
var obj = document.getElementById(divID);
XMLHttpRequestObject.open(""GET"", url);
XMLHttpRequestObject.onreadystatechange = function()
{
if (XMLHttpRequestObject.readyState == 4 && XMLHttpRequestObject.status == 200) {
obj.innerHTML = XMLHttpRequestObject.responseText;
}
}
}
}
/EDIT:
Aufruf dann in etwa
<a onlick="javascript:getData("http://..../query.php","ergebnis">
<div id="ergebnis"></div>
Vielleicht könnte man an dieser Stelle noch darauf hinweisen, dass die aktuellen Internet Explorer vielen Elementen nicht erlauben, auf diesem Wege ".innerHTML" quelltext aufzunehmen.
Ich meine mich zu erinnern, dass es da von JQuery eine Funktion gab, die $(...).inner oder so, die dieses Problem umgeht...
Grüße,
Mondragor
Ich meine mich zu erinnern, dass es da von JQuery eine Funktion gab, die $(...).inner oder so, die dieses Problem umgeht...
Grüße,
Mondragor
Sorry,
also es ist ja einerseits verständlich, dass man das nicht immer gerne macht, aber man braucht öfters mal ajax und ich denke, wenn man das Grundprinzip einmal verstanden hat, zumal es eigentlich immer das selbe ist... dann kann man immer wieder damit arbeiten und richtig coole Sachen damit machen!
JQuery ist wie gesagt so etwas, was auch einiges eleganter und einfacher / universeller lösen kann. Also fuchs Dich rein, es lohnt sich...
Also im Grunde geht es um folgendes. Du erstellst ein Request-Objekt. Dieses Objekt kennt verschiedene Methoden, unter anderem das Senden von Anfragen an den Server.
Nun werden POST und GET unterstützt, da gibts nen kleinen syntaktischen Unterschied siehe galloleoComputing-link oben. Solange die Anfrage nicht komplett abgeschlossen / beantwortet ist, gibt es verschiedene Stati, die durchlaufen werden. Jedes mal, wenn sich der "readyState" ändert, wird geprüft, ob vollständig ...
Dann wird der "responseText" in ein Div auf deiner Seite geschrieben. Der ResponseText ist genau das, was Du sehen würdest, wenn Du die Seite, auf die der Request verweist, mit dem Browser aufrufst.
Interessant hierbei, es verändert sich nur der HTML-Inhalt des DIV auf der seite, von der aus der Request gestellt wurde. Es muss nicht die ganze Seite neu geladen werden.
Und dieser Ablauf ist im Grunde immer der selbe.
In Deinem Fall würde der Response-Text glaube ich sowas beinhalten wie "Der Eintrag wurde erfolgreich gelöscht." oder "Eintrag existiert nicht".
Ferner müsste die Seite, an die der Request geht, die SQL-Abfrage ausführen. Es ist eine reine PHP-Datei und löscht einen Eintrag aus der Datenbank, wenn du eben willst, auch mit Statusausgabe des Löschversuchs.
Dieser Responsetext wird eigentlich nur per echo ausgegeben.
Der Request ruft diese "php-Seite" auf, führt aus und speichert den "Responsetext" also den Löschstatus in deinem Fall zwischen.
Die
ist ja wieder ganz normales Javascript... Das einzig schwierige hier ist die erstmalige anwendung des XMLHttpRequest-Objektes...
Aber hast Du das 2-3 mal benutzt, wirds eigentlich trivial...
also es ist ja einerseits verständlich, dass man das nicht immer gerne macht, aber man braucht öfters mal ajax und ich denke, wenn man das Grundprinzip einmal verstanden hat, zumal es eigentlich immer das selbe ist... dann kann man immer wieder damit arbeiten und richtig coole Sachen damit machen!
JQuery ist wie gesagt so etwas, was auch einiges eleganter und einfacher / universeller lösen kann. Also fuchs Dich rein, es lohnt sich...
Also im Grunde geht es um folgendes. Du erstellst ein Request-Objekt. Dieses Objekt kennt verschiedene Methoden, unter anderem das Senden von Anfragen an den Server.
Nun werden POST und GET unterstützt, da gibts nen kleinen syntaktischen Unterschied siehe galloleoComputing-link oben. Solange die Anfrage nicht komplett abgeschlossen / beantwortet ist, gibt es verschiedene Stati, die durchlaufen werden. Jedes mal, wenn sich der "readyState" ändert, wird geprüft, ob vollständig ...
Dann wird der "responseText" in ein Div auf deiner Seite geschrieben. Der ResponseText ist genau das, was Du sehen würdest, wenn Du die Seite, auf die der Request verweist, mit dem Browser aufrufst.
Interessant hierbei, es verändert sich nur der HTML-Inhalt des DIV auf der seite, von der aus der Request gestellt wurde. Es muss nicht die ganze Seite neu geladen werden.
Und dieser Ablauf ist im Grunde immer der selbe.
In Deinem Fall würde der Response-Text glaube ich sowas beinhalten wie "Der Eintrag wurde erfolgreich gelöscht." oder "Eintrag existiert nicht".
Ferner müsste die Seite, an die der Request geht, die SQL-Abfrage ausführen. Es ist eine reine PHP-Datei und löscht einen Eintrag aus der Datenbank, wenn du eben willst, auch mit Statusausgabe des Löschversuchs.
Dieser Responsetext wird eigentlich nur per echo ausgegeben.
Der Request ruft diese "php-Seite" auf, führt aus und speichert den "Responsetext" also den Löschstatus in deinem Fall zwischen.
Die
XMLHttpRequestObject.onreadystatechange = function() {...}
Aber hast Du das 2-3 mal benutzt, wirds eigentlich trivial...