88871
Goto Top

UPDATE in mySQL geht nicht

möchte eine form in meiner mySQL updaten. geht nicht. habe das gleiche script auf einer anderen seite, gleicher webserver. da funktioniert es. irgendwo hat es noch einen "hund" drin.

Guten Morgen liebe Gemeinde.

Ich hoffe nun das hier bei Administrator jemand einen Fehler findet. Komatas etc habe ich alle 100x geprüft..... Laut Fehlermeldung kann es das aber auch nicht sein. Ich denke ich habe etwas logisches vergessen, nur was !

Ich habe PHP 4.3 installiert. Nein, kein Upgrade möglich face-smile


Ich habe eine Seite wo ich Rechte anhand der Checkboxen vergebe. Beim "UPDATE"n der db bekomme ich folgende Fehlermeldung:
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 5
Und mit Line5 meint er den Eintrag in die db wo er die daten mit der ID zustellt...
<?php
attr_liefer='$_POST[attr_liefer]' WHERE id = $_POST[id]";  
?>

Und hier das Script:
 
<?php

    include "../dbcon.php";  
    include "auth.php";  
    include "navigation.php";  
    include "../functions.php";  

    session_start();

    $submit = $_POST['submit'];  

    echo "Folgende Daten sind vorhanden<br><br>";  

    // formulardaten mit strip_tags = html & php ignorieren
    $vorname = strip_tags($_POST['vorname']);  
    $nachname = strip_tags($_POST['nachname']);  
    $attr_prim = strip_tags($_POST['attr_prim']);  
    $attr_add = strip_tags($_POST['attr_add']);  
    $attr_liefer = strip_tags($_POST['attr_liefer']);  
    $attr_admin = strip_tags($_POST['attr_admin']);  

    if(isset($_POST['submit']))  
    {
    $update = "UPDATE db SET  
    attr_admin='$_POST[attr_admin]',  
    attr_prim='$_POST[attr_prim]',  
    attr_add='$_POST[attr_add]',  
    attr_liefer='$_POST[attr_liefer]' WHERE id = $_POST[id]";  

    mysql_query($update) or die(mysql_error());

    echo "Erfolgreich gespeichert<br><br>Bitte warten...<meta http-equiv='refresh' content='2;url=xxxxxx.php'>";  
        die();
    }

    if(!isset($_POST['submit']))  

    // holt sich mit * alle daten aus der table temporär
    $result = mysql_query("SELECT * FROM db WHERE infocode='$infocode' ORDER BY id ASC") or die(mysql_error());  

    // speichert die geholten daten in die variable $row
    while($row = mysql_fetch_array($result))
    {
    ?>
    <form method="post" action="<?php echo $SERVER['PHP_SELF']; ?>">  
        <table width="800" border="0" bgcolor="#BBBBBB" cellspacing="1" cellpadding="2">  
            <tr>
                <td width="200" bgcolor="#F4F4F4"><b><?php echo $row['vorname']; ?> <?php echo $row['nachname']; ?></b></td>  
                <td bgcolor="#F4F4F4"><input type="radio" name="attr_prim" value="ON" <? echo(is_checked($row[attr_prim]=='ON')); ?>>Schön ist die Welt</td>  
                <td bgcolor="#F4F4F4"><input type="checkbox" name="attr_add" value="ON" <? echo(is_checked($row[attr_addt]=='ON')); ?>>Da hast Du recht</td>  
                <td bgcolor="#DDDDDD"><input type="radio" name="attr_liefer" value="ON" <? echo(is_checked($row[attr_liefer]=='ON')); ?>>Halleluja</td>  
                <td bgcolor="#D6A04B"><input type="checkbox" name="attr_admin" value="ON" <? echo(is_checked($row[attr_admin]=='ON')); ?>>Joe</td>  
            </tr>
        </table>
      <br>
    <?php
        } #schluss der abfragen schleife
    ?>
        <br><br>
        <input type='hidden' name='id' value='<?php echo $_GET['id']; ?>' /><input type='button' value='Zurück' onClick='history.back()'> <input type="reset"> <input type="submit" name="submit" value="Speichern">  
    </form>


Laut Fehlermeldung (Andere mySQL Version....?? - Auf einer anderen Seite, derselbe Server funktionierts einwandfrei..)

was stimmt hier nicht :--) help, help !

Content-Key: 150706

