Formular "verbessern"

alex130

Erfahrenes Mitglied
Hi
Ich schreibe derzeit eine Kundenverwaltung für private Zwecke (für meinen Vater) und nun habe ich eine Frage zu den Formularen und zwar wenn ich einen Kunden suche und dann anzeige, dann werden die Daten des Kunden in dem jeweiligen Eingabefeld anzeigt, sodass man sie bearbeiten kann und gleich speichern kann, doch so wie ich das gelöst habe gefällt mir das überhaupt nicht...
Darum meine Frage, gibt es eine Methode um das zu vereinfachen/verkürzen (denn es sind immerhin ca. 20 verschiedene Formulare...) und es evtl. ein bisschen professioneller zu lösen?
Hier mein Code:
PHP:
<?php
//login teil...

$sql = mysql_query('SELECT * FROM `'.$mysql_table_privatkunden.'` WHERE `id` = "'.mysql_real_escape_string($_GET['id']).'"');
$row = mysql_fetch_assoc($sql);

	function reconvert_date($datum1) { 
	$teile1 = explode("-", $datum1);
	return $teile1; }
	
	$date1 = $row['geburtstag'];
	$datum1 = reconvert_date($date1);
	$geburtstag1 = $datum1[2].".".$datum1[1].".".$datum1[0];
	
	
	function convert_date($datum) { 
	$teile = explode(".", $datum);
	return $teile; }
	
	$date = $_POST['geburtstag'];
	$datum = convert_date($date);
	$geburtstag = $datum[2]."-".$datum[1]."-".$datum[0];
	
	$hash = rand(1000,100000000000);

