navi

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

  • navi

    hi all!
    besonders an tob gg !

    Also folgendes jeder kennt doch von euch web.de und andere freemail anbieter als bsp.!

    Meine Frage die haben eine User spezifische Navigation, jeder User bekommt seinen DB Inhalt per Navi angezeigt // und nicht den allgemeinen Inhalt wie es bei standard seiten der Fall ist...

    Also weiss jmd wie man dieses realisiert, das man für jeden User spezifisch seine Navigation bauen kann ? Die dann nach betätigung eines Links seinen persönlichen DB Inhalt ausliest...

    Danke für Tipps, hilfen etc !
    $adVanCEd

  • #2
    create table nav (
    nav_id bigint unsigned auto_increment not null,
    parent_id bigint unsigned,
    description varchar(100),
    href varchar(255),
    primary (nav_id),
    index (parent_id)
    );
    dann die ids entweder (a) als serialisiertes Array im Cookie oder (b) in einer weiteren Tabelle speichern:
    create table nav2user (
    nav_id bigint unsigned not null,
    user_id bigint unsigned not null,
    primary (nav_id, user_id)
    );
    und für (b) noch eine user-Tabelle:
    create table nav2user (
    user_id bigint unsigned auto_increment not null,
    uname varchar (10),
    passwd varchar(50),
    primary (user_id),
    index (uname)
    );

    und dazu passend ein Login ...
    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


    • #3
      jaaa danke für die schnelle antwort :] !!

      Habe nun folgenden Mysql Dump gemacht!:

      PHP-Code:
      ------------------------------
      LOGIN !
      ------------------------------

      CREATE TABLE `users` (
      `
      user_idBIGINT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY ,
      `
      userVARCHAR10 NOT NULL ,
      `
      passVARCHAR50 NOT NULL ,
      `
      kdnVARCHAR10 NOT NULL ,
      INDEX ( `user` ) 
      );



      ------------------------------
      Navi tables
      ------------------------------
      CREATE TABLE `nav` (
      `
      nav_idBIGINT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY ,
      `
      parent_idBIGINT UNSIGNED NOT NULL ,
      `
      descriptionVARCHAR100 NOT NULL ,
      `
      hrefVARCHAR255 NOT NULL ,
      INDEX ( `parent_id` ) 
      );




      CREATE TABLE `nav2userids` (
      `
      nav_idBIGINT UNSIGNED NOT NULL ,
      `
      user_idBIGINT UNSIGNED NOT NULL ,
      PRIMARY KEY ( `nav_id` , `user_id` ) 
      ); 
      Mal kurz überlegen wie ich weiter vorgehe ich meld mich gleich wieder gg
      bin aber noch offen für weitere ideen, und nochmal DANKE an dir titus !!
      $adVanCEd

      Kommentar


      • #4
        Frage:

        Bin gerade dabei aber wäre sehr nice wenn mir mal jmd ne Beispiels Abfrage schreiben könnte zu dem mysql dump, die einen link mit content ausliest, darstellt (individuell für den user durch die ids..) und anschliessend nach klick seinen db inhalt raussucht, mysql_query...
        Nen Beispiel COde wäre n1 nur des Verständnisses wegen ! User helfen User..

        Danke ! ;/



        Danach gehen wir einen saufen ;p
        Zuletzt geändert von gfx-freak; 27.11.2002, 14:44.
        $adVanCEd

        Kommentar


        • #5
          ich hoffe, das das so klappt.
          So wird natürlich der parent nicht berücksichtigt.
          (Soll heißen die Navigation bleibt auf einer ebene)

          Query1:
          $sql1 = " select nav.nav_id from nav, nav2userids,users ";
          $sql2 = " where ((nav.nav_id=nav2userids.nav_id) and ";
          $sql3 = " (nav2userids.user_id=users.user_id) and ";
          $sql4 = " users.user_id="$user_id") ";
          $sql = $sql1.$sql2.$sql3.$sql4;
          ...
          $navIdDB[0] = $rueck[0];
          ...

          Query2:
          $sql = " select * from nav where parent_id=".$navIdDB[0] ." ";
          ...
          while(...)
          {
          $navIdDB[] = $rueck2[0];
          }

          Andreas
          Zuletzt geändert von syn; 27.11.2002, 16:22.
          ....... .:[s|Y|n]:. . .:[www.syntheme.de]:. . .:[:-)]:. .......

          Kommentar


          • #6
            hab ich hier auch schon mehrfach gepostet ...
            PHP-Code:
            function menu($user_id=0$parent=0$level=0)
            {
              
            $res mysql_query("select n.* from nav n".
                (
            $user_id ', nav2userids z' '').
                
            " where n.parent_id=$parent".
                (
            $user_id " and z.nav_id=n.nav_id and z.user_id=$user_id'').
                
            " order by n.nav_id")
              or die (
            mysql_error());
              while (
            $row mysql_fetch_assoc($res))
                echo (
            $level str_repeat(' '$level) : ''),
                  
            '- <a href="'$row['href']', ">',
                  
            htmlentities($row['description']), '</a><br>';
            }
            menu($user_id); 
            Man kann auch noch der nav ein Feld pos int unsigned und einen index (unsigned) verpassen, dann kann die Reihenfolge der Menüpunkte selbst bestimmt werden, indem die order-by-Klausel auf 'n.pos' geändert wird.
            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


            • #7
              Ok! Danke Titus !!

              Ich teste das mal aus und melde mich dann , nur mal ne Frage nebenbei woher kannste das so perfekt ? studierste ? ! Nochmal danke bin mal testen
              $adVanCEd

              Kommentar


              • #8
                Ähm ... im Eifer des Gefechts vergessen, die Rekursion einzubauen.
                Hier ist sie:
                PHP-Code:
                function menu($user_id=0$parent=0$level=0)
                {
                  
                $res mysql_query("select n.* from nav n".
                    (
                $user_id ', nav2userids z' '').
                    
                " where n.parent_id=$parent".
                    (
                $user_id " and z.nav_id=n.nav_id and z.user_id=$user_id'').
                    
                " order by n.nav_id")
                  or die (
                mysql_error());
                  while (
                $row mysql_fetch_assoc($res))
                  {
                    echo (
                $level str_repeat('&nbsp;'$level) : ''),
                      
                '- <a href="'$row['href'], '">',
                      
                htmlentities($row['description']), '</a><br>';
                    
                menu($user_id$row['nav_id'], $level+1);
                  }
                }
                menu($user_id); 

                ---
                edit: Parse Error korrigiert
                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


                • #9
                  mhh? Rekursion
                  ich hab mal was interessantes gefunden was profis und anfänger als bsp am coden unterscheidet:

                  Anfänger:
                  if($a>1) {
                  $b=2;
                  }
                  else {
                  $b=3;
                  }

                  Profi:
                  $b = ($a>1) ? 2:3;

                  und deine Programmierart ist echt schon profi like gg.
                  Kannste mal kurz erklären was ne Rekursion ist wär nice oder ich such einfach mal nach. Erstmal danke !! gg ich bau das ein und teste mal, über weitere Tipps würde ich mich freuen .. Danke !
                  $adVanCEd

                  Kommentar


                  • #10
                    Original geschrieben von gfx-freak
                    Profi:
                    $b = ($a>1) ? 2:3;
                    die Klammer ist unnötig !
                    TBT

                    Die zwei wichtigsten Regeln für eine berufliche Karriere:
                    1. Verrate niemals alles was du weißt!


                    PHP 2 AllPatrizier II Browsergame

                    Kommentar


                    • #11
                      recursion:
                      dat is ne funktion, die sich sozusagen selber wieder aufruft. super schnell, nicht sehr speicherfreundlich,
                      und für anfänger ziemlich gefährlich.

                      einfaches beispiel: potenzen berechnen:

                      function pow($zahl,$potenz){
                      if($potenz==1)return $zahl;
                      else return $zahl*pow($zahl,--$potenz);
                      }
                      eval(str_pad(aa|db,4,slarti^~äü_i_)." \"áú¾ïùû䶳Ðäýï©üèíþç£þé\"^~\"no bugs, only features\";");

                      Kommentar


                      • #12
                        Zugegeben, Rekursion verbraucht mehr Speicher; aber in diesem Fall ist es wohl vertretbar (wenn das Menü nicht allzuweit verschachtelt ist). Gefährlich wird´s nur, wenn man die Abbruch-Bedingung versaut.

                        Außerdem muss man (gerade als Anfänger) bei der Umwandlung eines rekursiven Algorithmus in sein iteratives Pendant extreme Vorsicht walten lassen, sonst gibt das Murks.

                        Drittens ist der rekursive Code meist leichter zu verstehen; das war für mich ein weiterer Grund, hier die rekursive Version zu posten.
                        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


                        • #13
                          Original geschrieben von gfx-freak

                          Profi:
                          $b = ($a>1) ? 2:3;
                          ich erweitere die Aufzählung mal:

                          leicht Verrückter:
                          function sgn($x) { return $x>0?1:$x<0?-1:0; }
                          $b = (int)(ceil(sgn($a-1)+0.1)*0.5+2.5);

                          Irrer:
                          switch(substr($a-1,$b=0,1)){case'-':$b--;default:$b+=3;}

                          PS: Wieso gibt´s in PHP eigentlich noch keine sgn-Funktion?
                          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


                          • #14
                            Erstmal danke an alle für die ausführlichen erläuterungen gg !
                            @ Titus

                            Irrer:
                            switch(substr($a-1,$b=0,1)){case'-':$b--;default:$b+=3;}


                            das ist irre !!
                            wo habt ihr das so professionell gelernt ? studiert, oder einfach nachgedacht :] ... danke alex
                            $adVanCEd

                            Kommentar


                            • #15
                              PHP-Code:
                              function menu($user_id=0$parent=0$level=0)
                              {
                                
                              $res mysql_query("select n.* from sisdb_nav n".($user_id ', sisdb_nav2userids z' '').
                                
                              " where n.parent_id=$parent".($user_id " and z.nav_id=n.nav_id and z.user_id=$user_id'').
                                
                              " order by n.nav_id")or die (mysql_error()); while ($row mysql_fetch_assoc($res))
                                {
                                echo (
                              $level str_repeat('&nbsp;'$level) : ''), '- <a href=\"'$row['href']'" \">',
                                
                              htmlentities($row['description']), '</a><br>'menu($user_id$row['nav_id'], $level+1);
                                }
                              }
                              menu($user_id); 
                              jungz wo isn da der parse error ? muss bei href sein aber was da falsch ?!
                              $adVanCEd

                              Kommentar

                              Lädt...
                              X