Url: https://administrator.de/contentid/150706

Printed on: April 25, 2024 at 08:04 o'clock

Member: MrTrebron
MrTrebron Sep 09, 2010 at 10:33:34 (UTC)
Goto Top
Wie sieht denn der SQL Befehl aus wenn du ihn dir mal Anzeigen läßt
Mitglied: 88871
88871 Sep 09, 2010 at 10:38:25 (UTC)
Goto Top
Zitat von @MrTrebron:
Wie sieht denn der SQL Befehl aus wenn du ihn dir mal Anzeigen läßt

SQL-Befehl:
UPDATE `db` SET `attr_admin` = '',
`attr_prim` = '',
`attr_add` = '',
`created` = NOW( ) WHERE `id` =150 LIMIT 1 ;

in meiner form schreib ich da ON rein falls angehakt. der SQL ist nun wenn man es abhakt, also leerer eintrag
Member: MrTrebron
MrTrebron Sep 09, 2010 at 10:42:21 (UTC)
Goto Top
Wenn du

$update = "UPDATE db SET   
26.
    attr_admin='$_POST[attr_admin]',   
27.
    attr_prim='$_POST[attr_prim]',   
28.
    attr_add='$_POST[attr_add]',   
29.
    attr_liefer='$_POST[attr_liefer]' WHERE id = $_POST[id]";   

Durchlaufen hast, wie ist dann der Inhalt von $update.
Mitglied: 88871
88871 Sep 09, 2010 at 10:46:24 (UTC)
Goto Top
string(0) "" NULL NULL string(2) "ON" string(2) "ON" string(2) "ON" 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 5
Mitglied: 88871
88871 Sep 09, 2010 at 10:48:33 (UTC)
Goto Top
nehme ich das WHERE id = $_POST[id] ganz weg, schreibt er mir einfach alles ein face-smile irgendwo hakt es mit der id
Member: MrTrebron
MrTrebron Sep 09, 2010 at 10:51:55 (UTC)
Goto Top
Sieht so aus

Die scheint wohl irgendwo verloren zu gehen
Mitglied: 88871
88871 Sep 09, 2010 at 10:55:20 (UTC)
Goto Top
Das Anzeigen der hinterlegten "ON"s in der db funktioniert. also kennt er ja die id. Ich lasse mir aber mehrere User anzeigen, alle die er findet unter " WHERE infocode='$infocode'" Das ist ein hinterlegter Code.

Warum schreibt er aber nichts mehr rein.... ANsonsten muss ich mir nochmals das andere Script reinkopieren und anpassen. Ich seh den Baum vor lauter Wald nicht mehr *gg*
Member: SlainteMhath
SlainteMhath Sep 09, 2010 at 12:03:21 (UTC)
Goto Top
Moin.

darf ich noch ne Anmerkung zum Code machen? Die Seite ist anfällig für SQL Injection Angriffe: http://de.wikipedia.org/wiki/SQL-Injection

1. Du schmeisst zwar php & html aus den $_POST's benutzt dann aber trotzdem die $_POST Variable im Update:
    $update = "UPDATE db SET   
    attr_admin='$_POST[attr_admin]',   
  [...}

2. strip_tags schützt dich zwar davor das htmlcode den der Benutzer eingeben hat in der DB und dann wieder auf der Webseite landet, aber vor SQL Injection schützt das nicht. Du möchtest $_POST zusätzlich mit mysql_real_escape_string bearbeiten, siehe http://php.net/manual/de/function.mysql-real-escape-string.php

lg,
Slainte

/EDIT: Tippfehler beseitigt
Mitglied: 88871
88871 Sep 09, 2010 at 12:07:35 (UTC)
Goto Top
Zitat von @SlainteMhath:
Moin.

darf ich noch ne Anmerkung zum Code machen? Die Seite ist anfällig für SQL Injection Angriffe:
http://de.wikipedia.org/wiki/SQL-Injection

1. Du schmeisst zwar php & html aus den $_POST's benutzt dann aber trotzdem die $_POST Variable im Update:
>     $update = "UPDATE db SET   
>     attr_admin='$_POST[attr_admin]',   
>   [...}
> 

2. strip_tags schützt dich zwar davor das htmlcode den der Benutzer eingeben hat in der DB und dann wieder auf der Webseite
landet, aber vor SQL Injection schützt das nicht. Du möchtest $_POST zusätzlich mit mysql_real_escape_string
bearbeiten, siehe http://php.net/manual/de/function.mysql-real-escape-string.php

