Datensatz update - Newbie

Tekworian

Grünschnabel
Moin,

Problem:
Ich möchte einen Datensatz, den ich aus einer DB ausgewählt habe, bearbeiten. Also dachte ich, ich belege die input text Felder mit Werten aus der SQL-Select und nachdem ich die Daten editiert update ich die DB Inhalte. Soweit die Theorie - anscheinend habe ich mich da aber mit dem Weg auf´s Glatteis begeben.

Ist dies Vorgehen prinzipiell falsch oder wo mache ich einen Fehler?
Danke für die Mühe!


Hier der Code:
PHP:
// AB HIER DB_ABFRAGE
$VOR=$_POST['vorgang'];
$sql = "SELECT vorgang, text, ersteller, user1, creationdate, remember, enddate, done FROM vorlage WHERE vorgang = '$VOR' ORDER BY 'remember' ASC";
$result = mysql_query($sql);
  for ($i=0;$i<mysql_num_rows($result);$i++)
    {
    $ergebnis[$i]=mysql_fetch_array($result);
    }
?> 
<html>
  <head>
    <title> HTML-Krempel</title>
  </head>
  <body>
<table border=1>
  <tr>
     <th width=90>Vorgang
     <th width=350>Bezeichnung
     <th width=35>EST
     <th width=35>MAB
     <th width=110>Erstellt
     <th width=110>Vorlage
     <th width=110>Enddatum
     <th width=12>Erledigt
  </tr>
</table>
</body>
<?
//Augabe der Ergebnisse und eintragen in Input-Felder
?>
<form action="ds_update_3.php" method="post">
   <input type="text" name="F1" size="11" value="<? echo mysql_result($result,0,0) ?>" >
   <input type="text" name="F2" size="54" value="<? echo mysql_result($result,0,1) ?>" >
   <input type="text" name="F3" size="2" value="<? echo mysql_result($result,0,2) ?>" >
   <input type="text" name="F4" size="2" value="<? echo mysql_result($result,0,3) ?>" >
   <input type="text" name="F5" size="14" value="<? echo mysql_result($result,0,4) ?>" >
   <input type="text" name="F6" size="14" value="<? echo mysql_result($result,0,5) ?>" >
   <input type="text" name="F7" size="14" value="<? echo mysql_result($result,0,6) ?>" >
   <input type="text" name="F8" size="1" value="<? echo mysql_result($result,0,7) ?>" >
   <br>
   <br>
   <input type="submit" value="Update Datensatz">
</form>
 
Tekworian hat gesagt.:
PHP:
// AB HIER DB_ABFRAGE
$VOR=$_POST['vorgang'];
$sql = "SELECT vorgang, text, ersteller, user1, creationdate, remember, enddate, done FROM vorlage WHERE vorgang = '$VOR' ORDER BY 'remember' ASC";
$result = mysql_query($sql);
  for ($i=0;$i<mysql_num_rows($result);$i++)
    {
    $ergebnis[$i]=mysql_fetch_array($result);
    // Hier werden alle Ergebnissätze in das Array ergebnis geladen. Soweit so gut 
    }
?> 
<html>
  <head>
    <title> HTML-Krempel</title>
  </head>
  <body>
<table border=1>
  <tr>
     <th width=90>Vorgang
     <th width=350>Bezeichnung
     <th width=35>EST
     <th width=35>MAB
     <th width=110>Erstellt
     <th width=110>Vorlage
     <th width=110>Enddatum
     <th width=12>Erledigt
  </tr>
</table>
</body>
<?
//Augabe der Ergebnisse und eintragen in Input-Felder
// Möchtest du hier jetzt einen Ergebnissatz ausgeben, oder alle? Irgendwie fehlt mir hier die Schleife ?
?>
<form action="ds_update_3.php" method="post">
   <input type="text" name="F1" size="11" value="<? echo mysql_result($result,0,0) ?>" >
<?
// mysql_result ist nicht unbedingt die beste mysql Funktion. Aber du musst das hier ja auch gar nicht mehr machen, da du ja bereits alle Ergebnisse in einem Array hast. Meiner Meinung nach sollte das eher so aussehen: echo $ergebnis[$i]["Feldname"]  oder auch echo $ergebnis[$i][1]...?>
   <input type="text" name="F2" size="54" value="<? echo mysql_result($result,0,1) ?>" >
   <input type="text" name="F3" size="2" value="<? echo mysql_result($result,0,2) ?>" >
   <input type="text" name="F4" size="2" value="<? echo mysql_result($result,0,3) ?>" >
   <input type="text" name="F5" size="14" value="<? echo mysql_result($result,0,4) ?>" >
   <input type="text" name="F6" size="14" value="<? echo mysql_result($result,0,5) ?>" >
   <input type="text" name="F7" size="14" value="<? echo mysql_result($result,0,6) ?>" >
   <input type="text" name="F8" size="1" value="<? echo mysql_result($result,0,7) ?>" >
   <br>
   <br>
   <input type="submit" value="Update Datensatz">
</form>

Generell glaube ich aber nicht, dass du damit dein gewünschtes Ergebnis erreichen wirst. Wenn ich es richtig verstanden habe, möchtest du eine Tabelle Datensatz für Datensatz ändern können. Da musst du dann das ganze Programm anders aufbauen. Denn aktuell wird er dir immer nur den ersten Datensatz ändern, oder wenn du oben bei <FORM...> eine Schleife einbaust, bekommst du eine unübersichtliche Seite, wo dir alle Einträge auf einmal zum ändern angezeigt werden.

Mein Vorgehen wäre ungefähr so:
1. Lade ersten Datensatz der Tabelle
2. Gebe Formular für diesen ersten Datensatz aus.
3. Beim Drücken des Buttons wird ein Update auf den Datensatz durchgeführt.
4. Das Updatescript lädt gleich den nächsten Datensatz und gibt das Formular aus
usw.

Um das zu bewerkstelligen musst du evtl. noch ein verstecktes Formularfeld übergeben, wo die jeweilige Datensatznummer drinsteht.

PS: Für die genaue Feldbezeichnung musst du i.Ü. nicht F1 - F8 verwenden, sondern du kannst die Feldnamen über mysql_list_fields auslesen.

Dazu mehr unter :http://www.selfphp.net/selfphp/funktionsuebersicht/mysql_funktionen.html#mysql_list_fields
Solltest du eine Möglichkeit suchen um deine Datenbank zu administrieren kann ich dir nur http://www.phpmyadmin.net empfehlen. Da musst du dann das Rad nicht neu erfinden.
 
Zurück