Wo liegt mein Denkfehler

hikeda_ya

Erfahrenes Mitglied
Hallo Community,

ich finde mein Problem nicht.


Ich habe Eine Mitgliederliste und eine Eingetragene Termine Liste.

Jetzt möchte ich alle die sich in die eingetragenen Termine mit dem entsprechenden Status anzeigen lassen.

Die die sich jedoch noch nicht eingetragen haben sollen zumindest dargestellt werden.

doch irgendwie ignoriert die mein script

(hinweis: ich möchte bei dem zweiten default das nur der Name erscheint wenn in $res4 kein ergebniss ermittelt wurde (da ja noch kein Status von dem User gesetzt = nichts)

PHP:
$res3 = sql ("select  vname from $t_mitglieder
    where m_id = '".$m_id."' ");

$res4 = sql ("select teiln from $t_history
    where t_id  = '".$_REQUEST['t_id']."'
    and m_id = '".$m_id."' ");

      while ($row4 = mysql_fetch_assoc($res4)){

switch ($m_id) {
    case 'x':
    echo '
    <td>&nbsp;</td>';
        break;
      default:

switch ($row4['teiln']){
    case '1':
    echo '
    <td bgcolor="#00cc00">';
      while ($row3 = mysql_fetch_assoc($res3)){
    echo 
    $row3['vname'].'</font></td>';}
     break;
    case '2':
    echo '
    <td bgcolor="#FF0000">';
      while ($row3 = mysql_fetch_assoc($res3)){
    echo 
    $row3['vname'].'</font></td>';}
    break;
    case '3':
    echo '
    <td bgcolor="#FFcc00">';
      while ($row3 = mysql_fetch_assoc($res3)){
    echo 
    $row3['vname'].'</font></td>';}
    break; 

//diese Zeile sollte eigentlich NUR den Namen in einer Zelle anzeigen- doch das passiert nicht.

//default : funktioniert nicht - und ein case #existiert nicht#: dann mache nur Name -> dachte ich wäre das Default

    default:
     echo '
    <td>';
      while ($row3 = mysql_fetch_assoc($res3)){
    echo 
    $row3['vname'].'</td>';}
    break; 
}
 
Zuletzt bearbeitet:
Ich empfehle dir dirngwend den Code strukturiert zu formatieren. Ich musste als erstes mal ein wenig mit Tabulatoren arbeiten um das ganze leselich zu machen und herauszufinden welches while bis wo geht.
Hier poste ichs grad mal für alle anderen Fehlersucher:
PHP:
$res3 = sql ("
    SELECT vname 
    FROM {$t_mitglieder}
    WHERE m_id = '{$m_id}'");

$res4 = sql ("
    SELECT teiln 
    FROM {$t_history}
    WHERE 
        t_id  = '{$_REQUEST['t_id']}'
        AND m_id = '{$m_id}'");

while ($row4 = mysql_fetch_assoc($res4)){

    switch ($m_id) {
        case 'x':
            echo '<td>&nbsp;</td>';
            break;
        default:
            switch ($row4['teiln']){
                case '1':
                    echo '<td bgcolor="#00cc00">';
                    while ($row3 = mysql_fetch_assoc($res3)){
                        echo $row3['vname'].'</font></td>';
                    }
                    break;
                case '2':
                    echo '<td bgcolor="#FF0000">';
                    while ($row3 = mysql_fetch_assoc($res3)){
                        echo $row3['vname'].'</font></td>';
                    }
                    break;
                case '3':
                    echo '<td bgcolor="#FFcc00">';
                    while ($row3 = mysql_fetch_assoc($res3)){
                        echo $row3['vname'].'</font></td>';
                    }
                    break; 
                //diese Zeile sollte eigentlich NUR den Namen in einer Zelle anzeigen- doch das passiert nicht.
                //default : funktioniert nicht - und ein case #existiert nicht#: dann mache nur Name -> dachte ich wäre das Default
                default:
                    echo '<td>';
                    while ($row3 = mysql_fetch_assoc($res3)){
                        echo $row3['vname'].'</td>';
                    }
                break; 
            } 
    //ERS: Die folgenden schliessenden Klammern sind durch mich hinzugefügt um suaberen Code zu haben
    }
}

Nun, dei ganze Lösung ist sehr kompliziert.
item: Du solltest das SQL zusammen nehmen mittels LEFT JOIN.
item: Da du nur die Formatierung unterscheidest, solltest du auch nur diese separat behandeln

Ich würde das gaze etwa so angehen
PHP:
$sql = "
    SELECT 
        m.vname,
        h.teiln
    FROM 
        {$t_mitglieder} AS m
        LEFT JOIN {$t_history} AS h
            ON m.m_id = h.m_ID
    WHERE 
        m.m_id = '{$m_id}'
        AND h.t_id  = '{$_REQUEST['t_id']}'";

$result = sql($sql);

$styles = array(1 => 'bgcolor="#00cc00"',
                2 => 'bgcolor="#FF0000"',
                3 => 'bgcolor="#FFcc00"');

if($m_id == 'x'){
    echo '<td>&nbsp;</td>';
}else{
    while($row = mysql_fetch_assoc($result)){
        $style = (array_key_exists($row['teiln'], $styles)) ? $styles[$row['teiln']] : '';
        echo "<td {$style}>{$row['vname']}</td>";
    }
}
 
Zurück