lg,
Slainte

/EDIT: Tippfehler beseitigt

hoi, ja danke fuer die anmerkung. hab den real_escape_string nicht während des codens schon eingebaut, lauter faulheit face-smile Ist mir aber bekannt.

PS: wäre mir lieber du findest den FEHLER face-smile
Member: SlainteMhath
SlainteMhath Sep 09, 2010 at 12:30:09 (UTC)
Goto Top
PS: wäre mir lieber du findest den FEHLER
face-smile

Wird denn id korrekt per GET übergeben? Was steht im der HTML Quelle. wenn die Seite angezeigt wird (Zeile 61) ?

btw. die korrekte Schreibweise ist
 $_POST['id')  

ohne die ' erzeugt das zumindest eine NOTICE, oder einen falschen Wert, falls id als Konstante benutzt wird
Tipp: immer mit E_STRICT oder E_ALL entwickeln face-smile

[...] nicht während des codens schon eingebaut, lauter faulheit
Ich hab schon sooo viele PHP Seiten in Produktiv-Systemen gesehen, die "eingentlich nur zum debugen" waren face-smile
Member: manuel-r
manuel-r Sep 09, 2010 at 12:33:15 (UTC)
Goto Top
Kannst du mal in Zeile 30 ein
 echo $update
einbauen?
Das hier
string(0) "" NULL NULL string(2) "ON" string(2) "ON" string(2) "ON"
kann nämlich unmöglich der Inhalt von $update sein, weil alleine schon das UPDATE db SET aus Zeile 25 ganz am Anfang fehlt.

Manuel
Mitglied: 88871
88871 Sep 09, 2010 at 12:46:24 (UTC)
Goto Top
Zitat von @manuel-r:
Kannst du mal in Zeile 30 ein
 echo $update
einbauen?
Das hier
> string(0) "" NULL NULL string(2) "ON" string(2) "ON" string(2) "ON"
kann nämlich unmöglich der Inhalt von $update sein, weil alleine schon das UPDATE db SET aus Zeile 25 ganz am Anfang
fehlt.

Manuel


hoi manuel. ja hab nun mal den update query eingebaut. folgendes kommt zurück:

UPDATE portal_user SET attr_admin='ON', attr_prim='ON', attr_add='ON', attr_liefer='ON', WHERE id = 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 'WHERE id =' at line 6  

ich denke mit der id stimmt was nicht. habs nun auch nur mit einem user probiert. er schreibt nicht mal mit einem angezeigten user diese "ON" in die db.
die daten empfängt er schön = ON
Member: manuel-r
manuel-r Sep 09, 2010 at 12:51:56 (UTC)
Goto Top
Klarer Fall: $_POST[id] ist leer. Dort wo deren Inhalt stehen sollte, also hinter id=, ist nämlich nur warme Luft. Jetzt musst du nur noch herausfinden, warum die Variable leer ist. Wird sie überhaupt vom Formular mitgeschickt?
Mitglied: 88871
88871 Sep 09, 2010 at 13:03:30 (UTC)
Goto Top
Zitat von @manuel-r:
Klarer Fall: $_POST[id] ist leer. Dort wo deren Inhalt stehen sollte, also hinter id=, ist nämlich nur warme Luft.
Jetzt musst du nur noch herausfinden, warum die Variable leer ist. Wird sie überhaupt vom Formular mitgeschickt?

Ja die ID ist nirgendwo face-sad ich gebe die "id" unten als "hidden field" mit, aber das scheint nicht zu klappen. die frage ist, woher kriegt das script die "id" wenn ich es mit "GET" löse..... oder gibt es andere lösungen ?
Member: SlainteMhath
SlainteMhath Sep 09, 2010 at 13:08:13 (UTC)
Goto Top
*hust*

vor einer guten halben stunde hab ich schonmal gefragt:


> Wird denn id korrekt per GET übergeben? Was steht im der HTML Quelle. wenn die Seite angezeigt wird (Zeile 61) ?
Mitglied: 88871
88871 Sep 09, 2010 at 13:09:46 (UTC)
Goto Top
hmm... funktionieren tut es wenn ich als URL logischerweise das hier übergebe:

http://www.aaaaaa.aa/aaaaaaaaa.php?id=151

