Seite 1 von 1

Ausgewählten Datensatz anzeigen

Verfasst: 01.04.2013 15:21
von waldkatze
Ich versuche gerade folgendes Problem zu lösen.
Datensatz aus einer vorhandenen Liste (die funktioniert) auswählen und im Detail anzeigen.
Alle Daten werden vollständig angezeigt.
Es wird jedoch immer der Datensatz mit der kleinsten ID-Nummer angezeigt, nicht der ausgewählte.
Was mache ich falsch?

Code: Alles auswählen

// Detailanzeige / Ausgewählten Datensatz mit ID-Nummer einlesen und anzeigen
$id    = (int) request_var('fz.id', 0);
$mode  = (string) request_var('mode', '');

if ($mode == 'edit' && $preview == false)
{ 
  if ($preview == false)
    {        
    $sql = $db->sql_build_query('SELECT', array(
    'SELECT'    => 'fz.id, fz.hersteller, fz.typ, fz.leistung, fz.kommentar, u.user_id, u.username, u.user_colour, u.user_from, user_email, u.user_avatar, u.user_avatar_type, u.user_avatar_width, user_avatar_height ',
    'FROM'         => array(
    TEST_TABLE     => 'fz',
    USERS_TABLE     => 'u',
    ),
    'WHERE'        => 'fz.fahrzeug_author = u.user_id',
    'WHERE fz.id = ' . (int) $id,
));
    $result = $db->sql_query($sql);
    $row = $db->sql_fetchrow($result);
    }        
    if ($submit == true)
    {
    $db->sql_query('UPDATE ' . TEST_TABLE . ' SET ' . $db->sql_build_array('UPDATE', $sql_ary) . ' WHERE fz.id = ' . $id);
    }    
}            
    $template->assign_vars(array(
    'FAHRZEUG_ID' => $row['id'],
    'HERSTELLER'  => $row['hersteller'],
    'TYPE'           => $row['typ'],
    'LEISTUNG'      => $row['leistung'],
    'KOMMENTAR'   => $row['kommentar'],
    'USER_ID'         => $row['user_id'],
    'AUTHOR_FULL'     => get_username_string('full', $row['user_id'], $row['username'], $row['user_colour']),
    'POSTER_FROM'     => $row['user_from'],
    'POSTER_AVATAR'   => get_user_avatar($row['user_avatar'], $row['user_avatar_type'], $row['user_avatar_width'], $row['user_avatar_height']),          
  ));

Re: Ausgewählten Datensatz anzeigen

Verfasst: 01.04.2013 16:58
von Miriam
$row = $db->sql_fetchrow($result);

??? Erwartest Du nur ein Ergebnis?
Was ist mit

Code: Alles auswählen

while ($row = $db->sql_fetchrow($result);)
{
//hier Auswertung
} 
?
Es können doch auch mehrere sein.

Code: Alles auswählen

// Detailanzeige / Ausgewählten Datensatz mit ID-Nummer einlesen und anzeigen
$id = request_var('fz.id', 0);
$mode = request_var('mode', '');

if ($mode == 'edit' && $preview == false) // ist $preview nicht auch ein MODE?
{ 
    if ($preview == false) // aber das ist doch FALSE, sonst wärst Du nicht so weit gekommen
    {
        $sql = $db->sql_build_query('SELECT', array(
            'SELECT'    => 'fz.id, fz.hersteller, fz.typ, fz.leistung, fz.kommentar, u.user_id, u.username, u.user_colour, u.user_from, user_email, u.user_avatar, u.user_avatar_type, u.user_avatar_width, user_avatar_height ',
            'FROM'        => array(
                    TEST_TABLE    => 'fz',
                    USERS_TABLE    => 'u',
                ),
            'WHERE'        => 'fz.fahrzeug_author = u.user_id 
                    AND fz.id = ' . (int)$id,
            ));
        $result = $db->sql_query($sql);
        while ($row = $db->sql_fetchrow($result)
        {
            $template->assign_vars(array(
                'FAHRZEUG_ID'    => $row['id'],
                'HERSTELLER'    => $row['hersteller'],
                'TYPE'            => $row['typ'],
                'LEISTUNG'        => $row['leistung'],
                'KOMMENTAR'        => $row['kommentar'],
                'USER_ID'        => $row['user_id'],
                'AUTHOR_FULL'    => get_username_string('full', $row['user_id'], $row['username'], $row['user_colour']),
                'POSTER_FROM'    => $row['user_from'],
                'POSTER_AVATAR'    => get_user_avatar($row['user_avatar'], $row['user_avatar_type'], $row['user_avatar_width'], $row['user_avatar_height']),          
              ));
        }
        $db->sql_freeresult($result); // und immer schön aufräumen :-P
    }
}

// ab hier besteht noch Handlungsbedarf 
if ($submit == true) // wo fragst Du $submit ab?
{
    $db->sql_query('UPDATE ' . TEST_TABLE . ' SET ' . $db->sql_build_array('UPDATE', $sql_ary) . ' WHERE fz.id = ' . $id); // wo kommt den $sql_ary her?
} 
Da war auch 2x WHERE drin. :o

Wirf mal einen Blick in die Coding Guidelines, die sich im Verzeichnis docs Deines Pakets befinden.

Re: Ausgewählten Datensatz anzeigen

Verfasst: 01.04.2013 20:11
von waldkatze
Hallo Miriam, erst mal Dank für deine Mühe,
ich will wie oben schon geschrieben nur einen einzelnen ausgewählten Datensatz anzeigen, den ich in einer vorhandenen Ausgabeliste anklicke.
Das habe ich zuerst so gemacht und funktioniert auch:

Code: Alles auswählen

// Ausgewählten Datensatz anzeigen
$id    = (int) request_var('id', 0);
$mode  = (string) request_var('mode', '');

if ($mode == 'edit' && $preview == false)
{
    $sql = 'SELECT * FROM ' . TEST_TABLE . '
        WHERE id = ' . $id;
        $result = $db->sql_query($sql);
        $row = $db->sql_fetchrow($result);
        
        if ($preview == false)
        {        
        $id         = $row['id'];                    
        $hersteller = utf8_normalize_nfc($row['hersteller']);
        $typ        = utf8_normalize_nfc($row['typ']);    
        $leistung   = utf8_normalize_nfc($row['leistung']);                
        $kommentar     = utf8_normalize_nfc($row['kommentar']);            
        }        
        if ($submit == true)
        {
        $db->sql_query('UPDATE ' . TEST_TABLE . ' SET ' . $db->sql_build_array('UPDATE', $sql_ary) . ' WHERE id = ' . $id);
        }    
}
    $template->assign_vars(array(
    'FAHRZEUG_ID' => $id,
    'HERSTELLER'  => $hersteller,
    'TYPE'          => $typ,
    'LEISTUNG'      => $leistung,
    'KOMMENTAR'   => $kommentar,
));
Das Problem kommt wenn ich versuche die "USERS_TABLE" mit einzubinden.
Wenn ich es schreibe wie im ersten Beitrag, wird der Datensatz mit der kleinsten ID angezeigt, nicht der angewählte.

Ich bekomme das aber nicht hin den funktionierenden Code hier im Beitrag auf beide Tabellen zu ändern.