Ausgewählten Datensatz anzeigen

In diesem Forum kann man Fragen zur Programmierung stellen, die bei der Entwicklung von Mods für phpBB 3.0.x oder dem Modifizieren des eigenen Forums auftauchen.
Forumsregeln
phpBB 3.0 hat das Ende seiner Lebenszeit überschritten
phpBB 3.0 wird nicht mehr aktiv unterstützt. Insbesondere werden - auch bei Sicherheitslücken - keine Patches mehr bereitgestellt. Der Einsatz von phpBB 3.0 erfolgt daher auf eigene Gefahr. Wir empfehlen einen Umstieg auf die neuste phpBB-Version, welches aktiv weiterentwickelt wird und für welches regelmäßig Updates zur Verfügung gestellt werden.
Antworten
Benutzeravatar
waldkatze
Ehemaliges Teammitglied
Beiträge: 792
Registriert: 08.03.2013 21:50

Ausgewählten Datensatz anzeigen

Beitrag 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']),          
  ));
Das Bremsen eines Motorrades ist die Verschwendung hochwertiger Geschwindigkeit in sinnlose Wärmeenergie.
Benutzeravatar
Miriam
Mitglied
Beiträge: 12310
Registriert: 13.10.2004 07:18
Kontaktdaten:

Re: Ausgewählten Datensatz anzeigen

Beitrag 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.
Gruss, Miriam.
Ich schmeiß' alles hin und...
... lasse es liegen
Benutzeravatar
waldkatze
Ehemaliges Teammitglied
Beiträge: 792
Registriert: 08.03.2013 21:50

Re: Ausgewählten Datensatz anzeigen

Beitrag 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.
Das Bremsen eines Motorrades ist die Verschwendung hochwertiger Geschwindigkeit in sinnlose Wärmeenergie.
Antworten

Zurück zu „[3.0.x] Mod Bastelstube“