Frage von theplayer95, 76

PHP Daten Updaten?

Hallo, ich habe ein Formular wo jeder Benutzer der auf meiner Seite registriert ist, seine Daten ändern kann z.B. Wohnort. Ich habe jetzt das Problem, wenn jemand seine Daten ändern möchte z.B. Adresse, dass dann alle anderen Felder bei PHP my Admin leer angezeigt werden und nur das geändert wurde wo ich etwas geändert habe. woran liegt das bzw. wie mache ich das am besten das alles stehen bleibt und nur das geändert wird was man ändern möchte?


function bdchange(){
    $firstname = length(isset($_POST['firstname']) ? $_POST['firstname'] : '', 20);
    $lastname = length(isset($_POST['lastname']) ? $_POST['lastname'] : '', 20);
    $street = length(isset($_POST['street']) ? $_POST['street'] : '', 50);
    $zip_code = length(isset($_POST['zip_code']) ? $_POST['zip_code'] : '', 5);
    $city = length(isset($_POST['city']) ? $_POST['city'] : '', 40);
    $pwab = length(isset($_POST['aktpw']) ? $_POST['aktpw'] : '', 30);
    $csrf = length(isset($_POST['csrf']) ? $_POST['csrf'] : '', 32);
    $bdch = length(isset($_POST['bdchange']) ? $_POST['bdchange'] : '', 1);
    $error = '';

if($bdch == 1 && $csrf == $_SESSION['csrfToken']){
    if(userout('password') == pwsalt($pwab)){
        if($firstname != userout('firstname')){
            $change = mysql_query("Update ".DB."_user Set firstname = '$firstname' Where id = '".userout('id')."'");
        }else{
            $error = 'Du kannst nicht den selben Vornamen angeben!';
        }
        if($lastname != userout('lastname')){
            $change = mysql_query("Update ".DB."_user Set lastname = '$lastname' Where id = '".userout('id')."'");
        }else{
            $error = 'Du kannst nicht den selben Nachnamen angeben!';
        }
        if($street != userout('street')){
            $change = mysql_query("Update ".DB."_user Set street = '$street' Where id = '".userout('id')."'");
        }else{
            $error = 'Du kannst nicht die selbe Straße angeben!';
        }
        if(check_plz_de($zip_code) != userout('zip_code')){
            $change = mysql_query("Update ".DB."_user Set zip_code = '$zip_code' Where id = '".userout('id')."'");
        }else{
            $error = 'Du kannst nicht die selbe Postleitzahl angeben!';
        }
        if($city != userout('city')){
            $change = mysql_query("Update ".DB."_user Set city = '$city' Where id = '".userout('id')."'");
        }else{
            $error = 'Du kannst nicht die selbe Stadt angeben!';
        }
    }else{
        $error = 'Falsches Passwort! Versuchen Sie es erneut.';
    }
return sondertext($error);
    }

}
Antwort
von EightSix, 28

Wenn jemand seine Daten ändern möchte stehen überlicherweise die bereits eingetragenen ja schon in den Feldern. Und dann braucht man nach der Validierung einfach alle eintragen - die alten werden mit den neuen überschrieben bzw. ändern sich u.U. gar nicht.

Denke nicht dass deine Anwendung so performancekritisch ist dass das nicht geht.

Kommentar von theplayer95 ,

Okay ich versuche morgen ob es klappt. Du meinst ich soll nur ein query schreiben mit Update?! Aber das eingetragene steht ja im placeholder. Ich vermute das er dann wieder alles löscht wo nix drinnen steht. wie mache ich das denn? Ein bsp.? ich stehe heute echt iwi auf dem Schlauch ^^ Komplexere dinge scheinen mir immer am einfachsten Haha

Kommentar von EightSix ,

Ja das meinte ich.

Um das Problem mit den placeholders zu lösen könntest du für jeden Wert in hidden Feld machen im Formular in dem der ursprüngliche Wert vor der Änderung drin steht.

Im PHP fragst dann ab ob ein Wert eingetragen wurde sonst wird der vom Hidden genommen - quasi eine string Variable pro Feld.

Danach ein query ausführen.

Antwort
von jonashima, 30

Ich bin jetzt nicht so erfahren aber so wie ich das verstehe updatest du jeden Eintrag der nicht gleich dem vorherigen wert ist.
Würde bedeuten dass leere Textfelder, die den Wert "" haben auch aktualisiert werden.
Vielleicht solltest du noch eine fallunterscheidung machen, damit du die leeren Felder nicht aktualisierst

Viel Erfolg

Keine passende Antwort gefunden?

Fragen Sie die Community