Eintragen, editieren & löschen funktioniert nicht

So ich hab endich den Fehler gefunden. Und zwar waren die " , ' verkehrt herum gesetzt. :rolleyes: Der richtige Code ist wie folgt
PHP:
<html><body><div align="center">
<h1>Patienten bearbeiten</h1>
<?
//Verbindung herstellen
$db = mysql_connect("localhost","xxx","xxxx");
mysql_select_db("xxx",$db);

// Variablen aus POST/GET extrahieren 
$clear = $_POST['clear'];
$edit= $_POST['edit'];
$submit= $_POST['submit'];

// wenn $clear und $edit leer sind, dann wurde per GET uebergeben 
if (empty($clear) )
  $clear = $_GET['clear'];

if (empty($edit) )
  $edit= $_GET['edit']; 

// Daten &auml;ndern
if (isset($edit)) {
if (isset($submit)) { 
$sql = 'UPDATE Pat_ListePatienten SET pid="'.$_POST['pid'].'",name="'.$_POST['name'].'",vorname="'.$_POST['vorname'].'",gebdat="'.$_POST['gebdat'].'",dia_begin="'.$_POST['dia_begin'].'",albis_id="'.$_POST['albis_id'].'",current_dialyse="'.$_POST['current_dialyse'].'" WHERE id='.$edit;
$result = mysql_query($sql,$db);
echo "Daten f&uuml;r die ID ".$edit." wurden ge&auml;ndert";
}
else {
$sql = "SELECT * FROM Pat_ListePatienten WHERE id=$edit";
$result = mysql_query($sql,$db); 
$data = mysql_fetch_array($result);
?>

<form method="post" action="<? echo $PHP_SELF ?>">
<input type=hidden name="edit" value="<? echo $data["id"] ?>">
<table border="0" align="center">
<tr><td>Patienten-Kennzahl</td><td>
<input type="text" name="pid" value="<? echo $data["pid"] ?>" size="50">
</td></tr><tr><td>Name</td><td>
<input type="text" name="name" value="<? echo $data["name"] ?>" size="50">
</td></tr><tr><td>Vorname</td><td>
<input type="text" name="vorname" value="<? echo $data["vorname"] ?>" size="50">
</td></tr><tr><td>Geburtsdatum</td><td>
<input type="text" name="gebdat" value="<? echo $data["gebdat"] ?>" size="50">
</td></tr><tr><td>Dialysebeginn</td><td>
<input type="text" name="dia_begin" value="<? echo $data["dia_begin"] ?>" size="50">
</td></tr><tr><td>Albis-Nummer</td><td>
<input type="text" name="albis_id" value="<? echo $data["albis_id"] ?>" size="50">
</td></tr><tr><td>Zur Zeit in Diylase</td><td>
<input type="checkbox" name="current_dialyse" value="<? echo $data["curent_dialyse"] ?>">
</td></tr><tr><td>&nbsp;</td><td>
<input type="submit" name="submit" value="&Auml;ndern">
</td></tr></table>
</form>
<?
}
}

//Daten l&ouml;schen
if($_GET['clear']) mysql_query("DELETE FROM Pat_ListePatienten WHERE id=$clear",$db);

//Daten auslesen
$result = mysql_query("SELECT * FROM Pat_ListePatienten",$db);
?>

<table border="1" cellspacing="0" cellpadding="3" align="center">
<tr>
<td><b>Patienten-Kennzahl</b></td>
<td><b>Nachname</b></td>
<td><b>Vorname</b></td>
<td><b>Geburtsdatum</b></td>
<td><b>Dialysebeginn</b></td>
<td><b>Albis-ID</b></td>
<td><b>Patient in Dialyse</b></td>
<td>&nbsp;</td>
<td>&nbsp;</td>
</tr>
<? while ($daten = mysql_fetch_array($result)) { ?>
<tr>
<td><? echo $daten[pid]; ?></td>
<td><? echo $daten[name]; ?></td>
<td><? echo $daten[vorname]; ?></td>
<td><? echo $daten[gebdat]; ?></td>
<td><? echo $daten[dia_begin]; ?></td>
<td><? echo $daten[albis_id]; ?></td>
<td><? echo $daten[current_dialyse]; ?></td>
<td><a href="<? echo ''.$PHP_SELF.'?edit='.$daten[id].'' ?>">bearbeiten</a></td>
<td><a href="<? echo ''.$PHP_SELF.'?clear='.$daten[id].'' ?>">l&ouml;schen</a></td>
</tr>
<? } ?>
</table></div></body></html>

Danke dennochan alle die geholfen haben.
MFG R3DD3VIL
 
Zuletzt bearbeitet:
Du solltest Löschanfragen und Änderungsanfragen nur per POST-Methode akzeptieren und alles andere ablehnen. Auch solltest du dich vor SQL-Injektionen und ähnlichen Gefahren schützen, also Benutzereingaben nicht ungeprüft/unverarbeitet verwenden.