if(isset($_POST['submit']))
{

	$update = 'UPDATE `'.$mysql_table_privatkunden.'` SET 
	`anrede` = "'.mysql_real_escape_string($_POST['anrede']).'",
	`akademischer_titel` = "'.mysql_real_escape_string($_POST['akademischer_titel']).'",
	`vorname` = "'.mysql_real_escape_string($_POST['vorname']).'",
	`nachname` = "'.mysql_real_escape_string($_POST['nachname']).'",
	`geburtstag` = "'.mysql_real_escape_string($geburtstag).'",
	`sozialv_nummer` = "'.mysql_real_escape_string($_POST['sozialv_nummer']).'",
	`beruf` = "'.mysql_real_escape_string($_POST['beruf']).'",
	`festnetz` = "'.mysql_real_escape_string($_POST['festnetz']).'",	
	`beruflich` = "'.mysql_real_escape_string($_POST['beruflich']).'",
	`handy` = "'.mysql_real_escape_string($_POST['handy']).'",
	`fax` = "'.mysql_real_escape_string($_POST['fax']).'",
	`email` = "'.mysql_real_escape_string($_POST['email']).'",
	`art` = "'.mysql_real_escape_string($_POST['art']).'",
	`nummer` = "'.mysql_real_escape_string($_POST['nummer']).'",
	`datum` = "'.mysql_real_escape_string($_POST['datum']).'",
	`behoerde` = "'.mysql_real_escape_string($_POST['behoerde']).'",	
	`kontonummer` = "'.mysql_real_escape_string($_POST['kontonummer']).'",
	`blz` = "'.mysql_real_escape_string($_POST['blz']).'",
	`bank` = "'.mysql_real_escape_string($_POST['bank']).'",	
	`staatsbuergerschaft` = "'.mysql_real_escape_string($_POST['staatsbuergerschaft']).'",
	`verwendung` = "'.mysql_real_escape_string($_POST['verwendung']).'",
	`strasse` = "'.mysql_real_escape_string($_POST['strasse']).'",
	`ort` = "'.mysql_real_escape_string($_POST['ort']).'",
	`land` = "'.mysql_real_escape_string($_POST['land']).'",
	`notizen` = "'.mysql_real_escape_string($_POST['notizen']).'",
	`profil` = "'.mysql_real_escape_string($_POST['profil']).'",
	`betreuer` = "'.mysql_real_escape_string($_POST['betreuer']).'",
	`partnerart` = "'.mysql_real_escape_string($_POST['partnerart']).'" WHERE `id` = "'.mysql_real_escape_string($_GET['id']).'"';
	mysql_query($update) OR die(mysql_error());
	echo "Die &Auml;nderungen wurden &uuml;bernommen!<br>";
	echo $update;

}
else
{

	////////////////////////////////////////////////////////////////////////////////////////////

	echo '
	<form action="" method="post">
	<table width="570" border="0" align="center" />

	<tr>
		<td class="headline"><strong>Namensdaten</strong></td>
	</tr>
	<tr>
    	<td class="table2" align="left">DVM-Profil</td>
    	<td class="table2" align="left"><textarea name="profil" cols="45" rows="5">'.$row['profil'].'</textarea></td>
 	 </tr>
  	<tr>
    	<td class="table1" align="left">Anrede</td>
    	<td class="table1" align="left">';
		echo '<select name="anrede">';  
		for($i=1;$i<=count($array_anrede);$i++) 
		{ 
    		echo '<option value="'.$i.'"'; if($i == $row['anrede']) { echo 'selected="selected"'; } echo '>'.$array_anrede[$i].'</option>'; 
		} 
		echo '</select>'; 
		echo '</td>
  	</tr>
  	<tr>
    	<td class="table2" align="left">Akademischer Titel </td>
    	<td class="table2" align="left">';
		echo '<select name="akademischer_titel">';  
		for($i=1;$i<=count($array_akademische_titel);$i++) 
		{ 
    		echo '<option value="'.$i.'"'; if($i == $row['akademischer_titel']) { echo 'selected="selected"'; } echo '>'.$array_akademische_titel[$i].'
			</option>'; 
		} 
		echo '</select>'; 
		echo '</td>
 	</tr>
  	<tr>
    	<td class="table1" align="left">Zuname</td>
    	<td class="table1" align="left"><input type="text" name="nachname" size="30" value="'.$row['nachname'].'" /></td>
  	</tr>
  	<tr>
    	<td class="table2" align="left">Vorname</td>
    	<td class="table2" align="left"><input type="text" name="vorname" size="30" value="'.$row['vorname'].'" /></td>
  	</tr>
 	<tr>
    	<td class="table1" align="left">Geburtsdatum</td>
    	<td class="table1" align="left"><input type="text" name="geburtstag" size="20" value="'.$geburtstag1.'" id="txtID" onblur="setzePunkte()" />
		&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; TT.MM.JJJJ
		</td>
  	</tr>
  	<tr>
    	<td class="table2" align="left">Sv-Nr.</td>
    	<td class="table2" align="left"><input type="text" name="sozialv_nummer" size="30" value="'.$row['sozialv_nummer'].'" /></td>
  	</tr>
  	<tr>
    	<td class="table2" align="left">Betreuer</td>
    	<td class="table2" align="left">';
		echo '<select name="betreuer">';  
		for($i=1;$i<=count($array_betreuer);$i++) 
		{ 
    		echo '<option value="'.$i.'"'; if($i == $row['betreuer']) { echo 'selected="selected"'; } echo '>'.$array_betreuer[$i].'
			</option>'; 
		} 
		echo '</select>'; 
		echo '</td>
 	</tr>
  	<tr>
    	<td class="table1">Partnerart</td>
    	<td class="table1">';
		echo '<select name="partnerart">';  
		for($i=1;$i<=count($array_partnerart);$i++) 
		{ 
    		echo '<option value="'.$i.'"'; if($i == $row['partnerart']) { echo 'selected="selected"'; } echo '>'.$array_partnerart[$i].'</option>'; 
		} 
		echo '</select>'; 
    	echo '</td>
 	</tr>
 	<tr>
		<td class="table2" align="left">Beruf</td>
		<td class="table2" align="left">';
		echo '<select name="beruf">';  
		for($i=1;$i<=count($array_berufe);$i++) 
		{ 
    		echo '<option value="'.$i.'"'; if($i == $row['beruf']) { echo 'selected="selected"'; } echo '>'.$array_berufe[$i].'</option>'; 
		} 
		echo '</select>'; 
    	echo '</td>
	</tr>

	<tr><td colspan="2">&nbsp;</td></tr>
	<tr><td colspan="2">&nbsp;</td></tr>

	<tr>
		<td><strong class="headline">Adresse</strong></td>
	</tr>
	<tr>
    	<td class="table1" align="left">Verwendung</td>
    	<td class="table1" align="left">';
		echo '<select name="verwendung">';  
		for($i=1;$i<=count($array_verwendung);$i++) 
		{ 
    		echo '<option value="'.$i.'"'; if($i == $row['verwendung']) { echo 'selected="selected"'; } echo '>'.$array_verwendung[$i].'</option>'; 
		} 
		echo '</select>'; 
		echo '</td>
  	</tr>
 	<tr>
    	<td class="table2" align="left">Straße</td>
    	<td class="table2" align="left"><input type="text" name="strasse" size="30" value="'.$row['strasse'].'" /></td>
  	</tr>
   	<tr>
    	<td class="table1" align="left">PLZ - Ort</td>
    	<td class="table1" align="left"><input type="text" name="ort" size="30" value="'.$row['ort'].'" /></td>
  	</tr>
    <tr>
    	<td class="table2" align="left">Land</td>
    	<td class="table2" align="left">';  
		echo '<select name="land">';
		for($i=1;$i<=count($array_laender);$i++) 
		{ 
    		echo '<option value="'.$i.'"'; if($i == ''.$row['land'].'') { echo 'selected="selected"'; } echo '>'.$array_laender[$i].'</option>'; 
		} 
		echo '</select>';
		echo '</td>
  	</tr>
    <tr>
    	<td class="table1" align="left">Staatsb&uuml;rgerschaft</td>
    	<td class="table1" align="left">';  
		echo '<select name="staatsbuergerschaft">';
		for($i=1;$i<=count($array_staatsbuergerschaft);$i++) 
		{ 
    		echo '<option value="'.$i.'"'; if($i == ''.$row['staatsbuergerschaft'].'') { echo 'selected="selected"'; } echo '>'.$array_staatsbuergerschaft[$i].'</option>'; 
		} 
		echo '</select>';
		echo '</td>
  	</tr>
  
	<tr><td colspan="2">&nbsp;</td></tr>
	<tr><td colspan="2" align="left">&nbsp;</td></tr>

	<tr>
		<td><strong class="headline">Kommunikation</strong></td>
	</tr>
	<tr>
    	<td class="table2" align="left">Festnetz</td>
    	<td class="table2" align="left"><input type="text" name="festnetz" size="30" value="'.$row['festnetz'].'" /></td>
  	</tr>
  	<tr>
    	<td class="table1" align="left">Beruflich</td>
    	<td class="table1" align="left"><input type="text" name="beruflich" size="30" value="'.$row['beruflich'].'" /></td>
  	</tr>
 	<tr>
    	<td class="table2" align="left">Handy</td>
    	<td class="table2" align="left"><input type="text" name="handy" size="30" value="'.$row['handy'].'" /></td>
  	</tr>
   	<tr>
    	<td class="table1" align="left">Fax</td>
    	<td class="table1" align="left"><input type="text" name="fax" size="30" value="'.$row['fax'].'" /></td>
  	</tr>
    <tr>
    	<td class="table2" align="left">Email</td>
    	<td class="table2" align="left"><input type="text" name="email" size="30" value="'.$row['email'].'" /></td>
  	</tr>

	<tr><td colspan="2">&nbsp;</td></tr>
	<tr><td colspan="2" align="left">&nbsp;</td></tr>

	<tr>
		<td><strong class="headline">Bankverbindung</strong></td>
	</tr>
 	<tr>
    	<td class="table1" align="left">Kontonummer</td>
    	<td class="table1" align="left"><input type="text" name="kontonummer" size="30" value="'.$row['kontonummer'].'" /></td>
  	</tr>
   	<tr>
    	<td class="table2" align="left">BLZ</td>
    	<td class="table2" align="left"><input type="text" name="blz" size="10" value="'.$row['blz'].'" /></td>
  	</tr>
    <tr>
    	<td class="table1" align="left">Bank</td>
    	<td class="table1" align="left"><input type="text" name="bank" size="30"  value="'.$row['bank'].'"/></td>
	</tr>

	<tr><td colspan="2">&nbsp;</td></tr>
	<tr><td colspan="2">&nbsp;</td></tr>

	<tr>
		<td><strong class="headline">Identitätsnachweis</strong></td>
	</tr>
	<tr>
    	<td class="table2" align="left">Art</td>
    	<td class="table2" align="left">';
		echo '<select name="art">';  
		for($i=1;$i<=count($array_art);$i++) 
		{ 
    		echo '<option value="'.$i.'"'; if($i == $row['art']) { echo 'selected="selected"'; } echo '>'.$array_art[$i].'</option>'; 
		} 
		echo '</select>'; 
		echo '</td>
  	</tr>
 	<tr>
    	<td class="table1" align="left">Nummer / Kennung</td>
    	<td class="table1" align="left"><input type="text" name="nummer" size="30" value="'.$row['nummer'].'" /></td>
  	</tr>
   	<tr>
    	<td class="table2" align="left">Ausstellungs Datum</td>
    	<td class="table2" align="left"><input type="text" name="datum" size="30" value="'.$row['datum'].'" /></td>
  	</tr>
    <tr>
    	<td class="table1" align="left">Beh&ouml;rde</td>
    	<td class="table1" align="left"><input type="text" name="behoerde" size="30" value="'.$row['behoerde'].'" /></td>
  	</tr>
    <tr>
    	<td class="table2">Notizen</td>
    	<td class="table2"><textarea name="notizen" cols="45" rows="5">'.$row['notizen'].'</textarea></td>
  	</tr>
   	<tr>
   		<td colspan="3">&nbsp;</td>
	</tr>
	<tr>
  		<td align="right"><a href="#top"><img src="'.$_CONFIG['site_url'].'images/top.jpg" /></a></td>
  		<td align="right"><input type="submit" name="submit" value="Speichern"/></td>
	</tr>
	</table>
	</form>
	<center><a href="'.$_CONFIG['site_url'].'kunden/word_privatkunden_anzeigen.php?id='.$row['id'].'&'.$hash.'"><button>Word<button></a></center>';

}

