Jnnbo: Userberechtigung

0 111

Userberechtigung

Jnnbo
  • php
  1. 0
    Matthias Apsel
  2. 0
    Sven Rautenberg
    1. 0
      Jnnbo
      1. 1
        Sven Rautenberg
        1. 0
          Jnnbo
          1. 0
            Sven Rautenberg
      2. 0
        Jörg Reinholz
        1. 0
          Jnnbo
          1. 3
            Jörg Reinholz
            1. 0

              THX aber ...

              Jörg Reinholz
  3. 0
    Jörg Reinholz
    1. 0
      Jnnbo
      1. 1
        Camping_RIDER
        1. 0
          Jnnbo
          1. 0
            robertroth
            1. 0
              Jnnbo
              1. 0
                robertroth
            2. 0
              Camping_RIDER
          2. 0
            Camping_RIDER
        2. 0
          Sven Rautenberg
          1. 0
            Camping_RIDER
            1. 0
              Sven Rautenberg
              1. 0
                Camping_RIDER
        3. 0

          Frage zu IF / ELSEIF

          Jnnbo
          1. 1
            dedlfix
            1. 0
              Tabellenkalk
              1. 0
                dedlfix
          2. 0
            Camping_RIDER
            1. 0
              Jnnbo
              1. 1
                Camping_RIDER
                1. 0
                  Jnnbo
              2. 0
                MudGuard
                1. 0

                  Ich mach das nicht beruflich!

                  Jnnbo
                  1. 0
                    Jörg Reinholz
              3. 0
                Jörg Reinholz
            2. 0

              Anmerkung / Fehler

              Camping_RIDER
              • php
              • zur info
              1. 0
                Jnnbo
                1. 0
                  Camping_RIDER
                  • menschelei
                  • php
                  • zur info
  4. 0
    robertroth
    1. 0
      Jnnbo
      1. 1
        robertroth
        1. 0
          Jnnbo
          1. 3
            Sven Rautenberg
        2. 0
          Camping_RIDER
          1. 0
            Jnnbo
            1. 0
              Camping_RIDER
            2. 0
              Auge
              • https
              1. -1
                Jnnbo
                1. 1
                  Auge
                  • https
                  • meinung
                  1. 0
                    Jnnbo
                    1. 1
                      Der Martin
                      1. 0
                        Tabellenkalk
                        • meinung
                      2. 1
                        robertroth
                        1. 1
                          Der Martin
              2. 0
                Camping_RIDER
                1. 0
                  Auge
                  1. 0
                    Camping_RIDER
      2. 1
        Der Martin
        • https
        • php
        1. 0
          Sven Rautenberg
          1. 1
            Der Martin
        2. 1
          robertroth
          1. 0
            Camping_RIDER
          2. 1
            Der Martin
            1. 0
              robertroth
    2. 0
      Camping_RIDER
      1. -1
        robertroth
        1. 0
          Jnnbo
          1. 1
            robertroth
        2. 0
          Sven Rautenberg
          1. 0
            robertroth
          2. 0
            robertroth
            1. 0
              Sven Rautenberg
              1. 0
                Sven Rautenberg
                1. 0
                  robertroth
                  • https
                  1. 0
                    Sven Rautenberg
          3. 0
            MudGuard
        3. 0
          Camping_RIDER
        4. 0

          Bewertung

          robertroth
          • menschelei
          • zu diesem forum
      2. 0
        Jörg Reinholz
        1. 0
          Sven Rautenberg
          1. 0
            Jörg Reinholz
        2. 0
          Camping_RIDER
  5. 1

    Meine Meinung zu dieser Diskussion

    Jnnbo
    • zu diesem forum
    1. 0

      Meine Meinung zu der Diskussion

      robertroth
      1. 0
        Jnnbo
        1. 1
          Tabellenkalk
          1. -1
            Jnnbo
            1. 1

              Professionelles Arbeiten

              Camping_RIDER
            2. 1
              Jörg Reinholz
              1. 0
                Jnnbo
                1. 1
                  Jörg Reinholz
    2. 4

      Meine Meinung zu der Diskussion

      Camping_RIDER
      • meinung
      • zu diesem forum
  6. -1
    Jörg Reinholz
    1. 0
      Camping_RIDER
      1. 0
        Jörg Reinholz
        1. 0
          Camping_RIDER
          • meinung
          • zu diesem forum
          1. 1
            Jörg Reinholz
            1. 0
              Camping_RIDER
  7. 0

    So, seid ihr damit nun zufrieden?

    Jnnbo
    1. 0
      Jörg Reinholz
      1. 0
        Jnnbo
        1. 0
          Jörg Reinholz
          1. 0

            Links

            Camping_RIDER
            • meinung
            • menschelei
    2. 3
      dedlfix
      1. 0
        Jnnbo
        1. 2
          Jörg Reinholz
          1. 0
            Jnnbo
            1. 0
              Jörg Reinholz
              1. 0
                Tabellenkalk
        2. 0
          dedlfix

Hallo,

wenn jemand nicht eingeloggt ist, dann wird dieser auf die Startseite weiter geleitet, dieses mache ich so:

if(isUserLoggedIn($mysqli) === FALSE) {
	header('Location: login');
} 

Jetzt möchte ich noch eine weitere Option mit einbauen, wenn in $user_type == 'eintrager' steht, dann darf er diese Seite ebenfalls nicht aufrufen und soll auf die Startseite geleitet werden. in MySQL würde ich ein AND nutzten, aber wie mache ich das hier?

