Ankündigung

Einklappen
Keine Ankündigung bisher.

Wie soll ich die navbar updaten?

Einklappen

Neue Werbung 2019

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

  • Wie soll ich die navbar updaten?

    Hallo,

    ja ich mal wieder aber diesmal geht es nur indirekt um PHP.

    Also ich habe jetz meine Seite mehr oder weniger fertig da ich eigentlich nurnoch eine Sache brauche und designen mit CSS oder so war eh nie beabsichtigt.

    Also ich möchte das auf meiner Seite direkt nach dem login/register/logout die Navigationsleiste aktualisiert wird ohne einen redirect/reload der Seite.

    Habs mit nem js probier aber da hat nich so gut geklappt.

    Hier der js:
    PHP-Code:
    <?php
    ...
    ?>

    <script type='text/javascript'>
        document.getElementById('navbar-content').innerHTML = '<?php include("navbar.php"); ?> ';
    </script>

    <?php
    ...
    ?>

    Hier der Versuch durch ein echo:
    PHP-Code:
    echo "<script type='text/javascript'> document.getElementById('navbar-content').innerHTML = '".include('navbar.php')."'; </script>"
    KA ob ich dumm bin oder so aber scheinbar bekomm ich es nich gebacken.

    MfG,
    BigBrainAFK aka. Tony

  • #2
    Hey BigBrain,

    das was du dort vorhast ist in dieser Art nicht möglich.

    Ich weiß nicht wie sehr du dich mit JS auskennst, ich beschreibe dir mal den groben Ablauf.
    Per JS müsstest du einen AJAX Request an deinen Server schicken und der Server müsste dir daraufhin die neue Navigationsleiste zurückgeben. Den Code den du vom AJAX Request zurück erhälst müsstest du dann (immernoch per JS) an der gewünschten Stelle im HTML einfügen.

    Code:
        var xmlhttp = null;
        // Mozilla
        if (window.XMLHttpRequest) {
            xmlhttp = new XMLHttpRequest();
        }
        // IE
        else if (window.ActiveXObject) {
            xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
        }
       
        xmlhttp.open("GET", '###DEINE URL###', true);
        xmlhttp.onreadystatechange = function() {
            if(xmlhttp.readyState == 4 && xmlhttp.status == 200) {
                document.getElementById('navbar-content').innerHTML = xmlhttp.responseText;
            }
        }
        xmlhttp.send(null);
    http://www.hann3mann.de/artikel/eine...ript-erzeugen/

    Der Code ist ungetestet und auf die schnelle auch nur aus einem Tutorial kopiert und angepasst, aber viel solltest du dort nicht mehr ändern müssen.
    Je nachdem wie viel JS du schon implementiert hast würde ich dir auch raten dir mal eine JS Lib wie z.B. JQuery anzuschauen. Denn wie du hier im Code schon siehst gibt es im "normalen" JS immer wieder Unterscheidungen zwischen unserem allseits beliebten IE und anderen Browsern. Da hilft z.B. JQ einem sehr weiter, zudem ist dort auch die AJAX Funktion etwas kürzer und übersichtlicher implementiert. Wenn du noch nicht sehr viel JS in deiner Seite geschrieben hast wäre es nochmal eine Überlegung Wert dich "schnell" in JQ einzulesen und umzusteigen, ist aber kein Muss!

    Gruß
    mero

    Kommentar


    • #3
      Danke für die schnelle Antwort ich werds gleich mal ausprobieren und immoment ist auf der gesamten Seite nur einmal JS zum einsatz gekommen.

      Kommentar


      • #4
        Die aktualisierung funktionier super bis auf das seit dem Script immer eine "1" ganz am ende der Navigationsleiste steht.

        Kommentar


        • #5
          Der HTML Code den du in deine Navigation einsetzt wird (wenn du es wie beschrieben eingebaut hast) vom PHP an das JS übergeben und dort in das HTML eingefügt. Kannst jetzt auf jeder Ebene dir den HTML Code anschauen, dann solltest du schnell den verantwortlichen Code finden der dir die böse 1 anhängt Könnte mir gerade vorstellen dass du an irgend einer Stelle noch ein Boolean das true ist mit an den String hängst und das in eine 1 umgewandelt wird, ist aber nur eine Vermutung...

          Kommentar


          • #6
            Hab keine "1" in meinem Code gefunden.

            Die Datei die vom AJAX Script und allen anderen aufgerufen wird (navbar.php):


            Die Datei die navbar.php included (navbar_content.php):



            //EDIT: Fehler war das ich den include über ein echo ausgegeben habe.

            Kommentar


            • #7
              Ah siehste, fällt ganz grob unter das was ich geschrieben hatte, der include liefert ein Boolean als Return Wert ob der Include erfolgreich war, dieser war true und das wird dir als eine 1 ausgegeben.

              Ein paar kleine Tipps was ich generell an deiner Stelle ändern würde:
              - Keine deutschen Variablenname/Keys/sonstwas ($_SESSION['angemeldet'])
              - Menüs mache ich meistens (wenns ins Design passt) als ein <ul> und dann in den <li>s die <a>s
              - Den Stil in dem du deine navbar_content.php geschrieben hast finde ich ehrlich gesagt schrecklich. Dieser Wechsel zwischen html und php in einer Datei funktioniert, ja klar. Aber benutzen sollte man ihn in meinen Augen trotzdem nicht. Auch wenn du scheinbar nicht Objektorientiert programmierst, wären hier m.E. schönere Lösungen in PHP mit echo machbar
              - Den Code den du hier postest (schön dass du überhaupt welchen lieferst) bitte nicht als Bild, denn dann muss man ihn abtippen wenn man dir Änderungen daran zeigen will und das nimmt den meisten Usern die Motivation dir "verbesserten" Code zu präsentieren
              - Ich habe mir angewöhnt immer auf === false zu überprüfen (Typsicherheit) und nicht nur !isset() zu benutzen denn:
              PHP-Code:
              $a 0;
              var_dump(!$a); // true
              var_dump($a === false); // false 
              Macht speziell beim isset keinen großen Unterschied aber an genug anderen Stellen. Und wenn dann sollte man es überall gleich machen finde ich.

              Kommentar


              • #8
                Danke für die weiteren Tipps aber die Seite ist aus reiner langeweile entstanden und soll auch nich vom code her gut aussehen und da soll auch eigentlich niemand außer mir groß dran arbeiten.
                Ich weiß das es schrecklich aussieht aber 1. das sieht der User nachher so oder so nicht und 2. poste ich ja nich alle 10 sekunden meinen ganzen Code irgendwo und 3. das mit den Bildern hab ich nur gemacht da es da eigentlich nichts groß zu verbessern gibt da ich halt nur die 1 dort nicht gesehen habe.

                Um es kurz zu fassen: Ich schreibe meinen Code immer ziemlich gut eingerückt und werde dies nicht wegen einer datei ändern.
                Zu dem ist die Seite nur zum probieren da und soll keine Millionen Klicks am Tag haben.

                Dennoch 有り難う

                Kommentar


                • #9
                  Was Du da tust ist einfach nur Blödsinn.
                  Also ich möchte das auf meiner Seite direkt nach dem login/register/logout die Navigationsleiste aktualisiert wird ohne einen redirect/reload der Seite.
                  Ein Klick auf die Login-Links erzeugt bereits einen neuen Request. Da kannst Du auch problemlos Deine Menüpunkte schreiben, das Menü wird sowieso neu geschrieben. Da gibts auch keine Notwendigkeit für JavaScript und/oder Ajax.
                  [COLOR="#F5F5FF"]--[/COLOR]
                  [COLOR="Gray"][SIZE="6"][FONT="Georgia"][B]^^ O.O[/B][/FONT] [/SIZE]
                  „Emoticons machen einen Beitrag etwas freundlicher. Deine wirken zwar fachlich richtig sein, aber meist ziemlich uninteressant.
                  [URL="http://www.php.de/javascript-ajax-und-mehr/107400-draggable-sorttable-setattribute.html#post788799"][B]Wenn man nur Text sieht, haben viele junge Entwickler keine interesse, diese stumpfen Texte zu lesen.“[/B][/URL][/COLOR]
                  [COLOR="#F5F5FF"]
                  --[/COLOR]

                  Kommentar


                  • #10
                    ähm doch da das Menü weiter oben um Body is und die Seite weiter unten und auch erst nach dem Submit die ganzen SESSION vars gesetzt werden.

                    //EDIT: Das Script funzt beim logout aber nicht bei login/register

                    Kommentar


                    • #11
                      Da hab ich auch nicht wirklich weit mitgedacht, sorry. Denke dass Nikosch da doch Recht hat. Das Menü per AJAX neu zu laden ist nur notwendig wenn du den gesamten Login per AJAX abwickelst und selbst dann ist das nur bedingt so umzusetzen.

                      Ich nehme mal an dass du auf deiner Login Seite ein Formular hast und dort auf den Absenden Button klickst um dich einzuloggen, oder?
                      Durch einen Klick auf den Button wird dann die Seite komplett neu geladen und dann kannst du dort gleich das "richtige" Menü aufbauen je nachdem ob du dich ein- oder ausgeloggt hast. So baust du zuerst das falsche Menü zusammen um es dann durch das richtige zu ersetzen.

                      Sorry da hätte ich auch bissl früher dran denken können, bin nicht mehr so ganz auf der Höhe nachdem ich seit heute morgen am coden bin.

                      Kommentar


                      • #12
                        Ja aber durch den klick gibts ja erstmal nen Submit und dann nehm ich ja nachdem die seite schon neugeladen ist erst die POST vars und check ob der User überhaupt rein darf. Und ich include die Navigationsleiste auf der index.php genauso wie mit dem AJAX Script also müsste es ja dnan schon lange tun was es sollte wenns so einfach wär.

                        //EDIT: Da die Navigationsleiste überall gleich ist wird sie extra included in der index.php um einen "single point of entry" zu schaffen wo ich nicht 100mal die Navigationsleiste auf jede Seite packen muss.

                        Kommentar


                        • #13
                          Verstehe deinen letzten Post nicht so ganz, folgender Ablauf:

                          1. User geht auf die Login Seite und sieht das "nicht eingeloggt Menü"
                          2. User gibt seine Login Daten ein und klickt auf Einloggen
                          3. Request mit den vom User eingegebenen Daten wird an den Server gesendet
                          4. Server baut die Seite neu auf, im Post stehen die vom User eingegebenen Daten
                          5. Server sendet das Ergebnis an den Client und der User sieht die Login Seite oder wo auch immer du ihn umleitest mit dem "eingeloggten Menü"

                          Du musst das überprüfen des Posts mit in das laden der Seite (genauer gesagt, des Menüs) aufnehmen.

                          Ich kann nur mutmaßen wie dein Code aussieht. Aber ich glaube dass du $_SESSION['eingeloggt'] (oder wie du es genannt hattest) erst setzt nachdem du das Menu geladen hast. Daher kann das "richtige" Menü erst angezeigt werden nachdem noch ein Request durchgelaufen ist. Falls dem so ist musst du den Code Abschnitt in dem $_SESSION['eingeloggt'] gefüllt wird nur vor dem laden des Menüs ausführen. Ist aber eine reine Vermutung, wie gesagt, kenne deinen Code nicht und weiß nicht wie der aufgebaut ist.

                          Kommentar


                          • #14
                            ich poste einfach mal die relevanten Scripte:

                            index.php (single point of entry):
                            PHP-Code:
                            <html>
                            <head>
                             <?php
                                session_start
                            ();
                                
                                function 
                            validatePage($name null)
                                {
                                    
                            $ret=array();
                                    
                            $titel=array(
                                        
                            'home'      => 'Home',
                                        
                            'download'  => 'Download',
                                        
                            'login'     => 'Login',
                                        
                            'register'  => 'Registrierung',
                                        
                            'logout'    => 'Logout'
                                    
                            );
                                    
                            $ret['pagetitle']=$titel['home'];
                                    
                            $ret['page']='home';
                                    if (
                            array_key_exists($name,$titel))
                                    {
                                        
                            $ret['pagetitle']=$titel[$name];
                                        
                            $ret['page']=$name;
                                    }
                                    return 
                            $ret;
                                }
                                if(isset(
                            $_GET['page'])){
                                    
                            $page=validatePage($_GET['page']);
                                    if(
                            file_exists('seiten/'.$page['page'].'.inc.php')){
                                        include(
                            'seiten/'.$page['page'].'.inc.php');
                                    }
                                    echo 
                            '<title> Dimitrov\'s Keybinder - '.$page['pagetitle'].'</title>';
                                } else {
                                    
                            $hostname $_SERVER['HTTP_HOST'];
                                    
                            header("Location: http://".$hostname."/index.php?page=home");
                                }
                            ?> 
                                <style type="text/css"> 
                                    html, body {
                                        font-family: "Comic Sans MS", cursive, sans-serif;
                                    } 
                                </style>
                            </head>

                            <body>

                            <hr>
                            <table width="100%" border="0">
                                <tr>
                                    <td align="center">Seiten Tietel</td>
                                </tr>
                                <tr>
                                    <td id="navbar-content" name="navbar-content" align="center">
                                        <?php
                                            
                            include('seiten/navbar.php');
                                        
                            ?>
                                    </td>
                                </tr>
                            </table>

                            <hr>
                            <br>

                            <table width="100%" border="0">
                                <tr>
                                    <td align="center" valign="top">
                                        <?php
                                            
                            if(!isset($_GET['page'])){
                                                include(
                            'seiten/home.php');
                                            } else {
                                                if(
                            file_exists('seiten/'.$_GET['page'].'.php')){
                                                    include(
                            'seiten/'.$_GET['page'].'.php');
                                                } else {
                                                    echo 
                            'Sorry, could not find <strong>' $_GET['page'] .'.php</strong>';
                                                }
                                            }
                                        
                            ?>
                            </td>
                            </tr>
                            </table>

                            </body>
                            </html>
                            login.php (wird wie oben zu sehen ist nur included):
                            PHP-Code:
                            <?php
                                
                            // session_start();
                                
                                
                            if(isset($_SESSION["angemeldet"]) || $_SESSION["angemeldet"])
                                {
                                    
                            $hostname $_SERVER['HTTP_HOST'];
                                    
                            header('Location: http://'.$hostname.'/index.php?page=home');
                                }
                                
                                include(
                            "connect.php");
                                
                            $hostname $_SERVER['HTTP_HOST'];

                                if (
                            $_POST['submit'])
                                {   
                                    
                            $uzernamez $_POST['username'];
                                    
                            $passwort $_POST['passwort'];
                                    
                                    if(
                            $uzernamez&&$passwort)
                                    {
                                        if (
                            strlen($uzernamez)>25||strlen($passwort)>15)
                                        {
                                            echo 
                            "Passwort oder Username ist zu lang!";
                                        } else {
                                            
                            $passwort_new hash('whirlpool'$passwort);
                                            
                            $stmt $host->prepare("SELECT * FROM users WHERE username=:username AND passwort=:passwort");
                                            try{
                                                
                            $stmt->execute(array(':username' => $uzernamez':passwort' => $passwort_new));
                                            } catch(
                            PDOException $ex) {
                                                die(
                            "Fehler beim ausw&auml;hlen des Nutzers.");
                                            }
                                            
                            $row_count $stmt->rowCount();

                                            if (
                            $row_count==1)
                                            {
                                                
                            $_SESSION['user']=$uzernamez;
                                                
                            $_SESSION['angemeldet']=true;
                                                if(!isset(
                            $_SESSION['von'])){
                                                    
                            $_SESSION['von'] = "home";
                                                }
                                                
                                                echo 
                            "<script type='text/javascript'> getHttpRequest(); </script>";
                                                
                                                
                            header("Refresh: 5;url=http://".$hostname."/index.php?page=".$_SESSION['von']);
                                                echo 
                            $_SESSION['user'].", du bist angemeldet! <br /> <a href='http://".$hostname."/index.php?page=".$_SESSION['von']."'>Falls deine automatische Weiterleitung nicht funktioniert klicke hier</a>";
                                                unset(
                            $_SESSION['von']);
                                            } else die(
                            "Falscher Username oder falsches Passwort!");
                                        }
                                    } else echo 
                            "Passwort und Username m&uuml;ssen vorhanden sein!";
                                } else {
                            ?>
                            <form action="index.php?page=login" method="post">
                            Username: <input type="text" name="username" /><br />
                            Passwort: <input type="password" name="passwort" /><br />
                            <input type="submit" name="submit" value="Anmelden" />
                            </form>
                            <h6>Noch kein Account? <?php echo "<a href='http://".$hostname."/index.php?page=register'>" ?>Registriere</a> dich jetzt!</h6>
                            <?php
                            }
                            ?>
                            register.php (selbes spiel wie mit login und allen anderen .php seiten):
                            PHP-Code:
                            <?php
                                
                            include("connect.php");
                                
                                if(isset(
                            $_SESSION["angemeldet"]) || $_SESSION["angemeldet"])
                                {
                                    
                            $hostname $_SERVER['HTTP_HOST'];
                                    
                            header('Location: http://'.$hostname.'/index.php?page=home');
                                }

                                if (
                            $_POST['submit'])
                                {
                                    
                            $uzernamez $_POST['uzernamez'];
                                    
                            $password $_POST['password'];
                                    
                            $password_repeat $_POST['password_repeat'];
                                    
                                    
                            $honeypot $_POST['honeypot'];
                                    
                                    if (
                            strlen($honeypot)>|| $honeypot)
                                    {
                                        die(
                            "Du bist ein Bot!");
                                    }

                                    if (
                            $uzernamez&&$password&&$password_repeat)
                                    {
                                        if (
                            strlen($uzernamez)>25){
                                            echo 
                            'Der Username darf nicht l&auml;nger als 25 Zeichen sein';
                                        }else{
                                            
                            $stmt $host->prepare("SELECT * FROM users WHERE username=:username");
                                            try{
                                                
                            $stmt->execute(array(':username' => $uzernamez));
                                            } catch(
                            PDOException $ex) {
                                                die(
                            "Fehler beim ausw&auml;hlen des Nutzers.");
                                            }
                                            
                                            
                            $row_count $stmt->rowCount();
                                            if(
                            $row_count==1)
                                            {
                                                die(
                            "Dieser Benutzername wird bereits verwendet!");
                                            }
                                            
                                            if (
                            strlen($password)>25 || strlen($password)<6){
                                                echo 
                            'Das Passwort muss zwischen 6 und 25 Zeichen haben!';
                                            }else{
                                                if (
                            $password==$password_repeat)
                                                {
                                                    
                            $password_db hash('whirlpool'$password);
                                                    
                                                    
                            $stmt $host->prepare("INSERT INTO users(username,passwort) VALUES (:username, :passwort)");
                                                    try{
                                                        
                            $stmt->execute(array(':username' => $uzernamez':passwort' => $password_db));
                                                    } catch(
                            PDOException $ex) {
                                                        die(
                            "Fehler beim Anlegen des Nutzers.");
                                                    }
                                                    
                                                    
                            // session_start();
                                                    
                            $_SESSION['user']=$uzernamez;
                                                    
                            $_SESSION['angemeldet']=true;
                                                    
                            $hostname $_SERVER['HTTP_HOST'];
                                                    if(!isset(
                            $_SESSION['von'])){
                                                        
                            $_SESSION['von'] = "home";
                                                    }
                                   
                                                    echo 
                            "<script type='text/javascript'> getHttpRequest(); </script>";
                                   
                                                    
                            header("Refresh: 5;url=http://".$hostname."/index.php?page=".$_SESSION['von']);
                                                    echo 
                            "JAAA bist da! <br /> <a href='http://".$hostname."/index.php?page=".$_SESSION['von']."'>Falls deine automatische Weiterleitung nicht funktioniert klicke hier</a>";
                                                    unset(
                            $_SESSION['von']);
                                                } else echo 
                            "Passw&ouml;rter m&uuml;ssen gleich sein!";
                                            }
                                        }


                                    } else echo 
                            'Ein Feld wurde nicht ausgef&uuml;llt!';
                                } else {
                                    echo 
                            'Bitte f&uuml;lle alle Felder mit deinen Daten aus und klicke auf Registrieren!';
                            ?>
                            <form action="index.php?page=register" method="post">
                            Username: <input type="text" name="uzernamez" value="<?php echo $uzernamez?>" size="20" maxlength="25" />  <br />
                            Passwort: <input type="password" name="password" value="" size="20" maxlength="25" />  <br />
                            Passwort wiederholen: <input type="password" name="password_repeat" value="" size="20" maxlength="25" />  <br />
                            <input type="hidden" name="honeypot"><br />
                            <input type="submit" name="submit" value="Register" />
                            </form>
                            <?php
                            }
                            ?>
                            So falls ihr noch mehr braucht oder fragen zu irgendwas habt sagt es.

                            Kommentar


                            • #15
                              PHP-Code:
                              <html> 
                              <head> 
                               <?php 
                                  session_start
                              ();
                              Ich würde mal den Error-Report hochdrehen an Deiner Stelle.
                              Competence-Center -> Enjoy the Informatrix
                              PHProcks!Einsteiger freundliche TutorialsPreComposed Packages

                              Kommentar

                              Lädt...
                              X