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

Wenn-Dann-Funktion

Frage Entwicklung PHP

Mitglied: Stadt-Husum

Stadt-Husum (Level 1) - Jetzt verbinden

05.05.2009, aktualisiert 10:39 Uhr, 4849 Aufrufe, 8 Kommentare

Guten Tag,

ich stehe gerade vor einem Problem, das ich nicht ohne Hilfe lösen kann.

Ich habe ein Formular in PHP mit einer MySQL-Datenbank.
Im Formular ist eine DropDown-Liste mit 2 Werten (Ja / Nein).
Diese Daten werden aus der Datenbank gezogen und können in dem Formular, um das es hier geht, verändert werden.
Wenn der Wert "Ja" ist, dann erscheint eine Abfrage, ob sich der Benutzer wirklich sicher ist. Bei "Nein" wird einfach nur "Nein" in die Datenbank eingetragen.

Jetzt kommt der Punkt, wo ich gerade nicht weiß, wie er zu lösen ist...

Wenn im Formular vorher schon "Ja" stand soll nicht die Abfrage erscheinen, ob sich der Benutzer sicher ist, sonder die Abfrage einfach überspringen.

Ich hänge da schon lange dran und habe keinen Plan mehr!

Danke schonmal für die Hilfe!

Dennis Baum
Stadt Husum
Mitglied: dog
05.05.2009 um 11:21 Uhr
Wenn im Formular vorher schon "Ja" stand soll nicht die Abfrage erscheinen, ob sich der Benutzer sicher ist, sonder die Abfrage einfach überspringen.

Irgendwie seh ich dein Problem nicht.
Du schaffst es doch den aktuellen Wert aus der DB zu holen und du schaffst es ihn wieder zu speichern. Wo ist da das Problem in zwischendurch auch noch gleich zu vergleichen?

Grüße

Max
Bitte warten ..
Mitglied: Stadt-Husum
05.05.2009 um 11:23 Uhr
Ich weiß ja nicht, wie das aussehen soll. Das ist es ja.
Bitte warten ..
Mitglied: dog
05.05.2009 um 12:43 Uhr
...sorry, aber ich komme nicht mit. Wie soll was aussehen?

Was ist dein bisheriger Code?
Bitte warten ..
Mitglied: dog
05.05.2009 um 20:33 Uhr
OK, ich hab deinen Code bekommen.
Allerdings ist das ein heilloses Chaos - da musst du auf jeden Fall was ändern.

Ich sehe allein vier verschiedene Stellen, an denen platz_erhalten in der DB geändert wird.

Und eine davon, nämlich:

01.
		mysql_query("UPDATE kinder SET platz_erhalten='Ja' WHERE id_kinder= ".$_POST['platz_ist_ja']);
wird jedes mal automatisch ausgeführt wenn du Seite aufrufst, weil sie an keine Bedingung geknüpft ist.

Dann gibt es noch
01.
mysql_query("UPDATE kinder SET platz_erhalten='Nein' WHERE id_kinder=$_POST[editieren]");
das genau den obigen Code wieder rückgängig macht.

Und dann gibt es noch
01.
	if(isset($_POST['ja'])) 
02.
03.
		include('config/inc_config.php'); 
04.
		mysql_query("UPDATE kinder SET platz_erhalten='Ja' WHERE id_kinder= ".$_POST['platz_ist_ja_id']); 
05.
	}
Das reagiert zwar auf deinen Abfragedialog, aber egal was der Benutzer da auswählt, weiter unten wird immer auch gleich das erste Code-Schnipsel wieder ausgeführt...

Ich weiß ehrlich grade nicht so ganz, wo ich hier Anfangen soll, dir fehlen noch eine Menge Grundlagen.

Grüße

Max
Bitte warten ..
Mitglied: Stadt-Husum
06.05.2009 um 08:01 Uhr
Hi,

wie ich dir bereits mitgeteilt habe, mache ich das zum Hobby und dann wurde sowas von mir verlangt bei der Arbeit.
hmm... Ich brauche wohl damit dringen Hilfe damit!

Wie kann ich dieses Problem lösen?
Das ich eine if-funktion benötige ist mir klar, aber habe keinen plan von der strukturierung dabei.

