MH: MYSQL Update wenn leer ansonsten insert

Beitrag lesen

Moin,
ich hab mal wieder ein Problem...
Und zwar hab ich eine DB in der man über ein Formular Daten eintragen kann (was ein wunder ;)). Man muss allerdings nicht jedes Feld ausfüllen, sondern kann auch welche frei lassen. Die Daten sollen dann in die DB geschrieben werden. Nun will ich das so machen, dass falls in einer Zeile in der Spalte noch eine leere Zelle ist, der Eintrag dann da rein geschrieben wird. Sollte es keine leere Zelle mehr geben, soll eine neue Zeile erstellt werden.
Also quasi, wenn eine leere Zelle existiert dann UPDATE ansonsten INSERT INTO.

Ich hab das jetzt schon mal so ausprobiert, dass erst geprüft wird ob es eine leere Zelle gibt. Wenn ja wird die mit Update befüllt ansonsten wird ein INSERT INTO ausgeführt. Leider hat das nicht so geklappt wie es sollte, denn z.T. hat der einfach eine neue Zeile begonnen obwohl noch eine Zelle frei war.

Hat jmd eine Idee wie das funktionieren könnte, oder was an meine Code falsch ist?

// Das ist jetzt mein Test-Script. Am Ende wir das Array $_POST sein.
$names= array(
  'Matthias' => 'test',
  'Judith' => 'test2',
  'Markus' => 'test3',
  'Annelene' => 'test4',
  'Michael' => 'test5',
  'Peter' => 'test6',
  'Susanne' => 'test7',
  'Janne' => 'test8',
  'Lasse' => 'test9',
  'Maya' => 'test10'
);

// Für jeden Eintrag im Array wiederholen
foreach ($names as $key => $value) {
	// Abfrage ob eine Zelle leer
  $query = sprintf(
    "SELECT *
    FROM `names`
    WHERE `%s` = ''",
    $mysqli->real_escape_string($key)
  );
  $abf = $mysqli->query($query);
  $row = $abf->fetch_array(MYSQLI_ASSOC);
	// Wenn anzahl der zurückgegebene Zeilen größer 1 ist
  if ($abf->num_rows > 1) {
		// Tabelle Updaten und neuen Eintrag einsetzten wo Zelle leer
    $query2 = sprintf(
      "UPDATE `names`
      SET `%s` = '%s'
      WHERE `%s` = '' AND `id` = '%s'",
      $mysqli->real_escape_string($key),
      $mysqli->real_escape_string($value),
      $mysqli->real_escape_string($key),
      $mysqli->real_escape_string($row['id'])
    );
    $mysqli->query($query2);
  } else {
		// Neue Zeile erstellen
    $query2 = sprintf(
      "INSERT INTO `names` (`%s`)
      VALUES ('%s')",
      $mysqli->real_escape_string($key),
      $mysqli->real_escape_string($value)
    );
    $mysqli->query($query2);
  }
}

Danke schon mal,
MH