Ankündigung

Einklappen
Keine Ankündigung bisher.

PHP & SQL - Login über mehrere Seiten merken // --> Account die Datenbank updaten

Einklappen

Neue Werbung 2019

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

  • PHP & SQL - Login über mehrere Seiten merken // --> Account die Datenbank updaten

    Einen wunderschönen guten Abend

    Ich hab mich durch mehrere Foren gelesen, einiges herum probiert jedoch kam ich meinen erwünschten Ergebnissen leider nicht näher.
    Ich hab eine Website auf der man sich auf der ersten Seite Anmelden kann mit bereits zugewiesenem Benutzername und Passwort (Accounts sind in einer Datenbank angelegt)


    Problem 1:

    Das Login funktioniert.
    Danach wird man auf eine 2. Seite weitergeleitet: home.php Hier hat sich die Session noch gemerkt dass ich angemeldet bin mit diesem Account.
    Gehe ich aber auf eine andere Seite, ist die Session plötzlich wie leer gefegt.
    Ich frage aber auf jeder Seite ab ob das Login=1 ist, wenn es so ist soll er mir die Seite anzeigen is dem nicht so, wird man auf das Login script weitergeleitet.
    Und dennoch wird mir die Seite angezeigt. ich habe auch überall var_dump($_SESSION); drinnen, auf der 1. Seite nach dem Login wird mir noch ausgeben dass ich mit dem account angemeldet bin, gehe ich auf eine weitere Seite, ist dem nicht mehr so dann gibt es mir: array(1) { ["login"]=> int(1) } Statt zb. : array(3) { ["login"]=> int(1) ["benutzer"]=> string(3) "PEP" ["passwort"]=> string(3) "PEP" }



    PHP-Code:
     $sql "SELECT * FROM Account WHERE
                        Benutzername= :benutzer AND
                        Passwort=:pwd"
    ;
            
    $stmt=$db->prepare($sql);
            
    $stmt->bindParam(':benutzer',$benutzername,PDO::PARAM_STR);
            
    $stmt->bindParam(':pwd',$passwort,PDO::PARAM_STR);
            
    $stmt->execute();

            if (
    $stmt->rowCount()==1) {
                echo 
    "Der Login war erfolgreich.<br>";
                echo 
    $benutzername;
                echo 
    $passwort;
                
    # In der Session merken, dass der User eingeloggt ist !
                
    $_SESSION["login"] = 1;
                
    $_SESSION['benutzer'] = $benutzername;
                
    header("location:website/home.php");

                } else {
                echo 
    "Die Logindaten sind nicht korrekt.<br>";
                } 
    Ich starte auch auf jeder Seite ganz oben eine Session.
    Frage ab:
    PHP-Code:
    if($_SESSION["login"]=1){
            
    $_SESSION['benutzer'];
            
    var_dump($_SESSION); 
    // else steht ganz unten mit:
    PHP-Code:
    <?php
    }else{
        
    header("Location: xxxxx");
    }

        
    ?>


    Ich hab mich durch viele Foren gewuselt, jedoch weiß ich langsam nicht mehr weiter.. es ist vermutlich eh nur ein kleines Problem..




    Problem 2:

    Nehmen wir an die Session merkt sich dass man als account XYZ Angemeldet ist..
    dann möchte ich dass man sich für eine Sportart anmelden kann:
    Bildschirmfoto 2018-01-29 um 22.57.23.png


    Hierfür ist in der Datenbank eine Tabelle "Sportarten" angelegt in denen diese 6 Auswahlmöglichkeiten sind "SportartID"
    In der Tabelle "Account" gibt es ein Attribut mit dem Namen "Anm_Sportart" <- Hier soll dann der Fremdschlüssel von der Richtigen Sportart aus SportartID drinnen stehen, wenn man eine Sportart ausgewählt hat.


    PHP-Code:
    if(isset($_POST["Sportart"])){
                if (isset (
    $_POST['Sportart'])=="Fussball"){
                       
    $sp_aus $_POST['Sportart'];
                    
    $sp_id $_POST['SportartID'];

                    
    $eintragen="UPDATE `Account` SET Anm_Sportart = :sp_id";
                    
    $stmt=$db->prepare($eintragen);
                    
    $stmt->bindParam(':pers_id'$sp_ausPDO::PARAM_INT);
                    
    $stmt->bindParam(':$sp_id'$sp_idPDO::PARAM_INT);
                    
    $stmt->execute();

                    if (
    $stmt->execute()) {
                        echo 
    "Sie haben sich erfolgreich für Fußball als Schiedsrichter angemeledet!";
                    } else {
                        echo 
    "<p>Da ist etwas schiefgelaufen!</p>";
                    }  
                }  
            } 
    Vielleicht habe ich auch einen Denkfehler, aber den habe ich dann bereits seid 4 Tagen.



    Vielleicht kann mir ja wer einen Dankanstoß zu einem oder vielleicht beiden Problemen geben.

    Danke im Voraus

  • #2
    1. Es kann sein, dass vor dem Start deiner Session eine Ausgabe erfolgt, dann kann die Session nicht mehr gestartet werden. Wenn dein error_reporting falsch eingestellt ist, bekommst du ggf. keine Warnung. Auf dem Entwicklungssystem sollte das error_reporting immer auf Maximum stehen:

    https://php-de.github.io/jumpto/leitfaden/

    2. Auch hier gilt: Wenn du nicht nach Fehlern fragst, werden dir auch keine angezeigt. Mit PDO kannst du auf dem Entwicklungssystem gernerell immer Exceptions werfen lassen

    https://php-de.github.io/jumpto/pdo/ -> PDO::ERRMODE_EXCEPTION
    [I]You know, my wife sometimes looks at me strangely. „Duncan“, she says, „there's more to life than Solaris“. Frankly, it's like she speaks another language. I mean, the words make sense individually, but put them together and it's complete nonsense.[/I]

    Kommentar


    • #3
      PHP-Code:
      if($_SESSION["login"]=1){} 
      ist eine Zuweisung und kein Vergeleich.

      Kommentar


      • #4
        PHP-Code:
                    echo "Der Login war erfolgreich.<br>";
                    echo 
        $benutzername;
                    echo 
        $passwort;
        [...]
                    
        header("location:website/home.php"); 
        Hier hast du eine Ausgabe vor dem header, das wird zu der beliebten "headers already sent" Meldung führen.
        Über 90% aller Gewaltverbrechen passieren innerhalb von 24 Stunden nach dem Konsum von Brot.

        Kommentar


        • #5
          PHP-Code:
          if(isset($_POST["Sportart"])){
                      if (isset (
          $_POST['Sportart'])=="Fussball"){ 
          zu
          PHP-Code:
          if( isset($_POST["Sportart"]) ){
                      if ( 
          $_POST['Sportart'] == "Fussball" ){ 
          führt zum Erfolg

          Kommentar


          • #6
            Zitat von tomBuilder Beitrag anzeigen
            PHP-Code:
            if($_SESSION["login"]=1){} 
            ist eine Zuweisung und kein Vergeleich.
            Dankeschön, das hab ich voll übersehen.
            Jetzt ist es aber so, dass ich eben vom login auf die home Seite geleitet werde, hier wird mir noch geschrieben dass ich mit dem account angemeldet bin, will ich auf eine andere Seite werde ich auf die login Seite verwiesen (was aber nur erfolgen soll wenn man nicht angemeldet ist) also ist die Session wieder leer.

            Kommentar


            • #7
              Zitat von lstegelitz Beitrag anzeigen

              Hier hast du eine Ausgabe vor dem header, das wird zu der beliebten "headers already sent" Meldung führen.
              danke, stimmt

              Kommentar


              • #8
                Und die Lösung ist generell das EVA-Prinzip sauber einzuhalten: https://php-de.github.io/jumpto/eva-prinzip/
                The string "()()" is not palindrom but the String "())(" is.

                Debugging: Finde DEINE Fehler selbst! | Gegen Probleme beim E-Mail-Versand | Sicheres Passwort-Hashing | Includes niemals ohne __DIR__
                PHP.de Wissenssammlung | Kein Support per PN

                Kommentar


                • #9
                  Zitat von chorn Beitrag anzeigen
                  1. Es kann sein, dass vor dem Start deiner Session eine Ausgabe erfolgt, dann kann die Session nicht mehr gestartet werden. Wenn dein error_reporting falsch eingestellt ist, bekommst du ggf. keine Warnung. Auf dem Entwicklungssystem sollte das error_reporting immer auf Maximum stehen:

                  --> Nun, es steht davor nichts bis auf das
                  PHP-Code:
                  <?php
                  mehr nicht, und Fehlermeldungen werden mir ausgeben.

                  https://php-de.github.io/jumpto/leitfaden/

                  2. Auch hier gilt: Wenn du nicht nach Fehlern fragst, werden dir auch keine angezeigt. Mit PDO kannst du auf dem Entwicklungssystem gernerell immer Exceptions werfen lassen

                  https://php-de.github.io/jumpto/pdo/ -> PDO::ERRMODE_EXCEPTION

                  Kommentar


                  • #10
                    Was willst du uns damit sagen?
                    The string "()()" is not palindrom but the String "())(" is.

                    Debugging: Finde DEINE Fehler selbst! | Gegen Probleme beim E-Mail-Versand | Sicheres Passwort-Hashing | Includes niemals ohne __DIR__
                    PHP.de Wissenssammlung | Kein Support per PN

                    Kommentar


                    • #11
                      Ich fände einen verbesserten und sauber strukturieten Code auch einen besseren Post als nur ein Zitat.

                      Kommentar

                      Lädt...
                      X