Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit
GELÖST

JavaScript führt PHP-Funktion nicht aus

Frage Entwicklung JavaScript

Mitglied: AndyAh

AndyAh (Level 2) - Jetzt verbinden

19.04.2013, aktualisiert 10:43 Uhr, 3001 Aufrufe, 10 Kommentare

Hi NG,

im beiliegenden Code:

01.
<?php     
02.
    
03.
function loeschen() 
04.
05.
   echo("test"); 
06.
   //ID einlesen 
07.
   $id = $_GET['id']; 
08.
 
09.
   //Tabellenname 
10.
   $daten = "adressen"; 
11.
 
12.
   //Verbindung 
13.
   $db = mysql_connect ("localhost", "root", ""); 
14.
 
15.
   if (!$db) {  
16.
       die('Verbindung schlug fehl: ' . mysql_error()); 
17.
18.
	 
19.
   $select_db = mysql_select_db($daten);  
20.
 
21.
   //SQL-Befehl 
22.
   $sql_befehl = "delete from mitglieder where ID=" .$id; 
23.
 
24.
   //SQL-Befehl ausführen 
25.
   $result = mysql_query($sql_befehl);  
26.
 
27.
   //löschen bestätigen 
28.
   if ($result) 
29.
30.
       echo '<script type="text/javascript" >'; 
31.
       echo 'alert("Daten geloescht");';  
32.
       echo 'window.location = "tabelle3.php";';  
33.
       echo '</script>'; 
34.
35.
   else 
36.
37.
       echo '<script type="text/javascript" >'; 
38.
       echo 'alert("Daten nicht geloescht");';  
39.
       echo 'window.location = "tabelle3.php";';  
40.
       echo '</script>'; 
41.
42.
 
43.
   mysql_close($db); 
44.
45.
 
46.
?>
01.
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> 
02.
<html> 
03.
<head> 
04.
<title>loeschen</title> 
05.
 
06.
</head> 
07.
<body> 
08.
 
09.
<script type="text/javascript"> 
10.
<!--  
11.
   /*Abfrage, ob JA oder NEIN */ 
12.
   if(window.confirm("Wollen Sie das wirklich tun?") == true) 
13.
      {  
14.
        //Funktion wird nicht ausgeführt 
15.
		document.write("<?php");	 //Den PHP-Code ins Dokument schreiben. 
16.
		document.write("loeschen();"); 
17.
		document.write("?>"); 
18.
19.
   else 
20.
21.
         history.back();    //zurück zur aufrufenden Seite 
22.
23.
	   
24.
// --> 
25.
</script> 
26.
</body> 
27.
</html>
führt JavaScript die PHP-Funktion nicht aus, obwohl die Funktion bei Aufruf in PHP funktioniert.

Wo liegt der Fehler?

Gruß
Andy
Mitglied: SlainteMhath
19.04.2013 um 09:29 Uhr
Moin,

Vorab:
01.
  $id = $_GET['id'];  
02.
.... 
03.
   $sql_befehl = "delete from mitglieder where ID=" .$id;  
04.
   $result = mysql_query($sql_befehl);  
Solcher Code ist anfällig für SQL Injections - siehe http://de.wikipedia.org/wiki/SQL-Injection

Zu Deinem Problem:
01.
if(window.confirm("Wollen Sie das wirklich tun?") == true) 
02.
{  
03.
document.write("<?php");	  
04.
...
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
Bitte warten ..
Mitglied: Hitman4021
19.04.2013, aktualisiert um 09:40 Uhr
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
01.
  $id = $_GET['id'];  
02.
.... 
03.
   $sql_befehl = "delete from mitglieder where ID=" .$id;  
04.
   $result = mysql_query($sql_befehl);  
besser auf sowas wie
01.
  $id = mysql_real_escape_string($_GET['id']);  
02.
.... 
03.
   $sql_befehl = "delete from mitglieder where ID=" . $id;  
04.
   $result = mysql_query($sql_befehl);  
Und irgendwo sollte mann auch noch überprüfen ob ID auch eine gültige ID ist.

Gruß
Bitte warten ..
Mitglied: AndyAh
19.04.2013 um 09:40 Uhr
Hi,

das Script aus diesem Thread (Frage auch von mir) funktioniert so, wie es ist.

Gruß
Andy
Bitte warten ..
Mitglied: Hitman4021
19.04.2013 um 09:45 Uhr
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
01.
  
02.
$id = $_GET['id']; 
03.
if (!isset($id) { 
04.
  $id = 1 
05.
06.
..... 
07.
delete usw... 
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ß
Bitte warten ..
Mitglied: AndyAh
19.04.2013 um 09:50 Uhr
Hi Slainte,

könntst du mir für "XMLHttpRequest" evtl. einige Beispiele geben?

Aus der Google-Suche bin ich nicht so recht schlau geworden.

Gruß
Andy
Bitte warten ..
Mitglied: Mondragor
19.04.2013, aktualisiert um 10:53 Uhr
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
Bitte warten ..
Mitglied: SlainteMhath
19.04.2013, aktualisiert um 11:19 Uhr
Beispiel:
01.
// XMLHttpRequestObject erstellen 
02.
var XMLHttpRequestObject = false; 
03.
if (window.XMLHttpRequest) { 
04.
	XMLHttpRequestObject = new XMLHttpRequest(); 
05.
} else if (window.ActiveXObject) { // Sonderbehandlung für IEs 
06.
	XMLHttpRequestObject = new 
07.
	ActiveXObject(""Microsoft.XMLHTTP""); 
08.
09.
 
10.
// Ruft die URL "url" auf und schreibt deren Inhalt in das HTML Element mit der ID "divID" 
11.
function getData(url, divID) 
12.
13.
	if(XMLHttpRequestObject) { 
14.
		var obj = document.getElementById(divID); 
15.
		XMLHttpRequestObject.open(""GET"", url); 
16.
		XMLHttpRequestObject.onreadystatechange = function() 
17.
18.
			if (XMLHttpRequestObject.readyState == 4 && XMLHttpRequestObject.status == 200) { 
19.
				obj.innerHTML = XMLHttpRequestObject.responseText; 
20.
21.
22.
23.
}

/EDIT:
Aufruf dann in etwa
01.
<a onlick="javascript:getData("http://..../query.php","ergebnis"> 
02.
<div id="ergebnis"></div>
Bitte warten ..
Mitglied: Mondragor
19.04.2013 um 11:28 Uhr
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
Bitte warten ..
Mitglied: AndyAh
19.04.2013 um 11:42 Uhr
Hi NG,

ich habe mich von der Idee einer Sicherheitsabfrage beim Löschen von Daten verabschiedet.

Ist mir alles zu aufwendig und zu kompliziert.

Gruß
Andy
Bitte warten ..
Mitglied: Mondragor
19.04.2013, aktualisiert um 12:15 Uhr
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
01.
XMLHttpRequestObject.onreadystatechange = function() {...}
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...
Bitte warten ..
Neuester Wissensbeitrag
CPU, RAM, Mainboards

Angetestet: PC Engines APU 3a2 im Rack-Gehäuse

(1)

Erfahrungsbericht von ashnod zum Thema CPU, RAM, Mainboards ...

Ähnliche Inhalte
JavaScript
gelöst Werteübergabe an JavaScript Funktion (2)

Frage von tobmes zum Thema JavaScript ...

LAN, WAN, Wireless
Hat On Networks PL500PS WLAN-Funktion? (4)

Frage von Andy1987 zum Thema LAN, WAN, Wireless ...

PHP
gelöst Php regex und Array (5)

Frage von Thomas91 zum Thema PHP ...

Heiß diskutierte Inhalte
Grafikkarten & Monitore
Win 10 Grafikkarte Crash von Software? (13)

Frage von Marabunta zum Thema Grafikkarten & Monitore ...

DSL, VDSL
DSL-Signal bewerten (13)

Frage von SarekHL zum Thema DSL, VDSL ...

Switche und Hubs
Trunk für 2xCisco Switch. Wo liegt der Fehler? (9)

Frage von JayyyH zum Thema Switche und Hubs ...

Backup
Clients als Server missbrauchen? (8)

Frage von 1410640014 zum Thema Backup ...