UPDATE überschreibt alle Datensätze

Budda

Erfahrenes Mitglied
Hallo.

Ich habe eine MySQL-DB in der ich eine Tabelle mit über ein PHP-Formular editieren möchte. Solange nur ein Datensatz in der Tabelle steht, wird dieser auch korrekt geupdatet. Nur sobald mehrere drin stehen werden alle mit den Werten des ersten Datensatzes überschrieben. Ich finde bloß den Fehler nicht ...

hier ist das Fomular
Code:
<?php 
                $result = mysql_query("SELECT * FROM journal WHERE kategorie=4 order by id desc", $conn);		
                
                while($row = mysql_fetch_row($result))
                { 
                    echo"<tr><td><input type=checkbox name=update value=", $row[0], "><input type=text class=text2 name=titel value='", $row[1], "'></td><td><input type=text class=text2 name=link value=", $row[2], "></td></tr>";
                }
            ?>
row0 ist die ID, row1 der Titel und row2 ein Link. Ich lese die vorhandenen Werte aus in Textfelder und durch das markieren einer Checkbox soll der Datensatz aktualisiert werden.

und hier die Abfrage
Code:
include("dbopen.php");
        
        $up_titel = $_POST['titel'];
        $up_link = $_POST['link'];
        $checked = $_POST['update'];
        
        $remove = mysql_query("UPDATE journal SET titel = '$up_titel', hyperlink = '$up_link', kategorie = 4 WHERE id=$checked") or die (mysql_error());
        $selected_action = 0;
        mysql_close();

Ich hoffe ihr könnt mir ein bisschen weiterhelfen.

danke, Budda
 
Danke für die Antwort Mirko, aber das ist der Fehler nicht. Der Inhalt der Variablen ist falsch, die enthalten immer die Werte von dem ersten Datensatz ...
 
hatte ein wenig nachdenken müssen

also folgendes problem er wird bei dir immer den letzten datensatz nehmen da bei dir die felder in der schleife gleich heissen ...


er updatet zwar die richtige ID aber er verwendet die Werte die er im Form als letztes hat.

deine Möglichkeit 1 wäre folgende...

das ganze zuvor in eine liste packen und mit click auf einen titel zum eingabeformular springen und die id übergeben
dann hast du genau nur mehr einen datensatz mit genau einer id zu bearbeiten

Möglichkeit 2 wäre:

deine feld namen einen counter hinzuzufügen

Code:
<?php 
                $result = mysql_query("SELECT * FROM journal WHERE kategorie=4 order by id desc", $conn);		
                $cnt=0;
                while($row = mysql_fetch_row($result))
                { 
                    echo"<tr><td><input type=\"checkbox\" name=\"update".$cnt."\"  value=\"".$row[0]."\"><input type=\"text\" class=\"text2\" name=\"titel".$cnt."\" value=\"".$row[1]."\"></td><td><input type=\"text\" class=\"text2\" name=\"link".$cnt."\" value=\"".$row[2]."\"></td></tr>";
                 $cnt++;
                }
            ?>

jetzt sollte damit kein feld mehr wie ein anderes heissen udn damit eindeutig sein

deine möglichkeit wäre jetzt über eine schleife im abzuarbeiteneden Script festzustellen welcher Eintrag jetzt gecheckt ist und welcher nicht...
natürlich solltest du über ein hidden field dann die höhe des counters mitübergeben;

ich find das generell keine gute lösung aber wie heissts so schön man soll reisende nicht aufhalten =)
 
Zuletzt bearbeitet:
Zurück