Hi(gh)!
Ich habe meine kleine Testdatenbank zwischenzeitlich um einige Funktionalitäten erweitert - Hinzufügen neuer Datensätze, Anzeige der Datensätze und Löschen eines Datensatzes, funktioniert alles einwandfrei. Beim Bearbeiten eines bereits vorhandenen Datensatzes gibt es allerdings Probleme: klicke ich auf "Bearbeiten" (jeweils links in der HTML-Tabellenzeile des entsprechenden Datensatzes, wird mir zwar die Eingabemaske mit dem bisher vorhandenen Wert im Feld "Name" angezeigt, das Skript wartet aber gar nicht, bis ich ich auf "Daten absenden" geklickt habe, sondern ersetzt den bisherigen Eintrag einfach durch einen Leerstring.
Hier ist der gesamte Code:
<?php
require("head.php");
head("TESTDATENBANK - Dateneingabe: Testtabelle");
error_reporting(E_ALL);
ini_set('display_errors', 1);
?>
<body>
<div>
<h2>TESTDATENBANK: Dateneingabe</h2>
<h3>Datentabelle: hersteller</h3>
<p>
<a href="testtabelle.php?section=1">Neue Datensätze eingeben</a> <a href="testtabelle.php?section=2">Vorhandene Datensätze bearbeiten</a>
</p>
<?
function enter()
{
$section = $_GET['section'];
if ($_GET['mode'] == 'edit')
{
$query = "SELECT Name FROM Testtabelle WHERE ID=".$_GET['id'];
$result = mysql_query($query);
$row = mysql_fetch_row($result);
}
echo '<form method="POST" action="testtabelle.php?section='.$section.'">';
echo ' <table>';
echo ' <tr>';
echo ' <th>';
echo ' Name';
echo ' </th>';
echo ' <td>';
echo ' <input type="text" name="Name" value="'.$row[0].'">';
echo ' </td>';
echo ' </tr>';
echo ' <tr>';
echo ' <td colspan="2">';
echo ' <input type="submit" value="Daten absenden">';
echo ' </td>';
echo ' </td>';
echo ' </table>';
echo '</form>';
}
$section = $_GET['section'];
switch ($section)
{
case 1:
enter();
$Name = $_POST['Name'];
if (!$Name)
{
echo "<p>Bitte geben Sie einen Namen ein!</p>";
}
else
{
dbcall();
dberror();
$query = 'INSERT INTO Testtabelle (Name) VALUES ("'.mysql_real_escape_string($Name).'")';
$result = mysql_query($query);
dberror();
echo "<p>Datensatz wurde in die Datenbank eingetragen!</p>";
}
break;
case 2:
dbcall();
dberror();
$query = "DESCRIBE Testtabelle";
$result = mysql_query($query);
dberror();
echo '<table>';
echo '<tr>';
echo '<td colspan="2" class="transparent">';
for ($i=0; $i<2; $i++)
{
$row = mysql_fetch_row($result);
echo '<th class="headrow">'.$row[0].'</th>';
}
echo '</tr>';
$i = 0;
$query = "SELECT * FROM Testtabelle";
$result = mysql_query($query);
dberror();
while ($row = mysql_fetch_row($result))
{
switch($i%2)
{
case 0:
echo '<tr class="brightrow">';
break;
case 1:
echo '<tr class="darkrow">';
break;
}
$i++;
echo '<th><a href="testtabelle.php?section=2&mode=prerase&id='.$row[0].'">Löschen</a></th><th><a href="testtabelle.php?section=2&mode=edit&id='.$row[0].'">Bearbeiten</a></th>';
echo '<td>'.$row[0].'</td><td>'.$row[1].'</td>';
echo '</tr>';
}
echo '</table>';
if ($_GET['mode'] == "prerase")
echo '<p>Wollen Sie den Datensatz wirklich löschen? <a href="testtabelle.php?section=2&mode=erase&id='.$_GET['id'].'">ja</a> / <a href="testtabelle.php?section=2">nein</a></p>';
if ($_GET['mode'] == "erase")
{
$query = "DELETE from Testtabelle WHERE ID=".$_GET['id'];
$result = mysql_query($query);
dberror();
echo "<p>Der Datensatz wurde gelöscht! Erneuter Klick auf \"Vorhandene Datensätze bearbeiten\" zeigt aktuellen Stand.</p>";
}
if ($_GET['mode'] == "edit")
{
enter();
$Name = $_POST['Name'];
$query = "UPDATE Testtabelle SET Name='".mysql_real_escape_string($Name)."' WHERE ID=".$_GET['id'];
var_dump($query);
$result = mysql_query($query);
dberror();
echo "<p>Datensatz wurde geändert!</p>";
}
break;
}
?>
</body>
</html>
Die var_dump()-Ausgabe von Query ergibt (bei Auswahl des Datensatzes mit der ID-Nr. 4):
string(41) "UPDATE Testtabelle SET Name='' WHERE ID=4"
Wieso ist $Name bzw. $_POST['Name'] nach dem erneuten Aufruf von enter() leer?
Bis bald im Khyberspace!
Yadgar