die seite übergebe ich aber nicht mit einer ID in der url, da ich mehrere user anzeige und verwalten will, als eine art rechte verteillung.......


ich bin ganz auf dem holzweg.....


müsste ich bei den checkboxen in der VALUE mit ids arbeiten... hmmm ich weiss es nicht..
Member: manuel-r
manuel-r Sep 09, 2010 at 13:09:56 (UTC)
Goto Top
Genau das wollte ich jetzt auch grad nochmal fragen...
Member: SlainteMhath
SlainteMhath Sep 09, 2010 at 13:21:11 (UTC)
Goto Top
ok, langsam wird ein schuh draus ^^

Die Checkboxen müssen "attr_prim[<id>]" benannt werden.
.... name="attr_prim[' <? echo $row["id"] ?> ']" ....  
dann wird das als Array übergeben.

Einlesen kannst Du das dann in etwa so
$attr_prim=$_POST["attr_prim"];  
foreach($attr_prim as $id => $value) {
 $update.. usw
}
Mitglied: 88871
88871 Sep 09, 2010 at 13:41:14 (UTC)
Goto Top
Zitat von @SlainteMhath:
ok, langsam wird ein schuh draus ^^

lol da hast du ver*** nochmal recht face-smile


Die Checkboxen müssen "attr_prim[<id>]" benannt werden.
> .... name="attr_prim[' <? echo $row["id"] ?> ']" ....  
> 
habe ich mir doch gedacht. danke fuer den hinweis


dann wird das als Array übergeben.

Einlesen kannst Du das dann in etwa so
> $attr_prim=$_POST["attr_prim"];  
> foreach($attr_prim as $id => $value) {
>  $update.. usw
> }
> 

muss ich das FOREACH für jede checkbox machen ?
Mitglied: 88871
88871 Sep 09, 2010 at 14:04:39 (UTC)
Goto Top
Zitat von @SlainteMhath:
> [...] nicht während des codens schon eingebaut, lauter faulheit
Ich hab schon sooo viele PHP Seiten in Produktiv-Systemen gesehen, die "eingentlich nur zum debugen" waren face-smile

hab grad gesehen das ich diese funktion automatisch laufen habe (included file)


This stops SQL Injection in POST vars
foreach ($_POST as $key => $value)
{
$_POST[$key] = mysql_real_escape_string($value);
}

This stops SQL Injection in GET vars
foreach ($_GET as $key => $value)
{
$_GET[$key] = mysql_real_escape_string($value);
}
Member: godlie
godlie Sep 09, 2010 at 14:22:52 (UTC)
Goto Top
Hallo,

also wenn du dein Script ohne den nötigen GetParameter aufrust ( index.php?id=12 ) dann wird in deinem Hiddenfield auch nichts stehen...
In deiner Form method ist die action falsch dort sollte $_SERVER stehen, weiters hast du eine Klammer vergessen für das If bei
!isset($_POST[submit])

Das wäre mal so was mir aufgefallen ist ich würd mal schwer an den Basics arbeiten und nicht nur irgendwelches zeug zusammenkopieren ...
Member: SlainteMhath
SlainteMhath Sep 09, 2010 at 14:27:51 (UTC)
Goto Top
muss ich das FOREACH für jede checkbox machen ?
Nein, für jede vorhandene id, du willst ja jede Zeile die ausgegeben wurde auch wieder zurückschreiben
Mitglied: 88871
88871 Sep 09, 2010 at 14:29:30 (UTC)
Goto Top
eazy. das script habe ich nicht zusammen kopiert, wie kommst du drauf ? ist doch schön aufgebaut, die comments sind alle von mir. hey, jeder fängt mal irgendwann an oder.....


die klammer kann sein das sie beim copy&pasten verloren ging. stimmt so alles.

$SERVER geht so auch, habs nun in $_SERVER geändert face-smile

das hidden field hab ich nun auch weggelassen. stimmt, jetzt wo dus sagst: ich brauch das gar nicht weils nichts nutzt

aber genug offtopic !
Mitglied: 88871
88871 Sep 09, 2010 at 14:36:53 (UTC)
Goto Top
Zitat von @SlainteMhath:
> muss ich das FOREACH für jede checkbox machen ?
Nein, für jede vorhandene id, du willst ja jede Zeile die ausgegeben wurde auch wieder zurückschreiben

