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

Inputfeld im Popup mit einer live Synchonisation

Frage Entwicklung PHP

Mitglied: v3rtico

v3rtico (Level 1) - Jetzt verbinden

29.09.2008, aktualisiert 09.10.2008, 6028 Aufrufe, 30 Kommentare

Ich benötige ein Inputfeld in einem Popup (JavaScriptmäßig), das auf einem Link öffnet und nach "ok" drücken soll sich der Inhalt der eigentlichen Seite leicht verändern.

Aaaaalso: Hier ein Screenshot des aktuellen Standes:

http://img221.imageshack.us/img221/9460/untersuchungto5.jpg


Rot markiert ist der Link, auf den der Nutzer klicken soll. Da soll sich dann eine Inputbox in einem Popup (Wie mans ja von JavaScript kennt) öffnen. Hat der Nutzer dort seine Eingabe gemacht und OK Klickt, soll die änderung direkt statt dem alten "(Keine Beschreibung vorhanden)" erscheinen und der "Hinzufügen" Button soll zum Bearbeitenbutton werden. Der hat auch wieder eine inputbox, aber diesmal soll die den bereits eingegebenen Wert direkt wieder enthalten. Ganz unten soll dann noch ein "bestätigen" button unten hin, da kommt man auf die Seite, die alles in die Datenbank einträgt. Hat jemand eine Idee wie man sowas machen kann?


Hier noch den Quelltext des Seite:

01.
<?php 
02.
 
03.
	include ("include/db_connect.php"); 
04.
	 
05.
	Echo "<style type=\"text/css\"
06.
 
