Ankündigung

Einklappen
Keine Ankündigung bisher.

Verbesserungen an den Benutzerkonten!?

Einklappen

Neue Werbung 2019

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

  • Verbesserungen an den Benutzerkonten!?

    Hallo Forum,

    ich arbeite an meinen Benutzer Einstellungen, welche man dann ändern kann.
    Nun habe ich auch ein Script dafür, welches noch einen Fehler [error=sqlerror2] enthält.
    Zudem wollte ich mal frage wie ihr so etwas handhaben würdet, weil momentan muss ich ja noch alle werte überschreiben.

    Script:
    PHP-Code:
    <?php
    session_start
    ();
    if(isset(
    $_POST['settings-submit'])){

        require 
    'dbh.inc.php';

        
    $username $_POST['uid'];
        
    $email $_POST['mail'];
        
    $password $_POST['pwd'];
        
    $confirmpassword $_POST['cpwd'];

        if(!
    filter_var($emailFILTER_VALIDATE_EMAIL)) {
            
    header("Location: ../settings.php?error=invalidmail");
            exit();
        }
        else if(!
    preg_match("/^[\w\- ]*$/"$username)) {
            
    header("Location: ../settings.php?error=invalidusername");
            exit();
        }
        else if(
    $password !== $confirmpassword){
            
    header("Location: ../settings.php?error=passwordcheck");
            exit();
        }
        else {

            
    $sql "SELECT * FROM users WHERE id='" $_SESSION['id'] . "'";
            
    $stmt mysqli_stmt_init($conn);
            if(!
    mysqli_stmt_prepare($stmt$sql)){
                
    header("Location: ../settings.php?error=sqlerror1");
                exit();
            }
            else {
                
    mysqli_stmt_bind_param($stmt"s"$username);
                
    mysqli_stmt_execute($stmt);
                
    mysqli_stmt_store_result($stmt);
                
    $resultCheck mysqli_stmt_num_rows($stmt);
                if(
    $resultCheck 0){
                    
    header("Location: ../settings.php?error=usertaken");
                    exit();
                }
                else {
                    
    $sql "UPDATE users SET (uid, email, pwd) VALUES (?, ?, ?) WHERE id='" $_SESSION['id'] . "'";
                    
    $stmt mysqli_stmt_init($conn);
                    if(!
    mysqli_stmt_prepare($stmt$sql)){
                        
    header("Location: ../settings.php?error=sqlerror2");
                        exit();
                    }
                    else {
                        
    $hashedPwd password_hash($passwordPASSWORD_DEFAULT);

                        
    mysqli_stmt_bind_param($stmt"sss"$username$email$hashedPwd);
                        
    mysqli_stmt_execute($stmt);
                        
    header("Location: logout.inc.php?settings=success");
                        exit();
                    }

                }
            }

        }
        
    mysqli_stmt_close($stmt);
        
    mysqli_close($conn);
    }
    else {
        
    header("Location: ../settings.php");
        exit();
    }

  • #2
    Benutze den Placeholder auch fuer die session id, dann kann das prepare nicht mehr fehlschlagen.

    Kommentar


    • #3
      Zitat von Dormilich Beitrag anzeigen
      Benutze den Placeholder auch fuer die session id, dann kann das prepare nicht mehr fehlschlagen.
      Habe ich gemacht, funktioniert dennoch nicht, wieder
      Code:
      sqlerror2
      , noch eine idee?

      Hier nochmal der Code:
      PHP-Code:
      <?php
      session_start
      ();
      if(isset(
      $_POST['settings-submit'])){

          require 
      'dbh.inc.php';

          
      $username $_POST['uid'];
          
      $email $_POST['mail'];
          
      $password $_POST['pwd'];
          
      $confirmpassword $_POST['cpwd'];

          if(!
      filter_var($emailFILTER_VALIDATE_EMAIL)) {
              
      header("Location: ../settings.php?error=invalidmail");
              exit();
          }
          else if(!
      preg_match("/^[\w\- ]*$/"$username)) {
              
      header("Location: ../settings.php?error=invalidusername");
              exit();
          }
          else if(
      $password !== $confirmpassword){
              
      header("Location: ../settings.php?error=passwordcheck");
              exit();
          }
          else {

              
      $sql "SELECT * FROM users WHERE id=?";
              
      $stmt mysqli_stmt_init($conn);
              if(!
      mysqli_stmt_prepare($stmt$sql)){
                  
      header("Location: ../settings.php?error=sqlerror1");
                  exit();
              }
              else {
                  
      mysqli_stmt_bind_param($stmt"s"$username);
                  
      mysqli_stmt_execute($stmt);
                  
      mysqli_stmt_store_result($stmt);
                  
      $resultCheck mysqli_stmt_num_rows($stmt);
                  if(
      $resultCheck 0){
                      
      header("Location: ../settings.php?error=usertaken");
                      exit();
                  }
                  else {
                      
      $sql "UPDATE users SET (uid, email, pwd) VALUES (?, ?, ?) WHERE id=?";
                      
      $stmt mysqli_stmt_init($conn);
                      if(!
      mysqli_stmt_prepare($stmt$sql)){
                          
      header("Location: ../settings.php?error=sqlerror2");
                          exit();
                      }
                      else {
                          
      $hashedPwd password_hash($passwordPASSWORD_DEFAULT);

                          
      mysqli_stmt_bind_param($stmt"sss"$username$email$hashedPwd);
                          
      mysqli_stmt_execute($stmt);
                          
      header("Location: logout.inc.php?settings=success");
                          exit();
                      }

                  }
              }

          }
          
      mysqli_stmt_close($stmt);
          
      mysqli_close($conn);
      }
      else {
          
      header("Location: ../settings.php");
          exit();
      }

      Kommentar


      • #4
        noch eine idee?
        Frag den Fehler ab und behebe ihn.

        ... und natürlich Code anpassen, du hast jetzt 4 Parameter und nicht 3.

        Kommentar


        • #5
          Reine Ästhetik, aber.
          Für meinen Geschmack nutzt du zu viele Else-Blöcke. An jeder Stelle an der etwas schief läuft brichst du das Script ja eh gleich ab und leitest auf die passende Stelle weiter. Du könntest die If-Blöcke einfach untereinander weg schreiben und dir damit diese Verschachtelung sparen.
          [COLOR=#A9A9A9]Relax, you're doing fine.[/COLOR]
          [URL="http://php.net/"]RTFM[/URL] | [URL="http://php-de.github.io/"]php.de Wissenssammlung[/URL] | [URL="http://use-the-index-luke.com/de"]Datenbankindizes[/URL] | [URL="https://www.php.de/forum/webentwicklung/datenbanken/111631-bild-aus-datenbank-auslesen?p=1209079#post1209079"]Dateien in der DB?[/URL]

          Kommentar


          • #6
            Ich finde ja generell das Sammelsurium an Weiterleitungen ganz befremdlich. Das geht doch alles auch ohne Weiterleitung bei jedem noch so kleinen Furz. Stichwort: Affenformular.

            Kommentar


            • #7
              Zitat von VPh Beitrag anzeigen
              Reine Ästhetik, aber.
              Für meinen Geschmack nutzt du zu viele Else-Blöcke. An jeder Stelle an der etwas schief läuft brichst du das Script ja eh gleich ab und leitest auf die passende Stelle weiter. Du könntest die If-Blöcke einfach untereinander weg schreiben und dir damit diese Verschachtelung sparen.
              Ich finde es eigentlich ganz übersichtlich, aber klar man kann es auch anders machen. Jeder hat da so seine eigene Art wie er das sich formatiert, ich finde es halt so übersichtlicher.

              Kommentar


              • #8
                Zitat von hellbringer Beitrag anzeigen
                Ich finde ja generell das Sammelsurium an Weiterleitungen ganz befremdlich. Das geht doch alles auch ohne Weiterleitung bei jedem noch so kleinen Furz. Stichwort: Affenformular.
                Danke für den Unnötigen Kommentar, lieber einmal zu viel eine rückmeldung bekommen als einmal zu wenig, aber ich werde mich an das Forum eh nicht mehr wenden, hier wird einem eh nur gesagt wie besch***en man ist und dass man das nicht kann.

                Kommentar


                • #9
                  Zitat von Sullaysur Beitrag anzeigen

                  Danke für den Unnötigen Kommentar, lieber einmal zu viel eine rückmeldung bekommen als einmal zu wenig, aber ich werde mich an das Forum eh nicht mehr wenden, hier wird einem eh nur gesagt wie besch***en man ist und dass man das nicht kann.
                  Der Kommentar ist keineswegs unnoetig sondern sinnvoll, da dieses Sammelsurium (wie hellbringer es so schoen formulierte) an Weiterleitungen eher unuebersichtlich und unnoetig ist. Statt der Weiterleitungen einfach ne Fehlermeldung in eine Variable schreiben und am Ende der Pruefung(en) ausgeben (EVA Prinzip beachten, daher sein Hinweis auf das Affenformular!).

                  Wenn du jedoch lieber deinen eigenen (falschen Weg) gehen willst, anstatt auf die Ratschlaege der erfahrenen Profis (die schon Jahre/Jahrzehnte in der Materie drin sind) hier zu hoeren, zeugt einfach nur von Beratungsresistenz!

                  Desweiteren hat nie jemand hier im Forum gesagt das DU beschi**en bist wie du das hier darstellst!

                  Kommentar


                  • #10
                    Zitat von Sullaysur Beitrag anzeigen
                    Zudem wollte ich mal frage wie ihr so etwas handhaben würdet, weil momentan muss ich ja noch alle werte überschreiben.
                    auswerten was geändert wurde, ob dafür ein password check notwendig ist und das ändern.
                    Weil es ja auch sein kann dass man wegen password vergessen das passwd ändert, nur bspw. , macht es sinn, einzelne änderungen am usermodel auszulagern.

                    Ich gebe zu, es hat zeit gebraucht, bis ich ungefähr verstanden habe was das soll, genau weiss ich es noch nicht.
                    keine kommentare im code verbessern die übersichtlichkeit bei solcherart hin und herleitungen sichr.



                    aber gut Dir gefällt es so besser.


                    Kommentar

                    Lädt...
                    X