echo "<br><br><br><br>";
?>
ich hoffe ihr könnt mir helfen.
Danke
 
Hi,

es gibt viele Wege, es dir einfacher zu machen. Du könntest z.B. HTMLQuickForm aus der PEAR Bibliothek nutzen, um die Formulare zu erstellen und zu validieren.

Wenn ich deinen Code momentan so sehe fällt mir folgendes ein:
PHP:
$update = 'UPDATE `'.$mysql_table_privatkunden.'` SET'; 
foreach($_POST as $key => $value){
  $update .= '`' . $key . '` = "'.mysql_real_escape_string(' . $value . ').'",';
}
$update .= '" WHERE `id` = "'.mysql_real_escape_string($_GET['id']).'"';

Ist aber nicht besonders elegant.

Gruß

.:lay-z-cow:.
 
PHP:
$cols = array();
foreach( $_POST as $key => $value ) {
	// $key-Variablenwert muss noch validiert werden
	$cols[] = '`'.$key.'` = "'.mysql_real_escape_string($value).'"';
}
if( count($cols) > 0 ) {
	$query = 'UPDATE `'.$mysql_table_privatkunden.'` SET '.implode(',', $cols).' WHERE `id` = "'.mysql_real_escape_string($_GET['id']).'"';
}
Die Arrayschlüssel der $_POST-Variable (in der foreach-Schleife in $key) sollten zudem ebenfalls validiert werden.
 