ich kapiers noch nicht ganz. wir haben die variable $attr_prim. die steht da im FOREACH befehl. wo ist denn der rest meiner checkboxen ? hab ja noch attr_liefer attr_admin und attr_add

ps: ich les nebenbei noch in meinem "php von kopf bis fuss" buch ^^ mir raucht echt der kopf...
Member: SlainteMhath
SlainteMhath Sep 09, 2010 at 14:43:29 (UTC)
Goto Top
$attr_prim=$_POST["attr_prim"];   
$attr_test=$_POST["attr_test"];   
foreach($attr_prim as $id => $value) { 
  $update = sprintf("UPDATE blubb SET attr_prim='%s', attr_test='%s' WHERE ID=%s", $attr_prim[$id], $attr_test[$id],$id]);  
  mysql_query($update);
 } 

so in etwa face-smile
Mitglied: 88871
88871 Sep 09, 2010 at 15:17:16 (UTC)
Goto Top
Zitat von @SlainteMhath:
> $attr_prim=$_POST["attr_prim"];   
> $attr_test=$_POST["attr_test"];   
> foreach($attr_prim as $id => $value) { 
>   $update = sprintf("UPDATE blubb SET attr_prim='%s', attr_test='%s' WHERE ID=%s", $attr_prim[$id],  
> $attr_test[$id],$id]);
>   mysql_query($update);
>  } 
> 

so in etwa face-smile

holy smoly ! ich probier das doch glatt mal aus, danke dir.... verstehen werd ichs wohl erst wenns funktioniert. aber so ist das nun mal. einzelne datensätze zu speichern, ändern und updaten habe ich soweit begriffen. arrays und foreach ist nun meine nächste "Nemesis".....
Mitglied: 88871
88871 Sep 09, 2010 at 15:41:48 (UTC)
Goto Top
ich frage mich wozu das" => $value " verwendet wird.... das kommt ja nirgends mehr vor.. oder ist das ein globaler string ?
Member: godlie
godlie Sep 09, 2010 at 15:52:39 (UTC)
Goto Top
Ist ein wenig komisch konstruiert der foreach.

$attr['one'] = "first";  
$attr['two'] = "second";  

foreach($attr as $id => $value) { 
   echo "Key/ID: ".id" Value: ".$value;  
} 
Ausgabe:

Key/ID: one Value: first
Key/ID: two Value: second

Damit dürfte es verständlicher sein.

