hans: mySQL: nach editieren kein effekt.

Beitrag lesen

Hallo,

irgendwie stell ich mich doof an, ein altes script funktioniert auf einer anderen mySQL-Tabelle nicht mehr: Ich lese eine Tabelle mit vielen Zeilen und 19 Feldern aus und gebe sie zeilenweise in einer HTML-Tabelle aus. Jede Zeile kann per checkbox angehakt werden, um dann Feldweise edeitiert zu werden. Inahlt sind Benutzerwerte, ID ,Vorname, Nachname, usw.

zunächste lese ich alle Werte aus und gebe sie zweilenweise aus.

========eins.php=============
<form action="zwei.php" method="post">

$lesen = mysql_query( "SELECT * FROM table ORDER BY id DESC;", $link );
if ( ! $lesen){ die ( "Auslesen macht fatal error: ".mysql_error() ); }
while($alles = mysql_fetch_array($lesen, MYSQL_NUM)){
 foreach($alles as $k => $v){
  $id=$alles[0];
            $vorname=alles[1];
             ...
       }//Ende foreach
echo "
  <td><input type="checkbox" name="changedata[]" value="$id">
  </td><td>$id</td><td>$vorname</td>...usw...
"
}
...submit...Form schliessen
========/ende eins.php=============

die "Übergabe" an zwei.php klappt auch, die angehakte(n) Zeile(n) werden (mit Ausnahme der ID, die nicht editierbar ist) in Textfeldern zum editieren ausgegeben:

========zwei.php=============
<form action="drei.php" method="post">

$changedata = $_REQUEST['changedata'];

foreach($changedata as $k => $v){
  $userdaten2 = mysql_query("SELECT * FROM table WHERE id='$v';")or die ("konnte Datensatz mit ID='$v' nicht aus Tabelle auslesen ").mysql_error();

$userdaten = mysql_fetch_array($userdaten2,  MYSQL_BOTH);

echo "
 <input type="hidden" name="thisuser[]" value="$userdaten">
 <tr>
 <td>
   $userdaten[id] <!-- ID darstellen, aber nicht editierbar -->
   <input type="hidden" name="id[$k]" value="$userdaten[id]">
 </td>
      <td valign="top">
   <input type="text" name="vorname[$k]" value="$userdaten[vorname]">
 </td>
      ....usw.
";
}//Ende foreach
...Tabelle schliessen, Form submitten und schliessen usw.
========/Ende zwei.php=============

Das geht auch alles, für jede "angehakte" Zeile werden die Werte in Textfeldern ausgegeben. Wenn man nun was verändertr, sollen die neuen Werte in die TAbelle zurückgeschrieben werden.

Aber in drei.php wird nichts mehr dargestellt, eine Fehlermeldung findet auch nicht statt.

========drei.php=============

$thisuser = $_REQUEST['thisuser'];

echo "<table>";
foreach ($thisuser as $k => $v){
   //test-echo:
   echo "K:$k, v: $v<br>";
    $eintrag = mysql_query("UPDATE table SET vorname="$vorname[$k]",  nachname="$nachname", ...usw... WHERE id="$id[$k]";")
   or die("konnte Datensatz für Benutzer mit $vorname[$k] $nachname[$k] nicht aendern ".mysql_error());

//Ausgeben der neuen Werte
 echo "
   <tr>
        <td colspan="19">NEUE WERTE:</td></tr>
   <tr class="red">
  <td> $id[$k] </td>
            <td> $vorname[$k] </td>
          ...usw.
       ";
}//Ende foreach
</table>
========/Ende drei.php=============

$v wird als "Array" in der test-echo Zeile ausgegeben, ($v[0] als "A") aber nicht als Wert zum schlüssel $k im array $thisuser. Alle <td> werden generiert, sind aber leer.
Das foreach wird auch akzeptiert. Es gibt keinen Fehler.

Dasselbe, recht einfache, script hab ich vor zwei Jahren auf eine andere Tabelle angewendet. Jetzt erkenne ich aber nicht warum sowohl das UPDATE durchlaufen wird, aber nichts passiert, egal was ich vorher an den Werten in den Eingabefeldern auf zwei.php verändert habe.
Irgendwie muss ich Tomaten auf den Augen haben, ich bin für jede Hilfe dankbar.

bis dann,
Hans