Verzwicktest Problem bei Blockausgabe[PROFIS], Rückgabe spielt verrückt

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Verzwicktest Problem bei Blockausgabe[PROFIS], Rückgabe spielt verrückt

    Moinsen,

    habe ein Problem mit 2 Anweisungen .

    Also ich lasse in meiner Login Datei ein Cookie mit dem Namen "user" anlegen.
    Welches quer durch mein Programm hindurch genutzt wird.

    Ich habe eine Funktion mit dem Namen "is_user".
    Hier wird geguckt ob das Cookie richtig ist und ob der User existiert, wenn dem so ist, wird 1 zurückgegeben und wenn nicht 0.
    Diese Funktion binde ich über "is_user($user) " ein.


    Ich lasse natürlich auch Blöcke rendern um das Menü darzustellen, diese Blöcke haben verschiede "Userpunkte", das heisst, das nicht alle User alle Blöcke sehen sollen, so sollen zum Beispiel die angemeldeten Benutzer das Login Feld nicht mehr sehen, deshalb habe ich dem Login Feld in der Datenbank das Parameter (view = ) 3 gegeben.

    In meinem Ausgabe script, geht eine Funktion durch die Datenbank durch und sucht sich alle Blöcke einer Seite raus block(seite).

    Soweit sogut.

    PHP-Code:
    function block($side)
    {
      global 
    $admin$user$db$prefix;

      
    // wir wollen ja nur Blocks von der richtigen Seite haben, gell?
      
    $side[0] = strtolower($side[0]);
      
    // weist der Variable Position die Koordinaten zu, damit sie richtig agieren kann
      
    $position $side[0];

      
    $sql "select * from "$prefix
        
    "_block where side = '$position' and active = 1 order by gewicht asc";
      
    $db -> query($sql);
      for(
    $i=0$i $db -> num_rows(); $i++)
      {
        
    $result $db -> fetch_array();
        
    $bid $result[bid];
        
    $title $result[title];
        
    $content $result[content];
        
    $view $result[view];
        
    $side $result[side];
        
    $adminblock  $result[admin];
        
    $weight $result[gewicht];
        
    $blockfile $result[blockfile];
        if(
    $adminblock)
        { 
    // ruft den Adminblock bei Bedarf auf
          //adminblock();
        
    }
        elseif(
    $adminblock == "0")
        {
          if(
    $view == 0)
          { 
    // freigegeben für alle Besucher
            
    render_block($title$content$side$weight$blockfile);
          }
          elseif(
    $view == AND is_user($user) || is_admin($admin))
          { 
    // für Admins und USER
            
    render_block($title$content$side$weight$blockfile);
          }
          elseif(
    $view == AND is_admin($admin))
          { 
    // nur für Admins, zum Beispiel nicht freigegebene Blöcke
            
    render_block($title$content$side$weight$blockfile);
          }
          elseif(
    $view == AND !is_user($user) || is_admin($admin))
          { 
    // nur für Besucher!
            
    render_block($title$content$side$weight$blockfile);
          }
        } 
      }

    Das ist die Funktion, die dann wenn die Blöcke sortiert sind und alles an die Ausgabe Funktion weitergibt.

    Mein Problem ist, das wenn ich angemeldet bin als User, ich kein Block sehen kann, der ungleich 0 ist, d.h wenn es so einen Block gibt derdas Parameter 1 oder 3 hat, liest er den Block aus der Datenbank aus und dann passiert nichts, das heisst es erfolgt keine Ausgabe von dem Block.

    Wenn also in der Datenbank folgenden Blöck gespeichert sind:

    Name | gewicht | view
    Test 1 0
    Test2 2 0
    Fehler 3 3
    Test3 4 0

    Dann gibt er die Blöcke Test und Test2 aus und ab da an schneidet er dann alles ab, obwohl er doch eigentlich nur den "Fehler" Block überspringen soll.

    Die gleiche Situation ist es bei Blöcken die nur für angemeldete User zur Verfügung stehen sollen ...

    Anders sieht es aus, wenn ich das Cookie lösche und in der Funktion is_user(), die Return Werte vertausche .... .
    Also wenn ich angebe, das obwohl kein User angemeldet ist, trotzdem die 1 ausgeben wird, dann geht alles wie geünscht und alle Blöcke ausser Fehler werden ausgelesen, praktisch so wie es sein muss.

    ist irgendwann mit der Anweisung !is_user($user) kaputt

    Ich weiß irgendwie nicht mehr weiter
    EDIT:
    Zeilenbrüche und Einrückungen im Code
    Zuletzt geändert von Titus; 23.05.2004, 09:53.

  • #2
    1. Wie sieht denn die Spalte `admin` in der letzten Zeile aus?
    2. Bau mal Klammern in deine Bedingungen ein, lässt sich besser lesen.
    3. In der letzten Bedingung fehlt was:
    elseif($view == 3 AND [color=green]([/color]!is_user($user) || [color=red]![/color]is_admin($admin)[color=green])[/color])
    Zuletzt geändert von Titus; 23.05.2004, 10:03.
    mein Sport: mein Frühstück: meine Arbeit:

    Sämtliche Code-Schnipsel sind im Allgemeinen nicht getestet und werden ohne Gewähr auf Fehlerfreiheit und Korrektheit gepostet.

    Kommentar

    Lädt...
    X