Mein Vorschlag:
PHP:
<html><body><div align="center">
<h1>Patienten bearbeiten</h1>
<?php

	//Verbindung herstellen
	$db = mysql_connect("localhost","xxx","xxx");
	mysql_select_db("xxx",$db);

	// Variablen aus POST/GET extrahieren
	$id = isset($GLOBALS['_'.$_SERVER['REQUEST_METHOD']]['id']) ? abs((int)$GLOBALS['_'.$_SERVER['REQUEST_METHOD']]['id']) : 0;
	$action = isset($_REQUEST['action']) ? $_REQUEST['action'] : null;

	switch( $action ) {

		//
		// Datensatz ändern
		//
		case 'edit':
			if( $_SERVER['REQUEST_METHOD'] == 'POST' ) {
				$sql = "UPDATE Pat_ListePatienten SET pid='".mysql_real_escape_string($_POST['pid'])."', name='".mysql_real_escape_string($_POST['name'])."', vorname='".mysql_real_escape_string($_POST['vorname'])."', gebdat='".mysql_real_escape_string($_POST['gebdat'])."', dia_begin='".mysql_real_escape_string($_POST['dia_begin'])."', albis_id='".mysql_real_escape_string($_POST['albis_id'])."', current_dialyse='".mysql_real_escape_string($_POST['current_dialyse'])."' WHERE id=".$id;
				if( mysql_query($sql,$db) ) {
					echo 'Datensatz '.$id.' wurde erfolgreich aktualisiert.';
				} else {
					echo 'Fehler beim Aktualisieren des Datensatzes '.$id.'.';
				}
			} else {
		
				$sql = "SELECT * FROM Pat_ListePatienten WHERE id=$id";
				$result = mysql_query($sql,$db);
				$data = mysql_fetch_array($result);
				$data = array_map('htmlspecialchars', $data);
?>
<form method="post" action="<?php echo $PHP_SELF ?>">
<input type="hidden" name="id" value="<?php echo $data["id"] ?>">
<table border="0" align="center">
<tr><td>Patienten-Kennzahl</td><td>
<input type="text" name="pid" value="<?php echo $data["pid"] ?>" size="50">
</td></tr><tr><td>Name</td><td>
<input type="text" name="name" value="<?php echo $data["name"] ?>" size="50">
</td></tr><tr><td>Vorname</td><td>
<input type="text" name="vorname" value="<?php echo $data["vorname"] ?>" size="50">
</td></tr><tr><td>Geburtsdatum</td><td>
<input type="text" name="gebdat" value="<?php echo $data["gebdat"] ?>" size="50">
</td></tr><tr><td>Dialysebeginn</td><td>
<input type="text" name="dia_begin" value="<?php echo $data["dia_begin"] ?>" size="50">
</td></tr><tr><td>Albis-Nummer</td><td>
<input type="text" name="albis_id" value="<?php echo $data["albis_id"] ?>" size="50">
</td></tr><tr><td>Zur Zeit in Diylase</td><td>
<input type="checkbox" name="current_dialyse" value="<?php echo $data["curent_dialyse"] ?>">
</td></tr><tr><td>&nbsp;</td><td>
<input type="submit" name="submit" value="&Auml;ndern">
</td></tr></table>
</form>
<?php
			}
			break;

		//
		// Datensatz löschen
		//
		case 'delete':
			if( $_SERVER['REQUEST_METHOD'] == 'POST' ) {
				//Daten l&ouml;schen
				if( mysql_query("DELETE FROM Pat_ListePatienten WHERE id=$id",$db) ) {
					echo 'Datensatz '.$id.' wurde erfolgreich gelöscht.';
				} else {
					echo 'Fehler beim Löschen des Datensatzes '.$id;
				}
			} else {
?>
<form action="<?php echo htmlspecialchars($_SERVER['PHP_SELF']); ?>" method="post">
	<input type="hidden" name="id" value="<?php echo $id; ?>">
	<p>Wollen Sie den Datensatz <?php echo $id; ?> wirklich löschen?</p>
	<p><input type="submit" value="Ja"> <a href="<?php echo htmlspecialchars($_SERVER['PHP_SELF']); ?>">Nein</a></p>
</form>
<?php
			}
			break;

		//
		// Datensätze ausgeben
		//
		default:
			//Daten auslesen
			$result = mysql_query("SELECT * FROM Pat_ListePatienten",$db);
?> 
<table border="1" cellspacing="0" cellpadding="3" align="center">
<tr>
<th>Patienten-Kennzahl</th>
<th>Nachname</th>
<th>Vorname</th>
<th>Geburtsdatum</th>
<th>Dialysebeginn</th>
<th>Albis-ID</th>
<th>Patient in Dialyse</th>
<td>&nbsp;</td>
<td>&nbsp;</td>
</tr>
<?php
			while( $daten = mysql_fetch_array($result) ) {
				$daten = array_map('htmlspecialchars', $daten);
?>
<tr>
<td><?php echo $daten['pid']; ?></td>
<td><?php echo $daten['name']; ?></td>
<td><?php echo $daten['vorname']; ?></td>
<td><?php echo $daten['gebdat']; ?></td>
<td><?php echo $daten['dia_begin']; ?></td>
<td><?php echo $daten['albis_id']; ?></td>
<td><?php echo $daten['current_dialyse']; ?></td>
<td><a href="<?php echo $_SERVER['PHP_SELF'].'?action=edit&amp;id='.$daten['id'] ?>">bearbeiten</a></td>
<td><a href="<?php echo $_SERVER['PHP_SELF'].'?action=delete&amp;id='.$daten['id'] ?>">l&ouml;schen</a></td>
</tr>
<?php
			}
			break;
	}
