dedlfix: formular-einträge per schleife in mysql-db ??

Beitrag lesen

echo $begrüßung;

wenn ich das mit INSERT INTO mache, bekomme ich logischerweise in der db für jeden formularwert eine neue db-zeile, in der dann nur ein wert des formulars eingetragen ist. ich könnte es natürlich mit UPDATE umgehen, aber es soll ja tatsächlich EIN neuer eintrag entstehen. muß ich da noch eine variable in der schleife dazwischenschalten, oder wie funktioniert so etwas?

Mit dem EVA-Prinzip. Erst Eingabe, dann Verarbeitung, dann Ausgabe.

hier mein code:
$formular = $_GET['form'];

Immer wieder gern genommen aber jedes Mal unsinnig ist diese Umkopieraktion. $_GET['form'] ist bereits eine Variable, die man überall verwenden kann.

if (is_array ($formular)) {

Wenn du schon prüfst, dann mach es richtig. Prüfe zunächst, ob $_GET['form'] überhaupt existiert, statt einfach lesend darauf zuzugreifen. Ein auf E_ALL gestelltes error_reporting machte dich im Fehlerfall mit einer Hinweismeldung auf diesen unzulässigen Zugriff aufmerksam.

if (isset($_GET['form']) and is_array($_GET['form']))

while (list($name,$wert) = each($formular)) {

Eine zwar funktionierende Form, aber seit es foreach gibt eine veraltete.

foreach ($_GET['form'] as $name => $wert)

mysql_query("INSERT INTO design ($name) VALUES ('$wert')");

INSERT gibt es auch in der Ausführung mit SET feldname=wert, ...
Außerdem ist es nicht sehr clever, seine Abfrage direkt und ungeprüft aus den vom Client gesendeten Werten zusammenzubauen. Zunächst wird eine Liste der erlaubten Felder benötigt:

$allowed_fieldnames = array('feld1', 'feld2', 'feld3'); // muss vor das foreach

Dann prüfen wir die übergebenen Felder gegen diese Liste:

if (!in_array($name, $allowed_fieldnames))

Eigentlich können wir in dem Fall abbrechen. Wenn schon jemand falsche Felder mitsendet sind die Daten der anderen Felder sicher auch nicht gewünscht.

Und nun fehlt noch die Funktion mysql_real_escape_string(), die bestimmte Zeichen in den eingegebenen Werte MySQL-gerecht aufbereitet, und die Zusammensetzung des Statements. Insgesamt sieht das so aus:

if (isset($_GET['form']) and is_array($_GET['form'])) {
  $allowed_fieldnames = array('feld1', 'feld2', 'feld3');

// hier werden die Felder und Werte gesammelt, bevor sie in das Statement eingebaut werden
  $set_values = array();

foreach ($_GET['form'] as $name => $wert) {
    if (!in_array($name, $allowed_fieldnames)) {
      // gegebenenfals abbrechen
    } else {
      $set_values[] = $name . '=' . mysql_real_escape_string($wert);
    }
  }
  if (empty($set_values)) {
    // Fehler, keine gültigen Felder übergeben.
    // Möglicherweise ist auch noch eine Prüfung sinnvoll,
    // die sicherstellt, dass alle Felder enthalten vorhanden sind.
  } else {
    $sql = 'INSERT INTO table SET ' . implode(',', $set_values);
    if (!mysql_query($sql, $connection))
      // MySQL-Fehler ...
  }
}

echo "$verabschiedung $name";