PHP:
$cols = array();
foreach( $_POST as $key => $value ) {
	// $key-Variablenwert muss noch validiert werden
	$cols[] = '`'.$key.'` = "'.mysql_real_escape_string($value).'"';
}
if( count($cols) > 0 ) {
	$query = 'UPDATE `'.$mysql_table_privatkunden.'` SET '.implode(',', $cols).' WHERE `id` = "'.mysql_real_escape_string($_GET['id']).'"';
}
Die Arrayschlüssel der $_POST-Variable (in der foreach-Schleife in $key) sollten zudem ebenfalls validiert werden.

Ok. Versteh ich zum größten Teil.
Aber abschicken muss ich schon mit "mysql_query($query)", oder ?
Aber was meinst du mit 'validieren der Schlüssel'? Dachte das "mysql_real_escape_string($value)" ist schon die validierung des inhalts?

Grüsse
Krop
 
danke für die Antworten, die Methode von Gumbo gefällt mir sehr gut :T
Ich denke er meint damit, dass man z.B. prüft ob die Felder ausgefüllt wurden...
lg
 
Ja, MySQL-Datenbankabfragen werden weiterhin mit der mysql_query()-Funktion abgeschickt. Und validiert werden müssten auch die $key-Variablenwerte, da auch darüber SQL-Injektionen möglich sind. Denn es gibt bisher Nichts, das jemanden daran hindert, ein POST-Argument statt „foobar“ beispielsweise mit Folgendem zu bezeichnen:
Code:
foobar`=NULL, `evil`=1, `foobar
Dies würde zu Folgendem führen:
Code:
`foobar`=NULL, `evil`=1, `foobar`="…"
Am besten gibst du eine Positivliste mit den erlaubten Spaltenbezeichnern an und filterst alle anderen heraus.
 
Guten Morgen.
Bitte klär mich auf, Gumbo. Was passiert dann böses, wenn foobar einmal NULL ist und dann mit irgendwas belegt wird?
Was bedeutet dieses foobar ? ist das ein 'zufälliger' Variablenname ? Ich lese öfter foo und foobar und denke mir: was soll das ?
Was ist eine SQL-Injektion ? Denkst du dabei an Mathematik oder ist das ein php-Begriff.
Sorry, wenn ich so frage, aber ich fange gerade erst mit php an...

Grüsse

Kropotkin
 

Neue Beiträge

Zurück