Falsche ausgabe

Erstmal der Code:

[php]

$query = „SELECT * FROM cols“;
$rsl = mysql_query($query);
while($cn=mysql_fetch_object($rsl)) {
$boxname = $cn->boxname; // Boxname wird definiert
$text = format($cn->text); // Inhalt der Box wird definiert
$typ = $cn->typ; // Typ wird definiert (norm für normale Box, z.B. online für ein Extra

    $query2 = "SELECT * FROM extras"; // $query für auslesen der installierten extras.
    $rsl2 = mysql_query($query2); // $rsl (Result) der Query
    while($st=mysql_fetch_object($rsl2)) { // while shleife zum durchgehen aller Extras
        $typname = $st->name; // Typname auslesen und definieren
        $disabled = $st->disabled; // Auslesen ob das Extra aktiviert oder Deaktiviert ist
        
        if($typname == $typ) { // Stimmt der Typname mit dem Typ der Box überein?
            $text .= "<br><br>"; // Wenn ja dann zwei neue Zeilen dem Text hinzufügen
            if($disabled == 1) { // Ist das Extra deaktiviert?
                $text .= "Deaktiviert!"; // Wenn ja dann 'Deaktiviert' dem Text hinzufügen
            }
            else $text .= "test"; // Andernfalls funktion für Extra starten
        }
        elseif($typ == "norm") $text .= "<br>"; //Andernfalls prüfe ob der Boxtyp der Typ 'norm' ist. // Wenn ja neue Zeile zum Text hinzufügen
        else $text = "<br><br>Die angegebe Erweiterung existiert nicht"; // Andernfalls Den String als Text definieren
        unset($disabled,$typname);
    }
    $boxes .= '<div class="left_top"></div>
               <div class="left_mid"><h1>'.$boxname.'</h1>
               <p>'.$text.'</p>
               </div>
               <div class="left_bot"></div>
              ';
    unset($text,$disabled,$typname);
}

[/php]Warum giebt er immer nur ‚Die angegegbene Erweiterung existiert nicht‘ aus, obwohl sie existiert? Mach ich was falsch?

Ich hoffe der Code ist gut beschrieben und mir kann jemand antworten.

Kann mir keiner helfen?

also ich versteh ja eig so gut wie garnix von php, aber wo wird da überhaupt was ausgegeben. da wird ja immer nur $text definiert. theoretisch jedoch müsste der code klappen, sofern die daten in der db richtig sind. kannste die mal bitte kopieren??

am ende der Funktion wird die Variable $boxes dann ausgegeben.

das steht da aba nich mehr im code drin, oda??? aba zur beruhigung… ich hab auch so ein problem. kannst ja ma in meinen logout thread gucken

hab mal etwas aufgeräumt. Ich hasse unübersichtlichen Code
[PHP]<?php function trigger() { trigger_error("[".mysql_errno()."] ".mysql_error(), E_USER_ERROR); } $boxes = ""; $rsl = mysql_query("SELECT * FROM cols") or trigger(); while($cn = mysql_fetch_object($rsl)) { $text = format($cn->text); $rsl2 = mysql_query("SELECT * FROM extras") or trigger(); while($st = mysql_fetch_object($rsl2)) { if($st->name == $cn->typ) { $text .= "

"; $text .= ($disabled) ? "Deaktiviert" : "test"; } else { $text .= ($cn->typ == "norm") ? $text .= "
" : "

Die angegebene Erweiterung existiert nicht"; } } $boxes .= <<<EOF

{$cn->boxname}

{$text}

EOF; } ?>[/PHP]

Schaumal ob die Logik so stimmt, und dann mach ein paar Testausgaben, dann soltest du den Fehler spätestens entdecken.
Da ich nicht weiß welche Daten von wo wie da rein kommen, kann ich dir in Punkto Logik des Programms nicht weiterhelfen.

möchte dich jetzt nicht berichtigen aber ich glaube das du bei einem heredoc keine anderen zeichen außer einem semikolon in der zeile mit dem end identifyer haben darfst ^^

ich habs jetzt gelöst:
[PHP]

function get_boxes($s) {
$query = „SELECT * FROM cols“;
$rsl = mysql_query($query);
while($cn=mysql_fetch_object($rsl)) {
$boxname = $cn->boxname; // Boxname wird definiert
$text = format($cn->text); // Inhalt der Box wird definiert
$boxtyp = $cn->typ;

    $query2 = "SELECT * FROM extras WHERE name = '".$boxtyp."'"; // $query für auslesen der installierten extras.
    $rsl2 = mysql_query($query2); // $rsl (Result) der Query
    while($st=mysql_fetch_object($rsl2)) { // while shleife zum durchgehen aller Extras
        $disabled = $st->disabled; // Auslesen ob das Extra aktiviert oder Deaktiviert ist
        
        $text .= "<br><br>"; // Wenn ja dann zwei neue Zeilen dem Text hinzufügen
        if($disabled == 1) { // Ist das Extra deaktiviert?
            $text .= "Deaktiviert!"; // Wenn ja dann 'Deaktiviert' dem Text hinzufügen
        }
        else {
            $text .= get_extra($st->name); // Andernfalls funktion für Extra starten
        }
        $xy = 1;
        unset($disabled,$typname);
    }
    if($xy == 0) {
        if($cn->typ == "norm") {
            // Nichts soll passieren
        }
        else {
            $text .= "<br><br>Extra ist nicht installiert!";
        }
    }
    else {
        //
    }
    $boxes .= '<div class="box_top"></div>
               <div class="box_mid"><h1>'.$boxname.'</h1>
               <p>'.$text.'</p>
               </div>
               <div class="box_bot"></div>
              ';
    unset($text,$disabled,$typname,$xy);
}
echo $boxes;

}

[/PHP]

mal eben zum design, man verschachtelt solche querys nicht, sowas buffert man, oder führt vorerst aus. mysql muss nicht immer damit gequält werden wenn du die daten schon hast.

doch, es muss immer neu abgefragt werden, da sich der Typ immer ändert (die Query somit auch)

natürlich, ich habs beim überfliegen übersehen bzw nicht gescrollt. mein fehler.