PHP: Nur die Felder auswerten die ausgefüllt sind?

...komplette Frage anzeigen

3 Antworten

Und warum überschreibst (und validierst) du nicht einfach den vorhandenen Datensatz komplett mit den neuen Daten? Auf Performance kommt es doch in dem Fall wirklich nicht an. Der Code würde nur unnötig kompliziert werden.

Antwort bewerten Vielen Dank für Deine Bewertung

Wozu brauchst du so viele IFs? Du kannst ja die Werte einfach überschreiben wenn es sowieso die selben sind. Oder du setzt das SQL Statement dynamisch zusammen je nach dem ob was geändert wurde.

Für jede denkbare Kombination eine Lösung ist natürlich Quatsch. Stell dir vor da kommt ein Feld dazu irgendwann.

Antwort bewerten Vielen Dank für Deine Bewertung
theplayer95 26.05.2016, 19:39

Aber ich möchte ja auch den Preg_match überprüfen. Und wie meinst du das mit Überschreiben? Weil der soll ja nur die Werte ändern die ausgefüllt sind. Wenn ich sage nur das was man ausgefüllt hat Überschreiben dann löscht er das was nicht ausgefüllt wurde und es steht nichts drin.

0
EightSix 26.05.2016, 20:40
@theplayer95

Die Felder die ja nicht geändert wurden sind ja nicht leer. Also überschreibst du einfach den vorhandenen Wert mit dem selben nochmal.

0
Dory1 27.05.2016, 12:18
@theplayer95

Beleg die Felder doch einfach immer mit den alten Werten? Wenn der User daran nichts verändert, wird der alte Wert halt noch mal abgesendet und validiert. Warum so kompliziert?

0

Ich verstehe das Problem nicht.

if ($nameAlt != $nameNeu) {

validiereName();
}
if ($plzAlt != $plzNeu) {
validierePlz();
}
if ($straßeAlt != $straßeNeu) {
validiereStrasse();
}
if ($ortAlt != $ortNeu) {
validiereOrt);
}
if ($hausnrAlt != $hausnrNeu) {
validiereHausnr();
}

Und fertig?!

Antwort bewerten Vielen Dank für Deine Bewertung
theplayer95 30.05.2016, 10:18
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);
}
}

Meinst du das so? Aber das geht nicht...
Wenn ich z.B. nur Nachname ändere dann löscht er alles andere.
1
fluffiknuffi2 30.05.2016, 10:47
@theplayer95

Dein Code ist unnötig aufgebläht! 

1. Das hier

$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);

Kann man auch wie folgt schreiben (nicht gestestet):

$data = array('firstname' => 20, 'lastname' => 20, 'street' => 50, 'zip_code' => 5, 'city' => 40, 'aktpw' => 30, 'csrf' => 32, 'bdchange' => 1)
check(&$data);

Funktion check:

function check($items)
{
  foreach ($items as $name => $length) {
    $items[$name] = length(isset($_POST[$name]) ? $_POST[$name] : '', $length);
  }
}

(Ich würde diese Umbenennungen wie bdchange zu bdch weg lassen.)

Ist dann viel übersichtlicher!

Auch den nachfolgenden Code kann man vermutlich viel kürzer schreiben.

2. Ich verstehe dein Problem nicht. An deiner Stelle würde ich versuchen ein minimalistisches (fiktives) Code-Beispiel zu bauen, dass dein Problem zeigt und nur dein Problem - kein unnötiges Zeug was nichts mit deinem Problem zu tun hat! Vermutlich ist dein Problem sehr einfach zu lösen es hapert nur derzeit an der Kommunikation.

0

Was möchtest Du wissen?