MySQL Datenbankmanipulation über Formular

WebMarco

Mitglied
Guten Tag,

ich habe das Formular von http://www.tutorials.de/php/381470-formular-daten-eine-datenbank-schreiben-aendern-loeschen.html, dass es ermöglicht, Datensätze in eine Datenbank einzutragen. Diese werden dann sofort angezeigt und es besteht die Möglichkeit, diese zu bearbeiten oder zu löschen. Wenn die Anzahl der Einträge steigt, so ist diese Ausgabe aller Datenbankeinträge sehr unübersichtlich und demzufolge unzweckmäßig.

Meine Absicht ist es, eine Abfrage einzufügen, die es ermöglicht, dass nur noch der eine Eintrag aus der Datenbank angezeigt wird, den man tatsächlich bearbeiten oder löschen möchte.

Vorab der gesamte Quelltext, der mir vorliegt:

Im <head>-Bereich:
HTML:
<script type="text/javascript">

function send(action,id) {

	if(action==0) {
		if (confirm("Datensatz eintragen?"))
			document.form.action.value = "insert";
		else
			return;
		}

	else if(action==1)
		document.form.action.value = "update";

	else if(action==2) {
		if (confirm("Datensatz mit der ID " + id + " löschen?"))
			document.form.action.value = "delete";
		else
			return;
		}
	
	document.form.id.value = id;
	document.form.submit();
}

</script>

Dieses Script ermöglicht es, dass beim betätigen des Eintragen- oder Löschenbutton eine Bestätigungsfrage an den Anwender gestellt wird und führt dann die Aktion aus.

Im <body>-Bereich:
PHP:
<?php

/* Datenbank-Verbindungsdaten */

