Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen (A bis Z)

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, 3144 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 ..
Ähnliche Inhalte
JavaScript
gelöst JavaScript hochladen (12)

Frage von Patrick-IT zum Thema JavaScript ...

JavaScript
Javascript rechnen mir sehr sehr großen Zahlen (3)

Frage von it4baer zum Thema JavaScript ...

VB for Applications
gelöst Kommunikation zwischen vbs und javascript (1)

Frage von it4baer zum Thema VB for Applications ...

PHP
gelöst Javascript Menü wird nicht angezeigt (5)

Frage von takvorian zum Thema PHP ...

Neue Wissensbeiträge
Sicherheit

How I hacked hundreds of companies through their helpdesk

Information von SeaStorm zum Thema Sicherheit ...

Erkennung und -Abwehr

Ccleaner-Angriff war nur auf große Unternehmen gemünzt

(10)

Information von Lochkartenstanzer zum Thema Erkennung und -Abwehr ...

Sicherheit

Eventuell neue Lücke in Intels ME

Information von sabines zum Thema Sicherheit ...

Heiß diskutierte Inhalte
Humor (lol)
gelöst Freidach Beitrag (40)

Frage von Penny.Cilin zum Thema Humor (lol) ...

Windows 7
gelöst SSD - Win7 Lags (20)

Frage von ph5555 zum Thema Windows 7 ...

Firewall
gelöst Firewall Firmeneimsatz (19)

Frage von wiesi200 zum Thema Firewall ...