07.
			body { 
08.
 			 background-color: #fff; 
09.
 			 margin: 40px; 
10.
 			 font-family: Lucida Grande, Verdana, Sans-serif; 
11.
			 font-size: 14px; 
12.
			 color: #4F5155; 
13.
14.
 
15.
			a { 
16.
			 color: #003399; 
17.
			 background-color: transparent; 
18.
			 font-weight: normal; 
19.
20.
 
21.
			h1 { 
22.
			 color: #444; 
23.
			 background-color: transparent; 
24.
			 border-bottom: 1px solid #D0D0D0; 
25.
			 font-size: 16px; 
26.
			 font-weight: bold; 
27.
			 margin: 24px 0 2px 0; 
28.
			 padding: 5px 0 6px 0; 
29.
30.
 
31.
			code { 
32.
			 font-family: courier, Monaco, Verdana, Sans-serif; 
33.
			 font-size: 10px; 
34.
			 background-color: #f9f9f9; 
35.
			 border: 1px solid #D0D0D0; 
36.
			 color: #002166; 
37.
			 display: block; 
38.
			 margin: 14px 0 14px 0; 
39.
			 padding: 12px 10px 12px 10px; 
40.
41.
 
42.
			h4 { 
43.
			 font-family: Lucida Grande, Verdana, Sans-serif; 
44.
			 font-size: 10px; 
45.
			 color: #4F5155; 
46.
47.
 
48.
			h2 { 
49.
			 background-color: #fff; 
50.
			 font-size: 14px; 
51.
			 font-family: Lucida Grande, Verdana, Sans-serif; 
52.
			 text-align: right; 
53.
54.
 
55.
			</style>"; 
56.
	 
57.
	Echo "<h1>Regelerfassung</h1>"
58.
	 
59.
	$time = getdate(); 
60.
	$stamp = time(); 
61.
	$zeit = $time[mday].".".$time[mon].".".$time[year]; 
62.
	 
63.
	$ziffer = $_POST[ziffer1]; 
64.
	 
65.
	Echo "<br><br>Für die Regel wurde als Erstellungsdatum der <b>".$zeit."</b> erfasst.<br><br><br><br>"
66.
	 
67.
			$abfr = "SELECT titel 
68.
						FROM vc_goae 
69.
						WHERE goae = $ziffer"; 
70.
			 
71.
			$besch = mysql_fetch_array(mysql_query($abfr)); 
72.
			$beschreibung = $besch[titel]; 
73.
			 
74.
	if (!empty($beschreibung)){ 
75.
	$leistung = "(<i>".$beschreibung."</i>) ";} 
76.
	 
77.
	Echo "Die eingegebene Regel besagt, dass Ziffer ".$ziffer." ".$leistung."nicht neben folgenden Ziffern berechnet werden darf:<br><br><br>"
78.
	 
79.
	$zaehler = 1; 
80.
	$x = 0; 
81.
 
82.
	Echo "<table border=\"0\" width=\"70%\">"
83.
	do
84.
		$z = "ziffer".$zaehler
85.
		 
86.
		if (!empty($_POST[$z])) { 
87.
		 
88.
			$abfrage = "SELECT id, goae, titel 
89.
						FROM vc_goae 
90.
						WHERE goae = $_POST[$z]"; 
91.
			 
92.
			$eab = mysql_fetch_array(mysql_query($abfrage)); 
93.
			 
94.
			$b = $eab[titel]; 
95.
			 
96.
			if ($erf = 1){$add = "<a href=\"leistung_neu.php?ziffer=".$_POST[$z]."\" Target=\"_blank\">Hinzufügen</a>";}	 
97.
			 
98.
			if (empty($b)){$b = "<i>(Keine Beschreibung vorhanden)</i> ".$add."";} 
99.
			 
100.
			Echo "<tr> 
101.
					<td>$_POST[$z]<br><br></td> 
102.
					<td>$b<br><br></td> 
103.
				  </tr>"; 
104.
			 
105.
			$zaehler = $zaehler + 1; 
106.
			 
107.
		} else {$x = 1;} 
108.
	 
109.
	} while ($x != 1); 
110.
	 
111.
	Echo "</table>" 
112.
	 
113.
 
114.
?>
30 Antworten
Mitglied: dtzzzzzz
30.09.2008 um 09:56 Uhr
Wieso trennt hier keiner PHP-Code und Template-Code (HTML). Das ist doch viel zu umständlich, so zu programmieren. Kann ich nur hier das empfehlen:

http://www.smarty.net/

Ok, zu deiner Frage nun: in deinem Link musst du den Aufruf einer Funktion im JavaScript machen, die dann ein neues Fenster erstellt. Dort lädst du dein Formular-Template rein, wo die Eingaben gemacht werden.

Danach würde ich mit AJAX arbeiten, denn dann kannst du die erstellten Daten, ohne Seite neu zu laden, direkt abspeichern und nur die eine Zeile neu laden, wo die neue Daten eben hingehören, oder zumindest einen Block. Das Pop-Up-Fenster wird einfach nach dem Speichern geschlossen und das Hauptfenster, genau gesagt der Inhalt wird neu geladen.

Das wäre der Ablauf. Ich frage dich jetzt ein Mal, ob du AJAX und JavaScript bereits kannst, oder ob du dort auch hilfe brauchst.

Und ich empfehle jedem hier Templates von dem PHP-Code zu trennen, dann spart man sich diese echo mit dem HTML mitten im PHP-Code. Und noch ein Vorteil: Ihr könnt beliebig viele Layouts machen, verändern, erstellen, ohne dabei jedes Mal PHP-Code zu ändern und umgekehrt, PHP-Code ändern, ohne dabei alle Templates auch noch zu ändern.
Bitte warten ..
Mitglied: v3rtico
30.09.2008 um 10:30 Uhr
JavaScript bekomme ich hin, ist zwar ne weile her aber das schaffe ich wohl noch. Von AJAX habe ich allerdings überhaupt keine Ahnung.

Das mit dem trennen wird später noch gemacht. Ich soll das Ding nur erstmal möglichst schnell zum laufen kriegen.
Bitte warten ..
Mitglied: dtzzzzzz
30.09.2008 um 10:39 Uhr
Ok, dann baue mal schon alles mit JavaScript ein (Fenster öffenen, Fenster schliessen, Fenster durchladen). Um Daten abzuspeichern, brauchst du noch eine PHP-Datei z. B. save_data.php, die du am besten in ein Verzeichnis rein tust, wo kein Zugriff von aussen möglich wäre (also mit .htassecc schützen). Diese Datei macht nichts anders, als die Daten updaten oder z. B. einfügen.

Außerdem brauchst du noch prototype.js -Framework. Die AJAX -Funktion in diesem Fall ist recht einfach und ich schreibe sie dir, wenn du den Rest fertig hast.
Bitte warten ..
Mitglied: v3rtico
30.09.2008 um 11:04 Uhr
In welcher Form muss ich die Daten an die Datei save_data.php senden? Als Postdaten?
Bitte warten ..
Mitglied: dtzzzzzz
30.09.2008 um 11:21 Uhr
diese werden von AJAX in Form von Postdaten gesendet, da musst du nichts machen. Also kein Formular <form></form> machen, sondern nur Fälder einbauen und am Ende ein Button der ein onClick - Event hat. Dadurch wird dann entsprechende Funktion aufgerufen in JavaScript, wo dann AJAX läuft und die Daten an die save_data.php sendet, die dann wiederum diese in die DB abspeichert.

Wie gesagt, machen wir Schritt für Schritt am besten. Mach mal erst ein Mal das Pop-Up-Fenster fertig. und die save_data.php kannst du schon so vorbereiten, dass dort alle Sachen mit SQL usw. stehen.
Bitte warten ..
Mitglied: v3rtico
30.09.2008 um 13:22 Uhr
Ok also nun öffnet sich das entsprechende Popupfenster, wenn man auf Hinzufügen klickt. So sieht das ganze im Quellcode aus (Das öffnen-script):

01.
<?php 
02.
 
03.
	include ("include/db_connect.php"); 
04.
 
05.
                Echo "<h1>Regelerfassung</h1>"
06.
	 
07.
	$time = getdate(); 
08.
	$stamp = time(); 
09.
	$zeit = $time[mday].".".$time[mon].".".$time[year]; 
10.
	 
11.
	$ziffer = $_POST[ziffer1]; 
12.
	 
13.
	Echo "<br><br>Für die Regel wurde als Erstellungsdatum der <b>".$zeit."</b> erfasst.<br><br><br><br>"
14.
	 
15.
			$abfr = "SELECT titel 
16.
						FROM vc_goae 
17.
						WHERE goae = $ziffer"; 
18.
			 
19.
			$besch = mysql_fetch_array(mysql_query($abfr)); 
20.
			$beschreibung = $besch[titel]; 
21.
			 
22.
	if (!empty($beschreibung)){ 
23.
	$leistung = "(<i>".$beschreibung."</i>) ";} 
24.
	 
25.
	Echo "Die eingegebene Regel besagt, dass Ziffer ".$ziffer." ".$leistung."nicht neben folgenden Ziffern berechnet werden darf:<br><br><br>"
26.
	 
27.
	$zaehler = 1; 
28.
	$x = 0; 
29.
 
30.
	Echo "<table border=\"0\" width=\"70%\">"
31.
	do
32.
		$z = "ziffer".$zaehler
33.
		 
34.
		if (!empty($_POST[$z])) { 
35.
		 
36.
			$abfrage = "SELECT id, goae, titel 
37.
						FROM vc_goae 
38.
						WHERE goae = $_POST[$z]"; 
39.
			 
40.
			$eab = mysql_fetch_array(mysql_query($abfrage)); 
41.
			 
42.
			$b = $eab[titel]; 
43.
			 
44.
			if ($erf = 1){$add = "	<script language=\"javascript\" type=\"text/javascript\"
45.
										function popitup(url) { 
46.
										newwindow=window.open(url,'name','resizable=no,height=200,width=470,dependent=yes,hotkeys=no,location=no,scrollbars=no,status=no,toolbar=no'); 
47.
										if (window.focus) {newwindow.focus()} 
48.
										return false; 
49.
50.
									</script> 
51.
									<a href=\"maske.php?ziffer=$_POST[$z]\" onclick=\"return popitup('maske.php?ziffer=$_POST[$z]')\">Hinzufügen</a> 
52.
								";}	 
53.
			 
54.
			if (empty($b)){$b = "<i>(Keine Beschreibung vorhanden)</i> ".$add."";} 
55.
			 
56.
			Echo "<tr> 
57.
					<td>$_POST[$z]<br><br></td> 
58.
					<td>$b<br><br></td> 
59.
				  </tr>"; 
60.
			 
61.
			$zaehler = $zaehler + 1; 
62.
			 
63.
		} else {$x = 1;} 
64.
	 
65.
	} while ($x != 1); 
66.
	 
67.
	Echo "</table>" 
68.
	 
69.
 
70.
?>
Aus Platzgründen ohne CSS

Und hier ist das Popup Fenster:

01.
<?php 
02.
 
03.
Echo "<h1>Leistung erfassen</h1><br> 
04.
<p>Bitte geben Sie eine Leistungsbeschreibung zu Ziffer ".$_GET[ziffer]." ein:<br></p> 
05.
<input type=\"text\" name=\"beschreibung\" size=\"70\"><input type=\"hidden\" name=\"ziffer\" value=\"".$_GET[ziffer]."\"><br><br> 
06.
<input type=\"button\" value=\"Speichern\" onclick=\"\"> "
07.
 
08.
?>
(ebenfalls ohne CSS)


Die Dateien die jetzt im Verzeichnis liegen sind folgende:

eingabe.php (unrelevante Datei, ich für was anderes brauche)
eintragung.php (Die Seite auf dem Screenshot ganz oben)
maske.php (Das Popup)
prototype-1.6.0.3.js (Das ist das runter geladene Framework)
save_data.php (leer)

Wie muss ich jetzt weiter machen?
Bitte warten ..
Mitglied: dtzzzzzz
30.09.2008 um 14:00 Uhr
Ok, nun würde ich prototype-1.6.0.3.js zu prototype.js umbennen und in einen neuen Ordner, z. B. javascript einfügen.

Dann muss du die Datei einbinden in eintragung.php, bzw. im entsprechenden Tamplate.

01.
<script type="text/JavaScript" src="javascript/prototype.js"></script>
Nun brauchst du noch ein Script für AJAX:

01.
<script type="text/JavaScript"> 
02.
function saveDataAjax(zahl){ 
03.
var data = ''; 
04.
 
05.
// Prüfen, ob alle Daten vorhanden sind 
06.
if(self.document.getElementsByName('beschreibung') && self.document.getElementsByName('ziffer') && zahl){ 
07.
// Sicherheitsfrage 
08.
qu = confirm("Möchten Sie wirklich diese Daten editieren?"); 
09.
if(qu == false)return; 
10.
 
11.
// Daten sammeln 
12.
data = data+'&beschreibung='+self.document.getElementsByName('beschreibung').value; 
13.
data = data+'&ziffer='+self.document.getElementsByName('ziffer').value; 
14.
 
15.
// Daten abschicken 
16.
new Ajax.Request('save_data.php',			{method:'post', 
17.
postBody: data,					onSuccess: function(input){ 
18.
// Wenn Daten erfolgreich gespeichert wurden 
19.
alert('Daten wurden erfolgreich gespeichert.'); 
20.
// Pop-Up-Fenster schliessen Funktion hier aufrufen!							 } 
21.
onFailure: function(input){ 
22.
// Wenn die Daten nicht gespeichert wurden								alert('FEHLER!');						 } 
23.
}						);		 
24.
25.
26.
</script>
Somit wird nun die save_data.php im Hintergrund geladen und die Daten in der Variable $_POST['beschreibung'] und $_POST['ziffer'] an die php-Datei übergeben. Dort kannst du diese Daten ganz normal abrufen und in die DB abspeichern.

Da du mit 2 Fenster arbeitest, denk auch daran, wie du eine JavaScript Funktion aufrufst. Somit musst du noch in deinem onClick - Event dann eben diese Funktion aufrufen lassen saveDataAjax als Argument übergibst du ihr dann entsprechnd die Zahl.

Falls noch Fragen sind, dann frag einfach.
Bitte warten ..
Mitglied: v3rtico
30.09.2008 um 14:25 Uhr
Kannst du mir mal genau schreiben was ich in di Onclick schreiben muss? ich hab jetzt die Ajax Funktion in die Seite "Maske" eingegeben und das mit dem Aufrufen der Funktion klappt aber nicht.

Wenn ich das richtig sehe kann ich in der save_data.php dann einfach die ziffer und beschreibung aus den $_POST[] Variablen holen und in die Datenbank schreiben?
Bitte warten ..
Mitglied: dtzzzzzz
30.09.2008 um 18:25 Uhr
Ok, hier ist die Version, die bei mir funktioniert:

eintragung.php

01.
<?php 
02.
	include ("include/db_connect.php"); 
03.
 
04.
        echo "<h1>Regelerfassung</h1>"
05.
	 
06.
	$time = getdate(); 
07.
	$stamp = time(); 
08.
	$zeit = $time[mday].".".$time[mon].".".$time[year]; 
09.
	 
10.
	$ziffer = $_POST[ziffer1]; 
11.
	 
12.
	echo "<br><br>Für die Regel wurde als Erstellungsdatum der <b>".$zeit."</b> erfasst.<br><br><br><br>"
13.
	 
14.
			$abfr = "SELECT titel 
15.
						FROM vc_goae 
16.
						WHERE goae = $ziffer"; 
17.
			 
18.
			$besch = mysql_fetch_array(mysql_query($abfr)); 
19.
			$beschreibung = $besch[titel]; 
20.
			 
21.
	if (!empty($beschreibung)){ 
22.
	$leistung = "(<i>".$beschreibung."</i>) ";} 
23.
	 
24.
	Echo "Die eingegebene Regel besagt, dass Ziffer ".$ziffer." ".$leistung."nicht neben folgenden Ziffern berechnet werden darf:<br><br><br>"
25.
	 
26.
	$zaehler = 1; 
27.
	$x = 0; 
28.
 
29.
	Echo "<table border=\"0\" width=\"70%\">"
30.
	do
31.
		$z = "ziffer".$zaehler
32.
		 
33.
		if (!empty($_POST[$z])) { 
34.
		 
35.
			$abfrage = "SELECT id, goae, titel 
36.
						FROM vc_goae 
37.
						WHERE goae = $_POST[$z]"; 
38.
			 
39.
			$eab = mysql_fetch_array(mysql_query($abfrage)); 
40.
			 
41.
			$b = $eab[titel]; 
42.
			 
43.
			if ($erf = 1){$add = "	<script language=\"javascript\" type=\"text/javascript\"
44.
										function popitup(url) { 
45.
										newwindow=window.open(url,'name','resizable=no,height=200,width=470,dependent=yes,hotkeys=no,location=no,scrollbars=no,status=no,toolbar=no'); 
46.
										if (window.focus) {newwindow.focus()} 
47.
										return false; 
48.
49.
									</script> 
50.
									<a href=\"maske.php?ziffer=$_POST[$z]\" onclick=\"return popitup('maske.php?ziffer=$_POST[$z]')\">Hinzufügen</a> 
51.
								";}	 
52.
			 
53.
			if (empty($b)){$b = "<i>(Keine Beschreibung vorhanden)</i> ".$add."";} 
54.
			 
55.
			echo "<tr> 
56.
					<td>$_POST[$z]<br><br></td> 
57.
					<td>$b<br><br></td> 
58.
				  </tr>"; 
59.
			 
60.
			$zaehler = $zaehler + 1; 
61.
			 
62.
		} else {$x = 1;} 
63.
	 
64.
	} while ($x != 1); 
65.
	 
66.
	echo "</table>" 
67.
	 
68.
 
69.
?>
maske.php

01.
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" 
02.
"http://www.w3.org/TR/html4/loose.dtd"
03.
<html> 
04.
<head> 
05.
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"
06.
<meta name="language" content="de"
07.
<title>Test</title> 
08.
 
09.
<script type="text/JavaScript" src="javascript/prototype.js"></script> 
10.
<script type="text/JavaScript" src="javascript/functions.js"></script> 
11.
 
12.
<body> 
13.
 
14.
<?php 
15.
 
16.
Echo "<h1>Leistung erfassen</h1><br> 
17.
<p>Bitte geben Sie eine Leistungsbeschreibung zu Ziffer ".$_GET[ziffer]." ein:<br></p> 
18.
<input type=\"text\" id=\"beschreibung\" size=\"70\"><br><br> 
19.
<input type=\"button\" value=\"Speichern\" onclick=\"saveDataAjax(".$_GET[ziffer].")\"> "
20.
 
21.
?> 
22.
</body> 
23.
</html>
außerdem habe ich JavaScript in eine gesonderte Datei ausgelagert:

functions.js

01.
function saveDataAjax(zahl){ 
02.
	var data = ''; 
03.
 
04.
	// Prüfen, ob alle Daten vorhanden sind 
05.
	if(self.document.getElementById('beschreibung') && zahl){ 
06.
		// Sicherheitsfrage 
07.
		qu = confirm('Möchten Sie wirklich diese Daten editieren?'); 
08.
		if(qu == false)return; 
09.
	 
10.
		// Daten sammeln 
11.
		data = data+'&beschreibung='+self.document.getElementById('beschreibung').value; 
12.
	 
13.
		// Daten abschicken 
14.
		new Ajax.Request('save_data.php',			 
15.
							{method:'post', 
16.
							postBody: data,					 
17.
								onSuccess: function(input){ 
18.
									// Wenn Daten erfolgreich gespeichert wurden 
19.
									alert('Daten wurden erfolgreich gespeichert.'); 
20.
									// Pop-Up-Fenster schliessen Funktion hier aufrufen! 
21.
								 }, 
22.
								onFailure: function(input){ 
23.
									// Wenn die Daten nicht gespeichert wurden	 
24.
									alert('FEHLER!'); 
25.
26.
27.
		);		 
28.
29.
}
und schliesslich save_data.php

01.
<?PHP 
02.
  //  Hier kommt das Update rein 
03.
  echo "HIER BIN ICH"
04.
?>
Außerdem empfehle ich dir zum Testen von AJAX/JavaScript Sachen und auch natürlich vielen anderen im Browser Firefox das Add-On Firebug. Damit kannst du alle Infos ablesen! Sehr hilfreich!
Bitte warten ..
Mitglied: v3rtico
01.10.2008 um 08:16 Uhr
Ok jetzt funktionierts auch


Nur noch 2 Punkte:

Kann ich jetzt noch mit dem Popup "Die Daten wurden gespeichert" auch das Eingabepopup schließen lassen?

Ist es Möglich, dass sich in der Eintragung.php (Siehe Screenshot erster Post) die Daten auch gleich mit ändern? Also dass dann da statt "Keine Beschreibung vorhanden" die neu eingegebene Beschreibung direkt angezeigt wird? Eine Möglichkeit wäre da, dass wenn man in dem Popup "Die Daten wurden gespeichert" Ok klickt das Hauptfenster alle Ziffern nochmal per POST an sich selbst schickt und dann diesmal aus der Datenbank die neue Beschreibung mit lädt. Geht das? Und wie?
Bitte warten ..
Mitglied: dtzzzzzz
01.10.2008 um 09:51 Uhr
Natürlich kann du dann im JavaScript, nach dem die Daten gespeichert wurden, das Fenster schliessen lassen und du kannst ebenfalls das andere Fenster einfach neu laden lassen. Das wäre eine einfachere Lösung. Du kannst auch beim Neuladen des Fenster auch ein URL dort übergeben, so als wenn einer das Fenster durch einen Link aufrufen würde. Im URL kannst du dann alle deine Variablen mitübergeben.
Bitte warten ..
Mitglied: godlie
01.10.2008 um 13:00 Uhr
Hm also das mit der htaccess wird nicht funktionieren, da du dann bei jedem aufruf dich "anmelden" müsstest, oder lieg ich da grad sehr falsch?
Bitte warten ..
Mitglied: v3rtico
01.10.2008 um 13:05 Uhr
Hast du vielleicht dazu auch ein Script? Ich weiß nämlich nicht wie ich den "ok" Button mit den entsprechenden Aktionen (Nachladen der Stammseite, schließen der Eingabemaske) belegen kann.
Bitte warten ..
Mitglied: dtzzzzzz
01.10.2008 um 14:57 Uhr
Zitat von godlie:
Hm also das mit der htaccess wird nicht funktionieren, da du dann bei
jedem aufruf dich "anmelden" müsstest, oder lieg ich da
grad sehr falsch?

Da liegst du grade sehr falsch, da dort nur die Daten stehen, dass dieser Ordner von aussen nicht direkt ansprechbar wäre. Also, wenn einer das im Browser eingibt:

http://meinewebseite.de/include

Würde er dann keine Auflistung der Dateien bekommen, sondern eine Fehlermeldung, dass der Zugriff verweigert wurde. Somit kann keiner auf die Daten zugreifen, bzw. die Namen der Dateien ermitteln etc.

PHP-Script läuft aber auf dem Server und somit hat immer Zugriffsrechte darauf. Denn die Scripte werden nicht als solche zum Client übertragen, sondern dienen nur zum Generieren von dynamischen HTML-Seiten, die dann übertragen werden.

Bei den Ordnern mit den Bildern kann man das aber nicht so machen, da diese ja zum Client übertragen werden müssen. Somit kann man Bilder immer über einen direkten Link erreichen. Was man gegen Auflistung eines Ordners mit den Bildern machen könnte, um somit zumindest den Zugriff zu erschweren, eine index.htm in so einen Ordner packen, wo z. B. steht: "<h2>Bitte keinen direkten Link nutzen!</h2> Somit, wenn man z. B. das angibt:

http://www.meinewbseite.de/images

Dann nur die obere Meldung erhält und nicht die Liste aller Bilder.



Zitat von v3rtico:
Hast du vielleicht dazu auch ein Script? Ich weiß nämlich
nicht wie ich den "ok" Button mit den entsprechenden
Aktionen (Nachladen der Stammseite, schließen der Eingabemaske)
belegen kann.

Du brauchst nur nach dieser Zeile alert('Daten wurden erfolgreich gespeichert.'); in der Datei functions.js noch das einfügen:

window.parent.location.href = url;

wobei in url übergibst du den Link mit allen Parametern zum Reloaden.

Und danach schliesst du das Pop-Up-Fenster:
window.close();


Ich habe das nicht getestet, daher musst du vielleicht bei de.selfHTML.org nachschauen, wie man verschiedene Fenster genau anspricht, muss aber so ungefähr sein.
Bitte warten ..
Mitglied: godlie
01.10.2008 um 15:00 Uhr
Achso ich dachte an eine HTTP Auth geschichte mit htaccess.
Das du ein NonDirectoryListing meintest darauf bin ich nicht gekommen.
Bitte warten ..
Mitglied: v3rtico
02.10.2008 um 09:55 Uhr
Also ich hab die functions.js jetzt so modifiziert, dass sie eigentlich sowohl die eine Seite nachladen als auch das Popup schließen sollte. Doch funktioniert das nicht ganz. Das Popup schließt zwar, aber das Nachladen geht nicht. Siehe Zeile 18 und Zeile 19:

01.
function saveDataAjax(zahl){ 
02.
	var data = ''; 
03.
 
04.
	// Prüfen, ob alle Daten vorhanden sind 
05.
	if(self.document.getElementById('beschreibung') && zahl){ 
06.
	 
07.
		// Daten sammeln 
08.
		data = data+'&beschreibung='+self.document.getElementById('beschreibung').value; 
09.
	 
10.
		// Daten abschicken 
11.
		new Ajax.Request('save_data.php',			 
12.
							{method:'post', 
13.
							postBody: data,					 
14.
								onSuccess: function(input){ 
15.
									// Wenn Daten erfolgreich gespeichert wurden 
16.
									alert('Daten wurden erfolgreich gespeichert.'); 
17.
									// Pop-Up-Fenster schliessen Funktion hier aufrufen! 
18.
									opener.reload(); 
19.
									window.close(); 
20.
								 
21.
								 }, 
22.
								onFailure: function(input){ 
23.
									// Wenn die Daten nicht gespeichert wurden	 
24.
									alert('FEHLER!'); 
25.
26.
27.
		);		 
28.
29.
}
Irgendeine Idee was ich falsch mache?

Achja und bei save_data.php kommen aus irgendeinem Grund keine POST Daten an. Ich weiß nicht woran das liegen könnte.
Bitte warten ..
Mitglied: dtzzzzzz
02.10.2008 um 10:36 Uhr
Vermutlich, weil AJAX Script im neuen Fenster geladen wurde und daher "das alte Fenster" nicht kennt. Musst du ein bisschen ausprobieren, z. B. function.js im Hauptfenster laden und dann in onClick-Event noch opener.saveDataAjax ersetzen, damit das Pop-Up-Fenster auf die Funktion aus dem Hauptfenster zugreift. Danach musst du natürlich auch noch JS ändern, so dass reload() nun dann auf sich selbst angewendet wird usw.

Dass die Post Variablen nicht da sind, kannst du mit Firebug für Firefox rausfinden, ob diese überhaupt übergeben werden. Ich könnte vermuten, dass du in deinem Formular vergessen hast statt name="beschreibung" id="beschreibung" zu machen, da JavaScript nach elementById abfragt und somit logischerweise keine Werte bekommt, wenn du aber dort name="beschreibung" stehen hast.

Kann dir momentan nicht wirklich weiter helfen, da nicht an meinem Hauptrechner bin. Probiere einfach mal aus.
Bitte warten ..
Mitglied: v3rtico
02.10.2008 um 11:16 Uhr
Also die ID stimmt schon:


01.
Echo "<h1>Leistung erfassen</h1><br> 
02.
<p>Bitte geben Sie eine Leistungsbeschreibung zu Ziffer ".$_GET[ziffer]." ein:<br></p> 
03.
<input type=\"text\" id=\"beschreibung\" size=\"70\"><br><br> 
04.
<input type=\"button\" value=\"Speichern\" onclick=\"saveDataAjax(".$_GET[ziffer].")\"> ";
Wird eigentlich die ziffer auch gepostet oder muss ich die in einem Hidden-feld in dem Formular als id="ziffer" eingeben?
Bitte warten ..
Mitglied: dtzzzzzz
02.10.2008 um 11:25 Uhr
ach so, habe vergessen es zu sagen: du musst ja nicht die $_POST Variable abfragen, sondern die $_REQUEST, dann soll's wohl funktionieren. ;)
Bitte warten ..
Mitglied: v3rtico
02.10.2008 um 11:35 Uhr
Ok, dann probier ichs mal damit
Bitte warten ..
Mitglied: v3rtico
02.10.2008 um 13:18 Uhr
Also jetzt klappts fast. Nur bekommt die save_data.php mit $_REQUEST[ziffer] keine Ziffer. Wie kann ich machen dass er mir die Ziffer auch noch übergibt?
Bitte warten ..
Mitglied: dtzzzzzz
02.10.2008 um 13:35 Uhr
Ok, Max... Also ein bisschen musst du auch schon den Code dir anschauen... )

in der Function saveDataAjax

bei //Daten sammeln

kannst du noch eine Zeile einfügen:

data = data+'&ziffer='+zahl;

Dabei ist zahl die Zahl, die du ja an die Funktion auch übergibst.
Bitte warten ..
Mitglied: v3rtico
06.10.2008 um 09:02 Uhr
Aus irgendeinem Grund klappt das mit der Ziffer übergeben nicht.

01.
function saveDataAjax(zahl){ 
02.
	var data = ''; 
03.
 
04.
	// Prüfen, ob alle Daten vorhanden sind 
05.
	if(self.document.getElementById('beschreibung') && zahl){ 
06.
	 
07.
		// Daten sammeln 
08.
		data = data+'&beschreibung='+self.document.getElementById('beschreibung').value; 
09.
		data = data+'&ziffer='+self.document.getElementById('ziffer').value; 
10.
	 
11.
		// Daten abschicken 
12.
		new Ajax.Request('save_data.php',			 
13.
							{method:'post', 
14.
							postBody: data,					 
15.
								onSuccess: function(input){ 
16.
									// Wenn Daten erfolgreich gespeichert wurden 
17.
									alert('Daten wurden erfolgreich gespeichert.'); 
18.
									// Pop-Up-Fenster schliessen Funktion hier aufrufen! 
19.
									window.close(); 
20.
								 
21.
								 }, 
22.
								onFailure: function(input){ 
23.
									// Wenn die Daten nicht gespeichert wurden	 
24.
									alert('FEHLER!'); 
25.
26.
27.
		);		 
28.
29.
}
01.
<?PHP 
02.
	Include("include/db_connect.php"); 
03.
	 
04.
	$time = getdate(); 
05.
	 
06.
	$goae = $_REQUEST[ziffer]; 
07.
	$stand = $time[mday].".".$time[mon].".".$time[year]; 
08.
	$titel = $_REQUEST[beschreibung]; 
09.
	 
10.
	$add = "INSERT INTO vc_goae (goae, stand, titel) VALUES ('$goae', '$stand', '$titel')"
11.
	mysql_query($add); 
12.
	 
13.
?>
Irgendeine Idee?


Und dann habe ich auch noch probleme, das "parent"fenster zu reloaden. Hier mal ein ausschnitt aus dem Quelltext wie ich es gerade probiere:

01.
onSuccess: function(input){ 
02.
   // Wenn Daten erfolgreich gespeichert wurden 
03.
      alert('Daten wurden erfolgreich gespeichert.'); 
04.
      // Pop-Up-Fenster schliessen Funktion hier aufrufen! 
05.
      window.opener.document.location.reload(); 
06.
      window.close(); 
07.
},
Ich weiß jetzt nich genau wie ich damit das Hauptfenster ansprechen kann. Du hast zwar schonmal gesagt, ich soll da ein wenig rum probieren aber das kam zu keinem Ergebnis :/
Bitte warten ..
Mitglied: dtzzzzzz
06.10.2008 um 09:15 Uhr
Ja, wieso fragst du Ziffer ab, wenn du im HTML zahl übergibst?

Du übergibst an die JavaScript -Funktion die Variable zahl: function saveDataAjax(zahl)

In der Funktion übergibst du aber:
data+'&ziffer='+self.document.getElementById('ziffer').value;

Diese ist ja nicht im HTML-Formular vorhanden, weil auch nicht nötig.

Also es muss entweder so aussehen:
data+'&ziffer='+zahl;

dann brauchst du nur die JavaScript-Datei zu ändern,

ODER:
data+'&zahl='+zahl;
dann musst du aber auch noch die Variable in sava_data.php abändern.
Bitte warten ..
Mitglied: v3rtico
06.10.2008 um 09:21 Uhr
Ich hab jetzt in der JavaScriptdatei
01.
data+'&ziffer='+zahl;
eingesetzt. Aber ich bekomme immernoch keine Ziffer in der save_data.php
Bitte warten ..
Mitglied: dtzzzzzz
06.10.2008 um 09:35 Uhr
Ok, poste bitte noch ein Mal deinen relevanten Code komplett hier rein. ;)
Bitte warten ..
Mitglied: v3rtico
06.10.2008 um 09:51 Uhr
Das hier ist die maske.html

01.
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" 
02.
"http://www.w3.org/TR/html4/loose.dtd"> 
03.
<html> 
04.
<head> 
05.
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> 
06.
<meta name="language" content="de"> 
07.
<style type=\"text/css\"> 
08.
 
09.
body { 
10.
 background-color: #fff; 
11.
 margin: 40px; 
12.
 font-family: Lucida Grande, Verdana, Sans-serif; 
13.
 font-size: 14px; 
14.
 color: #4F5155; 
15.
16.
 
17.
a { 
18.
 color: #003399; 
19.
 background-color: transparent; 
20.
 font-weight: normal; 
21.
22.
 
23.
h1 { 
24.
 color: #444; 
25.
 background-color: transparent; 
26.
 border-bottom: 1px solid #D0D0D0; 
27.
 font-size: 16px; 
28.
 font-weight: bold; 
29.
 margin: 24px 0 2px 0; 
30.
 padding: 5px 0 6px 0; 
31.
32.
 
33.
code { 
34.
 font-family: courier, Monaco, Verdana, Sans-serif; 
35.
 font-size: 10px; 
36.
 background-color: #f9f9f9; 
37.
 border: 1px solid #D0D0D0; 
38.
 color: #002166; 
39.
 display: block; 
40.
 margin: 14px 0 14px 0; 
41.
 padding: 12px 10px 12px 10px; 
42.
43.
 
44.
h4 { 
45.
 font-family: Lucida Grande, Verdana, Sans-serif; 
46.
 font-size: 10px; 
47.
 color: #4F5155; 
48.
49.
 
50.
h2 { 
51.
 background-color: #fff; 
52.
 font-size: 14px; 
53.
 font-family: Lucida Grande, Verdana, Sans-serif; 
54.
 text-align: right; 
55.
56.
 
57.
</style> 
58.
<title>Leistung erfassen</title> 
59.
 
60.
<script type="text/JavaScript" src="javascript/prototype.js"></script> 
61.
<script type="text/JavaScript" src="javascript/functions.js"></script> 
62.
 
63.
<body> 
64.
 
65.
<?php 
66.
 
67.
Echo "<h1>Leistung erfassen</h1><br> 
68.
<p>Bitte geben Sie eine Leistungsbeschreibung zu Ziffer ".$_GET[ziffer]." ein:<br></p> 
69.
<input type=\"text\" id=\"beschreibung\" size=\"70\"><input type=\"hidden\" id=\"ziffer\" value=\"$_GET[ziffer]\"><br><br> 
70.
<input type=\"button\" value=\"Speichern\" onclick=\"saveDataAjax(".$_GET[ziffer].")\"> "; 
71.
 
72.
?> 
73.
</body> 
74.
</html>
Das hier ist die functions.js:

01.
function saveDataAjax(zahl){ 
02.
	var data = ''; 
03.
 
04.
	// Prüfen, ob alle Daten vorhanden sind 
05.
	if(self.document.getElementById('beschreibung') && zahl){ 
06.
	 
07.
		// Daten sammeln 
08.
		data = data+'&beschreibung='+self.document.getElementById('beschreibung').value; 
09.
		data+'&ziffer='+zahl; 
10.
	 
11.
		// Daten abschicken 
12.
		new Ajax.Request('save_data.php',			 
13.
							{method:'post', 
14.
							postBody: data,					 
15.
								onSuccess: function(input){ 
16.
									// Wenn Daten erfolgreich gespeichert wurden 
17.
									alert('Daten wurden erfolgreich gespeichert.'); 
18.
									// Pop-Up-Fenster schliessen Funktion hier aufrufen! 
19.
									window.opener.document.location.reload(); 
20.
									window.close(); 
21.
								 
22.
								 }, 
23.
								onFailure: function(input){ 
24.
									// Wenn die Daten nicht gespeichert wurden	 
25.
									alert('FEHLER!'); 
26.
27.
28.
		);		 
29.
30.
}
Und das hier ist die save_data.php:

01.
<?PHP 
02.
	Include("include/db_connect.php"); 
03.
	 
04.
	$time = getdate(); 
05.
	 
06.
	$goae = $_REQUEST[ziffer]; 
07.
	$stand = $time[mday].".".$time[mon].".".$time[year]; 
08.
	$titel = $_REQUEST[beschreibung]; 
09.
	 
10.
	$add = "INSERT INTO vc_goae (goae, stand, titel) VALUES ('$goae', '$stand', '$titel')"
11.
	mysql_query($add); 
12.
	 
13.
?>
Die benötigte Ziffer kommt in der Variable $_GET[ziffer] in der maske.html an
Bitte warten ..
Mitglied: dtzzzzzz
06.10.2008 um 10:53 Uhr
Die Zeile: data+'&ziffer='+zahl; ist falsch.
Es muss heißen:

data=data+'&ziffer='+zahl;

Außerdem würde ich immer bei $_REQUEST die Namen in den Klammern in ' ' schreiben:
$goae = $_REQUEST['ziffer']; Außerdem würde ich sie z. B. auch gleich auf den richtigen Format bringen: z. b.
$goae = intval($_REQUEST['ziffer']);

Um, rauszubekommen, ob die Daten von AJAX / bzw. JavaScript übergeben werden, nutze am Besten Firebug und zumindest alert - Funktion. Somit kannst du zumindest mit alert(data); sehen, welche Variablen und welche Werte übergeben werden.
Bitte warten ..
Mitglied: v3rtico
07.10.2008 um 10:07 Uhr
Juchu es funktioniert

Vielen Dank


Jetzt hab ich nur noch eine Kleinigkeit: Wenn der im Hauptfenster den Reload macht dann fragt er mich immer "Daten erneut senden?", kann ich das irgendwie umgehen?
Bitte warten ..
Mitglied: v3rtico
09.10.2008 um 11:23 Uhr
Ok da komme ich scheinbar nicht drum herum.

Vielen Dank für die viele Hilfe!

Der Beitrag ist damit dann gelöst

Viele Grüße,
Max aka v3rtico
Bitte warten ..
Neuester Wissensbeitrag
Heiß diskutierte Inhalte
Windows Userverwaltung
Ausgeschiedene Mitarbeiter im Unternehmen - was tun mit den AD Konten? (33)

Frage von patz223 zum Thema Windows Userverwaltung ...

LAN, WAN, Wireless
FritzBox, zwei Server, verschiedene Netze (21)

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

Viren und Trojaner
Aufgepasst: Neue Ransomware Goldeneye verbreitet sich rasant (20)

Link von Penny.Cilin zum Thema Viren und Trojaner ...