Aber ncoh ein ansatz für deinen Query:
string attribs = "";  
foreach($attr_prim as $id => $value) {
  $attribs .= $id."='".$value."'",";  
}
$atrribs = substr(0,strlen($attribs) - 1;

$query = "UPDATE blub SET ".$attribs." WHERE ID=".$id;  
mysql_query($query);
Member: SlainteMhath
SlainteMhath Sep 10, 2010 at 05:44:48 (UTC)
Goto Top
Moin,

ja stimmt, das $value gehört eigentl. raus..sowas kommt von c&p :P

lg,
Slainte
Member: SlainteMhath
SlainteMhath Sep 10, 2010 at 05:52:41 (UTC)
Goto Top
Moin,

@godlie:
Aber ncoh ein ansatz für deinen Query:
[...]

Nein so klappt das nicht.

Er bekommt aus dem Form ein mehrere Arrays über $_POST die in etwa so aussehen:
attr_prim {
    =>  "wert1"  
   [1] =>  "wert2"  
   [2] =>  "wert3"  
}

attr_test {
    =>  "wert1"  
   [1] =>  "wert2"  
   [2] =>  "wert3"  
}

Der Key der Arrays ist jeweils die ID des Datensatzes der upgedatet werden soll.

(Pseudo Code)
 foreach(i = keys(attr_prim)) {
  UPDATE blubb SET attr_prim=<attr_prim[i]>, attr_test=<attr_test[i]> WHERE id=<i>
}

Dabei wird davon ausgegangen, das für jeden key in jedem array ein element vorhanden ist.

lg,
Slainte
Mitglied: 88871
88871 Sep 10, 2010 at 15:05:38 (UTC)
Goto Top
yo tnx. hatte folgende fehlermeldungen:

Notice: Undefined index: ON in ccccccccccccccccccccccccccccccccccc.php on line 22

ich werde nun mal den key aus jedem arra yauslesen anhand des bsp von Slainte.
Member: Guenni
Guenni Sep 19, 2010 at 09:27:22 (UTC)
Goto Top
Hi dark3zz,

bist du dir hier . . .

das hidden field hab ich nun auch weggelassen. stimmt, jetzt wo dus sagst: ich brauch das gar nicht weils nichts nutzt

. . . sicher, dass es nichts nutzt bzw. nicht funktioniert ??


Ich denke mal, das funkt. sehr wohl!!


Die Schreibweise . . . value='<?php echo $_GET['id']; ?>' . . . läßt darauf schließen, das du die Datensätze via Link

aufrufst.


Ein Grund, warum es nicht funktionieren könnte wäre, dass man aus Gründen der Lesbarkeit gerne Leerzeichen zwischen

Operanden und Operatoren läßt, z.B.: erg = a + b. Wenn du das bei Links machst: . . . datei.php?id = 1, wird das Leerzeichen

mit übertragen und PHP interpretiert die Variable als Zeichenkette, wobei letzteres zwar nur eine Vermutung von mir ist, aber

so geht es tatsächlich nicht, die ID wird nicht korrekt übertragen.

Anbei mal ein altes Script, das ich ein bißchen "umgefrickelt" habe:

<?php
/*
* Formular wurde gesendet ? *************************************************************************
*/
if(isset($_POST['cmd'])){  
 /*
 * Update ausführen. Wenn eine Checkbox gesendet wurde(heißt, im Formular wurde das "Häkchen" gesetzt), 
 * bekommen die Variablen die Zeichenkette "checked" zugewiesen, ansonsten nichts. 
 */
 $attr_a = isset($_POST['attr_a']) ? "checked" : "";  
 $attr_b = isset($_POST['attr_b']) ? "checked" : "";  
 $attr_c = isset($_POST['attr_c']) ? "checked" : "";  
 $attr_d = isset($_POST['attr_d']) ? "checked" : "";  
 /*
 * user_id ist das Hidden-Textfeld im Formular
 */
 $user_id = $_POST['user_id'];  
 $query="update tabelle6 set attr_a='$attr_a',attr_b='$attr_b',attr_c='$attr_c',attr_d='$attr_d' where id=$user_id";  
 mysql_query($query);
 /*
 * Die Seite ohne Parameter aufrufen, um GET- und POST-Daten zu löschen 
 */
 header("location:edit-user2.php");  
}
/*
* ***************************************************************************************************
*/
?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">  
<html>
<head>
<title>Update mit Checkboxen</title>
</head>
<body>
<?php
/*
* ***************** Tabelle abfragen und die Einträge als Link anzeigen ***************************
* Die ID des Datensatzes wird als Parameter an die URL angehangen und im Formular in einem 
* Hidden-Textfeld gespeichert.
*/
$query="select * from tabelle6";  
$result=mysql_query($query);
while($row=mysql_fetch_array($result,MYSQL_ASSOC)){
 echo "<a href=\"edit-user2.php?id=$row[id]\">$row[nachname], $row[vorname]</a><br>";  
}
/*
* *************************************************************************************************
* Link angeklickt ? *******************************************************************************
* Datensatz mit der entspr. ID abfragen($_GET['id']) und im Formular ausgeben. 
*/
if(isset($_GET['id'])){  
 $id=$_GET['id'];  
 $user="select * from tabelle6 where id=$id";  
 $result_user=mysql_query($user);
 $row=mysql_fetch_array($result_user,MYSQL_ASSOC);
 ?>
 <form action="" method="post">  
 <input type="text" name="vorname" value="<?php echo $row['vorname'];?>"/><br>  
 <input type="text" name="nachname" value="<?php echo $row['nachname'];?>"/><br>  
 <input type="checkbox" name="attr_a" value="checked" <?php echo $row['attr_a'];?>/> attr_a<br>  
 <input type="checkbox" name="attr_b" value="checked" <?php echo $row['attr_b'];?>/> attr_b<br>  
 <input type="checkbox" name="attr_c" value="checked" <?php echo $row['attr_c'];?>/> attr_c<br>  
 <input type="checkbox" name="attr_d" value="checked" <?php echo $row['attr_d'];?>/> attr_d<br>  
 <input type="hidden" value="<?php echo $id;?>" name="user_id"/>  
 <input type="submit" name="cmd" value="Edit"/>  
 </form>
 <?php
}
?>
</body>
</html>

Gruß
Günni