Gruß Dennis
Bitte warten ..
Mitglied: nxclass
06.05.2009 um 12:04 Uhr
vielleicht mal einen kleinen Programm-Ablaufplan erstellen ?

  • Wenn das Formular abgesendet wurde UND Wert im Formular 'Ja' ist UND Wert in der DB 'Nein' ist:
Formular mit Daten aus der DB und Bestätigung anzeigen

  • Wenn das Formular abgesendet wurde UND ( Wert im Formular 'Nein' ist ODER das Formular ein 2. mal Bestätigt wurde:
Daten in die DB speichern und Formular mit Daten aus der DB anzeigen

  • Wenn das Formular nicht gesendet wurde:
Formular mit Daten aus der DB anzeigen
Bitte warten ..
Mitglied: dog
09.05.2009 um 11:19 Uhr
Ich hab mal angefangen, dass Script für dich etwas umzuschreiben (es ist noch nicht fertig und ich kann nicht sagen, ob es überhaupt geht). Schau es dir mal genau an (bitte Runterscrollen):

01.
<?php 
02.
	$jahr_aktuell = date('Y'); 
03.
	$allowedCareTypes = array('Regelgruppe','Krippengruppe','Hort'); 
04.
	$allowedCareAmounts = array('Halbtags','Ganztags'); 
05.
	$dbKeys = array('nachname','vorname','tag_geb','monat_geb','jahr_geb','strasse','hausnummer','plz','stadt','vorwahl','telefon','mobil'
06.
	                'nachname_erzbe','vorname_erzbe','tag_anmeldung','monat_anmeldung','jahr_anmeldung','gewuenschte_betreuung','betreuungsumfang'
07.
	                'integrationsmasnahme','haertefall','platz_erhalten','einrichtungsname'); 
08.
	 
09.
	include('config/inc_config.php'); 
10.
	 
11.
	if($_SESSION['id_benutzer'] == '') { 
12.
		header("Location: login.php"); 
13.
		exit(0); 
14.
15.
	 
16.
	function qs($input
17.
18.
		if($input === NULL) 
19.
			return 'NULL'
20.
		if(is_bool($input)) 
21.
			return intval($input); 
22.
		if(is_float($input) || is_int($input)) 
23.
			return $input
24.
		if(get_magic_quotes_gpc()) 
25.
			$input = stripslashes($input); 
26.
		return sprintf("'%s'",mysql_real_escape_string($input)); 
27.
28.
	 
29.
	function mk_update_query($table,$updateArray,$whereArray
30.
31.
		$updateCombined = array(); 
32.
		$whereCombined = array(); 
33.
		 
34.
		foreach ($updateArray as $key => $value) { 
35.
			$updateCombined[] = sprintf('`%s` = %s',$key,qs($value)); 
36.
37.
		 
38.
		foreach ($whereArray as $key => $value) { 
39.
			$whereCombined[] = sprintf('`%s` = %s',$key,qs($value)); 
40.
41.
		 
42.
		return sprintf('UPDATE %s SET %s WHERE %s',$table,implode(', ',$updateCombined),implode(' AND ',$whereCombined)); 
43.
44.
	 
45.
	function assign_from_post(&$array,$keys
46.
47.
		foreach ($keys as $key) { 
48.
			$array[$key] = @$_POST[$key]; 
49.
50.
		 
51.
		return true; 
52.
53.
	 
54.
	function is_dbool($str
55.
56.
		$str = strtolower($str); 
57.
		 
58.
		return ($str == "ja" || $str == "nein"); 
59.
60.
	 
61.
	try { 
62.
		 
63.
		$kindQry = mysql_query(sprintf('SELECT * FROM kinder WHERE id_kinder = %u',intval($_REQUEST['id_kinder']))); 
64.
	 
65.
		if(!is_resource($kindQry)) 
66.
			throw new Exception("Datenbankfehler bei der Abfrage!"); 
67.
		 
68.
		if(mysql_num_rows($kindQry) != 1) 
69.
			throw new Exception("Dieses Kind konnte nicht gefunden werden"); 
70.
		 
71.
		$kindData = mysql_fetch_assoc($kindQry); 
72.
		$ID       = &$kindData['id_kinder']; 
73.
			 
74.
		if(isset($_POST['form_submitted'])) { 
75.
			$newData = array(); 
76.
			assign_from_post($newData,$dbKeys); 
77.
			 
78.
			$errors = array(); 
79.
			 
80.
			if(strlen($newData['nachname']) < 2) 
81.
				$errors[] = "Der eingegebene Nachname ist zu kurz!"
82.
			 
83.
			if(strlen($newData['vorname']) < 2) 
84.
				$errors[] = "Der eingegebene Vorname ist zu kurz"
85.
			 
86.
			if($newData['tag_geb'] < 1 || $newData['tag_geb'] > 31) 
87.
				$errors[] = "Geburtstag: Das ist kein gültiger Tag eines Monats!"
88.
			 
89.
			if($newData['monat_geb'] < 1 || $newData['monat_geb'] > 12) 
90.
				$errors[] = "Geburtstag: Das ist keine gültige Monatszahl!"
91.
		 
92.
			if($newData['jahr_geb'] < ($jahr_aktuell-7) || $newData['jahr_geb'] > $jahr_aktuell
93.
				$errors[] = "Geburtstag: Die Jahresangabe liegt nicht im Rahmen (muss vierstellig sein)"
94.
			 
95.
			if(strlen($newData['strasse']) < 5) 
96.
				$errors[] = "Der Straßennahme ist zu kurz"
97.
				 
98.
			if(strlen($newData['hausnummer']) < 1) 
99.
				$errors[] = "Eine Hausnummer muss angegeben werden!"
100.
				 
101.
			if(strlen($newData['plz']) != 5) 
102.
				$errors[] = "Die angegebene PLZ ist ungültig!"
103.
			 
104.
			if(strlen($newData['stadt']) < 3) 
105.
				$errors[] = "Die angegebene Stadt ist ungültig"
106.
				 
107.
			if(strlen($newData['vorwahl']) < 3) 
108.
				$errors[] = "Die Vorwahl ist ungültig"
109.
				 
110.
			// [...] 
111.
			 
112.
			if(!in_array($newData['gewuenschte_betreuung'], $allowedCareTypes)) 
113.
				$errors[] = "Die ausgewählte Betreuungsmethode gibt es nicht!"
114.
				 
115.
			if(!in_array($newData['betreuungsumfang'], $allowedCareAmounts)) 
116.
				$errors[] = "Den ausgewählten Betreuungsumfang gibt es nicht!"
117.
				 
118.
			if(empty($newData['integrationsmasnahme'])) 
119.
				$newData['integrationsmasnahme'] = "Nein"
120.
				 
121.
			if(!is_dbool($newData['integrationsmasnahme'])) 
122.
				$errors[] = "Fehlerhafte Auswahl bei Integrationsmaßnahme!"
123.
				 
124.
			if(empty($newData['haertefall'])) 
125.
				$newData['haertefall'] = "Nein"
126.
				 
127.
			if(!is_dbool($newData['haertefall'])) 
128.
				$errors[] = "Fehlerhafte Auswahl bei Härtefall!"
129.
			 
130.
			if(empty($newData['platz_erhalten'])) 
131.
				$newData['platz_erhalten'] = "Nein"
132.
				 
133.
			if(!is_dbool($newData['platz_erhalten'])) 
134.
				$errors[] = "Fehlerhafte Auswahl bei Platz erhalten!"
135.
				 
136.
			$query = mysql_query(sprintf('SELECT einrichtungsname FROM einrichtungen WHERE einrichtungsname = %s',qs($newData['einrichtungsname']))); 
137.
			 
138.
			if(mysql_num_rows($query) != 1) 
139.
				$errors[] = "Die ausgewählte Einrichtung gibt es nicht!"
140.
			 
141.
			if(empty($errors)) { 
142.
				$queryResult = mysql_query(mk_update_query('kinder',$newData,array('id_kinder' => $_POST['id_kinder']))); 
143.
			 
144.
				if(!$queryResult
145.
					throw new Exception("Beim Aktualisieren der Daten ist ein schwerer Fehler aufgetreten!"); 
146.
				 
147.
				header("Location: x.php"); 
148.
				exit(0); 
149.
150.
151.
		 
152.
	} catch (Exception $e) { 
153.
?> 
154.
<html> 
155.
	<head> 
156.
		<title>Programmfehler!</title> 
157.
	</head> 
158.
	<body> 
159.
		<div id="error"
160.
			<h1><?php echo $e->getMessage(); ?></h1> 
161.
		</div> 
162.
	</body> 
163.
</html> 
164.
<?php 
165.
		exit(1); 
166.
167.
?> 
168.
<html> 
169.
	<head> 
170.
		<title>Meine Website</title> 
171.
		<script type="text/javascript" charset="utf-8"
172.
			function askContinue () { 
173.
				var platzErhaltenBox = document.getElementById('platz_erhalten'); 
174.
				 
175.
				if(platzErhaltenBox.checked) { 
176.
					var check = confirm("Wenn Sie jetzt 'Platz erhalten' markieren wird das Kind danach für Sie nicht mehr sichtbar sein.\nWollen Sie wirklich fortfahren?"); 
177.
					return check; 
178.
179.
180.
		</script> 
181.
	</head> 
182.
	<body> 
183.
<?php	if(!empty($errors)): ?> 
184.
		<div id="errors"
185.
			Bei der Prüfung sind folgende Fehler aufgetreten: 
186.
			<ul> 
187.
<?php 	foreach($errors as $errorMsg): ?> 
188.
				<li><?php echo $errorMsg ?></li> 
189.
<?php 	endforeach; ?> 
190.
			</ul> 
191.
		</div> 
192.
<?php endif; ?> 
193.
		<form action="" method="post" onsubmit="return askContinue();"
194.
			<div> 
195.
				<table border="0" width="50%"
196.
					<tr> 
197.
						<td>Nachname:</td> 
198.
						<td> 
199.
							<INPUT type="text" name="nachname" value="<?php echo $kindData['nachname'] ?>" size="" maxlength=""><br> 
200.
						</td> 
201.
					</tr> 
202.
 
203.
					<tr> 
204.
						<td>Vorname:</td> 
205.
						<td> 
206.
							<INPUT type="text" name="vorname" value="<?php echo $kindData['vorname'] ?>" size="" maxlength=""><br> 
207.
						</td> 
208.
					</tr> 
209.
 
210.
					<TR> 
211.
						<TD>Geburtsdatum:</TD> 
212.
						<TD> 
213.
							<input type="text" name="tag_geb" maxlength="2" size="2" value="<?php echo $kindData['tag_geb'] ?>"> .  
214.
							<input type="text" name="monat_geb" maxlength="4" size="4" value="<?php echo $kindData['monat_geb'] ?>"> .  
215.
							<input type="text" name="jahr_geb" maxlength="4" size="4" value="<?php echo $kindData['jahr_geb'] ?>"
216.
						</td> 
217.
					</tr> 
218.
 
219.
					<tr> 
220.
						<td>Strasse und <br>&nbsp;&nbsp;Hausnummer:</td>  
221.
						<td> 
222.
							<INPUT type="text" name="strasse" value="<?php echo $kindData['strasse']; ?>" size="10"
223.
							<INPUT type="text" name="hausnummer" value="<?php echo $kindData['hausnummer']; ?>" size="2"
224.
						</td> 
225.
					</tr> 
226.
 
227.
					<tr> 
228.
						<td>*PLZ und Stadt:	</td>  
229.
						<td> 
230.
							<INPUT type="text" name="plz" value="<?php echo $kindData['plz'];?>" size="3" maxlength="8"
231.
							<INPUT type="text" name="stadt" value="<?php echo $kindData['stadt'];?>" size="9"
232.
						</td> 
233.
					</tr> 
234.
 
235.
					<tr> 
236.
						<td>*Telefon:</td>  
237.
						<td> 
238.
							<INPUT type="text" name="vorwahl" value="<?php echo $kindData['vorwahl'];?>" size="3" maxlength="5"> / 
239.
							<INPUT type="text" name="telefon" value="<?php echo $kindData['telefon'];?>" size="9" maxlength=""
240.
						</td> 
241.
					</tr> 
242.
 
243.
					<tr> 
244.
						<td>Mobil:</td>  
245.
						<td> 
246.
							<INPUT type="text" name="mobil" value="<?php echo $kindData['mobil'];?>" size="18" maxlength=""><br> 
247.
						</td> 
248.
					</tr> 
249.
 
250.
					<tr> 
251.
						<td> 
252.
							*Name, Vorname:<br> 
253.
							(Erziehungsber.) 
254.
						</td>  
255.
						<td> 
256.
							<INPUT type="text" name="nachname_erzbe" value="<?php echo $kindData['nachname_erzbe'];?>" size="9" maxlength="">,  
257.
							<INPUT type="text" name="vorname_erzbe" value="<?php echo $kindData['vorname_erzbe'];?>" size="9" maxlength=""
258.
						</td> 
259.
					</tr>  
260.
 
261.
					<TR> 
262.
						<TD>*Anmeldedatum:</TD> 
263.
						<TD> 
264.
							<input type="text" name="tag_anmeldung" maxlength="2" size="2" value="<?php echo $kindData['tag_anmeldung'] ?>"> .  
265.
							<input type="text" name="monat_anmeldung" maxlength="4" size="4" value="<?php echo $kindData['monat_anmeldung'] ?>"> .  
266.
							<input type="text" name="jahr_anmeldung" maxlength="4" size="4" value="<?php echo $kindData['jahr_anmeldung'] ?>"
267.
						</TD> 
268.
					</TR> 
269.
 
270.
					<TR> 
271.
						<TD>*Gew&uuml;nschte <br>&nbsp;&nbsp;Betreuung:</TD> 
272.
						<TD> 
273.
							<SELECT name="gewuenschte_betreuung"
274.
<?php  
275.
							foreach ($allowedCareTypes as $type) { 
276.
								echo '<option value="'.$type.'"'
277.
								if($type == $kindData['gewuenschte_betreuung']) 
278.
									echo ' selected="selected"'
279.
								echo '>'.$type.'</option>'
280.
281.
 
282.
 ?> 
283.
							</SELECT> 
284.
						</TD> 
285.
					</TR> 
286.
 
287.
					<TR> 
288.
						<TD>*Betreuungsumfang:</TD> 
289.
						<TD> 
290.
							<SELECT name="betreuungsumfang"
291.
<?php  
292.
							foreach ($allowedCareAmounts as $type) { 
293.
								echo '<option value="'.$type.'"'
294.
								if($type == $kindData['betreuungsumfang']) 
295.
									echo ' selected="selected"'
296.
								echo '>'.$type.'</option>'
297.
298.
 
299.
 ?> 
300.
							</SELECT> 
301.
						</TD> 
302.
					</TR> 
303.
 
304.
					<TR> 
305.
						<TD>*I-Ma&szlig;nahme:</TD> 
306.
						<td> 
307.
							<input type="checkbox" name="integrationsmasnahme" <?php echo (($kindData['integrationsmasnahme'] == 'Ja')? 'checked="checked"' : '') ?> value="Ja"
308.
							I-Ma&szlig;nahme anwenden 
309.
						</td> 
310.
					</TR> 
311.
					 
312.
					<TR> 
313.
						<TD>H&auml;rtefall:</TD> 
314.
						<td> 
315.
							<input type="checkbox" name="haertefall" <?php echo (($kindData['haertefall'] == 'Ja')? 'checked="checked"' : '') ?> value="Ja"
316.
						</td> 
317.
					</TR> 
318.
 
319.
					<tr> 
320.
						<td>&nbsp;&nbsp;Platz erhalten:</td> 
321.
						<TD> 
322.
							<input type="checkbox" name="platz_erhalten" <?php echo (($kindData['platz_erhalten'] == 'Ja')? 'checked="checked"' : '') ?> value="Ja" id="platz_erhalten"
323.
						</td> 
324.
					</tr> 
325.
 
326.
					<tr> 
327.
						<td>Name der Einrichtung:</td> 
328.
						<td> 
329.
							<select name="einrichtungsname"
330.
<?php 
331.
								$accomodationQuery = mysql_query('SELECT einrichtungsname FROM einrichtungen ORDER BY einrichtungsname ASC'); 
332.
								while ($row = mysql_fetch_assoc($accomodationQuery)) { 
333.
									$aName = $row['einrichtungsname']; 
334.
									echo '<option value="'.$aName.'"'
335.
									if($aName == $kindData['einrichtungsname']) 
336.
										echo ' selected="selected"'
337.
									echo '>'.$aName.'</option>'
338.
339.
 
340.
?> 
341.
							</select> 
342.
						</td> 
343.
					</tr> 
344.
					 
345.
					<tr> 
346.
						<td colspan="2"
347.
							<input type="hidden" name="id_kinder" value="<?php echo $ID; ?>" /> 
348.
							<INPUT type="submit" name="form_submitted" value="senden"
349.
						</td> 
350.
					</tr> 
351.
				</table> 
352.
			</div> 
353.
		</form> 
354.
	</body> 
355.
</html>
01.
<?php 
02.
	$jahr_aktuell = date('Y'); 
03.
	$allowedCareTypes = array('Regelgruppe','Krippengruppe','Hort'); 
04.
	$allowedCareAmounts = array('Halbtags','Ganztags'); 
05.
	$dbKeys = array('nachname','vorname','tag_geb','monat_geb','jahr_geb','strasse','hausnummer','plz','stadt','vorwahl','telefon','mobil', 
06.
	                'nachname_erzbe','vorname_erzbe','tag_anmeldung','monat_anmeldung','jahr_anmeldung','gewuenschte_betreuung','betreuungsumfang', 
07.
	                'integrationsmasnahme','haertefall','platz_erhalten','einrichtungsname');
Bestimmte Datenfelder erlauben auch nur bestimmte Werte. Das notieren wir uns gleich am Anfang, wir werden es später noch brauchen.
Übrigens verwende ich hier einfache Anführungszeichen, weil PHP damit leichter arbeiten kann. Doppelte sollte man NUR verwenden, wenn sich im String Variablen oder Escape-Sequenzen befinden.

01.
	include('config/inc_config.php');
DIe Konfiguration sollte unabhängig von irgendwelchen if-Bedingungen geladen werden.

01.
	if($_SESSION['id_benutzer'] == '') { 
02.
		header("Location: login.php"); 
03.
		exit(0); 
04.
	}
Wenn der Benutzer nicht angemeldet ist, wird er auf die Seite login.php weitergeleitet und das Script beendet (wichtig!).

01.
	function qs($input) 
02.
03.
		if($input === NULL) 
04.
			return 'NULL'; 
05.
		if(is_bool($input)) 
06.
			return intval($input); 
07.
		if(is_float($input) || is_int($input)) 
08.
			return $input; 
09.
		if(get_magic_quotes_gpc()) 
10.
			$input = stripslashes($input); 
11.
		return sprintf("'%s'",mysql_real_escape_string($input)); 
12.
	}
Die Funktion escapt einen Wert für die Datenbank. Siehe Wikipedia-Artikel zum Thema SQL-Injection!

01.
	function mk_update_query($table,$updateArray,$whereArray) 
02.
03.
		$updateCombined = array(); 
04.
		$whereCombined = array(); 
05.
		 
06.
		foreach ($updateArray as $key => $value) { 
07.
			$updateCombined[] = sprintf('`%s` = %s',$key,qs($value)); 
08.
09.
		 
10.
		foreach ($whereArray as $key => $value) { 
11.
			$whereCombined[] = sprintf('`%s` = %s',$key,qs($value)); 
12.
13.
		 
14.
		return sprintf('UPDATE %s SET %s WHERE %s',$table,implode(', ',$updateCombined),implode(' AND ',$whereCombined)); 
15.
	}
Die Funktion erzeugt einen UPDATE-Query aus einem Tabellennamen, deinem assoz. Array mit den Werten und einem assoz. WHERE-Array. Dabei werden die Eingaben auch gleich noch escapt!

01.
	function assign_from_post(&$array,$keys) 
02.
03.
		foreach ($keys as $key) { 
04.
			$array[$key] = @$_POST[$key]; 
05.
06.
		 
07.
		return true; 
08.
	}
Die Funktion kopiert einfach nur bestimmte Werte aus dem $_POST-Array in einen angegebenen Array.
Wozu zeige ich später noch.

01.
	function is_dbool($str) 
02.
03.
		$str = strtolower($str); 
04.
		 
05.
		return ($str == "ja" || $str == "nein"); 
06.
	}
Die Funktion ist dafür da, um deine Ja/Nein-Felder auf Korrektheit zu Überprüfen.

01.
	try {
Zum Thema try/catch (oder: Exceptions) lies dir am Besten mal das PHP-Handbuch durch: http://de3.php.net/manual/de/language.exceptions.php
Grob gesagt kannst du in einem try-Block irgendeinen Code abarbeiten, aber wenn etwas passiert, was dir nicht passt kannst du den ganzen Code an dieser Stelle sofort abbrechen und PHP springt zum catch-Block.
Das ganze ist um einige eleganter als endlose if-Stapel.

01.
		if(!is_resource($kindQry)) 
02.
			throw new Exception("Datenbankfehler bei der Abfrage!");
Hier siehst du so ein Beispiel:
Wenn das ausgewählte Kind in der Datenbank nicht gefunden wird, wird sofort mit jeder weiteren Ausführung abgebrochen und zum catch-Block gesprungen.
Es macht ja auch keinen Sinn weiterzuarbeiten, wenn es das Kind gar nicht gibt.

01.
		if(isset($_POST['form_submitted'])) {
Der Code wird ausgeführt, wenn das Formular abgesendet wurde.
Das erkläre ich später, weil es logisch auch weiter hinten steht.

01.
	} catch (Exception $e) { 
02.
?> 
03.
<html> 
04.
	<head> 
05.
		<title>Programmfehler!</title> 
06.
	</head> 
07.
	<body> 
08.
		<div id="error"> 
09.
			<h1><?php echo $e->getMessage(); ?></h1> 
10.
		</div> 
11.
	</body> 
12.
</html> 
13.
<?php 
14.
		exit(1); 
15.
	}
Hier haben wir den catch-Block, der zum try-Block gehört.
catch-Blöcke werden immer NUR dann ausgeführt, wenn in einem try-Block ein Fehler aufgetreten ist.
Hier wird die Fehlermeldung noch einmal angezeigt und das Programm dann beendet, weil ein Weitermachen sinnlos wäre.

01.
		<script type="text/javascript" charset="utf-8"> 
02.
			function askContinue () { 
03.
				var platzErhaltenBox = document.getElementById('platz_erhalten'); 
04.
				 
05.
				if(platzErhaltenBox.checked) { 
06.
					var check = confirm("Wenn Sie jetzt 'Platz erhalten' markieren wird das Kind danach für Sie nicht mehr sichtbar sein.\nWollen Sie wirklich fortfahren?"); 
07.
					return check; 
08.
09.
10.
		</script>
Deine Sicherheitsabfrage habe ich mal als Javascript gelöst, weil es eine Menge Arbeit im Vergleich zu PHP spart.
Einziger Nachteil: Hat ein Benutzer Javascript deaktiviert sieht er sie nicht!

01.
<?php	if(!empty($errors)): ?> 
02.
		<div id="errors"> 
03.
			Bei der Prüfung sind folgende Fehler aufgetreten: 
04.
			<ul> 
05.
<?php 	foreach($errors as $errorMsg): ?> 
06.
				<li><?php echo $errorMsg ?></li> 
07.
<?php 	endforeach; ?> 
08.
			</ul> 
09.
		</div> 
10.
<?php endif; ?>
Hier werden Fehler angezeigt, die beim Verarbeiten des Formulars auftraten.
Dazu später mehr.

01.
		<form action="" method="post" onsubmit="return askContinue();">
Die vorher angelegte Javascript-Funktion wird hier mit dem Formular und der onSubmit-Aktion verbunden.
D.h.: Schickt jemand das Formular ab, kommt ggf. die Abfrage.

01.
							<SELECT name="gewuenschte_betreuung"> 
02.
<?php  
03.
							foreach ($allowedCareTypes as $type) { 
04.
								echo '<option value="'.$type.'"'; 
05.
								if($type == $kindData['gewuenschte_betreuung']) 
06.
									echo ' selected="selected"'; 
07.
								echo '>'.$type.'</option>'; 
08.
09.
 
10.
 ?> 
11.
							</SELECT>
Die Betreuungsmöglichkeiten haben wir ja oben bereits als Array festgelegt.
Das können wir jetzt einfach über PHP ausgeben und gleichzeitig können wir noch prüfen, ob eins der Felder schon vorausgewählt ist.

01.
<input type="checkbox" name="integrationsmasnahme" <?php echo (($kindData['integrationsmasnahme'] == 'Ja')? 'checked="checked"' : '') ?> value="Ja">
Deine Ja/Nein-Radiogruppen hab ich mal durch Checkboxen ersetzt, weil es hier mehr Sinn macht.
Der PHP-Code überprüft, ob eine Checkbox vorausgewählt ist oder nicht.

Kommen wir jetzt zum Teil nach dem Absenden des Formulars:

01.
			$newData = array(); 
02.
			assign_from_post($newData,$dbKeys);
Hier holen wir uns aus $_POST die Daten raus, die uns wirklich interessieren.
Warum zeigt sich später noch.

01.
			$errors = array();
Es ist immer eine gute Idee Variablen vor ihrer Benutzung zu initialisieren.

01.
			if($newData['tag_geb'] < 1 || $newData['tag_geb'] > 31) 
02.
				$errors[] = "Geburtstag: Das ist kein gültiger Tag eines Monats!";
1. Grundregel der Webapplikationprogammierung: Vertraue nichts, was vom Benutzer kommt.
Darum: Immer alles auf Korrektheit überprüfen, sonst bekommst du irgendwann ein Problem.

01.
// [...]
Dein Teil hab ich mal dir überlassen.

01.
			if(empty($newData['integrationsmasnahme'])) 
02.
				$newData['integrationsmasnahme'] = "Nein"; 
03.
				 
04.
			if(!is_dbool($newData['integrationsmasnahme'])) 
05.
				$errors[] = "Fehlerhafte Auswahl bei Integrationsmaßnahme!";
Hier stellen wir zuerst sicher, dass eine nicht ausgewählte Checkbox den Wert "Nein" bekommt und dann prüfen wir, ob dort auch tatsächlich nur Ja oder Nein steht.
Ja, auch sowas lässt sich leicht manipulieren!

01.
			$query = mysql_query(sprintf('SELECT einrichtungsname FROM einrichtungen WHERE einrichtungsname = %s',qs($newData['einrichtungsname']))); 
02.
			 
03.
			if(mysql_num_rows($query) != 1) 
04.
				$errors[] = "Die ausgewählte Einrichtung gibt es nicht!";
Hier überprüfen wir noch mal ob es die angegebene Einrichtung wirklich gibt (also genau eine Zeile bei der Abfrage)

01.
			if(empty($errors)) {
Jeder Fehler wurde als Eintrag im Array $errors gespeichert.
Nur wenn der leer ist machen wir weiter.

01.
$queryResult = mysql_query(mk_update_query('kinder',$newData,array('id_kinder' => $_POST['id_kinder'])));
Hier versteckt sich der ganze UPDATE-Query.
Darum war es auch wichtig, dass wir aus POST nur die Felder holen, die es auch wirklich als Datenbankspalten gibt.

01.
				header("Location: x.php"); 
02.
				exit(0);
Wenn alles geklappt hat leiten wir den Benutzer weiter und beenden das Script.

Grüße

Max
Bitte warten ..
Neuester Wissensbeitrag
Internet

Unbemerkt - Telekom Netzumschaltung! - BNG - Broadband Network Gateway

(3)

Erfahrungsbericht von ashnod zum Thema Internet ...

Ähnliche Inhalte
VB for Applications
gelöst VBA Zellen dublizieren plus Wenn Dann Funktion (4)

Frage von grasihuepfer zum Thema VB for Applications ...

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

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

Internet Domänen
Weiterleitung wenn Domain nicht erreichbar (8)

Frage von BAMA1971 zum Thema Internet Domänen ...

Heiß diskutierte Inhalte
Switche und Hubs
Trunk für 2xCisco Switch. Wo liegt der Fehler? (17)

Frage von JayyyH zum Thema Switche und Hubs ...

Windows Server
Outlook Verbindungsversuch mit Exchange (15)

Frage von xbast1x zum Thema Windows Server ...

Microsoft Office
Keine Updates für Office 2016 (11)

Frage von Motte990 zum Thema Microsoft Office ...