Profil daten übernehmen mit/ohne überprüfung

erwieder

Neuer Benutzer
Beiträge
3
Hi zusammen.
ich erstelle nach Jahren mal weiter eine Homepage und leier hat sich sehr viel geändert 😅
Das alte sql geht nicht mehr, also dachte ich ich steige mal auf pdo um.

Jetzt zum Problem.
Wenn ich es einzeln ändere (wie es vorher war) klappt alles. Jetzt wollte ich alles in einer datei machen und dabei kommt es zu problemen.

Ich habe die Felder :

1 name (Wird angezeigt und muss immer was stehen)
2 benutzer (Wird angezeigt und muss immer was stehen)
3 email (Wird angezeigt und muss immer was stehen)
emailwiederholen
neues pw
neues pw wiederholen

und den button Speichern mit eingabefeld des aktuellen Passworts.

Ich möchte es gerne so habe, das mann das aktuelle PW immer eingeben muss.
Die anderen Felder nur bei bedarf, bzw. die Felder 1, 2 und 3 muss immer was stehen.

Momentan ist es so, dass wenn ich den Namen ändere und auf speichern drücke geht es nicht da ich alle felder ausfüllen muss. :/

Irgendwie stehe ich momentan auf den Schlauch.

SQL:
if(isset($_GET['save'])) {
    $save = $_GET['save'];
    
    if($save == 'personal_data') {
        $name = trim($_POST['name']);
        $benutzername = trim($_POST['benutzername']);
        $email = trim($_POST['email']);
        $email2 = trim($_POST['email2']);
        $passwortAlt = $_POST['passwortAlt'];
        $passwortNeu = trim($_POST['passwortNeu']);
        $passwortNeu2 = trim($_POST['passwortNeu2']);
        
        if($name == "" || $benutzername == "") {
            $error_msg = "Bitte name- und benutzername ausfüllen.";
        } else {
            $statement = $pdo->prepare("UPDATE users SET name = :name, benutzername = :benutzername, updated_at=NOW() WHERE id = :userid");
            $result = $statement->execute(array('name' => $name, 'benutzername'=> $benutzername, 'userid' => $user['id'] ));
        }    
        
        if($email != $email2) {
            $error_msg = "Die eingegebenen E-Mail-Adressen stimmten nicht überein.";
        } else if(!filter_var($email, FILTER_VALIDATE_EMAIL)) {
            $error_msg = "Bitte eine gültige E-Mail-Adresse eingeben.";
        } else {
            $statement = $pdo->prepare("UPDATE users SET email = :email WHERE id = :userid");
            $result = $statement->execute(array('email' => $email, 'userid' => $user['id'] ));
                
}
        
        
        if($passwortNeu != $passwortNeu2) {
            $error_msg = "Die eingegebenen Passwörter stimmten nicht überein.";
        } else if($passwortNeu == "") {
            $error_msg = "Das Passwort darf nicht leer sein.";
        } else if(!password_verify($passwortAlt, $user['passwort'])) {
            $error_msg = "Bitte korrektes Passwort eingeben.";
        } else {
            $passwort_hash = password_hash($passwortNeu, PASSWORD_DEFAULT);
                
            $statement = $pdo->prepare("UPDATE users SET passwort = :passwort WHERE id = :userid");
            $result = $statement->execute(array('passwort' => $passwort_hash, 'userid' => $user['id'] ));
                
            $success_msg = "Daten erfolgreich gespeichert.";
        }
        
        
        
    } 
    
    
}
 
Zuletzt bearbeitet:
Werbung:
du hast ein reines PHP-Problem und kein SQL-Problem. Du solltest aber vermeiden, zig mal die DB zu bemühen - jedes UPDATE ist aus Sicht der DB teuer. So erzeugt es u.a. bei jedem Update eine Kopie des alten Datensatzes - damit dies in einer Multi-User-Umgebung in schon länger laufenden Transaktionen sichtbar ist. Fasse also all die Conditions zusammen und baue 1 (in Worten: EIN) Update, welches Du dann losballerst.
 
Werbung:
Zurück
Oben