akzeptierte Antworten

  1. Hallo Jnnbo,

    Jetzt möchte ich noch eine weitere Option mit einbauen, wenn in $user_type == 'eintrager' steht, dann darf er diese Seite ebenfalls nicht aufrufen und soll auf die Startseite geleitet werden. in MySQL würde ich ein AND nutzten, aber wie mache ich das hier?

    WENN `nicht eingeloggt` DANN
    SONST
      WENN `Eintrager` DANN
      SONST
    

    http://php.net/manual/de/control-structures.elseif.php

    Für weitere Möglichkeiten dann switch case http://php.net/manual/en/control-structures.switch.php

    Bis demnächst
    Matthias

    --
    Signaturen sind bloed (Steel) und Markdown ist mächtig.
  2. Moin!

    Hallo,

    wenn jemand nicht eingeloggt ist, dann wird dieser auf die Startseite weiter geleitet, dieses mache ich so:

    if(isUserLoggedIn($mysqli) === FALSE) {
    	header('Location: login');
    } 
    

    Diese Funktion hat mindestens einen Parameter zuwenig, nämlich den User, der zu prüfen ist.

    Jetzt möchte ich noch eine weitere Option mit einbauen, wenn in $user_type == 'eintrager' steht, dann darf er diese Seite ebenfalls nicht aufrufen und soll auf die Startseite geleitet werden. in MySQL würde ich ein AND nutzten, aber wie mache ich das hier?

    Mit "elseif". Weil: Wenn ein User nicht eingeloggt ist, kann er vermutlich keinen Usertyp haben.

    Grüße Sven

    1. Hallo Sven,

      Diese Funktion hat mindestens einen Parameter zuwenig, nämlich den User, der zu prüfen ist.

      meine Funktion sieht so aus, eigentlich macht die derzeit genau das, was sie auch soll

      	function isUserLoggedIn($mysqli) {
              $stmt = $mysqli->prepare("SELECT * FROM web_users WHERE user_session=?");
      		$stmt->bind_param("s", session_id());
              $stmt->execute();
              $stmt->store_result();
      
              if($stmt->num_rows() === 1) {
                  return true;
              } else {
                  return false;    
              }
          }
      
      1. Moin!

        Hallo Sven,

        Diese Funktion hat mindestens einen Parameter zuwenig, nämlich den User, der zu prüfen ist.

        meine Funktion sieht so aus, eigentlich macht die derzeit genau das, was sie auch soll

        	function isUserLoggedIn($mysqli) {
                $stmt = $mysqli->prepare("SELECT * FROM web_users WHERE user_session=?");
        		$stmt->bind_param("s", session_id());
                $stmt->execute();
                $stmt->store_result();
        
                if($stmt->num_rows() === 1) {
                    return true;
                } else {
                    return false;    
                }
            }
        

        Wenn es eine Funktion gibt, die "isUserLoggedIn($mysqli)" beantwortet, frage ich mich: Welcher User denn? Es beschränkt die Funktion in der Nutzbarkeit, wenn ich sie nicht für beliebige Szenarien nutzen kann. Wenn ich beispielsweise dem aktuell eingeloggten User zeigen will, ob irgendeiner seiner Freunde auch eingeloggt ist, würde ich die Userid eines der Freunde ermitteln und fragen: "isUserLoggedIn($friendId, $mysqli)" - dann kann ich auch fragen: "isUserLoggedIn($myOwnUserId, $mysqli)", um den Loginzustand des eigenen Accounts zu testen.

        Grüße Sven

        1. Hallo Sven,

          Wenn es eine Funktion gibt, die "isUserLoggedIn($mysqli)" beantwortet, frage ich mich: Welcher User denn?

          der User, der die session_id hat und diese in der Datenbank hinterlegt ist. Funktioniert bis jetzt wunderbar.

          1. Moin!

            Hallo Sven,

            Wenn es eine Funktion gibt, die "isUserLoggedIn($mysqli)" beantwortet, frage ich mich: Welcher User denn? der User, der die session_id hat und diese in der Datenbank hinterlegt ist. Funktioniert bis jetzt wunderbar.

            Dann ist die Funktion falsch bezeichnet, und müsste "isCurrentSessionUserLoggedIn()" heißen.

            Sorry, wenn ich darauf herumreite - aber Code wird in der Regel einmal geschrieben, und danach hundertmal gelesen - von dir, von Leuten, die dir helfen wollen/sollen. Es ist also wichtig, den Code verständlich zu schreiben.

            Hattest du nicht auch den Thread zum Thema "unübersichtlicher Code" eröffnet? Genau solche Details tragen zu unübersichtlichem Code bei.

            Meine Erwartung an eine Funktion mit einem bestimmten Namen kommt aus Jahrzehnten professioneller Softwareentwicklung.

            Diese Erwartung habe ich hier mal formuliert, und das hat nichts damit zu tun, wie gut oder schlecht das funktioniert. Bislang funktioniert es vermutlich wie gewünscht. Jetzt aber kommst du mit einem neuen Wunsch. In der Zukunft werden weitere Wünsche entstehen, die auch alle noch integriert werden sollen. Das Knäuel wird dabei zunehmend undurchsichtig.

            Wenn eine Funktion anbietet, den Loginzustand für einen User abzufragen, dies aber tun kann, ohne nach dem User zu fragen, für den das getan werden soll, dann geht das nur mit globalen Variablen, also einem unsichtbaren Seitenkanal dieser Information in die Funktion hinein. Und da wundere ich mich: Das Datenbankobjekt übergibst du der Funktion explizit. Auch das könnte man ja als globale Variable ablegen und die Funktion einfach parameterlos aufrufen: "isUserLoggedIn()" - fertig. Aber auf längere Sicht grausam zu warten.

            Grüße Sven

      2. Moin!

         		$stmt->bind_param("s", session_id());
        

        Na prima! Was hindert Dich daran, nach dem Login den Username und die Rules oder Gruppen in die bekannte session zu schreiben? Doch nicht, dass irgendwer angeordnet hat, dass das Ding möglichst monströs und schwerfällig werden soll?

        Also nach dem Login:

        $_SESSION['user_name']='foo';
        $_SESSION['user_rules']['foo']=true;
        $_SESSION['user_rules']['bar']=true;
        $_SESSION['user_rules']['admin']=true;
        

        oder lässt sich das, weil es Datenbankzugriffe vermeidet, zu einfach und bequem abfragen?

        Jörg Reinholz

        1. Hallo Jörg,

          Moin!

          		$stmt->bind_param("s", session_id());
          

          Na prima! Was hindert Dich daran, nach dem Login den Username und die Rules oder Gruppen in die bekannte session zu schreiben?

          Nichts? Ich kann es einfach nicht. Ich muss mich mit dem zufrieden geben was ich bei Youtube lernen kann und dann schauen wie ich es bei mir einsetzten kann. Und es ist einfach schwer, sehr viele "gute" Tutorials sind auf Englisch und ich kann leider kein Englisch, also muss ich mir die Bilder anschauen und erraten was gemacht wird.

          1. Moin!

            bei Youtube

            vergiss YouTube. Nimm ein Buch. Und fange mit einfachen Sachen an.

            Ich habe mit PHP angefangen, in dem ich eine Wohnungssuchmaschine von Perl in PHP umgeschrieben habe. Allerdings hatte ich diese wenige Jahre zuvor selbst in Perl programmiert - insofern war es einfach. Allerdings hatte ich auch Perl gelernt, indem ich die Wohnungssuchmaschine geschrieben habe...

            Du brauchst php.net, vielleicht ein Buch, Zeit und mitwachsende(!) Aufgaben. Aber nicht den Mist von YouTube.

            Gleich was mit fettem Login und Gruppen zu schreiben ist völlig überzogen und wird Dich abschrecken. Womöglich baust Du Fehler ein, die Dich dazu zwingen Dein Projekt abzubrechen.

            Und dann wäre da noch was: Methodik kann man weder bei YouTube noch aus Büchern lernen. Die braucht Wissen und auch Erfahrung.

            Jörg Reinholz

            1. Moin!

              Danke für das "Plussen". Aber, wenn man mich fragen würde, dann hätten die hierhin gehört.

              Jörg Reinholz

  3. Moin!

    Jetzt möchte ich noch eine weitere Option mit einbauen, wenn in $user_type == 'eintrager' steht, dann darf er diese Seite ebenfalls nicht aufrufen und soll auf die Startseite geleitet werden. in MySQL würde ich ein AND nutzten, aber wie mache ich das hier?

    Also.

    Warum probierst Du nicht einfach:

    if( isUserLoggedIn($mysqli) === false or $user_type === 'eintrager' ) {
    

    oder:

    if( isUserLoggedIn($mysqli) === false || $user_type == 'eintrager' ) {
    

    Da sehe ich einen theoretischen Fehler. Wenn der Benutzer angemeldet ist, wieso sollte er dann zum login zurückkehren?

    Jörg Reinholz

    1. Hallo Jörg,

      Warum probierst Du nicht einfach:

      if( isUserLoggedIn($mysqli) === false or $user_type === 'eintrager' ) {
      
      if( isUserLoggedIn($mysqli) === false || $user_type == 'eintrager' ) {
      

      Da sehe ich einen theoretischen Fehler. Wenn der Benutzer angemeldet ist, wieso sollte er dann zum login zurückkehren?

      das sollte er ja auch nicht, also zuerst soll geprüft werden ob User eingeloggt ist, wenn nein, dann auf die login Seite. Wenn er eingeloggt hat, aber den falschen Status, dann ab auf die Index Seite.

      Hab es jetzt mal so gemacht, scheint zu gehen:

      if(isUserLoggedIn($mysqli) === FALSE) {
      	header('Location: login');
      } 
      
      if ($user_type == 'administrator') {
      	header('Location: index');
      }
      
      
      1. Aloha ;)

        Hab es jetzt mal so gemacht, scheint zu gehen:

        if(isUserLoggedIn($mysqli) === FALSE) {
        	header('Location: login');
        } 
        
        if ($user_type == 'administrator') {
        	header('Location: index');
        }
        
        

        Ja, geht auch. Weil es logisch korrekt und so ist, dass wenn alles richtig läuft nie die zweite Bedingung erfüllt ist, wenn die erste Bedingung erfüllt war.

        Es gibt aber einen Grund, warum dir hier alle zu else-if raten.
        A: Performancegründe. Bei deiner Variante werden immer zwei Bedingungen geprüft. Mag unbedeutend erscheinen, aber wenn du deine If-Abfragen jedes mal so unperformant gestaltest und dein System eine entsprechende Größe erreicht, wirst dus merken.
        B: Guter Stil und vorausschauendes Programmieren. In diesem Fall ist die Logik noch klar, so dass das Ergebnis logisch einfach abschätzbar ist. Aber lass Zeit ins Land gehen und du änderst u.U. die Bedingungen, bzw. die Aktionen, die im Fall des Eintretens einer der Bedingungen geschehen. Dann kommts zu Fehlern, wenn du vorher nicht bedacht hast, dass das Verhalten der ersten Abfrage durchaus mit der zweiten zusammenfällt.

        Also entweder solltest du, wie angeraten, else-if benutzen, oder, damit wenigstens (auch später noch) jederzeit klar ist, dass das zusammengehört und voneinander abhängt, gleich alles in ein if packen. Soll heißen entweder:

        if(isUserLoggedIn($mysqli) === FALSE) {
        	header('Location: login');
        } elseif ($user_type == 'administrator') {
        	header('Location: index');
        }
        

        (Ich habe hier aus Gründen der Lesbarkeit die Kurzschreibweise elseif benutzt, die in PHP möglich, in anderen Sprachen aber nicht immer möglich ist)

        oder:

        if(isUserLoggedIn($mysqli) === FALSE OR $user_type == 'administrator') {
        	header('Location: login');
        }
        

        Performancetechnisch ist - auch wenn man das nicht gleich sieht - beides besser als deine Variante, da auch im zweiten Fall PHP (imho) bei OR die Prüfung schon beendet, wenn die erste Bedingung true ergibt, nicht aber wenn die beiden if vollkommen unabhängig voneinander sind...

        Grüße,

        RIDER

        --
        Camping_RIDER a.k.a. Riders Flame a.k.a. Janosch Zoller Erreichbar meist Mittwochs ab 21 Uhr im Self-TS (ts.selfhtml.org) oder sonst - wenn online - auf dem eigenen TeamSpeak-Server (fritz.campingrider.de). # Facebook # Twitter # Steam # YouTube # Self-Wiki # ch:? rl:| br:> n4:? ie:% mo:| va:) js:) de:> zu:) fl:( ss:| ls:[
        1. Hallo Camping_RIDER,

          vielen lieben Dank für deine sehr ausführliche Erklärung.

          Dieses Beispiel schaut sehr gut aus, ich werde dieses gleich mal bei mir auf der Seite testen.

          if(isUserLoggedIn($mysqli) === FALSE) {
          	header('Location: login');
          } elseif ($user_type == 'administrator') {
          	header('Location: index');
          }
          

          Dein zweites Beispiel kann ich leider nicht nehmen, denn wenn ich es richtig verstehe werde ich jedes Mal auf die login Seite geleitet, dieses sollte natürlich nicht sein. Wenn ich eingeloggt bin dann muss er nur auf die Index Seite geleitet werden.

          if(isUserLoggedIn($mysqli) === FALSE OR $user_type == 'administrator') {
          	header('Location: login');
          }
          
          1. Liebe Mitdenker, liebe Wissende, liebe Neugierige,

            Dieses Beispiel schaut sehr gut aus, ich werde dieses gleich mal bei mir auf der Seite testen.

            if(isUserLoggedIn($mysqli) === FALSE) {
            	header('Location: login');
            } elseif ($user_type == 'administrator') {
            	header('Location: index');
            }
            

            Dieses Beispiel zeugt von Unüberlegtheit oder setzt voraus, dass sich alle Ressourcen (auch die noch folgenen) direkt in einem gemeinsamen Verzeichnis befinden. Oder soll aus dem Obigen keine Funktion werden und daher die Pfade in jeder tiefer liegenden Ressource angepasst werden?

            Außerdem würde ich das "Login" nicht mit einer Umleitung auf eine spezielle Ressource vornehmen, sondern mit einem wahlweise eingeblendeten Formular.

            Nicht authorisiert: Formular ist sichtbar mit den beiden Eingabefeldern UN und PW und Button "Login"
            authorisiert: Formular hat nur den Button "Logout".

            Spirituelle Grüße
            Euer Robert
            robert.r@online.de

            --
            Möge der wahre Forumsgeist ewig leben!
            1. Hallo robertroth,

              Dieses Beispiel zeugt von Unüberlegtheit oder setzt voraus, dass sich alle Ressourcen (auch die noch folgenen) direkt in einem gemeinsamen Verzeichnis befinden. Oder soll aus dem Obigen keine Funktion werden und daher die Pfade in jeder tiefer liegenden Ressource angepasst werden?

              was meinst du denn mit gemeinsamen Verzeichnisse? Ich habe nur ein Verzeichnis und dieses lautet /html/ dort liegen ALLE PHP Dateien. Dazu kommt noch ein "img" "js" "css" Ordner, mehr nicht.

              Und nein, ein User der nicht eingeloggt ist MUSS auf die Startseite kommen, da ich noch weitere Sachen einblenden lassen möchte. Das hat alles seine richtigkeit, wenn es für dich vielleicht auch etwas umständlich ist. Wie gesagt mir kommt es nicht drauf an ob etwas nach "Vorschrift" gemacht wird oder nicht, es muss funktionieren und ich möchte alle Freiheiten habe, dieses habe ich, wenn ich für den Login eine eigene Seite nehme.

              1. Liebe Mitdenker, liebe Wissende, liebe Neugierige,

                was meinst du denn mit gemeinsamen Verzeichnisse? Ich habe nur ein Verzeichnis und dieses lautet /html/ dort liegen ALLE PHP Dateien. Dazu kommt noch ein "img" "js" "css" Ordner, mehr nicht.

                Echt schlimmes Durcheinander also. Du verbaust Dir damit einen sauberen modularen Aufbau.

                Und nein, ein User der nicht eingeloggt ist MUSS auf die Startseite kommen, da ich noch weitere Sachen einblenden lassen möchte. Das hat alles seine richtigkeit, wenn es für dich vielleicht auch etwas umständlich ist.

                Es ist für mich keinesfalls "umständlich", nur unüberlegt oder unwissend. Ich habe vor 16 Jahren mit den gleichen Fehlern bei meinen ernsten HTML/PHP-Projekten angefangen. Warum sollstest Du das jetzt nicht auch tun? Ich kann Dir zwar kein Youtube-Training anbieten, aber durchaus ein paar Tipps geben :-).

                Spirituelle Grüße
                Euer Robert
                robert.r@online.de

                --
                Möge der wahre Forumsgeist ewig leben!
            2. Aloha ;)

              Dieses Beispiel zeugt von Unüberlegtheit oder setzt voraus, dass sich alle Ressourcen (auch die noch folgenen) direkt in einem gemeinsamen Verzeichnis befinden. Oder soll aus dem Obigen keine Funktion werden und daher die Pfade in jeder tiefer liegenden Ressource angepasst werden? [...]

              Naja, in diesem Teil des Threads gings zuerst mal um die richtige Verwendung von if, elseif und Co. Alles andere (wie man sinnvollerweise den Redirect löst) können wir ja auch an der Stelle weiterdiskutieren, an der es darum ging. Ansonsten drehen wir uns nur noch im Kreis.

              Das ganze Beispiel als unüberlegt zu bezeichnen führt zu nichts und ist an dieser Stelle des Threads sogar kontraproduktiv (da potenziell Verwirrung stiftend), weil es hier zunächst nur um die richtige Verwendung der if-Abfragen ging. Mehr wollte das Beispiel nämlich nicht sagen.

              Grüße,

              RIDER

              --
              Camping_RIDER a.k.a. Riders Flame a.k.a. Janosch Zoller Erreichbar meist Mittwochs ab 21 Uhr im Self-TS (ts.selfhtml.org) oder sonst - wenn online - auf dem eigenen TeamSpeak-Server (fritz.campingrider.de). # Facebook # Twitter # Steam # YouTube # Self-Wiki # ch:? rl:| br:> n4:? ie:% mo:| va:) js:) de:> zu:) fl:( ss:| ls:[
          2. Aloha ;)

            Dein zweites Beispiel kann ich leider nicht nehmen, denn wenn ich es richtig verstehe werde ich jedes Mal auf die login Seite geleitet, dieses sollte natürlich nicht sein. Wenn ich eingeloggt bin dann muss er nur auf die Index Seite geleitet werden.

            Ups, ja, stimmt. Ich hatte überlesen, dass bei Administrator was anderes passiert als bei nicht-eingeloggt. Ich hatte mich schon gewundert und war trotzdem zu blöd es nochmal zu lesen xD

            Grüße,

            RIDER

            --
            Camping_RIDER a.k.a. Riders Flame a.k.a. Janosch Zoller Erreichbar meist Mittwochs ab 21 Uhr im Self-TS (ts.selfhtml.org) oder sonst - wenn online - auf dem eigenen TeamSpeak-Server (fritz.campingrider.de). # Facebook # Twitter # Steam # YouTube # Self-Wiki # ch:? rl:| br:> n4:? ie:% mo:| va:) js:) de:> zu:) fl:( ss:| ls:[
        2. Moin!

          Es gibt aber einen Grund, warum dir hier alle zu else-if raten.
          A: Performancegründe. Bei deiner Variante werden immer zwei Bedingungen geprüft. Mag unbedeutend erscheinen, aber wenn du deine If-Abfragen jedes mal so unperformant gestaltest und dein System eine entsprechende Größe erreicht, wirst dus merken.

          Performancegründe sind für die uninformierten Leser immer ein prima Argument, aber es ist doch reichlich haarsträubend!

          Grüße Sven

          1. Aloha ;)

            Es gibt aber einen Grund, warum dir hier alle zu else-if raten.
            A: Performancegründe. Bei deiner Variante werden immer zwei Bedingungen geprüft. Mag unbedeutend erscheinen, aber wenn du deine If-Abfragen jedes mal so unperformant gestaltest und dein System eine entsprechende Größe erreicht, wirst dus merken.

            Performancegründe sind für die uninformierten Leser immer ein prima Argument, aber es ist doch reichlich haarsträubend!

            Das musst du mir als informiertem Leser jetzt aber nochmal erklären ;) Ich sagte ja, dass Performance-Probleme nur dann entstehen, wenn man massenweise so verfährt, siehe

            wenn du deine If-Abfragen jedes mal so unperformant gestaltest

            Oder hab ich da Bockmist verzapft? Wenn ja, bitte um Begründung :P Will ja schließlich auch noch was lernen ;)

            Grüße,

            RIDER

            --
            Camping_RIDER a.k.a. Riders Flame a.k.a. Janosch Zoller Erreichbar meist Mittwochs ab 21 Uhr im Self-TS (ts.selfhtml.org) oder sonst - wenn online - auf dem eigenen TeamSpeak-Server (fritz.campingrider.de). # Facebook # Twitter # Steam # YouTube # Self-Wiki # ch:? rl:| br:> n4:? ie:% mo:| va:) js:) de:> zu:) fl:( ss:| ls:[
            1. Moin!

              Es gibt aber einen Grund, warum dir hier alle zu else-if raten.
              A: Performancegründe. Bei deiner Variante werden immer zwei Bedingungen geprüft. Mag unbedeutend erscheinen, aber wenn du deine If-Abfragen jedes mal so unperformant gestaltest und dein System eine entsprechende Größe erreicht, wirst dus merken.

              Performancegründe sind für die uninformierten Leser immer ein prima Argument, aber es ist doch reichlich haarsträubend!

              Das musst du mir als informiertem Leser jetzt aber nochmal erklären ;) Ich sagte ja, dass Performance-Probleme nur dann entstehen, wenn man massenweise so verfährt, siehe

              Ich rate nicht aus Performancegründen zu elseif, sondern aus fachlichen Gründen: Wer nicht eingeloggt ist, für den soll fachlich die Prüfung auf irgendeinen speziellen Typ nicht durchgeführt werden. Im Allgemeinen weiß man von nicht eingeloggten Usern nämlich nichts, auch nicht ihren Typ.

              Die fachliche Anforderung bestimmt also die Gestaltung der Bedingung.

              Und dein Performanceargument ist auch aus einem anderen Grund Unsinn: Für eingeloggte User werden ja grundsätzlich BEIDE Bedingungen ausgewertet, bei beiden Varianten, egal ob zwei IF, oder IF-ELSEIF.

              wenn du deine If-Abfragen jedes mal so unperformant gestaltest

              Oder hab ich da Bockmist verzapft? Wenn ja, bitte um Begründung :P Will ja schließlich auch noch was lernen ;)

              Begründe, was hier unperformant ist.

              Mit dem Gedanken "Ich will ja Performance, und der RIDER hat gesagt, da muss man ELSEIF nehmen" entsteht falscher Code. Nämlich in den Fällen, in denen zwei voneinander unabhängige Bedingungen geprüft werden müssen.

              Grüße Sven

              1. Aloha ;)

                Ich rate nicht aus Performancegründen zu elseif, sondern aus fachlichen Gründen

                Ich stimme vollkommen zu, dass die fachlichen Gründe (die ich ja auch genannt hatte), hier die viel wichtigeren sind. Und ja, stimmt, das hätte ich vielleicht klarer machen sollen.

                Die fachliche Anforderung bestimmt also die Gestaltung der Bedingung.

                Primär, ja.

                Und dein Performanceargument ist auch aus einem anderen Grund Unsinn: Für eingeloggte User werden ja grundsätzlich BEIDE Bedingungen ausgewertet, bei beiden Varianten, egal ob zwei IF, oder IF-ELSEIF.

                Das Performanceargument bezieht sich, zumindest so wie es gemeint war, nicht auf diesen Einzelfall. Es geht vielmehr darum, dass es performancetechnisch grundsätzlich günstiger ist, an allen Stellen, an denen das fachlich angebracht ist, elseif zu verwenden statt zweier getrennter if-Abfragen.

                Sonst steht ja genau das im Raum, was der TO gesagt hat: "Es funktioniert ja auch". Die zwei if-Abfragen sind fachlich ja nicht unbedingt falsch, nur nicht optimal (vorausgesetzt beide Bedingungen können rein technisch unabhängig voneinander überprüft werden, von was ich hier ausgegangen bin).

                Mir war es auch wichtig, zu sagen, dass es eben (u.A. aus Performancegründen) nicht gut ist, einen beliebigen nicht-falschen Weg zu gehen, sondern eben genau den optimalen.

                Insofern ist das Performanceargument ein weiterer Grund/Anreiz, den fachlich optimalen Weg zu gehen.

                wenn du deine If-Abfragen jedes mal so unperformant gestaltest

                Oder hab ich da Bockmist verzapft? Wenn ja, bitte um Begründung :P Will ja schließlich auch noch was lernen ;)

                Begründe, was hier unperformant ist.

                Die Prüfung zweier Bedingungen, wo bei einer gewissen Menge der Anfragen nur eine geprüft werden müsste.

                Mit dem Gedanken "Ich will ja Performance, und der RIDER hat gesagt, da muss man ELSEIF nehmen" entsteht falscher Code. Nämlich in den Fällen, in denen zwei voneinander unabhängige Bedingungen geprüft werden müssen.

                Hm, überspitzt formuliert dieser Gedanke. Ich erwarte von Lesern auf selfhtml, dass sie sich auch selbst über das, was man ihnen sagt, Gedanken machen. Oder im Zweifelsfall nachfragen.

                In meinen Augen gings hier um ein klassisches "so wie ichs gemacht hab passiert aber das gleiche" und in diesem Fall stimmts ja. Wenn zwei if oder if-elseif den exakt selben Effekt zeigen, ist es immer performanter if-elseif zu nehmen.

                Zusammenfassend:

                Das Performanceargument ist eben nicht Unsinn. Aber: Ich hätte vielleicht genauer formulieren sollen, in welchem Fall elseif als performantere Alternative zu zwei if-Abfragen eingesetzt werden kann und ich hätte vielleicht klarer machen sollen, dass das Performance-Argument nur ein Sidekick der Begründung über die fachliche Anforderung ist. Es gilt schließlich grundsätzlich, dass die fachlich optimale Lösung auf großen Skalen die performanteste ist.

                Zufrieden? ;)

                Grüße,

                RIDER

                --
                Camping_RIDER a.k.a. Riders Flame a.k.a. Janosch Zoller Erreichbar meist Mittwochs ab 21 Uhr im Self-TS (ts.selfhtml.org) oder sonst - wenn online - auf dem eigenen TeamSpeak-Server (fritz.campingrider.de). # Facebook # Twitter # Steam # YouTube # Self-Wiki # ch:? rl:| br:> n4:? ie:% mo:| va:) js:) de:> zu:) fl:( ss:| ls:[
        3. Hallo Camping_RIDER,

          ich habe noch eine Frage zu deinem IF Else

          if(isUserLoggedIn($mysqli) === FALSE) {
          	header('Location: login');
          } elseif ($user_type == 'administrator') {
          	header('Location: index');
          }
          

          wollte dieses nun bei mir einbauen, hab es so gemacht:

          if(isUserLoggedIn($mysqli) === FALSE) {
                  header('Location: login');
          }
           $object = userDaten($mysqli, session_id());
           elseif (
          		$object->user_type == 'administrator') {
                   header('Location: index');
          }
          

          Ich bekomme nun ein Fehler (weiße Seite) also gehe ich davon aus, dass mein $object = userDaten($mysqli, session_id()); nicht innerhalb von IF setzten darf? Ich benötige dieses allerdings nur, wenn ich eingeloggt bin. Deshalb wollte ich das auch mit zwei IF Bereichen haben.

          1. Tach!

            if(isUserLoggedIn($mysqli) === FALSE) {
                    header('Location: login');
            }
             $object = userDaten($mysqli, session_id());
             elseif (
            		$object->user_type == 'administrator') {
                     header('Location: index');
            }
            

            Ich bekomme nun ein Fehler (weiße Seite) also gehe ich davon aus,

            Du solltest in das Errorlog deines Webservers schauen, gegebenenfalls in eine separate Datei für PHP-Fehlermeldungen, falls eine solche konfiguriert ist. Das bringt allemal mehr als wild zu spekulieren.

            Du hast jedenfalls einen Syntaxfehler, eine vergessene Klammer. Wenn Fehlermeldungen generell nicht angezeigt werden (sinnvolle Voreinstellung auf Produktivsystemen) siehst du solche Syntaxfehlerausgaben nicht. Im Test- und Entwicklungssystem sollte man alle Optionen zur Anzeige von Fehlern einschalten (display_errors, error_reporting).

            dedlfix.

            1. Hallo,

              Du hast jedenfalls einen Syntaxfehler,

              ja

              eine vergessene Klammer.

              nein, Klammer hat er keine vergessen. Vergessen hat er, sich Grundlagenwissen (z.b. über Kontrollstrukturen) anzueignen.

              Gruß
              Kalk

              1. Tach!

                Du hast jedenfalls einen Syntaxfehler,

                ja

                eine vergessene Klammer.

                nein, Klammer hat er keine vergessen. Vergessen hat er, sich Grundlagenwissen (z.b. über Kontrollstrukturen) anzueignen.

                Ja stimmt, sie ist da, steht aber falsch.

                dedlfix.

          2. Aloha ;)

            wollte dieses nun bei mir einbauen, hab es so gemacht:

            if(isUserLoggedIn($mysqli) === FALSE) {
                    header('Location: login');
            }
             $object = userDaten($mysqli, session_id());
             elseif (
            		$object->user_type == 'administrator') {
                     header('Location: index');
            }
            

            Da sind auf jeden Fall Syntaxfehler drin. Deine Definition von $object steht außerhalb des if-Anweisungsblocks, obwohl nachher ja noch ein else (hier elseif) folgen soll. Wenn du ein if und ein else kombinieren willst, müssen diese natürlich zusammenstehen.

            Welche Bedeutung sollte der folgende Anweisungsblock losgelöst auch haben?

             elseif (
            		$object->user_type == 'administrator') {
                     header('Location: index');
            }
            

            Ein "ansonsten" ohne "wenn" ist schlicht und ergreifend bedeutungslos. Deshalb darf zwischen if-Block und else-Block auch nichts anderes stehen.

            Aber auch logisch musst du grundsätzlich überlegen, was du erreichen willst. Ich schätze, $object soll gefüllt werden, sofern der User eingeloggt ist, unabhängig davon ob man administrator ist oder nicht.

            In den if-Abfragen bisher gibt es aber noch gar keinen Strang, der diese Bedingung erfüllt (denn bisher waren die beiden einzigen abgefragten/abgefangenen Fälle die Fälle "User ist nicht eingeloggt" und "User eingeloggt und Administrator". Du brauchst aber "User ist Administrator".

            In dem Fall ist die elseif-Kurzschreibweise eher ungeeignet, es ginge aber auch:

            if(isUserLoggedIn($mysqli) === FALSE) {
            //Fall: nicht eingeloggt
                    header('Location: login');
            } elseif ($object->user_type == 'administrator') {
            //Fall: eingeloggt als Administrator
                     header('Location: index');
                     $object = userDaten($mysqli, session_id());
            } else {
            //Fall: eingeloggt, nicht als Administrator
                     $object = userDaten($mysqli, session_id());
            }
            

            Siehst du, warum das ungünstig ist? Hier wird eine Aktion an zwei Stellen ausgeführt, das ist besonders wartungstechnisch unsinnvoll. Besser ist hier, elseif nicht in Kurzschreibweise, sondern ausgeschrieben zu verwenden:

            if(isUserLoggedIn($mysqli) === FALSE) {
            //Fall: nicht eingeloggt
                    header('Location: login');
            } else {
                    //Fall: eingeloggt
                    if ($object->user_type == 'administrator') {
                             //Fall: ...als Administrator
                             header('Location: index');
                             $object = userDaten($mysqli, session_id());
                     } 
            
                     $object = userDaten($mysqli, session_id());
            }
            

            Mit dieser Version hast du weiterhin alle Vorteile.

            Anmerkung: Ich bin mir nicht ganz sicher, ob du das wolltest wie oben... Oben habe ich angenommen, dass im Fall "eingeloggt als Administrator" das $object auch definiert werden soll. Falls nicht, ist es natürlich unproblematisch, die erste Variante zu benutzen, z.B. so:

            if(isUserLoggedIn($mysqli) === FALSE) {
            //Fall: nicht eingeloggt
                    header('Location: login');
            } elseif ($object->user_type == 'administrator') {
            //Fall: eingeloggt als Administrator
                     header('Location: index');
            } else {
            //Fall: eingeloggt, nicht als Administrator
                     $object = userDaten($mysqli, session_id());
            }
            

            Grüße,

            RIDER

            --
            Camping_RIDER a.k.a. Riders Flame a.k.a. Janosch Zoller Erreichbar meist Mittwochs ab 21 Uhr im Self-TS (ts.selfhtml.org) oder sonst - wenn online - auf dem eigenen TeamSpeak-Server (fritz.campingrider.de). # Facebook # Twitter # Steam # YouTube # Self-Wiki # ch:? rl:| br:> n4:? ie:% mo:| va:) js:) de:> zu:) fl:( ss:| ls:[
            1. Hallo Camping_RIDER,

              vielen Dank nochmals für deine Hilfe und deine Erklärung, allerdings habe ich auch bei deiner Version ein Problem, ich benötige dieses $object = userDaten($mysqli, session_id()); allerdings bevor ich dieses $object->user_type == 'administrator') abfragen kann, und nachdem ich eingeloggt bin.

              if(isUserLoggedIn($mysqli) === FALSE) {
              //Fall: nicht eingeloggt
                      header('Location: login');
              } else {
                      //Fall: eingeloggt
                      if ($object->user_type == 'administrator') {
                               //Fall: ...als Administrator
                               header('Location: index');
                               $object = userDaten($mysqli, session_id());
                       } 
              
                       $object = userDaten($mysqli, session_id());
              }
              
              1. Aloha ;)

                vielen Dank nochmals für deine Hilfe und deine Erklärung, allerdings habe ich auch bei deiner Version ein Problem, ich benötige dieses $object = userDaten($mysqli, session_id()); allerdings bevor ich dieses $object->user_type == 'administrator') abfragen kann, und nachdem ich eingeloggt bin.

                Okay. Da die innere if-Abfrage losgelöst vom if-else drumherum ist, kann das jederzeit auch davor ausgeführt werden.

                if(isUserLoggedIn($mysqli) === FALSE) {
                        //Fall: nicht eingeloggt
                        header('Location: login');
                } else {
                        //Fall: eingeloggt
                        $object = userDaten($mysqli, session_id());
                
                        if ($object->user_type == 'administrator') {
                                 //Fall: ...als Administrator
                                 header('Location: index');
                        } 
                }
                

                Grüße,

                RIDER

                --
                Camping_RIDER a.k.a. Riders Flame a.k.a. Janosch Zoller Erreichbar meist Mittwochs ab 21 Uhr im Self-TS (ts.selfhtml.org) oder sonst - wenn online - auf dem eigenen TeamSpeak-Server (fritz.campingrider.de). # Facebook # Twitter # Steam # YouTube # Self-Wiki # ch:? rl:| br:> n4:? ie:% mo:| va:) js:) de:> zu:) fl:( ss:| ls:[
                1. Hallo Camping_RIDER,

                  Okay. Da die innere if-Abfrage losgelöst vom if-else drumherum ist, kann das jederzeit auch davor ausgeführt werden.

                  if(isUserLoggedIn($mysqli) === FALSE) {
                          //Fall: nicht eingeloggt
                          header('Location: login');
                  } else {
                          //Fall: eingeloggt
                          $object = userDaten($mysqli, session_id());
                  
                          if ($object->user_type == 'administrator') {
                                   //Fall: ...als Administrator
                                   header('Location: index');
                          } 
                  }
                  

                  vielen, vielen Dank, jetzt geht es auch problemlos.

              2. Hi,

                vielen Dank nochmals für deine Hilfe und deine Erklärung, allerdings habe ich auch bei deiner Version ein Problem, ich benötige dieses $object = userDaten($mysqli, session_id()); allerdings bevor ich dieses $object->user_type == 'administrator') abfragen kann, und nachdem ich eingeloggt bin.

                Hattest Du nicht irgendwas davon geschrieben, daß Du das beruflich machst?

                Was genau hält Dich davon ab, die Reihenfolge der Anweisungen zu ändern? Also statt erst eine Eigenschaft des object abzufragen und dann das object zu befüllen einfach erst das object zu befüllen und erst dann die Eigenschaft abzufragen?

                cu,
                Andreas a/k/a MudGuard

                1. Hallo MudGuard,

                  Hattest Du nicht irgendwas davon geschrieben, daß Du das beruflich machst?

                  um Gottes willen, wenn ich mich jeden Tag mit solchen Sachen rumärgern müsste :/ Nach einer Woche würde ich mir die Kugel geben und Schluss. Nein, ich bau mir gerade eine kleine Datenbank mit Tonter auf um meine Excel und Word Listen weg zu bekommen, denn bei gut 10.000 Artikel blicke ich selber in einer Excel Liste nicht mehr durch.

                  Was ich nebenher bisschen mache sind Grafiken und und ab und mal eine kleine Visitenkarte fürs Web gestallten aber nur aus HTML.

                  1. Moin!

                    Was ich nebenher bisschen mache sind Grafiken und und ab und mal eine kleine Visitenkarte fürs Web gestallten aber nur aus HTML.

                    Ja. Aber so geht es los.

                    Jörg Reinholz

              3. Moin!

                Hallo Camping_RIDER,

                vielen Dank nochmals für deine Hilfe und deine Erklärung, allerdings habe ich auch bei deiner Version ein Problem, ich benötige dieses $object = userDaten($mysqli, session_id()); allerdings bevor ich dieses $object->user_type == 'administrator') abfragen kann, und nachdem ich eingeloggt bin.

                Was gefällt Dir an dieser Lösung nicht?

                   // Jetzt können wir also die Funktion "password_verify" in jedem Fall verwenden:
                   if ( ! password_verify (trim($_POST['passwort']), $HashedPassword) ) { 
                       show_login(trim($_POST['username']), 'Passwort falsch');
                       exit;
                   } 
                 
                   // else:
                   // ultimative Zerstörung womöglich bestehender Session-Daten
                   // Registrierung der Daten in der Session und
                   // Weiterleitung zur geschützten Startseite
                   session_start();  
                   session_unset();
                   session_regenerate_id(true);
                 
                   if ( isset($_POST['register_ip']) &&  $_POST['register_ip'])  {
                      $_SESSION['ip'] = $_SERVER['REMOTE_ADDR'];
                   }
                   $_SESSION['username']      = $_POST['username'];
                   $_SESSION['groups']        = getGroups($_POST['username']);
                   $_SESSION['last_action']   = date('U');
                

                und die Funktion:

                  function getGroups($username) {
                    //gibt einen Hash mit allen Gruppen , zu denen der sich anmeldenden Benutzer gehört, zurück
                    $r=array();
                    $r['standard-user']=true;
                    $arRows = file(GROUP_FILE);    #Das holt alle Gruppennamen aus der Datenbasis
                    foreach($arRows as $row) {
                       $row=trim($row);
                       if ($row != '' && '#' != $row{0} && strpos($row, ':') ) {
                	  list($group, $rest)=explode(HTGROUP_SEPARATOR, $row);
                	  $arUsers=explode(HTGROUP_USER_SEPARATOR, $rest);
                	  foreach ($arUsers as $s) {
                	    $s=trim($s);
                	    if ($s == $username) {
                	      $r[$group]=true;
                	    }
                	  }
                       }
                    }
                    return $r;
                  }
                

                Jörg Reinholz

            2. Aloha ;)

              if(isUserLoggedIn($mysqli) === FALSE) {
              //Fall: nicht eingeloggt
                      header('Location: login');
              } else {
                      //Fall: eingeloggt
                      if ($object->user_type == 'administrator') {
                               //Fall: ...als Administrator
                               header('Location: index');
                               $object = userDaten($mysqli, session_id());
                       } 
              
                       $object = userDaten($mysqli, session_id());
              }
              

              Da hat sich natürlich ein Copy-/Paste-Fehler eingeschlichen. Das $object = ... im zweiten if ist Humbug.

              if(isUserLoggedIn($mysqli) === FALSE) {
              //Fall: nicht eingeloggt
                      header('Location: login');
              } else {
                      //Fall: eingeloggt
                      if ($object->user_type == 'administrator') {
                               //Fall: ...als Administrator
                               header('Location: index');
                       } 
              
                       $object = userDaten($mysqli, session_id());
              }
              

              In der anderen Variante ($object = ... vor innerem if) habe ich das direkt korrigiert.

              Grüße,

              RIDER

              --
              Camping_RIDER a.k.a. Riders Flame a.k.a. Janosch Zoller Erreichbar meist Mittwochs ab 21 Uhr im Self-TS (ts.selfhtml.org) oder sonst - wenn online - auf dem eigenen TeamSpeak-Server (fritz.campingrider.de). # Facebook # Twitter # Steam # YouTube # Self-Wiki # ch:? rl:| br:> n4:? ie:% mo:| va:) js:) de:> zu:) fl:( ss:| ls:[
              1. Hallo Camping_RIDER,

                Da hat sich natürlich ein Copy-/Paste-Fehler eingeschlichen. Das $object = ... im zweiten if ist Humbug.

                if(isUserLoggedIn($mysqli) === FALSE) {
                //Fall: nicht eingeloggt
                        header('Location: login');
                } else {
                        //Fall: eingeloggt
                        if ($object->user_type == 'administrator') {
                                 //Fall: ...als Administrator
                                 header('Location: index');
                         } 
                
                         $object = userDaten($mysqli, session_id());
                }
                

                da hat sich jetzt aber wieder ein Fehler eingeschlichen :) Jetzt haben wir wieder die Version die nicht geht, da ich $object = userDaten($mysqli, session_id()) bereits zu Beginn benötige sprich nach der Prüfung ob er eingeloggt ist.

                1. Aloha ;)

                  da hat sich jetzt aber wieder ein Fehler eingeschlichen :) Jetzt haben wir wieder die Version die nicht geht, da ich $object = userDaten($mysqli, session_id()) bereits zu Beginn benötige sprich nach der Prüfung ob er eingeloggt ist.

                  Ich weiß schon. Das hier hab ich nur angemerkt, weil nicht ganz offensichtlich war, dass die innere Bedingung auch Quark ist. Natürlich funktioniert im Endeffekt nur die Variante aus dem anderen Posting.

                  Um der Wahrheit die Ehre zu geben: Manchmal lese ich die Sachen einfach nicht genau genug. Ich sehe, da ist ein if-Problem, da stimmt die Syntax nicht, weil ein Befehl an anderer Stelle steht. Und das versuch ich dann zu lösen. Dass in dem Fall der Befehl, der nicht passt, die Bedingung überhaupt erst ermöglicht, war mir einfach entgangen :P Ich glaub ich sollte in Zukunft nur noch mit Pseudoquellcode arbeiten :P

                  Das was in meinem Kopf vorging...

                  if (BEDINGUNG1) {
                         ANWEISUNG1
                  } else {
                         if (BEDINGUNG2) {
                              ANWEISUNG2
                         }
                         ANWEISUNG3
                  }
                  

                  ...wäre nämlich nicht falsch gewesen :P Aber vielleicht auch weniger hilfreich :D

                  Grüße,

                  RIDER

                  --
                  Camping_RIDER a.k.a. Riders Flame a.k.a. Janosch Zoller Erreichbar meist Mittwochs ab 21 Uhr im Self-TS (ts.selfhtml.org) oder sonst - wenn online - auf dem eigenen TeamSpeak-Server (fritz.campingrider.de). # Facebook # Twitter # Steam # YouTube # Self-Wiki # ch:? rl:| br:> n4:? ie:% mo:| va:) js:) de:> zu:) fl:( ss:| ls:[
  4. Liebe Mitdenker, liebe Wissende, liebe Neugierige,

    wenn jemand nicht eingeloggt ist, dann wird dieser auf die Startseite weiter geleitet, dieses mache ich so:

    if(isUserLoggedIn($mysqli) === FALSE) {
    	header('Location: login');
    } 
    

    Warum wird er auf die Startseite umgeleitet? Von wo denn? Seiten(inhalte), die ihm nicht zustehen, bekommt der User doch sowieso nicht zu sehen! Wenn der User nicht "logged in" ist, dann würde ich nur den Bereich mit dem kleinen Formularchen, in dem er Username und Password eingeben kann, anzeigen lassen. Und wenn er "angemeldet" ist, steht dort "Logout".

    Ich würde den User nicht von der Seite verscheuchen, die er derzeit betrachtet.

    Dein header('Location: login') hat auf jeden Fall den Fehler, dass Du dort einen absoluten Pfad von der Document Root zur Loginseite angeben müsstest, aber eigentlich sogar eine vollständige URL, also header('Loacation: https://example.org/login/')

    Spirituelle Grüße
    Euer Robert
    robert.r@online.de

    --
    Möge der wahre Forumsgeist ewig leben!
    1. Hallo robertroth,

      Dein header('Location: login') hat auf jeden Fall den Fehler, dass Du dort einen absoluten Pfad von der Document Root zur Loginseite angeben müsstest, aber eigentlich sogar eine vollständige URL, also header('Loacation: https://example.org/login/')

      warum sollte ich dort eine absolute URL eingeben? Ist ja etwas bescheuert, ziehe ich das Projekt um muss ich hunderte von Pfade anpassen. Ich hab dieses jetzt auf allen Seite so eingebaut und noch nie irgendwelche Probleme damit gehabt.

      1. Liebe Mitdenker, liebe Wissende, liebe Neugierige,

        Hallo robertroth,

        Dein header('Location: login') hat auf jeden Fall den Fehler, dass Du dort einen absoluten Pfad von der Document Root zur Loginseite angeben müsstest, aber eigentlich sogar eine vollständige URL, also header('Loacation: https://example.org/login/')

        warum sollte ich dort eine absolute URL eingeben?

        Ich hatte gesagt: absoluten Pfad zur Ressource /login/ von der Document Root aus, damit sie auch immer gefunden wird, egal in welcher Verzeichnistiefe Du dich gerade herumtummelst.

        Ist ja etwas bescheuert, ziehe ich das Projekt um muss ich hunderte von Pfade anpassen.

        Ich denke, Du benutzt PHP? Dann kannst Du das Scheme und die Domain doch als Variable einsetzen:

        
        header("Location: $scheme$domain/$path_to_your_action");
        
        

        Ich hab dieses jetzt auf allen Seite so eingebaut und noch nie irgendwelche Probleme damit gehabt.

        Warum fragst Du dann nach Tipps, wenn man Dir keine geben darf?

        Spirituelle Grüße
        Euer Robert
        robert.r@online.de

        --
        Möge der wahre Forumsgeist ewig leben!
        1. Hallo robertroth,

          Ich hatte gesagt: absoluten Pfad zur Ressource /login/ von der Document Root aus, damit sie auch immer gefunden wird, egal in welcher Verzeichnistiefe Du dich gerade herumtummelst.

          Dieses mache ich so:

          <base href="">
          

          Warum fragst Du dann nach Tipps, wenn man Dir keine geben darf?

          Mache ich wie du siehst, allerdings war das nicht meine Frage, ich habe / hatte ein Problem mit den Berechtigungen und nicht mit der Weiterleitung. Man muss nicht immer alles bis ins kleinste Auseinander nehmen. Für mich kommt es an dass es funktioniert und nicht ob es schön oder unschön geschrieben ist.

          1. Moin!

            Hallo robertroth,

            Ich hatte gesagt: absoluten Pfad zur Ressource /login/ von der Document Root aus, damit sie auch immer gefunden wird, egal in welcher Verzeichnistiefe Du dich gerade herumtummelst.

            Dieses mache ich so:

            <base href="">
            

            <base> ist böse.

            Du wirst irgendwann merken, dass es so ist. Denn wenn du einzelne Seiten umziehen willst, darfst du nie vergessen, diese Info hier zu ändern. Obendrein sieht deine Browser-Ressourcenstruktur, also wo sich Seiten, Bilder, CSS und Javascript so befinden, potentiell anders aus, als wie sie auf der Festplatte liegen.

            Warum fragst Du dann nach Tipps, wenn man Dir keine geben darf?

            Mache ich wie du siehst, allerdings war das nicht meine Frage, ich habe / hatte ein Problem mit den Berechtigungen und nicht mit der Weiterleitung. Man muss nicht immer alles bis ins kleinste Auseinander nehmen. Für mich kommt es an dass es funktioniert und nicht ob es schön oder unschön geschrieben ist.

            Uns kommt es darauf an, dass Leute dazulernen. Wenn du von nichts Ahnung hast außer, was in (englischen) Videotutorials über PHP erzählt wird, solltest du die Chance nutzen und dir hier auf Deutsch erklären lassen, was dir noch fehlt - inklusive dem, von dem du noch gar nicht weißt, dass es dir fehlt.

            Grüße Sven

        2. Aloha ;)

          Ich hatte gesagt: absoluten Pfad zur Ressource /login/ von der Document Root aus, damit sie auch immer gefunden wird, egal in welcher Verzeichnistiefe Du dich gerade herumtummelst.

          Ah, tatsächlich sagtest du das nicht. Damit hast du nämlich Recht.

          Ich denke, Du benutzt PHP? Dann kannst Du das Scheme und die Domain doch als Variable einsetzen:

          
          header("Location: $scheme$domain/$path_to_your_action");
          
          

          Full ACK, genau so mach ich das aus dem von dir gerade eben erst genannten Grund auch ;)

          Ich hab dieses jetzt auf allen Seite so eingebaut und noch nie irgendwelche Probleme damit gehabt.

          Nur, dass ein System (momentan) unproblematisch funktioniert, heißt nicht, dass es ein gutes System ist, das auch in Zukunft unproblematisch funktioniert.

          Du denkst hier zu kurz. Tatsächlich solltest du gerade bei solchen grundlegenden Dingen besonders akribisch sein und so viele Fehlerquellen wie möglich von vornherein ausschließen. Ansonsten rächt sich das später, wenn du aufgrund einer kleinen Änderung (z.B. wenn du irgendwann in Zukunft doch auf größere Verzeichnistiefe zurückgreifen willst), zehntausend Zeilen Code nach diesen kleinen Ungenauigkeiten durchsuchen musst. Das ist dann nämlich der Zeitpunkt, wo man sich dafür verflucht, sich den (kleinen) Aufwand nicht früher schon gemacht zu haben. Besser Vorsicht als Nachsicht.

          Grüße,

          RIDER

          --
          Camping_RIDER a.k.a. Riders Flame a.k.a. Janosch Zoller Erreichbar meist Mittwochs ab 21 Uhr im Self-TS (ts.selfhtml.org) oder sonst - wenn online - auf dem eigenen TeamSpeak-Server (fritz.campingrider.de). # Facebook # Twitter # Steam # YouTube # Self-Wiki # ch:? rl:| br:> n4:? ie:% mo:| va:) js:) de:> zu:) fl:( ss:| ls:[
          1. Hallo Camping_RIDER,

            Nur, dass ein System (momentan) unproblematisch funktioniert, heißt nicht, dass es ein gutes System ist, das auch in Zukunft unproblematisch funktioniert.

            also laut php.net muss ein Pfad NICHT absolut sein sondern kann auch so wie ich es gemacht habe einfach auf eine Datei z.B. login.html, login.php oder login geleitet werden.

            1. Aloha ;)

              Nur, dass ein System (momentan) unproblematisch funktioniert, heißt nicht, dass es ein gutes System ist, das auch in Zukunft unproblematisch funktioniert.

              also laut php.net muss ein Pfad NICHT absolut sein sondern kann auch so wie ich es gemacht habe einfach auf eine Datei z.B. login.html, login.php oder login geleitet werden.

              Ist wohl auch so, Robert hat seine Aussage ja inzwischen relativiert.

              (auch wenn er, wenn es nicht um muss, sondern um sinnvolle Gründe, z.B. vorausschauendes Programmieren geht, vollkommen Recht hat)

              Grüße,

              RIDER

              --
              Camping_RIDER a.k.a. Riders Flame a.k.a. Janosch Zoller Erreichbar meist Mittwochs ab 21 Uhr im Self-TS (ts.selfhtml.org) oder sonst - wenn online - auf dem eigenen TeamSpeak-Server (fritz.campingrider.de). # Facebook # Twitter # Steam # YouTube # Self-Wiki # ch:? rl:| br:> n4:? ie:% mo:| va:) js:) de:> zu:) fl:( ss:| ls:[
            2. Hallo

              Nur, dass ein System (momentan) unproblematisch funktioniert, heißt nicht, dass es ein gutes System ist, das auch in Zukunft unproblematisch funktioniert.

              also laut php.net muss ein Pfad NICHT absolut sein sondern kann auch so wie ich es gemacht habe einfach auf eine Datei z.B. login.html, login.php oder login geleitet werden.

              Die Doku auf php.net ist an dieser Stelle irrelevant. Relevant ist, was der Protokollstandard sagt und der sagt: „The field value consists of a single absolute URI.“.

              Ende der Diskussion.

              Tschö, Auge

              --
              Verschiedene Glocken läuteten in der Stadt, und jede von ihnen vertrat eine ganz persönliche Meinung darüber, wann es Mitternacht war. Terry Pratchett, “Wachen! Wachen!
              1. Hallo Auge,

                Die Doku auf php.net ist an dieser Stelle irrelevant. Relevant ist, was der Protokollstandard sagt und der sagt: „The field value consists of a single absolute URI.“.

                Ende der Diskussion.

                relevant ist was der BROWSER macht und nicht was irgendwelche Protokollstandards sagen.

                1. Hallo

                  Die Doku auf php.net ist an dieser Stelle irrelevant. Relevant ist, was der Protokollstandard sagt und der sagt: „The field value consists of a single absolute URI.“.

                  Ende der Diskussion.

                  relevant ist was der BROWSER macht und nicht was irgendwelche Protokollstandards sagen.

                  Guck an, doch nicht Ende der Diskussion.

                  1. Es gibt nicht den Browser sondern mehrere, die bei unterschiedlichen Aufgaben durchaus unterschiedlich funktionieren. Bloß, weil dein Browser sich so verhält, wie du es erwartest, genauer gesagt, wie du es von ihm gewohnt bist, heißt das nicht, dass das alle so tun.
                  2. Die neue RFC vom Ende des letzten Jahres, die Sven hier mehrfach verlinkt hat, nach der relative URLs zur Weiterleitung erlaubt sind, muss noch nicht überall implemeitiert sein. Es kann also Browser/Klienten geben, die sich an den alten Protokollstandard halten und deine Weiterleitung ignorieren.

                  Du darfst die Argumente gern ignorieren und damit auf die Fresse fallen. Erwarte hier nicht allzuviel Mitleid, falls das passiert.

                  Tschö, Auge

                  --
                  Verschiedene Glocken läuteten in der Stadt, und jede von ihnen vertrat eine ganz persönliche Meinung darüber, wann es Mitternacht war. Terry Pratchett, “Wachen! Wachen!
                  1. Hallo Auge,

                    1. Es gibt nicht den Browser sondern mehrere, die bei unterschiedlichen Aufgaben durchaus unterschiedlich funktionieren. Bloß, weil dein Browser sich so verhält, wie du es erwartest, genauer gesagt, wie du es von ihm gewohnt bist, heißt das nicht, dass das alle so tun.
                    2. Die neue RFC vom Ende des letzten Jahres, die Sven hier mehrfach verlinkt hat, nach der relative URLs zur Weiterleitung erlaubt sind, muss noch nicht überall implemeitiert sein. Es kann also Browser/Klienten geben, die sich an den alten Protokollstandard halten und deine Weiterleitung ignorieren.

                    wie oft soll ich denn noch schreiben, dass die Anwendung bei MIR auf dem Rechner läuft und nur ICH und vielleicht jemand hier im Haus mit hilft die Daten einzugeben. Also habe ICH volle Kontrolle mit was für einem Browser auf das System zugegriffen wird. Google Chrome akzeptiert es genau so der Firefox und auch der IE.

                    Es ist schön dass es solche Vorgaben gibt, es steht aber NIRGENDS dass man sich daran halten soll!

                    Damit ist für mich diese Diskussion beendet.

                    1. Hallo,

                      Es ist schön dass es solche Vorgaben gibt, es steht aber NIRGENDS dass man sich daran halten soll!

                      Regeln sind dazu da, dass man nochmal gut darüber nachdenkt, bevor man sie ignoriert.

                      Damit ist für mich diese Diskussion beendet.

                      Du hättest "Ich will keine Hilfe" auch wesentlich kürzer formulieren können.

                      Ciao,
                       Martin

                      1. Hallo,

                        Damit ist für mich diese Diskussion beendet.

                        Du hättest "Ich will keine Hilfe" auch wesentlich kürzer formulieren können.

                        Man muss Jnnbo zugute halten, dass die Ende-der-Diskussion-Diskussion von Auge begonnen wurde...

                        Gruß
                        Kalk

                      2. Liebe Mitdenker, liebe Wissende, liebe Neugierige,

                        Es ist schön dass es solche Vorgaben gibt, es steht aber NIRGENDS dass man sich daran halten soll!

                        Regeln sind dazu da, dass man nochmal gut darüber nachdenkt, bevor man sie ignoriert.

                        Interessante Vorstellung, die Regeln der Programmiersprache und der Systemumgebung einfach zu missachten. Auf Kölsch heißt das dann wohl "Et hätt noch immer jot jejange." und auf bayerisch "A Bissal was goat alleweil". :-))

                        Damit ist für mich diese Diskussion beendet.

                        Na, dann hat er/sie ja jetzt Zeit, sich mal Das Tutorial in Schriftform durchzulesen. Das finde ich immer noch gut.

                        Du hättest "Ich will keine Hilfe" auch wesentlich kürzer formulieren können.

                        Sei ehrlich, Martin. Ohne diese Diskussion hätte uns Sven R. doch gar nicht verraten, dass "RFC2616 was replaced by multiple RFCs (7230-7237)". Es haben hier soviele Leute noch nicht gewusst, die tatsächlich auch regelmäßig auch mal reingucken in die Dinger, dass ich sagen mag: Guter Lerneffekt und viel neue Arbeit für mich. Ich weiß nämlich noch nicht, was noch alles geändert wurde durch die Ersetzung.

                        Spirituelle Grüße
                        Euer Robert
                        robert.r@online.de

                        --
                        Möge der wahre Forumsgeist ewig leben!
                        1. Mahlzeit,

                          Regeln sind dazu da, dass man nochmal gut darüber nachdenkt, bevor man sie ignoriert.

                          Interessante Vorstellung, die Regeln der Programmiersprache und der Systemumgebung einfach zu missachten.

                          die Ironie in dieser Devise hast du habe bemerkt, oder? ;-) Wobei ich einräume, dass ich in manchen Lebensbereichen wirklich danach verfahre.

                          Auf Kölsch heißt das dann wohl "Et hätt noch immer jot jejange." und auf bayerisch "A Bissal was goat alleweil". :-))

                          Und im Schwäbischen sagt man, "Ha jo, passt scho."

                          Du hättest "Ich will keine Hilfe" auch wesentlich kürzer formulieren können.

                          Sei ehrlich, Martin. Ohne diese Diskussion hätte uns Sven R. doch gar nicht verraten, dass "RFC2616 was replaced by multiple RFCs (7230-7237)".

                          Das ist wohl wahr.

                          So long,
                           Martin

              2. Aloha ;)

                Die Doku auf php.net ist an dieser Stelle irrelevant. Relevant ist, was der Protokollstandard sagt und der sagt: „The field value consists of a single absolute URI.“.

                Relevant ist aber auch, dass man keine rfc's zitiert, die nicht mehr gültig sind.

                Und ich weiß, dass dein Argument ist, dass es noch Browser gibt, die diesen Standard noch nicht implementiert haben. Da müsste man aber erstmal belegen, dass das für irgend einen relevanten Browser gilt. Meines Wissens nach zieht die Standardisierung hier nur dem Usus nach, der sowieso schon besteht. Unter relevanten Browsern verstehe ich die jeweils letzten Versionen der großen Browserengines. Wer aus eigenem Gutdünken veraltete Nischenbrowser benutzt, kann und muss damit rechnen, dass Dinge nicht funktionieren. Es ist nicht Aufgabe eines Webentwicklers, diesen Makel zu beseitigen.

                Insofern ja, relevant ist, was der aktuelle Protokollstandard sagt, und das ist nunmal, dass auch relative URI erlaubt sind.

                Grüße,

                RIDER

                --
                Camping_RIDER a.k.a. Riders Flame a.k.a. Janosch Zoller Erreichbar meist Mittwochs ab 21 Uhr im Self-TS (ts.selfhtml.org) oder sonst - wenn online - auf dem eigenen TeamSpeak-Server (fritz.campingrider.de). # Facebook # Twitter # Steam # YouTube # Self-Wiki # ch:? rl:| br:> n4:? ie:% mo:| va:) js:) de:> zu:) fl:( ss:| ls:[
                1. Hallo

                  Die Doku auf php.net ist an dieser Stelle irrelevant. Relevant ist, was der Protokollstandard sagt und der sagt: „The field value consists of a single absolute URI.“.

                  Relevant ist aber auch, dass man keine rfc's zitiert, die nicht mehr gültig sind.

                  Dass es einen Neueren gibt, habe ich erst nach meinem Posting gelesen.

                  Und ich weiß, dass dein Argument ist, dass es noch Browser gibt, die diesen Standard noch nicht implementiert haben. Da müsste man aber erstmal belegen, dass das für irgend einen relevanten Browser gilt. Meines Wissens nach zieht die Standardisierung hier nur dem Usus nach, der sowieso schon besteht. Unter relevanten Browsern verstehe ich die jeweils letzten Versionen der großen Browserengines. Wer aus eigenem Gutdünken veraltete Nischenbrowser benutzt, kann und muss damit rechnen, dass Dinge nicht funktionieren. Es ist nicht Aufgabe eines Webentwicklers, diesen Makel zu beseitigen.

                  Dass die Browser schon lange das tun, was nun auch im RFC steht, ist unbestritten. Ein betroffenes Programm/Klient muss aber kein Browser sein und niemand von uns kann alle diese Klienten kennen.

                  Insofern ja, relevant ist, was der aktuelle Protokollstandard sagt, und das ist nunmal, dass auch relative URI erlaubt sind.

                  Ja, solange ich davon ausgehen kann, dass auf das Angebot nur mit Browsern zugegriffen wird, kann ich mich darauf verlassen. Auch, wenn der Standard erst wenige Monate alt ist.

                  Tschö, Auge

                  --
                  Verschiedene Glocken läuteten in der Stadt, und jede von ihnen vertrat eine ganz persönliche Meinung darüber, wann es Mitternacht war. Terry Pratchett, “Wachen! Wachen!
                  1. Aloha ;)

                    Relevant ist aber auch, dass man keine rfc's zitiert, die nicht mehr gültig sind.

                    Dass es einen Neueren gibt, habe ich erst nach meinem Posting gelesen.

                    Ja, ich hab nach meinem Posting auch gelesen, dass du das auch schon gesehen hattest. Habs editiert und die genervte Passage entfernt, nur musste ich irgendwas noch stehen lassen, damit der Rest noch irgendwie Sinn ergibt :P Also nix für ungut.

                    Dass die Browser schon lange das tun, was nun auch im RFC steht, ist unbestritten. Ein betroffenes Programm/Klient muss aber kein Browser sein und niemand von uns kann alle diese Klienten kennen.

                    Stimmt. Es ist aber die Frage, ob ich als Webentwickler mich darum wirklich scheren muss. Zumindest ich sehe das so: Meine Hauptaufgabe als Webentwickler ist die standardkonforme Programmierung. Die Hauptaufgabe des Klienten ist die standardkonforme Interpretation der Daten.

                    Wenn meine Website nicht mehr standardkonform ist, ist es an mir als Webentwickler, meine Website zu renovieren. Wenn ein Klient eine standardkonforme Notation nicht versteht, ist es für den Hersteller Zeit, ein Update herauszugeben.

                    Es ist nicht unbedingt Aufgabe des Webentwicklers, auf Eigenheiten des Klienten einzugehen.

                    Natürlich gebietet die normative Kraft des Faktischen, dass man sich trotzdem manchmal verbiegen muss. Beispiel ist der IE6, der jahrelang stark verbreitet war und deshalb immer mit Ausnahmeregelungen versorgt werden musste, wenn man nicht viele potenzielle User von vornherein aussperren wollte. Beispiel sind auch die Mobilbrowser, seit deren Aufkommen hover und Co. nur noch für progressive enhancement eingesetzt werden können. Beides Beispiele davon, dass Klient-Hersteller der ihnen angestammten Pflicht nicht nachkommen. Solche Ausnahmen sind generell aber eigentlich nur dann vertretbar, wenn eine entsprechende Masse an (potenziellen) Usern damit verbunden ist.

                    Insofern ja, relevant ist, was der aktuelle Protokollstandard sagt, und das ist nunmal, dass auch relative URI erlaubt sind.

                    Ja, solange ich davon ausgehen kann, dass auf das Angebot nur mit Browsern zugegriffen wird, kann ich mich darauf verlassen. Auch, wenn der Standard erst wenige Monate alt ist.

                    Sich auf etwas verlassen ist ziemlich konträr zu allem, was wir über Browser wissen ;)

                    Trotzdem denke ich, dass in diesem Fall hier (Loginformular, Weiterleitung auf Startseite) davon ausgegangen werden kann, dass es sich bei der Zielgruppe im weitesten Sinne um Browser handelt, also um Klienten, die eine gewisse Pflicht haben, sich von selbst an den Standards zu orientieren. Mir fällt keine Form von Klient ein, die eine sinnvolle Begründung hat, neue Standards nicht zu interpretieren. Vor allem, wenn der Standard schon einige Monate alt ist.

                    Grüße,

                    RIDER

                    --
                    Camping_RIDER a.k.a. Riders Flame a.k.a. Janosch Zoller Erreichbar meist Mittwochs ab 21 Uhr im Self-TS (ts.selfhtml.org) oder sonst - wenn online - auf dem eigenen TeamSpeak-Server (fritz.campingrider.de). # Facebook # Twitter # Steam # YouTube # Self-Wiki # ch:? rl:| br:> n4:? ie:% mo:| va:) js:) de:> zu:) fl:( ss:| ls:[
      2. Hallo,

        Dein header('Location: login') hat auf jeden Fall den Fehler, dass Du dort einen absoluten Pfad von der Document Root zur Loginseite angeben müsstest, aber eigentlich sogar eine vollständige URL, also header('Loacation: https://example.org/login/')

        warum sollte ich dort eine absolute URL eingeben?

        zumindest mal, weil die Spezifikation von HTTP das vorschreibt. Ob das wirklich sinnvoll ist, sei dahingestellt; wie du die nötigen Pfad-Bestandteile von PHP ergänzen lassen kannst, haben die Kollegen ja schon gezeigt.

        Ist ja etwas bescheuert, ziehe ich das Projekt um muss ich hunderte von Pfade anpassen.

        Du liebe Güte, nein. Deshalb automatisieren. Nur das Ergebnis, also der resultierende HTTP-Header, sollte dann stimmen. Der darf aber gern automatisch gebildet werden.

        Ich hab dieses jetzt auf allen Seite so eingebaut und noch nie irgendwelche Probleme damit gehabt.

        ACK. Die bekannten Clients kommen auch mit unvollständigen, relativen URLs zurecht*. Müssen sie aber nicht, und es ist nicht garantiert, dass das immer so ist.

        So long,
         Martin

        * AFAIR hat Gunnar mal von einem Fall berichtet (oder einen solchen konstruiert), bei dem der IE mit einer relativen URL im Location-Header auf die Schnauze gefallen ist.

        1. Moin!

          Hallo,

          Dein header('Location: login') hat auf jeden Fall den Fehler, dass Du dort einen absoluten Pfad von der Document Root zur Loginseite angeben müsstest, aber eigentlich sogar eine vollständige URL, also header('Loacation: https://example.org/login/')

          warum sollte ich dort eine absolute URL eingeben?

          zumindest mal, weil die Spezifikation von HTTP das vorschreibt. Ob das wirklich sinnvoll ist, sei dahingestellt; wie du die nötigen Pfad-Bestandteile von PHP ergänzen lassen kannst, haben die Kollegen ja schon gezeigt.

          Du nicht auch noch...

          http://forum.selfhtml.org/self/2015/apr/16/userberechtigung/1637619#m1637619

          http://forum.selfhtml.org/self/2015/apr/16/userberechtigung/1637621#m1637621

          Grüße Sven

          1. Hi,

            zumindest mal, weil die Spezifikation von HTTP das vorschreibt. Ob das wirklich sinnvoll ist, sei dahingestellt; wie du die nötigen Pfad-Bestandteile von PHP ergänzen lassen kannst, haben die Kollegen ja schon gezeigt.

            Du nicht auch noch...

            doch, ich auch - weil ich auch bis eben nichts von der überarbeiteten Spec wusste. Denn das sind ja Sachen, die nicht einfach so bekanntgemacht werden, sondern man muss ständig am Blei ballen ... äh, am Ball bleiben und suchen, ob's nicht vielleicht schon was Neues gibt.

            Ciao,
             Martin

        2. Liebe Mitdenker, liebe Wissende, liebe Neugierige,

          ACK. Die bekannten Clients kommen auch mit unvollständigen, relativen URLs zurecht*. Müssen sie aber nicht, und es ist nicht garantiert, dass das immer so ist.

          Darum ging es aber eigentlich gar nicht.
          Es ging um einen absoluten Pfad innerhalb der Domain zur Ressource

          Und in Unkenntnis der seit ca. 5 Monaten geänderten RFC habe ichdann noch erwähnt, dass man eigentlich auch eine vollständige URL benutzen soll. Das ist aber nun wohl überholt.

          Dieser Thread ist aber wieder mal ein Beispiel dafür, wie aus einem kleinen Tipp eine dusselige Diskussion werden kann mit allen Registern des Slapsticks

          Spirituelle Grüße
          Euer Robert
          robert.r@online.de

          --
          Möge der wahre Forumsgeist ewig leben!
          1. Aloha ;)

            Dieser Thread ist aber wieder mal ein Beispiel dafür, wie aus einem kleinen Tipp eine dusselige Diskussion werden kann mit allen Registern des Slapsticks

            Stimmt irgendwie :)

            Hehe, das finde ich zitierwürdig.

            Grüße,

            RIDER

            --
            Camping_RIDER a.k.a. Riders Flame a.k.a. Janosch Zoller Erreichbar meist Mittwochs ab 21 Uhr im Self-TS (ts.selfhtml.org) oder sonst - wenn online - auf dem eigenen TeamSpeak-Server (fritz.campingrider.de). # Facebook # Twitter # Steam # YouTube # Self-Wiki # ch:? rl:| br:> n4:? ie:% mo:| va:) js:) de:> zu:) fl:( ss:| ls:[
          2. Hallo,

            ACK. Die bekannten Clients kommen auch mit unvollständigen, relativen URLs zurecht*. Müssen sie aber nicht, und es ist nicht garantiert, dass das immer so ist.

            Darum ging es aber eigentlich gar nicht.
            Es ging um einen absoluten Pfad innerhalb der Domain zur Ressource

            von nichts anderem sprach ich doch auch.

            Und in Unkenntnis der seit ca. 5 Monaten geänderten RFC habe ichdann noch erwähnt, dass man eigentlich auch eine vollständige URL benutzen soll. Das ist aber nun wohl überholt.

            Okay. Wusste ich auch noch nicht.

            Dieser Thread ist aber wieder mal ein Beispiel dafür, wie aus einem kleinen Tipp eine dusselige Diskussion werden kann mit allen Registern des Slapsticks

            Das finde ich überhaupt nicht. Er zeigt für mich vielmehr, wie aus einer relativ simplen Frage eine technisch und inhaltlich hochwertige Diskussion werden kann. Genau das schätze ich hier sehr.

            So long,
             Martin

            1. Liebe Mitdenker, liebe Wissende, liebe Neugierige,

              ACK. Die bekannten Clients kommen auch mit unvollständigen, relativen URLs zurecht*. Müssen sie aber nicht, und es ist nicht garantiert, dass das immer so ist.

              Darum ging es aber eigentlich gar nicht.
              Es ging um einen absoluten Pfad innerhalb der Domain zur Ressource

              von nichts anderem sprach ich doch auch.

              Vermutlich nicht wirklich. Lies nochmal genau nach, was Du gesagt und was Du gemeint hast.

              Der von mir empfohlene Pfad ist z.B. "/scripts/login/" und die URL für den Location-Header war bis vor kurzem z.B. "https://example.org/scripts/login/"

              Und in Unkenntnis der seit ca. 5 Monaten geänderten RFC habe ichdann noch erwähnt, dass man eigentlich auch eine vollständige URL benutzen soll. Das ist aber nun wohl überholt.

              Okay. Wusste ich auch noch nicht.

              Dieser Thread ist aber wieder mal ein Beispiel dafür, wie aus einem kleinen Tipp eine dusselige Diskussion werden kann mit allen Registern des Slapsticks

              Das finde ich überhaupt nicht. Er zeigt für mich vielmehr, wie aus einer relativ simplen Frage eine technisch und inhaltlich hochwertige Diskussion werden kann. Genau das schätze ich hier sehr.

              So long,
               Martin

              Spirituelle Grüße
              Euer Robert
              robert.r@online.de

              --
              Möge der wahre Forumsgeist ewig leben!
    2. Aloha ;)

      Dein header('Location: login') hat auf jeden Fall den Fehler, dass Du dort einen absoluten Pfad von der Document Root zur Loginseite angeben müsstest, aber eigentlich sogar eine vollständige URL, also header('Loacation: https://example.org/login/')

      Nein, wer sagt, dass Location einen absoluten Pfad beinhalten muss? Das wäre mir neu. Ich gebe dir zwar Recht, das wird meistens so gemacht, um Browser-Fehlverhalten zu vermeiden, aber grundsätzlich kann hier jede Form gültiger Referenzierung (also relativ, absolut, oder absolut-global) gewählt werden.

      Zumindest afaik. Sonst müsstest du mir eine gute Quelle liefern, die das Gegenteil behauptet. Meine kurze Google-Suche eben sagt auch, dass das funktioniert (und nicht, dass das mit irgendetwas unkonform sei).

      Grüße,

      RIDER

      --
      Camping_RIDER a.k.a. Riders Flame a.k.a. Janosch Zoller Erreichbar meist Mittwochs ab 21 Uhr im Self-TS (ts.selfhtml.org) oder sonst - wenn online - auf dem eigenen TeamSpeak-Server (fritz.campingrider.de). # Facebook # Twitter # Steam # YouTube # Self-Wiki # ch:? rl:| br:> n4:? ie:% mo:| va:) js:) de:> zu:) fl:( ss:| ls:[
      1. Liebe Mitdenker, liebe Wissende, liebe Neugierige,

        Nein, wer sagt, dass Location einen absoluten Pfad beinhalten muss?

        Wer sprach von "muss"?

        Wieviele "Login-Seiten" soll denn das Projekt bekommen? Wenn es nur eine sein soll, sollte man diese an einer bestimmten Stelle im Dokumentbaum unterbringen und immer den absoluten Pfad von der Document-Root darauf benutzen. Der ist dann nämlich immer gleich, egal aus welchem Ast des Dokumentbaumes man die Loginseite aufrufen lässt per header().

        Zum zweiten Teil: Früher war es üblich, im Location Header immer eine vollständige URL anzugeben, auch wenn die Browser das nicht mehr wirklich benötigt haben. Aber die Altvorderen der Self-Gemeinde haben dies immer und immer wieder getan :-P

        Spirituelle Grüße
        Euer Robert
        robert.r@online.de

        --
        Möge der wahre Forumsgeist ewig leben!
        1. Hallo robertroth,

          Wieviele "Login-Seiten" soll denn das Projekt bekommen?

          selbstverständlich nur eine.

          1. Liebe Mitdenker, liebe Wissende, liebe Neugierige,

            Hallo robertroth,

            Wieviele "Login-Seiten" soll denn das Projekt bekommen?

            selbstverständlich nur eine.

            Das dacht ich mir auch, konnte es aber bis eben nicht wissen. Wenn es aber nur eine Seite gibt, dann hat die doch auch nur genau einen (absoluten) Pfad innerhalb Deiner Domain. Dann soltest Du den auch hinschreiben. Spätetestens, wenn Dein Projekt wächst, wirst Du merken, warum das gut ist.

            Spirituelle Grüße
            Euer Robert
            robert.r@online.de

            --
            Möge der wahre Forumsgeist ewig leben!
        2. Moin!

          Nein, wer sagt, dass Location einen absoluten Pfad beinhalten muss?

          Wer sprach von "muss"?

          Du in diesem Posting, von "Fehler" und "müsstest":

          Dein header('Location: login') hat auf jeden Fall den Fehler, dass Du dort einen absoluten Pfad von der Document Root zur Loginseite angeben müsstest, aber eigentlich sogar eine vollständige URL, also header('Loacation: https://example.org/login/')

          Fehler kann nicht sein, weil es funktioniert. Technisch zwingend ist es absolut nicht, diese entsprechende Bedingung in den RFCs ist schon lange veraltet und aktualisiert worden. Eine relative URL ist also eine gültige Angabe, und wenn diese URL von allen erreichbaren Seiten auf dieselbe Loginseite führt, ist alles gut.

          Grüße Sven

          1. Liebe Mitdenker, liebe Wissende, liebe Neugierige,

            Fehler kann nicht sein, weil es funktioniert. Technisch zwingend ist es absolut nicht, diese entsprechende Bedingung in den RFCs ist schon lange veraltet und aktualisiert worden. Eine relative URL ist also eine gültige Angabe, und wenn diese URL von allen erreichbaren Seiten auf dieselbe Loginseite führt, ist alles gut.

            Ich sprach von absolutem Pfad und von vollständiger URL.

            Spirituelle Grüße
            Euer Robert
            robert.r@online.de

            --
            Möge der wahre Forumsgeist ewig leben!
          2. Liebe Mitdenker, liebe Wissende, liebe Neugierige,

            [Location-Header]

            Fehler kann nicht sein, weil es funktioniert. Technisch zwingend ist es absolut nicht, diese entsprechende Bedingung in den RFCs ist schon lange veraltet und aktualisiert worden. Eine relative URL ist also eine gültige Angabe, und wenn diese URL von allen erreichbaren Seiten auf dieselbe Loginseite führt, ist alles gut.

            Ich beziehe mich da auf RFC2616, Location:

            Ist Dir jetzt überholt?
            Welche gilt denn dann jetzt?

            Spirituelle Grüße
            Euer Robert
            robert.r@online.de

            --
            Möge der wahre Forumsgeist ewig leben!
            1. Moin!

              [Location-Header]

              Fehler kann nicht sein, weil es funktioniert. Technisch zwingend ist es absolut nicht, diese entsprechende Bedingung in den RFCs ist schon lange veraltet und aktualisiert worden. Eine relative URL ist also eine gültige Angabe, und wenn diese URL von allen erreichbaren Seiten auf dieselbe Loginseite führt, ist alles gut.

              Ich beziehe mich da auf RFC2616, Location:

              Ist Dir jetzt überholt?
              Welche gilt denn dann jetzt?

              Klickst du oben auf deiner Seite auf den Link, kommst du zu einer dick ROT angemarkerten Headline:

              This document has been superseded. In 2014, RFC2616 was replaced by multiple RFCs (7230-7237). See IETF Documents for more information.

              Grüße Sven

              1. Moin!

                Moin!

                [Location-Header]

                Fehler kann nicht sein, weil es funktioniert. Technisch zwingend ist es absolut nicht, diese entsprechende Bedingung in den RFCs ist schon lange veraltet und aktualisiert worden. Eine relative URL ist also eine gültige Angabe, und wenn diese URL von allen erreichbaren Seiten auf dieselbe Loginseite führt, ist alles gut.

                Ich beziehe mich da auf RFC2616, Location:

                Ist Dir jetzt überholt?
                Welche gilt denn dann jetzt?

                Klickst du oben auf deiner Seite auf den Link, kommst du zu einer dick ROT angemarkerten Headline:

                This document has been superseded. In 2014, RFC2616 was replaced by multiple RFCs (7230-7237). See IETF Documents for more information.

                Guckst du hier: https://tools.ietf.org/html/rfc7231#section-7.1.2

                   The "Location" header field is used in some responses to refer to a
                   specific resource in relation to the response.  The type of
                   relationship is defined by the combination of request method and
                   status code semantics.
                
                     Location = URI-reference
                
                   The field value consists of a single URI-reference.  When it has the
                   form of a relative reference ([RFC3986], Section 4.2), the final
                   value is computed by resolving it against the effective request URI
                   ([RFC3986], Section 5).
                

                Grüße Sven

                1. Liebe Mitdenker, liebe Wissende, liebe Neugierige,

                  [Location-Header]

                  Fehler kann nicht sein, weil es funktioniert. Technisch zwingend ist es absolut nicht, diese entsprechende Bedingung in den RFCs ist schon lange veraltet und aktualisiert worden. Eine relative URL ist also eine gültige Angabe, und wenn diese URL von allen erreichbaren Seiten auf dieselbe Loginseite führt, ist alles gut.

                  Ich beziehe mich da auf RFC2616, Location:

                  Ist die jetzt überholt?
                  Welche gilt denn dann jetzt?

                  Klickst du oben auf deiner Seite auf den Link, kommst du zu einer dick ROT angemarkerten Headline:

                  This document has been superseded. In 2014, RFC2616 was replaced by multiple RFCs (7230-7237). See IETF Documents for more information.

                  Ja danke, das habe ich gesehen. Aber leider geht es von dort nicht weiter. Ich bekomme keine Response. Und dein Link unten funktioniert bei mir leider auch nicht :-(

                  Guckst du hier: https://tools.ietf.org/html/rfc7231#section-7.1.2

                     The "Location" header field is used in some responses to refer to a
                     specific resource in relation to the response.  The type of
                     relationship is defined by the combination of request method and
                     status code semantics.
                  
                       Location = URI-reference
                  
                     The field value consists of a single URI-reference.  When it has the
                     form of a relative reference ([RFC3986], Section 4.2), the final
                     value is computed by resolving it against the effective request URI
                     ([RFC3986], Section 5).
                  

                  Naja, wenigstens den cryptischen Text kann ich mir jetzt x-mal durchlesen. Das hab' ich nun davon :-O

                  Spirituelle Grüße
                  Euer Robert
                  robert.r@online.de

                  --
                  Möge der wahre Forumsgeist ewig leben!
                  1. Moin!

                    This document has been superseded. In 2014, RFC2616 was replaced by multiple RFCs (7230-7237). See IETF Documents for more information.

                    Ja danke, das habe ich gesehen. Aber leider geht es von dort nicht weiter. Ich bekomme keine Response. Und dein Link unten funktioniert bei mir leider auch nicht :-(

                    Persönliches Pech.

                    Grüße Sven

          3. Hi,

            Fehler kann nicht sein, weil es funktioniert. Technisch zwingend ist es absolut nicht, diese entsprechende Bedingung in den RFCs ist schon lange veraltet und aktualisiert worden.

            Naja. "Schon lange" würde ich jetzt bei gerade mal 10 Monaten nicht sagen.

            RFC 7231 ist von 06/2014, der Vorgänger ist RFC 2616 von 06/1999, und der sagt noch: Location = "Location" ":" absoluteURI (Selbiges sagt auch dessen Vorgänger RFC 2068 von 01/1997, weiter verfolge ich das jetzt nicht).

            (Daß die Implementierungen in den HTTP-Clients schon seit sehr langer Zeit auch relative URLs bei Location verstehen, steht auf einem anderen Blatt).

            cu,
            Andreas a/k/a MudGuard

        3. Aloha ;)

          Nein, wer sagt, dass Location einen absoluten Pfad beinhalten muss?

          Wer sprach von "muss"?

          Na, du. :)

          Dein header('Location: login') hat auf jeden Fall den Fehler, dass Du dort einen absoluten Pfad von der Document Root zur Loginseite angeben müsstest

          Wenn es ein Fehler ist, wenn mann nicht tut, was man sonst müsste, drückt doch ein muss aus, oder nicht? :)

          Zumindest hatte ich dich so verstanden und der TO damit wahrscheinlich auch.

          Wieviele "Login-Seiten" soll denn das Projekt bekommen? [...]

          Zum zweiten Teil: Früher war es üblich, [...]

          Wie gesagt, ideologisch und aus guten Gründen stehe ich da vollkommen hinter dir. Ich wollte nur dieses angedeutete muss ins richtige Licht setzen.

          Grüße,

          RIDER

          --
          Camping_RIDER a.k.a. Riders Flame a.k.a. Janosch Zoller Erreichbar meist Mittwochs ab 21 Uhr im Self-TS (ts.selfhtml.org) oder sonst - wenn online - auf dem eigenen TeamSpeak-Server (fritz.campingrider.de). # Facebook # Twitter # Steam # YouTube # Self-Wiki # ch:? rl:| br:> n4:? ie:% mo:| va:) js:) de:> zu:) fl:( ss:| ls:[
        4. Liebe Mitdenker, liebe Wissende, liebe Neugierige,

          Wer war das und warum?

          Spirituelle Grüße
          Euer Robert
          robert.r@online.de

          --
          Möge der wahre Forumsgeist ewig leben!
      2. Moin!

        Nein, wer sagt, dass Location einen absoluten Pfad beinhalten muss?

        Die Norm, hier das Http-Protokoll 1.1 .

        14.30 Location

        The Location response-header field is used to redirect the recipient to a location other than the Request-URI for completion of the request or identification of a new resource. For 201 (Created) responses, the Location is that of the new resource which was created by the request. For 3xx responses, the location SHOULD indicate the server's preferred URI for automatic redirection to the resource. The field value consists of a single absolute URI.

        Location = "Location" ":" absoluteURI

        An example is:

        Location: http://www.w3.org/pub/WWW/People.html

        Note: The Content-Location header field (section 14.14) differs from Location in that the Content-Location identifies the original location of the entity enclosed in the request. It is therefore possible for a response to contain header fields for both Location and Content-Location. Also see section 13.10 for cache requirements of some methods.

        Jörg Reinholz

        1. Moin!

          Nein, wer sagt, dass Location einen absoluten Pfad beinhalten muss?

          Die Norm, hier das Http-Protokoll 1.1 .

          Veraltet seit 2014.

          Korrekt: RFC7231

             The "Location" header field is used in some responses to refer to a
             specific resource in relation to the response.  The type of
             relationship is defined by the combination of request method and
             status code semantics.
          
               Location = URI-reference
          
             The field value consists of a single URI-reference.  When it has the
             form of a relative reference ([RFC3986], Section 4.2), the final
             value is computed by resolving it against the effective request URI
             ([RFC3986], Section 5).
          

          Grüße Sven

          1. Moin!

            Veraltet seit 2014.

            November 2014. Wir haben April 2015. Es soll User-Agenten (ich schreibe bewusst nicht "Browser!") geben, welche vorher geschrieben wurden - und die müssen das "computen". Ich weiß allerdings auch, dass Firefox, IE, Safari, Opera & Co. die relativen Adressen im Location-Header schon SEHR lange (viele Jahre!) verarbeiten können.

            Jörg Reinholz

        2. Aloha ;)

          Die Norm, hier das Http-Protokoll 1.1 .

          Die Norm, die du hier zitierst, ist die RFC2616, die, wie schon Sven Rautenberg ausführlich begründet hat, inzwischen überholt und damit nicht mehr gültig ist.

          Grüße,

          RIDER

          --
          Camping_RIDER a.k.a. Riders Flame a.k.a. Janosch Zoller Erreichbar meist Mittwochs ab 21 Uhr im Self-TS (ts.selfhtml.org) oder sonst - wenn online - auf dem eigenen TeamSpeak-Server (fritz.campingrider.de). # Facebook # Twitter # Steam # YouTube # Self-Wiki # ch:? rl:| br:> n4:? ie:% mo:| va:) js:) de:> zu:) fl:( ss:| ls:[
  5. Moin,

    ich habe das Gefühl seit der Umstellung auf das neue Forum wird **JEDER **Beitrag einfach nur kaputt diskutiert. Warum müsst ihr auf jede Frage tausende andere Fragen haben? Oder warum muss alles immer schlecht geschrieben werden?

    In meinem Beispiel, was interessiert die Weiterleitung? Das war nicht die Frage jetzt ist dieser Beitrag wieder unnötig in die Länge gezogen, man findet die "guten" Antworten von "Camping_RIDER" nicht wieder und es macht überhaupt kein Spaß mehr diese Diskussion weiter zu verfolgen, da man ja eh nur unrecht hat.

    Es ist nicht schön für das Forum, denn da verliert jeder der ein Thema gerade lernt die Lust und mag auch überhaupt nicht mehr weiter diskutieren.

    Und es ist mir auch scheiß egal ob dieser Beitrag oder ein anderer von mir ein "-" bekommt, darauf lege ich überhaupt kein Wert.

    1. Liebe Mitdenker, liebe Wissende, liebe Neugierige,

      In meinem Beispiel, was interessiert die Weiterleitung?

      Die Weiterleitung hast Du ins Spiel gebracht mit "header('Location: login');"
      Da deihn Konzept mit der Anmeldung auf der Umleitung basiert, interessiert die hier also durchaus!

      Ich habe Dir dann geschrieben, dass es besser "header('Location: /login/);" heißen müsste, damit das "Loginscript" auch aus jedem Zweig deines Ressourcenbaumes gefunden werden kann.

      Du hast nun irgendwo hier im Thread geantwortet, dass alle Deine HTML- und PHP-Dateien in einem einzigen Verzeichnis (also vermutlich der Document Root) liegen. Spätestens da sind mir die wenigen Haare zu Berge gestiegen, die ich noch habe. Und ich ich habe mich bemüht, Dich möglichst verständlich auf die offensichtlichen Design- und Programmierfehler hinzuweisen. Wenn Du sie nicht sofort behandeln willst, könntest Du dir z.B. einen ToDo-Zettel anlegen ;-)

      Und es ist mir auch scheiß egal ob dieser Beitrag oder ein anderer von mir ein "-" bekommt, darauf lege ich überhaupt kein Wert.

      Du bist hier in keiner Prüfung, sondern hast Fragen gestellt, auf die wir uns dann erlaubt haben, darüber nachzudenken. Das hat erst einmal mit Plus- und Minus-Bewertung gar nix zu tun.

      Spirituelle Grüße
      Euer Robert
      robert.r@online.de

      --
      Möge der wahre Forumsgeist ewig leben!
      1. Hallo robertroth,

        Die Weiterleitung hast Du ins Spiel gebracht mit "header('Location: login');"
        Da deihn Konzept mit der Anmeldung auf der Umleitung basiert, interessiert die hier also durchaus!

        die Weiterleitung habe ich nicht wirklich ins Spiel gebracht, du hast sie erst richtig ins Spiel gebracht, bei mir war sie eben in diesem Code zu sehen. Mir war das mit dem IF ELSE nicht richtig bewusst. Ich hätte die Weiterleitung auch komplett weglassen können.

        Du hast nun irgendwo hier im Thread geantwortet, dass alle Deine HTML- und PHP-Dateien in einem einzigen Verzeichnis (also vermutlich der Document Root) liegen. Spätestens da sind mir die wenigen Haare zu Berge gestiegen, die ich noch habe. Und ich ich habe mich bemüht, Dich möglichst verständlich auf die offensichtlichen Design- und Programmierfehler hinzuweisen. Wenn Du sie nicht sofort behandeln willst, könntest Du dir z.B. einen ToDo-Zettel anlegen ;-)

        Meine Ordner auf dem Webspace sehen so aus

        http://fs2.directupload.net/images/150416/vyljudbq.jpg

        wüsste nicht warum ich dieses ändern sollte. Alle PHP Dateien sind sofort zu finden und die Bilder und Scripte liegen in Unterordner.

        Du bist hier in keiner Prüfung, sondern hast Fragen gestellt, auf die wir uns dann erlaubt haben, darüber nachzudenken.

        Sorry das hat in meinen Augen nichts mehr mit Nachdenken zu tun sondern ist einfach Besserwisserei. Aber ist mir ehrlich gesagt auch egal, ich werde in Zukunft einfach nicht mehr auf solche Diskussionen eingehen und wenn es mir zu dumm wird, einfach ein anders Forum suchen. Ich muss mit dem klar kommen was ich kann

        1. Hallo,

          … einfach ein anders Forum suchen.

          s.u.

          Ich muss mit dem klar kommen was ich kann

          wenn das heißen soll, dass du auf dem Wissensstand bleiben willst, den du im Moment hast, ist s.o. vermutlich für alle Beteiligten das Beste. Wenn du aber willig bist, noch dazuzulernen, wirst du hier nachwievor Unterstützung erhalten.

          Gruß
          Kalk

          1. Hallo Tabellenkalk,

            wenn das heißen soll, dass du auf dem Wissensstand bleiben willst, den du im Moment hast, ist s.o. vermutlich für alle Beteiligten das Beste. Wenn du aber willig bist, noch dazuzulernen, wirst du hier nachwievor Unterstützung erhalten.

            ich möchte einfach und schnell zu einem Ergebnis kommen wie es im Berufsleben gang und gebe ist, Zeit ist Geld! Solange ein Browser das macht was ich möchte ist doch alles OK da muss man doch keine 5 Stunden diskutieren ob es ok ist, bei einer Weiterleitung eine Vollständige URL anzugeben oder nicht. Mein Google Chrome macht es und gut ist.

            1. Aloha ;)

              ich möchte einfach und schnell zu einem Ergebnis kommen wie es im Berufsleben gang und gebe ist, Zeit ist Geld! Solange ein Browser das macht was ich möchte ist doch alles OK da muss man doch keine 5 Stunden diskutieren ob es ok ist, bei einer Weiterleitung eine Vollständige URL anzugeben oder nicht. Mein Google Chrome macht es und gut ist.

              Du sprichst von Berufsleben. Da erwarte ich grundsätzlich erstmal professionelles Arbeiten, und das ist die Einstellung "Mein Google Chrome macht es und gut ist" eben nicht. Du sagst auch "Zeit ist Geld". Je professioneller die Lösung in allen Details ist, umso geringer ist der Zeitaufwand, wenn das Projekt größer skaliert, was jederzeit unvorhergesehen passieren kann.

              Wie gesagt, es ist deine eigene Verantwortung, die Ratschläge umzusetzen oder auch nicht. Du solltest hier nur kein Verständnis dafür zu erwarten, wenn du uns hier sagst, dass du die unprofessionellere Lösung für ausreichend hältst.

              Die meisten hier haben langjährige Erfahrung in Ihrem Bereich, was sauberes und professionelles Arbeiten angeht. Du kannst es uns gern glauben, dass es viele Gründe gibt, möglichst professionell zu arbeiten.

              Grüße,

              RIDER

              --
              Camping_RIDER a.k.a. Riders Flame a.k.a. Janosch Zoller Erreichbar meist Mittwochs ab 21 Uhr im Self-TS (ts.selfhtml.org) oder sonst - wenn online - auf dem eigenen TeamSpeak-Server (fritz.campingrider.de). # Facebook # Twitter # Steam # YouTube # Self-Wiki # ch:? rl:| br:> n4:? ie:% mo:| va:) js:) de:> zu:) fl:( ss:| ls:[
            2. Moin!

              ich möchte einfach und schnell zu einem Ergebnis kommen wie es im Berufsleben gang und gebe ist,

              Hehe. Ganz so ist das nicht. Hast Du schon von der aktuellen Änderung (noch auf dem Gesetzgebungsweg) des UWG gehört? Da wird "fachliche Sorgfalt" verlangt…

              Zeit ist Geld!

              Stimmt schon. Aber: verlorene Kunden kosten auch Geld.

              Solange ein Browser das macht was ich möchte ist doch alles OK

              Bis der Kunde anruft und fragt, wieso (zum Teufel!) die Seite bei Google nicht erscheint und wieso er mit dem Webseiten-Download-Tool die Webseite eigentlich nicht herunterladen kann (so sinnfrei das Ansinnen in vielen Fällen sein mag) Und dann stellt sich raus, der google-bot kann Deiner 30Xer nicht folgen…

              Dem Kunde hast Du aber erzählt, dass Du selbstredend auch SEO kannst.

              Dann kostet Dich so eine Nummer den Kunde (und damit Folgeaufträge), also Geld, vielleicht den Auftrag, vielleicht noch Gerichtsverfahren, in jedem Fall den guten Ruf.

              Jörg Reinholz

              1. Hallo Jörg,

                Bis der Kunde anruft und fragt, wieso (zum Teufel!) die Seite bei Google nicht erscheint und wieso er mit dem Webseiten-Download-Tool die Webseite eigentlich nicht herunterladen kann (so sinnfrei das Ansinnen in vielen Fällen sein mag) Und dann stellt sich raus, der google-bot kann Deiner 30Xer nicht folgen…

                nochmals, das System läuft auf MEINEM Rechner, warum redet ihr immer von Kunden und Google? Habe ich davon ein Ton gesagt? Nein, habe ich nicht!

                1. Moin!

                  nochmals, das System läuft auf MEINEM Rechner,

                  Ach so. Du machst das nur für Dich? Hab ich nicht mitbekommen, ist womöglich mein Fehler. Übrigens ist trotzdem nicht falsch, es richtig zu machen - könnte sich ja mal was daran ändern. Du kennst das mit dem Neid? Oder wenn der Chef kommt und fragt, Wieso - eigentlich - sich da jemand in der Arbeitszeit eine Lösung baut und die anderen nicht zum Nutzen der Firma teilhaben lässt und er könnte ja außerdem von zu Hause aus ... ?

                  warum redet ihr immer von Kunden und Google? Habe ich davon ein Ton gesagt? Nein, habe ich nicht!

                  Weil das hier der weitaus häufigste Anwendungsfall für das hier vermittelte Wissen ist.

                  Im Übrigen: Ich gehe, obwohl Du durch eine wahrscheinlich unglücklich gelungene Formulierung durchaus den Eindruck erweckst, nicht davon aus, dass Du nichts lernen willst. Allerdings sehe ich durchaus auch, dass Du hin- und wieder nach sehr trivialen Sachen fragst, bei denen ein Blick ins Handbuch genügt hätte. Dort stehen oft auch tolle Beispiele in den (gemanagten) Kommentaren. Die sind SEHR lesenswert.

                  Dort wird dann, weil es ja kein Forum ist, auch nicht so wie hier - und aus Deiner Sicht "kontraprodtiv" - auch abseits der eigentlichen Frage diskutiert. Das machen wir, weil wir von einander lernen wollen. Deshalb "SELF".

                  Jörg Reinholz

    2. Aloha ;)

      ich habe das Gefühl seit der Umstellung auf das neue Forum wird **JEDER **Beitrag einfach nur kaputt diskutiert. Warum müsst ihr auf jede Frage tausende andere Fragen haben? Oder warum muss alles immer schlecht geschrieben werden?

      Grundsätzlich wird hier nichts schlecht geschrieben. Wir bemühen uns nur, aufzuzeigen, wie mans richtig macht. Und das nicht nur auf die Frage bezogen, sondern möglichst ganzheitlich. Das ist schließlich der Sinn dieses Forums. Zu zeigen, oder durch Diskussion zu einem Konsens zu kommen, was möglichst sinnvoll oder richtig ist.

      In meinem Beispiel, was interessiert die Weiterleitung? Das war nicht die Frage jetzt ist dieser Beitrag wieder unnötig in die Länge gezogen, man findet die "guten" Antworten von "Camping_RIDER" nicht wieder und es macht überhaupt kein Spaß mehr diese Diskussion weiter zu verfolgen, da man ja eh nur unrecht hat.

      Threaddrift gehört zu diesem Forum wie ... Ach, ich hab den Rest des Zitats vergessen. Leider gehört nicht nur der Threaddrift zu diesem Forum, sondern auch, dass einige Poster ihre (gut gemeinten) Ratschläge manchmal sehr vehement und manchmal auch etwas wenig wertschätzend präsentieren. Ersteres ist vollkommen akzeptabel, zweiteres leider nicht.

      Kleine Praxistipps zur Selbsthilfe:

      Wenn dich der Ton oder die Art und Weise, wie Ratschläge präsentiert werden, verletzt, dann weis doch den betreffenden Poster einfach mal darauf hin, der meint das nämlich sicher nicht so. Wenn demjenigen das aber nicht gesagt wird, wie soll er dann daraufkommen, in Zukunft etwas geduldiger zu erklären? Ich will da niemanden in Schutz nehmen, aber letztendlich lassen sich solche Probleme einfach lösen, wenn einer der Beteiligten auf den anderen zugeht.

      Egal wo im Internet wir uns aufhalten, sollten wir einfach nicht vergessen, dass wir kein Gegenüber vor uns haben, um dessen Intentionen zu ahnen. Umso mehr gilt es, Dinge nicht persönlich zu nehmen und sich viele Gedanken über das zu machen, was man schreibt. Auch das zwischen den Zeilen.

      Es ist nicht schön für das Forum, denn da verliert jeder der ein Thema gerade lernt die Lust und mag auch überhaupt nicht mehr weiter diskutieren.

      Da stimme ich dir vollkommen zu. Sogar mich, der ich doch eher zu den Erfahreneren gehöre, verprellt sowas manchmal ein bisschen.

      Und es ist mir auch scheiß egal ob dieser Beitrag oder ein anderer von mir ein "-" bekommt, darauf lege ich überhaupt kein Wert.

      Nö, von mir gibts ein Plus. Dafür, dass du das wichtige Thema Tonfall angesprochen und uns ehrliche Kritik hinterlassen hast.

      Und noch ein kleiner Praxistipp:

      Du kannst inzwischen auch deiner Meinung nach besonders gute Postings "als Antwort akzeptieren", dann werden sie prominent an den Thread angeheftet. Das soll gerade dazu dienen, die "Antwort" nicht in der Diskussion verschwinden zu lassen.

      Und nochmal was zum Thema Threaddrift:

      Vergiss nicht - ein Thread gehört hier nicht dem Thread-Opener, sondern der ganzen Forengemeinschaft. Es ist nicht nur Sinn dieses Forums, Fragen zu beantworten, sondern auch genau die fachlichen Diskussionen, die du als störend empfindest, zu führen, um alle, auch uns "Experten" und die, die's interessiert, zu bereichern.

      Und noch was zum Thema gute Ratschläge:

      Niemand kann oder will irgendjemanden dazu zwingen, irgendetwas in dessen Homepage/Projekt so umzusetzen, wie wir es hier für gut befinden. Wenn du deine Gründe hast, unsere Ratschläge nicht oder nur teilweise umzusetzen, dann mach das einfach so, wie du's für richtig hältst. Da redet dir keiner rein. Nur, sei so gut, und sag uns nicht, dass du's nicht tust. Das provoziert nämlich, dass man dir die Gründe noch weitere fünfzig mal vorlegt. Wie gesagt, der Inhalt eines Threads gehört hier der Allgemeinheit...

      Puh, das war mal wieder lang. Ich les es nicht nochmal, Rechtschreibfehler dürft ihr behalten.

      Grüße,

      RIDER

      --
      Camping_RIDER a.k.a. Riders Flame a.k.a. Janosch Zoller Erreichbar meist Mittwochs ab 21 Uhr im Self-TS (ts.selfhtml.org) oder sonst - wenn online - auf dem eigenen TeamSpeak-Server (fritz.campingrider.de). # Facebook # Twitter # Steam # YouTube # Self-Wiki # ch:? rl:| br:> n4:? ie:% mo:| va:) js:) de:> zu:) fl:( ss:| ls:[
  6. Moin!

    Ich hätte da noch einen heißen Tipp:

    Man muss nicht immer alles neu erfinden und kann auch bei anderen abschreiben.

    Kannst es ja so umschreiben, dass Benutzer und Gruppen nicht in einer Textdatei, sondern in der Datenbank hinterlegt werden. Aber sieh Dir an, was beim Login passiert und wie ich das in die zu schützenden PHP-Skripte integriert habe. (Und wie einfach das geht, wenn man Benutzername und Gruppen in der Session hinterlegt.

    http://www.fastix.org/test/self_login.tar.gz (braucht derzeit noch einen modernen Apache 2.4)

    Test: http://www.fastix.org/test/selfhtml_login/

    Jörg Reinholz

    1. Aloha ;)

      Man muss nicht immer alles neu erfinden und kann auch bei anderen abschreiben.

      Du bist dir sicher, dass wir noch bei selfhtml.org sind? ;)

      Ich glaub gethtml.org steht grad wieder zum Erwerb offen :)

      Grüße,

      RIDER

      --
      Camping_RIDER a.k.a. Riders Flame a.k.a. Janosch Zoller Erreichbar meist Mittwochs ab 21 Uhr im Self-TS (ts.selfhtml.org) oder sonst - wenn online - auf dem eigenen TeamSpeak-Server (fritz.campingrider.de). # Facebook # Twitter # Steam # YouTube # Self-Wiki # ch:? rl:| br:> n4:? ie:% mo:| va:) js:) de:> zu:) fl:( ss:| ls:[
      1. Moin!

        Man muss nicht immer alles neu erfinden und kann auch bei anderen abschreiben.

        Du bist dir sicher, dass wir noch bei selfhtml sind? ;)

        Ich bin jetzt grade ein wenig beleidigt. Du hat genau das gemacht, was ich ganz anderen Größen vorwerfe, nämlich einen gewaltigen Teil meines Textes gelöscht und dann aus dem kläglichen Rest die falschen Schlüsse gezogen. Ich schrieb nämlich auch:

        Kannst es ja so umschreiben, dass Benutzer und Gruppen nicht in einer Textdatei, sondern in der Datenbank hinterlegt werden. Aber sieh Dir an, was beim Login passiert und wie ich das in die zu schützenden PHP-Skripte integriert habe. (Und wie einfach das geht, wenn man Benutzername und Gruppen in der Session hinterlegt.

        Und ich denke, das ist "self genug" und ganz ohne "get" wird es nicht gehen.

        Hintergrund ist das hier.

        Jörg Reinholz

        1. Aloha ;)

          Ich bin jetzt grade ein wenig beleidigt. Du hat genau das gemacht, was ich ganz anderen Größen vorwerfe

          Tut mir ehrlich leid, zu nahe treten wollte ich dir damit nicht. Gekürzt habe ich nicht aus böser Absicht.

          Ich schrieb nämlich auch:

          Kannst es ja so umschreiben, dass Benutzer und Gruppen nicht in einer Textdatei, sondern in der Datenbank hinterlegt werden. Aber sieh Dir an, was beim Login passiert und wie ich das in die zu schützenden PHP-Skripte integriert habe. (Und wie einfach das geht, wenn man Benutzername und Gruppen in der Session hinterlegt.

          Ja, das hatte ich durchaus gelesen. Das ändert aber an meiner Meinung eigentlich kaum was. Denn...

          Und ich denke, das ist "self genug" und ganz ohne "get" wird es nicht gehen.

          Hintergrund ist das hier.

          ...genau dieser Hintergrund macht es aus didaktischer Sicht eben nicht sinnvoll, eine bestehende Lösung, die man nicht verstanden hat, zu adaptieren (was im Zweifelsfall auch nicht gelingt und das Verständnisproblem dadurch nur verschlimmert), sondern genau dieser Hintergrund sollte Grund sein, den TO an der Hand zu nehmen, die Sache komplett selber zu machen - denn nur aus dem selber machen kann man lernen.

          Ich gebe dir Recht, ganz ohne "get" geht es nie. Das jeweilige "get" muss dann aber derart aufbereitet sein, dass der Fragesteller nicht nur "nimmt" sondern auch "versteht".

          Eine fertige Lösung zu posten kann in diesem Sinne nicht didaktisch sein, sondern lediglich dazu geeignet, ein Problem möglichst schnell zu erschlagen. Wenn wir hier aber nicht didaktisch vorgehen und einen Lerneffekt hervorrufen, sondern nur noch Probleme mit fertigen (Teil-)Lösungen erschlagen, deren Funktionsweise und Sinn wir nicht mehr erläutern, dann haben wir den Namen selfhtml nicht verdient.

          Ich hoffe diese ausführlichere Erklärung meiner Meinung macht das beleidigt sein wett und zeigt auf, warum ich eben nicht finde, dass das "self genug" war.

          Grüße,

          RIDER

          --
          Camping_RIDER a.k.a. Riders Flame a.k.a. Janosch Zoller Erreichbar meist Mittwochs ab 21 Uhr im Self-TS (ts.selfhtml.org) oder sonst - wenn online - auf dem eigenen TeamSpeak-Server (fritz.campingrider.de). # Facebook # Twitter # Steam # YouTube # Self-Wiki # ch:? rl:| br:> n4:? ie:% mo:| va:) js:) de:> zu:) fl:( ss:| ls:[
          1. Moin!

            ...genau dieser Hintergrund macht es aus didaktischer Sicht eben nicht sinnvoll, eine bestehende Lösung…

            Naja. Ich habe ziemlich viel dabei gelernt, wenn ich aus fremden Code geklaut oder noch mehr, wenn ich den zum Funktionieren gebracht habe. Mit "Funktionieren" meine ich "überhaupt" und/oder "in meinem Sinne". Ich ahbe sehr viel fremden Quelltest gelesen und mich übrigens auch von den Fragen hier im Forum gewaltig in der Frage inspirieren lassen, was denn noch zu lernen sei - und einige Fragen dann einfach mal beantwortet. (meist richtig)

            Jörg Reinholz

            1. Aloha ;)

              ...genau dieser Hintergrund macht es aus didaktischer Sicht eben nicht sinnvoll, eine bestehende Lösung…

              Naja. Ich habe ziemlich viel dabei gelernt, wenn ich aus fremden Code geklaut oder noch mehr, wenn ich den zum Funktionieren gebracht habe. Mit "Funktionieren" meine ich "überhaupt" und/oder "in meinem Sinne".

              Gebe ich dir Recht, ja. Allerdings muss man, um aus fremdem Quelltext zu lernen (was dann wirklich gut funktioniert), zuerst einmal die Grundlagen verinnerlicht haben, um den fremden Quelltext überhaupt verstehen zu können - und ich bezweifle, dass der TO schon soweit ist.

              Also, nix für ungut, war alles andere als böse gemeint.

              Grüße,

              RIDER

              --
              Camping_RIDER a.k.a. Riders Flame a.k.a. Janosch Zoller Erreichbar meist Mittwochs ab 21 Uhr im Self-TS (ts.selfhtml.org) oder sonst - wenn online - auf dem eigenen TeamSpeak-Server (fritz.campingrider.de). # Facebook # Twitter # Steam # YouTube # Self-Wiki # ch:? rl:| br:> n4:? ie:% mo:| va:) js:) de:> zu:) fl:( ss:| ls:[
  7. Moin,

    wie im Titel schon geschrieben, seid ihr damit nun zufrieden?

    <?php
    $host = $_SERVER["HTTP_HOST"];
    $uri  = rtrim(dirname(htmlspecialchars($_SERVER["PHP_SELF"])), "/\\");
    
    if(isUserLoggedIn($mysqli) === FALSE) {
            //Fall: nicht eingeloggt
            header('Location: http://$host$uri/login');
    } else {
            //Fall: eingeloggt
            $object = userDaten($mysqli, session_id());
    
            if ($object->user_type == 'mitarbeiter') {
                     //Fall: ...als Mitarbeiter
                     header('Location: http://$host$uri/index');
            } 
    }
    ?>
    
    1. Moin!

      wie im Titel schon geschrieben, seid ihr damit nun zufrieden?

      Da erwartest Du jetzt was falsches. Es geht immer noch besser und es geht immer anders und immer hat die andere Methode Vor- und Nachteile.

      Ich hatte ja vorgeschlagen, dass Du bei der Anmeldung den Benutzername und die Gruppen in die Session schreibst:

      session_start();
      $_SESSION['user_name']=$benutzername; # woher der Benutzername auch immer kommt!
      foreach ($arGruppen as $strGruppe) {  # Woher das Array mit den Gruppennamen
                                            # auch immer kommt!
        if ( user_in_group($benutzername, $strGruppe) ) # Die Funktion user_in_group musst Du
                                                        # selbst schreiben!
          $_SESSION['groups'][$strGruppe]=true;
        }
      }
      

      und dann einfach nur die Session abfragst um unnötige und langsame Datenbankzugriffe zu vermeiden:

      <?php
      session_start() # fehlt bei Dir!
      $host = $_SERVER["HTTP_HOST"];
      $uri  = rtrim(dirname(htmlspecialchars($_SERVER["PHP_SELF"])), "/\\"); 
      
       if ( empty($_SESSION['user_name']) ) {
       //Falls: nicht eingeloggt
               header('Location: http://$host$uri/login');
               exit; #deklaratorisch. Hier soll ja auch nichts passieren - oder? 
       } else {
       //Fall: eingeloggt
               if (! empty($_SESSION['groups']['mitabeiter']) ) {
               #Fall: eingeloggt und Mitarbeiter:
                        header('Location: http://$host$uri/index');
                        exit; #deklaratorisch. Hier soll ja auch nichts passieren - oder? 
               } else {
                        #Fall: eingeloggt und kein mitarbeiter:
                        #whatever
               }
      }
      ?>
      

      Hintergrund ist, dass man die Daten des Benutzers eigentlich "aller furzlang" im Programm und einer Vielzahl von Skripten braucht.

      Jörg Reinholz

      1. Hallo Jörg,

        session_start();
        $_SESSION['user_name']=$benutzername; # woher der Benutzername auch immer kommt!
        foreach ($arGruppen as $strGruppe) {  # Woher das Array mit den Gruppennamen
                                              # auch immer kommt!
          if ( user_in_group($benutzername, $strGruppe) ) # Die Funktion user_in_group musst Du
                                                          # selbst schreiben!
            $_SESSION['groups'][$strGruppe]=true;
          }
        }
        

        und dann einfach nur die Session abfragst um unötige und langsame Datenbankzugriffe zu vermeiden:

        <?php
        session_start() # fehlt bei Dir!
        $host = $_SERVER["HTTP_HOST"];
        $uri  = rtrim(dirname(htmlspecialchars($_SERVER["PHP_SELF"])), "/\\"); 
        
         if ( empty($_SESSION['user_name']) ) {
         //Falls: nicht eingeloggt
                 header('Location: http://$host$uri/login');
                 exit; #deklaratorisch. Hier soll ja auch nichts passieren - oder? 
         } else {
         //Fall: eingeloggt
                 if (! empty($_SESSION['groups']['mitabeiter']) ) {
                 #Fall: eingeloggt und Mitarbeiter:
                          header('Location: http://$host$uri/index');
                          exit; #deklaratorisch. Hier soll ja auch nichts passieren - oder? 
                 } else {
                          #Fall: eingeloggt und kein mitarbeiter:
                          #whatever
                 }
        }
        ?>
        

        nein, der Session Start fehlt nicht, der liegt nur in einer anderen Datei, deshalb ich den nicht mit kopiert. Ich binde diesen so ein:

        <?php 
        include_once 'inc/kopf.php';
        ?>
        

        In dieser Datei steht dann dieses:

        ob_start();
        session_start();
        require_once 'inc/zugangsdaten.php';
        require_once 'include/config.php';
        require_once 'include/functions/uebersicht.php';
        require_once 'include/class/upload.class.php';
        require_once 'include/lib/Swift-5.0.3/lib/swift_required.php';
        error_reporting(E_ALL);
        ini_set('display_errors', 1);
        

        Was ich nicht verstehe, ich habe ja schon ein paar User Funktionen, diese sehe so aus:

        	function isUserLoggedIn($mysqli) {
                $stmt = $mysqli->prepare("SELECT * FROM web_users WHERE user_session=?");
        	$stmt->bind_param("s", session_id());
                $stmt->execute();
                $stmt->store_result();
        
                if($stmt->num_rows() === 1) {
                    return true;
                } else {
                    return false;    
                }
            }
        	
        
            function login($mysqli, $userMail, $pw) {
                $stmt = $mysqli->prepare("SELECT user_id FROM web_users WHERE user_nickname=? AND user_passwort=? AND user_aktiv=?");
        		$ak = 1; 
                $stmt->bind_param("sss", $userMail, $pw, $ak);
                $stmt->execute();
                $stmt->store_result();
        
        		if($stmt->num_rows() === 1) {
                    $stmt = $mysqli->prepare("Update web_users SET user_session=?, user_login=now() WHERE user_nickname=? AND user_passwort=?");
                    $stmt->bind_param("ssi", session_id(), $userMail, $pw);
                    $stmt->execute();
                    
                    return true;
                } else {
                    return false;
                }    
            }
        	
        	
        	function userDaten($mysqli, $id) {
        		$stmt = $mysqli->prepare("SELECT user_type, user_nickname, user_login, ud_name, ud_vorname 
        			FROM web_users 
        			LEFT JOIN web_users_detail ON web_users_detail.ud_Uid = web_users.user_code 
        			WHERE user_session=?");
        		$stmt->bind_param("s", session_id());
        		$stmt->execute();
        		$stmt->bind_result($user_type, $user_nickname, $user_login, $ud_name, $ud_vorname);
        
        		$stmt->fetch();
        	 	
        		$userDaten = array( 
        					'user_type' 		=> $user_type,
        					'user_nickname'		=> $user_nickname,
        					'user_login'		=> $user_login,
        					'ud_name'		=> $ud_name,
        					'ud_vorname' 		=> $ud_vorname 
        				);
        		
        		return (object)$userDaten;
        	}
        

        Wenn ich jetzt alles auf Session umstellen würde dann müsste ich ja ALLE Scripe von mir wieder anpassen und dieses sind jetzt knapp 100 Dateien, die Zeit kann ich mir wirklich sparen?

        Den Login und die Berechtigung prüfe ich ab jetzt so:

        $host = $_SERVER["HTTP_HOST"];
        $uri  = rtrim(dirname(htmlspecialchars($_SERVER["PHP_SELF"])), "/\\");
        
        if(isUserLoggedIn($mysqli) === FALSE) {
                //Fall: nicht eingeloggt
                header('Location: http://$host$uri/login');
        } else {
                //Fall: eingeloggt
                $object = userDaten($mysqli, session_id());
        
                if ($object->user_type == 'mitarbeiter') {
                         //Fall: ...als Mitarbeiter
                         header('Location: http://$host$uri/index');
                } 
        }
        
        1. Moin!

          Wenn ich jetzt alles auf Session umstellen würde dann müsste ich ja ALLE Scripe von mir wieder anpassen und dieses sind jetzt knapp 100 Dateien, die Zeit kann ich mir wirklich sparen?

          Nun ja. Das ist so, wenn man anfängt. Stell Dir vor, Du hättest Million Autos gebaut, deren Zündschlösser nicht Ordnung sind.

          Jörg Reinholz

          1. Aloha ;)

            Nun ja. Das ist so, wenn man anfängt. Stell Dir vor, Du hättest Million Autos gebaut, deren Zündschlösser nicht Ordnung sind.

            Irgendwie bin ich echt zwiegespalten. Einerseits find ichs irgendwie dämlich, wie in deinen Postings meist vollkommen thematisch deplatziert, fast schon provozierend polemisch, diese Links einfließen, andererseits sind die Dinger, die du verlinkst, größtenteils echt interessant und haarsträubend, so dass ich sie dann immer trotzdem aufmach und les... :D

            Das fasziniert mich ziemlich. Im positiven Sinne. Obwohl ich bei diesen Dingen ja auch oft nicht direkt deiner Meinung bin (oder zumindest die Art und Weise manchmal für falsch halte).

            Und weil ich grad übermütig bin, gibts dafür nen

            Keks

            Grüße,

            RIDER

            --
            Camping_RIDER a.k.a. Riders Flame a.k.a. Janosch Zoller Erreichbar meist Mittwochs ab 21 Uhr im Self-TS (ts.selfhtml.org) oder sonst - wenn online - auf dem eigenen TeamSpeak-Server (fritz.campingrider.de). # Facebook # Twitter # Steam # YouTube # Self-Wiki # ch:? rl:| br:> n4:? ie:% mo:| va:) js:) de:> zu:) fl:( ss:| ls:[
    2. Tach!

      wie im Titel schon geschrieben, seid ihr damit nun zufrieden?

      Natürlich nicht. Aber auf uns kommt es nicht an, du musst mit deiner Arbeit zufrieden sein. Es ist jedenfalls schön, dass du noch da bist und unsere Meinung hören möchtest.

      $uri = rtrim(dirname(htmlspecialchars($_SERVER["PHP_SELF"])), "/\");

      htmlspecialchars() hat hier nichts zu suchen. Das ist was für die Ausgabe und an der Stelle ist erst Eingabe.

          header('Location: http://$host$uri/login');
      

      Der Location-Header ist nicht HTML sondern HTTP. Dafür gelten andere Maskierregeln als für HTML und eine Behandlung nach HTML-Regeln für PHP_SELF ist hier nicht sinvoll.

      Neulich sprachen wir noch darüber (das warst doch du?) dass man seine Scripts wenigstens nach dem EVA-Prinzip aufbauen sollte. Dann kommt man nicht in Versuchung, bereits am Anfang für eine spätere Ausgabe irgendwelche Kontextbehandlung einzubauen, die dann am Ende vielleicht falsch ist und einem beim V-Teil (Verarbeitung) im Weg steht.

      Für deine privaten Zwecke mag außerdem PHP_SELF ausreichend sein. In der bösen Welt draußen kann es sich als ungeeignet erweisen. SCRIPT_NAME oder REQUEST_URI sind Alternativen. Da ich mir das immer nicht merken kann, was in welcher Server-Variablen steht, probier ich das immer mit den diversen Anhängseln aus und nehm dann das was ich grad brauch. Also phpinfo(INFO_VARIABLES); anschauen und die Seite so aufrufen: .../index.php (der einfachte Fall), .../index.php/pathinfo, ...index.php?querystring und .../index.php/pathinfo?querystring.

      dedlfix.

      1. Hallo dedlfix,

        $uri = rtrim(dirname(htmlspecialchars($_SERVER["PHP_SELF"])), "/\");
        htmlspecialchars() hat hier nichts zu suchen. Das ist was für die Ausgabe und an der Stelle ist erst Eingabe.

        dieses habe ich aber GENAU so hier https://www.video2brain.com/de/videos-89177.htm gelernt

        http://fs2.directupload.net/images/150417/t625zgki.jpg

        1. Moin!

          Genau weil ich derlei auch erwartet habe, habe ich geschrieben (und wegen der übereinstimmenden Erwartungen anderer auch viel Zustimmung erhalten), dass YouTube - Videos nicht geeignet sind.

          Jörg Reinholz

          1. Hallo Jörg,

            Genau weil ich derlei auch erwartet habe, habe ich geschrieben (und wegen der übereinstimmenden Erwartungen anderer auch viel Zustimmung erhalten), dass YouTube - Videos nicht geeignet sind.

            du hast auf die URL geschaut? Es ist KEIN Youtube Videos. Laut Video2Brain ist das alles ausgebildete und professionelle Trainer.

            1. Moin!

              Laut Video2Brain ist das alles ausgebildete und professionelle Trainer.

              Tja. Dann weißt Du jetzt, was Werbeversprechen wert sind.

              So ganz ichtig verstehe ich das mit den Videos auch nicht: Bei elektronischen Texten kann man mit Copy & Paste die Fehler in sein Zeug übernehmen...

              Jörg Reinholz

              1. Hallo,

                So ganz ichtig verstehe ich das mit den Videos auch nicht: Bei elektronischen Texten kann man mit Copy & Paste die Fehler in sein Zeug übernehmen...

                Vermutlich sollst du die Fehler selber tippen, um sie besser zu verinnerlichen...

                Gruß
                Kalk

        2. Tach!

          $uri = rtrim(dirname(htmlspecialchars($_SERVER["PHP_SELF"])), "/\");
          htmlspecialchars() hat hier nichts zu suchen. Das ist was für die Ausgabe und an der Stelle ist erst Eingabe.

          dieses habe ich aber GENAU so hier https://www.video2brain.com/de/videos-89177.htm gelernt

          Dann würde ich mein Geld zurückverlangen. Das ist jedenfalls nicht richtig, was da gelehrt wird.

          dedlfix.