// Aufbau der Datenbankverbindung
$connectionid = mysql_connect ("localhost",
"dmname", "dbpass")
or die ("keine Verbindung möglich.
 Benutzername oder Passwort sind falsch");

mysql_select_db("dbname")
or die ("Die Datenbank existiert nicht.");

/* Aktionen */
if(isset($_POST["action"])) {

/* Neuer Eintrag */
	if($_POST["action"]=="insert") {
		$select = "INSERT INTO names (name, phone) VALUES ('" . $_POST["name"][0] . "', '" . $_POST["phone"][0] . "')";
		mysql_query($select);
	}

/* Eintrag ändern */
	else if($_POST["action"]=="update") {
		$id = $_POST["id"];
		$select = "UPDATE names SET name = '" . $_POST["name"][$id] . "', phone = '" . $_POST["phone"][$id] . "' WHERE id = '$id'";
		mysql_query($select);
	}
	
/* Eintrag löschen */
	else if($_POST["action"]=="delete")	{
		$select = "DELETE FROM names WHERE id = '" . $_POST["id"] . "'";
		mysql_query($select);
	}

}
?>

<!-- Formular -->

<form name='form' action='' method='post'>
<input name='action' type='hidden' />
<input name='id' type='hidden' />

<table border="1" width="690">
	<tr>
		<td>id</td>
		<td>Name</td>
		<td>Telefonnummer</td>
		<td>&nbsp;</td>
	</tr>
	<tr> <!-- Neuer Eintrag -->
		<td><em>wird automatisch vergeben</em></td>
		<td><input name='name[0]' /></td>
		<td><input name='phone[0]' /></td>
		<td><a href='javascript:send(0,0);'>eintragen</a></td>
	</tr>
<?php
$select = "SELECT id, name, phone FROM names ORDER BY id";
$result = mysql_query($select);
if (!$result) {die('Fehler: ' . mysql_error());}
while ($dataset = mysql_fetch_assoc($result)) {
?>
	<tr> <!-- Einträge anzeigen -->
		<td><?php echo $dataset['id']; ?></td>
		<td><input name='name[<?php echo $dataset['id']; ?>]' value='<?php echo $dataset['name']; ?>' /></td>
		<td><input name='phone[<?php echo $dataset['id']; ?>]' value='<?php echo $dataset['phone']; ?>' /></td>
		<td><a href='javascript:send(1,<?php echo $dataset['id']; ?>);'>ändern</a> | <a href='javascript:send(2,<?php echo $dataset['id']; ?>);'>löschen</a></td>
	</tr>
<?php
}
?>
</table>

</form>

Es handelt sich ersteinmal nur um ein Testscript. Es ist sehr einfach gehalten und hat nicht viele Eingabefelder, um erst einmal die Funktionsweise sicherzustellen. Auch habe ich nicht vor, im laufendem Betrieb Tabellenstrukturen zu verwenden, sondern werde dies entsprechend über <div> tun.

Das Script funktioniert auch ohne Probleme. Jedoch sorgt nachfolgender Bereich dafür, dass alle Einträge aus der Datenbank angezeicht werden:

PHP:
<?php
$select = "SELECT id, name, phone FROM names ORDER BY id";
$result = mysql_query($select);
if (!$result) {die('Fehler: ' . mysql_error());}
while ($dataset = mysql_fetch_assoc($result)) {
?>
	<tr> <!-- Einträge anzeigen -->
		<td><?php echo $dataset['id']; ?></td>
		<td><input name='name[<?php echo $dataset['id']; ?>]' value='<?php echo $dataset['name']; ?>' /></td>
		<td><input name='phone[<?php echo $dataset['id']; ?>]' value='<?php echo $dataset['phone']; ?>' /></td>
		<td><a href='javascript:send(1,<?php echo $dataset['id']; ?>);'>ändern</a> | <a href='javascript:send(2,<?php echo $dataset['id']; ?>);'>löschen</a></td>
	</tr>
<?php
}
?>

Dies liegt daran, dass alle Einträge abgefragt werden:
PHP:
$select = "SELECT id, name, phone FROM names ORDER BY id";

Meine Überlegung war, im ersten Schritt die Abfrage zu ändern:
PHP:
$select = "SELECT id, name, phone FROM names WHERE id = '" . $id . "''";
oder
PHP:
$select = "SELECT id, name, phone FROM names WHERE id = '" . $_POST["id"] . "'";

Bei der Möglichkeit WHERE id = '" . $id . "'' gelingt es mir jedoch nicht, einen gewünschten Eintrag über die URL-Eingabe datei.php?id=15 z.B. abzurufen. Gebe ich in der Abfrage ein, WHERE id = 15, so funktioniert es.

Ich habe nun probiert, ein Eingabefeld und einen Aktionsbutton zu verwenden. Wenn ich also in ein Eingabefeld die Zahl 15 eintrage und auf "Anzeigen" klicke, dass der Eintrag angezeigt wird. Jedoch ist es mir nicht geungen den Wert zu bekommen:

z.B. <a href='javascript:send(3,15);'>

mit:
HTML:
else if(action==3)
		document.form.action.value = "show";
und:
PHP:
<?php
/* Eintrag anzeigen */
	else if($_POST["action"]=="show")	{
		$select = "SELECT id, name, phone FROM names WHERE id = '" . $_POST["id"] . "'";
        $result = mysql_query($select);
        if (!$result) {die('Fehler: ' . mysql_error());}
        while ($dataset = mysql_fetch_assoc($result)) {
?>
	<tr> <!-- Einträge anzeigen -->
		<td><?php echo $dataset['id']; ?></td>
		<td><input name='name[<?php echo $dataset['id']; ?>]' value='<?php echo $dataset['name']; ?>' /></td>
		<td><input name='phone[<?php echo $dataset['id']; ?>]' value='<?php echo $dataset['phone']; ?>' /></td>
		<td><a href='javascript:send(1,<?php echo $dataset['id']; ?>);'>ändern</a> | <a href='javascript:send(2,<?php echo $dataset['id']; ?>);'>löschen</a></td>
	</tr>
<?php
}
?>

Ich weiß nicht, wie ich das Eingabefeld und den "Abschicken-Butten" einbauen soll, sodass der eingegebene Wert auch übergeben wird.

Für einen Gedankenanstoß oder einen Lösungsansatz bin ich sehr dankbar. Ich habe auch im Bereich Tutorials (php) geschaut, ob ich diese dort finde. Auch die Suche bei Google hat mich nicht weiter gebracht.
 
Zuletzt bearbeitet:
Erstmal Hallöle und herzlich willkommen hier im Forum.

Nun aber direkt und ohne umwege zu deinem Problem:

Meine Überlegung war, im ersten Schritt die Abfrage zu ändern:
PHP:
$select = "SELECT id, name, phone FROM names WHERE id = '" . $id . "''";
oder
PHP:
$select = "SELECT id, name, phone FROM names WHERE id = '" . $_POST["id"] . "'";

Bei der Möglichkeit WHERE id = '" . $id . "'' gelingt es mir jedoch nicht, einen gewünschten Eintrag über die URL-Eingabe datei.php?id=15 z.B. abzurufen. Gebe ich in der Abfrage ein, WHERE id = 15, so funktioniert es.

Ob deine Überlegung, für sich gesehen, logisch ist, kann ich jetzt leider nicht beurteilen, da ich bisher nur nach syntaktischen Fehlern in den Ausschnitten gesucht habe.
Mir ist da auch schon ein logischer Fehler ins Netz gegangen, der aber auch fies versteckt ist ^^.

Ich gehe dabei jetzt mal stark davon aus, dass die Spalte "id" in deiner Tabelle einem numerischen Datentyp entspricht (Int, Bigint, Smallint, tinyint oder sowas in der Art), weshalb du den bei der Abfrage auch als solchen übergeben musst.

Der Fehler:
Du hast versucht die Abfrage über den Punktoperator zusammen zustellen und hast dabei vor und nach der Konkatenation die Abfrage mit einem ' versehen, was deine vermeintliche Zahl in einen String wandelt und SQL damit dann nichts mehr anzufangen weiß. (Die einfachen Anführungsstriche also einfach weglassen und es sollte die Abfrage zumindest funktionieren)

Hier noch mal die Zusammenfassung:

Falsch:
PHP:
$select = "SELECT id, name, phone FROM names WHERE id = '" . $_POST["id"] . "'";
Richtig:
PHP:
$select = "SELECT id, name, phone FROM names WHERE id = " . $_POST["id"] . "";

Ich hoffe ich konnte dir ein klein wenig weiterhelfen :).
 
@ Alex_T vielen Dank für Deine Unterstützung.

Also, im <head>-Bereich habe ich die "action==3" hinzugefügt:

HTML:
<script type="text/javascript">

function send(action,id) {

	if(action==0) {
		if (confirm("Datensatz eintragen?"))
			document.form.action.value = "insert";
		else
			return;
		}

	else if(action==1)
		document.form.action.value = "update";

	else if(action==2) {
		if (confirm("Datensatz mit der ID " + id + " löschen?"))
			document.form.action.value = "delete";
		else
			return;
		}

	else if(action==3)
		document.form.action.value = "show";

	document.form.id.value = id;
	document.form.submit();
}

</script>

Gesamter Quelltext des <body>-Bereich:
PHP:
<?php

/* Datenbank-Verbindungsdaten */

// Aufbau der Datenbankverbindung
$connectionid = mysql_connect ("localhost",
"dbname", "dbpass")
or die ("keine Verbindung möglich.
 Benutzername oder Passwort sind falsch");

mysql_select_db("dbname")
or die ("Die Datenbank existiert nicht.");

/* Aktionen */
if(isset($_POST["action"])) {

/* Neuer Eintrag */
	if($_POST["action"]=="insert") {
		$select = "INSERT INTO names (name, phone) VALUES ('" . $_POST["name"][0] . "', '" . $_POST["phone"][0] . "')";
		mysql_query($select);
	}

/* Eintrag ändern */
	else if($_POST["action"]=="update") {
		$id = $_POST["id"];
		$select = "UPDATE names SET name = '" . $_POST["name"][$id] . "', phone = '" . $_POST["phone"][$id] . "' WHERE id = '$id'";
		mysql_query($select);
	}
	

}
?>

<!-- Formular -->

<form name='form' action='' method='post'>
<input name='action' type='hidden' />
<input name='id' type='hidden' />

<table border="1" width="690">
	<tr>
		<td>id</td>
		<td>Name</td>
		<td>Telefonnummer</td>
		<td>&nbsp;</td>
	</tr>
	<tr> <!-- Neuer Eintrag -->
		<td><em>wird automatisch vergeben</em></td>
		<td><input name='name[0]' /></td>
		<td><input name='phone[0]' /></td>
		<td><a href='javascript:send(0,0);'>eintragen</a></td>
	</tr>
	<tr> <!-- Datensatz auswählen -->
		<td colspan="2"><input name='id' /></td>
		<td colspan="2"><a href='javascript:send(3,<?php echo $id; ?>);'>Datensatz auswählen</a></td>
	</tr>
<?php
/* Eintrag anzeigen */
	if($_POST["action"]=="show")	{
		$select = "SELECT id, name, phone FROM names WHERE id = " . $_POST["id"] . "";  
        $result = mysql_query($select);
        if (!$result) {die('Fehler: ' . mysql_error());}
        while ($dataset = mysql_fetch_assoc($result)) {
?>
	<tr> <!-- Einträge anzeigen -->
		<td><?php echo $dataset['id']; ?></td>
		<td><input name='name[<?php echo $dataset['id']; ?>]' value='<?php echo $dataset['name']; ?>' /></td>
		<td><input name='phone[<?php echo $dataset['id']; ?>]' value='<?php echo $dataset['phone']; ?>' /></td>
		<td><a href='javascript:send(1,<?php echo $dataset['id']; ?>);'>ändern</a> | <a href='javascript:send(2,<?php echo $dataset['id']; ?>);'>löschen</a></td>
	</tr>
<?php
}
}
?>
</table>

</form>

Ich habe die Änderung gem. Alex_T durchgeführt:
PHP:
<?php
/* Eintrag anzeigen */
	if($_POST["action"]=="show")	{
//ÄNDERUNG GEM. ALEX_T:
		$select = "SELECT id, name, phone FROM names WHERE id = " . $_POST["id"] . "";  
        $result = mysql_query($select);
        if (!$result) {die('Fehler: ' . mysql_error());}
        while ($dataset = mysql_fetch_assoc($result)) {
?>
	<tr> <!-- Einträge anzeigen -->
		<td><?php echo $dataset['id']; ?></td>
		<td><input name='name[<?php echo $dataset['id']; ?>]' value='<?php echo $dataset['name']; ?>' /></td>
		<td><input name='phone[<?php echo $dataset['id']; ?>]' value='<?php echo $dataset['phone']; ?>' /></td>
		<td><a href='javascript:send(1,<?php echo $dataset['id']; ?>);'>ändern</a> | <a href='javascript:send(2,<?php echo $dataset['id']; ?>);'>löschen</a></td>
	</tr>
<?php
}
}
?>

Nun versuche ich den eingegebenen Wert mittels KLICK auf den "Datensatz auswählen"-Button über das <head>-Script an die php-Funktion zu übergeben:
PHP:
	<tr> <!-- Datensatz auswählen -->
		<td colspan="2"><input name='id' /></td>
		<td colspan="2"><a href='javascript:send(3,<?php echo $id; ?>);'>Datensatz auswählen</a></td>
	</tr>
Dass dies so nicht funktionieren kann weiß ich, zeigt ja auch die Probe. Ich weiß aber einfach nicht, wie ich dass anstellen soll.

Wenn mir jemand einen Tip geben kann, so bin ich sehr dankbar.
 
Tach,

bin mir ehrlich gesagt nicht sicher, ob ich die Problematik richtig erfasst habe.

Aber ausgehend von deinem ersten Post

Bei der Möglichkeit WHERE id = '" . $id . "'' gelingt es mir jedoch nicht, einen gewünschten Eintrag über die URL-Eingabe datei.php?id=15 z.B. abzurufen

Dann ist wahrscheinlich register_globals auf off; eine Deklaration von $id hab ich jedenfalls nicht im Quelltext gesehen [bis auf die Abfrage if($_POST["action"]=="update"), die ja beim normalen Aufruf nicht greift] .

Hab ich das grundsätzlich richtig erfasst, dass du die Ausgabe über den verwendetetn GET-Parameter aus der URL limitieren willst? Dann sollte es doch reichen, POST mit GET zu ersetzen, oder renn ich da grad gegen ne Wand...?

Zu dem zweiten Ansatz mittels Input:

HTML:
<td colspan="2"><input name='id' /></td>
<td colspan="2"><a href='javascript:send(3,<?php echo $id; ?>);'>Datensatz auswählen</a></td>

Du hast in dem Formular zwei Inputs mit dem Namen "id". Das erste direkt am Anfang
HTML:
<input name='id' type='hidden' />
und dann später unter "Datensatz auswählen" nochmal. Ich weiß nicht, OB es da schon hakt, würde zur Sicherheit das Feld aber nur einmal angeben.


Jedenfalls dürfte $id an der Stelle nicht bekannt sein. Probiers mal so:

HTML:
<td colspan="2"><input name='id'  id='filter' value='' /></td>
<td colspan="2"><a href='javascript:send(3, document.getElementById("filter").value);'>Datensatz auswählen</a></td>


Ich weiß nicht, wofür das Script letztendlich eingesetzt werden soll, aber vielleicht würde sich hier auch ein Paging anbieten.
 
Zuletzt bearbeitet:
Vielen Dank @ Alex_T und para_noid, die beiden Lösungsansätze von Euch haben das Problem gelöst.

Ich habe nun ein Formular, mit dem ich in eine Datenbanktabelle Einträge hinzufügen kann. Außerdem ist es jetzt möglich, Einträge nach Eingabe einer ID anzeigen zu lassen und diesen dann zu bearbeiten/löschen. Alle Abläufe funktionieren auch einwandfrei.

Das gesamte funktionsfähige Script (aufgeräumt und nun mit Div's statt Tabellen):
PHP:
<?php

/* Datenbank-Verbindungsdaten */

// Aufbau der Datenbankverbindung
$connectionid = mysql_connect ("localhost",
"dbname", "dbpass")
or die ("keine Verbindung möglich.
 Benutzername oder Passwort sind falsch");

mysql_select_db("dbname")
or die ("Die Datenbank existiert nicht.");

/* Aktionen */
if(isset($_POST["action"])) {

/* Neuer Eintrag */
if($_POST["action"]=="insert") {
  $select = "INSERT INTO names (name, phone) VALUES ('" . $_POST["name"][0] . "', '" . $_POST["phone"][0] . "')";
  mysql_query($select);
  }

/* Eintrag ändern */
else if($_POST["action"]=="update") {
  $id = $_POST["id"];
  $select = "UPDATE names SET name = '" . $_POST["name"][$id] . "', phone = '" . $_POST["phone"][$id] . "' WHERE id = '$id'";
  mysql_query($select);
  }

/* Eintrag löschen */
else if($_POST["action"]=="delete") {
  $select = "DELETE FROM names WHERE id = '" . $_POST["id"] . "'";
  mysql_query($select);
  }

}
?>

<!-- Formular -->

<div style="border:#BDBDBD solid 1px; padding:0px 10px 0px 10px; width:668px;">
<form name="form" action="" method="post">
<input name="action" type="hidden" />
<input name="id" type="hidden" />

<div style="float:left; width:100px;"><b>ID</b></div>
<div style="float:left; width:200px;"><b>Name</b></div>
<div style="float:left; width:200px;"><b>Telefon</b></div>
<div style="clear:both;">&nbsp;</div>

<!-- Neuer Eintrag -->
<div style="float:left; width:100px;">&nbsp;</div>
<div style="float:left; width:200px;"><input name="name[0]" /></div>
<div style="float:left; width:200px;"><input name="phone[0]" /></div>
<div style="float:left; width:150px;"><a href='javascript:send(0,0);'>eintragen</a></div>
<div style="clear:both;">&nbsp;</div>

<?php
/* Eintrag anzeigen */
if($_POST["action"]=="show") {
  $select = "SELECT id, name, phone FROM names WHERE id = " . $_POST["id"] . "";
  $result = mysql_query($select);
  if (!$result) {die('Fehler: ' . mysql_error());}
    while ($dataset = mysql_fetch_assoc($result)) {
?>

<!-- Einträge ändern/löschen -->
<div style="float:left; width:100px;"><?php echo $dataset['id']; ?></div>
<div style="float:left; width:200px;"><input name='name[<?php echo $dataset['id']; ?>]' value='<?php echo $dataset['name']; ?>' /></div>
<div style="float:left; width:200px;"><input name='phone[<?php echo $dataset['id']; ?>]' value='<?php echo $dataset['phone']; ?>' /></div>
<div style="float:left; width:150px;"><a href='javascript:send(1,<?php echo $dataset['id']; ?>);'>ändern</a> | <a href='javascript:send(2,<?php echo $dataset['id']; ?>);'>löschen</a></div>
<div style="clear:both;">&nbsp;</div>

<?php
  }
}
?>

<hr />

<!-- Datensatz anzeigen -->
<div style="float:left; width:100px;"><input name="user_id" id="filter" value="" size="5" /></div>
<div style="float:left; width:150px;"><a href="javascript:send(3, document.getElementById('filter').value);">Datensatz anzeigen</a></div>
<div style="clear:both;">&nbsp;</div>

</form>
</div>

Das Java-Script für den <head>-Bereich ist unverändert geblieben. Siehe also Beitrag #3.

Was ich nun noch ergänzen will, ist die Benachrichtigung an den Anwender, dass eine bestimmte Aktion (Eintragung, Bearbeitung, Löschung) erfolgreich durchgeführt wurde, oder eben nicht. Dies möchte ich über eine "header-Weiterleitung" umsetzen. Leider kommt es dabei zu einer Fehlermeldung. Soweit ich im Internet fündig wurde hängt dass mit der neuen php-Version zusammen. Doch mit den allgemeinen Fehlerbeseitigungshinweisen bin ich nicht zum gewünschten Ziel gekommen.

Fehlermeldung:
Warning: Cannot modify header information - headers already sent by (output started at /www/htdocs/xxxxxx/index.php:15) in /www/htdocs/xxxxxx/index.php(121) : eval()'d code on line 36

Hier die header-Weiterleitungen:
PHP:
<?php
/* Aktionen */
if(isset($_POST["action"])) {

/* Neuer Eintrag */
if($_POST["action"]=="insert") {
  $select = "INSERT INTO names (name, phone) VALUES ('" . $_POST["name"][0] . "', '" . $_POST["phone"][0] . "')";
  mysql_query($select);
  // HEADER-WEITERLEITUNG
  header ("Location: datei.php?insert=1");
  }

/* Eintrag ändern */
else if($_POST["action"]=="update") {
  $id = $_POST["id"];
  $select = "UPDATE names SET name = '" . $_POST["name"][$id] . "', phone = '" . $_POST["phone"][$id] . "' WHERE id = '$id'";
  mysql_query($select);
  // HEADER-WEITERLEITUNG
  header ("Location: datei.php?update=1");
  }

/* Eintrag löschen */
else if($_POST["action"]=="delete") {
  $select = "DELETE FROM names WHERE id = '" . $_POST["id"] . "'";
  mysql_query($select);
  // HEADER-WEITERLEITUNG
  header ("Location: datei.php?delete=1");
  }

}
?>

[...]

<!-- Formular -->

<?php
if (isset ($_REQUEST["insert"]))
{
  echo ' <span class="textfarbe2">Datensatz wurde in die Datenbank eingetragen.</span><br /> ';
}
elseif (isset ($_REQUEST["update"]))
{
  echo ' <span class="textfarbe2">Datensatz wurde in der Datenbank geändert.</span><br /> ';
}
elseif (isset ($_REQUEST["delete"]))
{
  echo ' <span class="textfarbe2">Datensatz wurde aus der Datenbank gelöscht.</span><br /> ';
}
?>
Was dort auch fehlt, ist die Möglichkeit, wenn es nicht funktioniert hat. Eine Möglichkeit ist ja folgende:
PHP:
<?php
  if (mysql_affected_rows ($connectionid) > 0)
  { 
    header ("Location: datei.phpl?insert=1");
  } 
  else 
  { 
   header ("Location: datei.php?fehler=1");
  }
?>

Ich weiß jetzt leider nicht, wie ich diese if-else-Schleife mit einbauen soll. Und! funktioniert diese auch beim Bearbeiten/Löschen von den angezeigten Einträgen? Habt Ihr da eine Idee?

Was auch erforderlich ist, ist eine Eingabenüberprüfung. Wenn der Anwender beim "Datensatz anzeigen" lassen keine Angabe der ID macht, kommt folgende Fehlermeldung:
Fehler: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 1

Wenn der Anwender eine falsche ID eingibt, kommt einfach gar nix. Wie kann ich / und wo muss ich diese Funktion einbauen, die Eingabe im Formular prüfen? Die Prüfung, ob etwas eingegeben wurde/oder nicht ist ja recht einfach und da findet man ja so einiges im Internet (eben auch Prüfung ob E-Mail-Adressen korrekt oder Felder Eingaben mit bestimmten Zeichen, Längen etc. enthalten). Ich will ja nun aber einen Abgleich mit der Datenbank vornehmen.

Wenn also der Anwender die ID 16 eingibt, diese aber in der Datenbank nicht vorhanden ist, soll die Fehlermeldung kommen "Datensatz nicht vorhanden".

Mein Ansatz:
PHP:
<?php
/* Eintrag anzeigen */
if($_POST["action"]=="show") {
  $select = "SELECT id, name, phone FROM names WHERE id = " . $_POST["id"] . "";
  $result = mysql_query($select);
  if(empty ($result)) {$error .= "<p class=\"textfarbe2\"><b>Fehler:</b> Eingabe falsch.</p>";}
  if(empty ($error)) {
    while($dataset = mysql_fetch_assoc($result)) {
?>

<!-- Einträge ändern/löschen -->
<div style="float:left; width:100px;"><?php echo $dataset['id']; ?></div>
<div style="float:left; width:200px;"><input name='name[<?php echo $dataset['id']; ?>]' value='<?php echo $dataset['name']; ?>' /></div>
<div style="float:left; width:200px;"><input name='phone[<?php echo $dataset['id']; ?>]' value='<?php echo $dataset['phone']; ?>' /></div>
<div style="float:left; width:150px;"><a href='javascript:send(1,<?php echo $dataset['id']; ?>);'>ändern</a> | <a href='javascript:send(2,<?php echo $dataset['id']; ?>);'>löschen</a></div>
<div style="clear:both;">&nbsp;</div>

<?php
  }
  }
}
?>

Wenn ich nun eine falsche oder gar keine Eingabe der ID mache passiert :eek: nix. Auch keine Fehlermeldung mehr :(

Und, es fehlt der Abgleich mit der Datenbank, ob die ID überhaupt existiert. Nur weiß ich nicht, wie ich das machen soll. Ich hoffe, Ihr könnt mir da weiterhelfen.
 
Dies möchte ich über eine "header-Weiterleitung" umsetzen.

Und warum? Also ich meine, warum tut es nicht eine einfache Erfolgsmeldung als Ausgabe?

So wie ich das vermute leitest du auch nur auf datei.php weiter, die du zumindest einmal schon für den eigentlichen Anzeige- oder Änderungsablauf eingebunden hattest (es sei denn der Name war nur Platzhalter), von daher kann ich deine Intention nicht recht nachvollziehen.

Die Fehlermeldung verwirrt mich ehrlich gesagt auch, weil sie aussagt, dass du in index.php Zeile 15 eval() aufrufst und innerhalb des eingefügten Codes in Zeile 36 irgendeine Ausgabe stattfindet, die dann die header-Ausgaben unterbindet. Ich kann eval() in deinen Codebeispielen aber nicht finden, und dessen Verwendungsnotwendigkeit ebensowenig nachvollziehen.

Ich würde das simpler angehen. Nach jedem Insert, Update und Delete fragst du mit
PHP:
mysql_query($select);
if (mysql_affected_rows () > 0)
ab, ob das Ganze ausgeführt wurde. Bei Erfolg setzt du eine beliebige Variable auf true oder belegst sie gleich mit der Erfolgsmeldung. Die kannst du dann später vor dem Formular abfragen/im HTML-Quelltext integrieren. Würde das deinen Vorstellungen gerecht?

Wenn also der Anwender die ID 16 eingibt, diese aber in der Datenbank nicht vorhanden ist, soll die Fehlermeldung kommen "Datensatz nicht vorhanden".

Nach dem Select mit der geposteten ID fragst du mit mysql_num_rows die Anzahl der zurückgegebenen Datensätze ab. Wenn 0, dann gibt es keinen zu der ID. An der Stelle würde ich wieder die x-beliebige Variable setzen.

In deinem Versuch bist du das so angegangen:
PHP:
$select = "SELECT id, name, phone FROM names WHERE id = " . $_POST["id"] . "";
$result = mysql_query($select);
if(empty ($result)) usw.

$result hat in dem Fall ja nur die Rückgabe von mysql_query. In diesem Fall immer true, wenn irgendeine Nummer eingegeben wurde, denn dann ist das Query syntaktisch korrekt und wird ausgeführt (es selektiert vielleicht keinen Datensatz, aber das fragst du an der Stelle nicht ab).
empty (true) dürfte ja dann false sein, und dann haut der Rest auch nicht mehr hin.

Im Übrigen würde ich dir für die langfristige Verwendung von Datenbanken empfehlen, dir eine der unzähligen MySQL-PHPKlassen herauszusuchen, die gibt es zuhauf im Netz und erleichtern dir die Arbeit ungemein.

Noch ein Hinweis: um die Bearbeitung bei nicht vorhandener ID gleich zu unterbinden, könntest du im Javascriptbereich
Code:
if(isNaN(document.form.id.value)) return false;
*Rest*
einfügen.
 
Fertig! Es klappt!

Ich bedanke mich für die tatkräftige Unterstützung. Alle Hilfestellungen haben zu einen Ergebnis geführt. So macht es wirklich Spaß. Vielen Dank. Hier nocheinmal das gesamte funktionsfähige Script falls noch jemand etwas damit anfangen will/kann.

Script für den <head>-Bereich:
HTML:
<script type="text/javascript">

function send(action,id) {

	if(action==0) {
		if (confirm("Datensatz eintragen?"))
			document.form.action.value = "insert";
		else
			return;
		}

	else if(action==1)
		document.form.action.value = "update";

	else if(action==2) {
		if (confirm("Datensatz mit der ID " + id + " löschen?"))
			document.form.action.value = "delete";
		else
			return;
		}

	else if(action==3)
		document.form.action.value = "show";

	document.form.id.value = id;
	document.form.submit();
}

</script>

Script für den <body>-Bereich:
PHP:
<?php

/* Datenbank-Verbindungsdaten */

// Aufbau der Datenbankverbindung
$connectionid = mysql_connect ("localhost",
"dbname", "dbpasswort")
or die ("keine Verbindung möglich.
 Benutzername oder Passwort sind falsch");

mysql_select_db("dbname")
or die ("Die Datenbank existiert nicht.");

/* Aktionen */
if(isset($_POST["action"])) {

/* Neuer Eintrag */
if($_POST["action"]=="insert") {
  $select = "INSERT INTO names (name, phone) VALUES ('" . $_POST["name"][0] . "', '" . $_POST["phone"][0] . "')";
  mysql_query($select);
  if (mysql_affected_rows () > 0) {
  echo ' <span class="textfarbe2">Datensatz wurde in die Datenbank eingetragen.</span><br /> ';
  }
  else {
  echo ' <span class="textfarbe2">Es ist ein Fehler aufgetreten.</span><br /> ';
  }
}

/* Eintrag ändern */
if($_POST["action"]=="update") {
  $id = $_POST["id"];
  $select = "UPDATE names SET name = '" . $_POST["name"][$id] . "', phone = '" . $_POST["phone"][$id] . "' WHERE id = '$id'";
  mysql_query($select);
  if (mysql_affected_rows () > 0) {
  echo ' <span class="textfarbe2">Datensatz wurde in der Datenbank geändert.</span><br /> ';
  }
  else {
  echo ' <span class="textfarbe2">Es ist ein Fehler aufgetreten.</span><br /> ';
  }
}

/* Eintrag löschen */
if($_POST["action"]=="delete") {
  $select = "DELETE FROM names WHERE id = '" . $_POST["id"] . "'";
  mysql_query($select);
  if (mysql_affected_rows () > 0) {
  echo ' <span class="textfarbe2">Datensatz wurde aus der Datenbank gelöscht.</span><br /> ';
  }
  else {
  echo ' <span class="textfarbe2">Es ist ein Fehler aufgetreten.</span><br /> ';
  }
}

}
?>

<!-- Formular -->

<div style="border:#BDBDBD solid 1px; padding:0px 10px 0px 10px; width:668px;">
<form name="form" action="" method="post">
<input name="action" type="hidden" />
<input name="id" type="hidden" />

<div style="float:left; width:100px;"><b>ID</b></div>
<div style="float:left; width:200px;"><b>Name</b></div>
<div style="float:left; width:200px;"><b>Telefon</b></div>
<div style="clear:both;">&nbsp;</div>

<!-- Neuer Eintrag -->
<div style="float:left; width:100px;">&nbsp;</div>
<div style="float:left; width:200px;"><input name="name[0]" /></div>
<div style="float:left; width:200px;"><input name="phone[0]" /></div>
<div style="float:left; width:150px;"><a href='javascript:send(0,0);'>eintragen</a></div>
<div style="clear:both;">&nbsp;</div>

<?php
/* Eintrag anzeigen */
if($_POST["action"]=="show") {
  $select = "SELECT id, name, phone FROM names WHERE id = " . $_POST["id"] . "";
  $result = mysql_query($select);
  if (!empty($_POST["id"]) && $dataset = mysql_fetch_array($result)) {
  ?>

<!-- Einträge ändern/löschen -->
<div style="float:left; width:100px;"><?php echo $dataset['id']; ?></div>
<div style="float:left; width:200px;"><input name='name[<?php echo $dataset['id']; ?>]' value='<?php echo $dataset['name']; ?>' /></div>
<div style="float:left; width:200px;"><input name='phone[<?php echo $dataset['id']; ?>]' value='<?php echo $dataset['phone']; ?>' /></div>
<div style="float:left; width:150px;"><a href='javascript:send(1,<?php echo $dataset['id']; ?>);'>ändern</a> | <a href='javascript:send(2,<?php echo $dataset['id']; ?>);'>löschen</a></div>
<div style="clear:both;">&nbsp;</div>

<?php
  }
  else {
  echo ' <span class="textfarbe2">Es ist kein Datensatz für die angegebene ID vorhanden.</span> ';
  }
}
?>

<hr />

<!-- Datensatz anzeigen -->
<div style="float:left; width:100px;"><input name="user_id" id="filter" value="<?php echo $id; ?>" size="5" /></div>
<div style="float:left; width:150px;"><a href="javascript:send(3, document.getElementById('filter').value);">Datensatz anzeigen</a></div>
<div style="clear:both;">&nbsp;</div>

</form>
</div>

Wenn noch jemand Verbesserungsformschläge hat, so bin ich um jede Anregung dankbar!
 
Zurück