?> 
</table></div></body></html>
 
Hallo Gumbo,

vielen vielen Dank für diesen super genialen Vorschlag und den Code. Nur leider wenn ich den nun kopiere und einfüge, DB-Daten einplanze und alles auf den Server packe, hab ich wieder das Problem mit dem weißen Bidschirm. Heisst ich kann die Seite dann gar nicht erst aufrufen. Woran kann das liegen ?

MFG
R3DD3VIL
 
Das heisst, dass ma wieder ein Fehler aufgetreten ist, der aber stillschweigend unter den Tisch gekehrt wird, weil nirgends mysql_error() ausgegeben wurde. Ansonsten wüsstest du woran du bist.

Gewöhn dir an:

mysql_connect, mysql_select_db, mysql_query -->

mysql_*([...]) or die(mysql_error());
 
@Gumbo
Super nun funktioniert das. Nochmals Vielen vielen Dank. Werd mir das mal genau unter die Lupe nehmen und hoffentlich viel davon lernen für die Zukunft :)

@Igäl
Werd mir in Zukunft deinen Vorschlag zu Herzen nehmen und das immer mit einfügen.

Bin schliesslich in der Lernphase und nehm mir jeden guten Vorshlag zur Brust. Danke an euch für die Hilfe und Geduld

MFG
R3DD3VIL
 
Der Ratschlag zur Nutzung der „or die(…)“-Fehlerbehandlung finde wenn überhaupt ich nur in der Entwicklungsphase sinnvoll. Denn im Produktivsystem ist diese für den Benutzer nicht sehr hilfreich und kann im Gegenteil sogar sicherheitskritische Informationen verraten wie beispielsweise die Datenbankstruktur oder ähnliches. Eine allgemeinere Fehlermeldung ist dort angebrachter.
 
Full ack @ Gumbo

Auf dem Produktivsystem solltest du Fehlermeldungen in einem Log sammeln, auf welches nur ausgewählte Personen Zugriff haben. Wenn wir grad schon dabei sind (und mir grad eh langweilig ist) kann ich dir schnell ein Beispiel geben:

PHP:
public static function db_insert_data([...])  {
[...]
	$query = @mysql_query($sql)
		or die(Mysql::report_error("Insert: ".mysql_error()."\nQuery: ".$sql));
[...]
}

public static function report_error($err_string)	{
	$fp = fopen("txt/logs/error_log.txt", "a");
	fprintf($fp, date("d.m.y - H:i", time())."\n---\n%s\n\n", $err_string);
	fclose($fp);
}

Das @ vor Funktionsaufruf unterdrückt die Fehlermeldung und über die() wird dann die Funktion aufgerufen, in welcher die Fehlermeldung in ein Logfile geschrieben wird.
 
Es ist einfacher die display_errors-Konfigurationsoption zu deaktivieren und damit gleich alle Ausgaben von Fehlermeldungen zu verhindern.

Die Fehlermeldungen mithilfe des @-Operators zu unterdrücken kann sich übrigens stark auf die Geschwindigkeit auswirken, da intern der Fehler trotzdem gemeldet wird. Vorher die zur Operation benötigten Parameter auf Gültigkeit zu prüfen ist da meist besser.
 
Da Ihr gerade noch hier in diesem Thread postet, hab ich noch ne Frage weil mir das gerade aufgefallen ist.
Und zwar hab ich ja in der Edit maske die "checkbox" für Patient zur Zeit in Dialyse.
Standardmäßig soll der Hacken nicht gesetzt sein. Allerdings wenn ich den Hacken klicke wird leider in der DB derEintrag nicht auf 1 übernommen, sondern bleibt bei 0. So kann ich leider nicht definierenob der Patient nun mometan in Bahandlung ist oder nicht.

Hab ich da im Code was vergessen, dass in der DB nichts übernommen wird? Wenn ja was den ?
Danach hab ich auch keine Fragen mehr ;-)

MFG
R3DD3VIL
 
Zurück