Johann: Ein einfacher Insert

Hallo ,
ich habe meine inserts auf eine mysql DB bisher immer so gemacht

$statement = "INSERT INTO kunde
                                        SET

customer_name = '$username',
                                        customer_nachname = '$nachname',
                                        customer_vorname = '$vorname',
                                        customer_strasse = '$strasse',
                                        customer_hausnummer = '$hausnummer',
                                        customer_postleitzahl = '$plz',
                                        customer_ort = '$ort'";

Da ich verschiedene Eingabeformulare habe und das so viele Felder sind habe ich mich gefragt ob das nicht auch einfacher geht.

Ich bin mir sicher das alle Felder der DB-Tabelle dieselben Namen haben wie die Namen der Insert-felder in Html.
Gibts eine Möglichkeit nicht alle felder im insert extra nochmal aufzuzählen a la customer_strasse = '$strasse',?

mfg

Johann

  1. Halihallo Johann

    Ich bin mir sicher das alle Felder der DB-Tabelle dieselben Namen haben wie die Namen der Insert-felder in Html.

    Die meisten Programmiersprachen unterstützen das Durchlaufen eines assoziativen Arrays.
    Durch eine Schleife über die Parameter kannst du die Einträge "automatisch" in den Query
    einfügen.
    Ich würde es jedoch so machen, dass du alle Felder, die man eingeben kann, in ein
    Array schreibst, über dieses iterierst und die jeweiligen Name=Value Pairs in den Query
    schreibst. So verhinderst du, dass der Benutzer durch Raten auch andere Felder be-
    schreiben kann.

    In PHP (was verwendest du?) gibt es die genannten assoziativen Arrays in den globalen
    Variablen $_POST / $_GET.

    Zudem solltest du register_globals auf on stellen, falls du wirklich PHP verwendest,
    da jede aktuelle Version dies so per default macht.

    Gibts eine Möglichkeit nicht alle felder im insert extra nochmal aufzuzählen a la customer_strasse = '$strasse',?

    Nein.

    Viele Grüsse

    Philipp

    --
    RTFM! - Foren steigern das Aufkommen von Redundanz im Internet, danke für das lesen der Manuals.
    Selbstbedienung! - Das SelfForum ist ein Gratis-Restaurant mit Selbstbedienung, Menüangebot steht in den </faq/> und dem </archiv/>.
    1. Hallo Philipp,

      Zudem solltest du register_globals auf on stellen, falls du wirklich PHP verwendest,
      da jede aktuelle Version dies so per default macht.

      ehh... das ist nicht ganz richtig - register_globals sollte auf _off_ was auch die Standardeinstellung der Versionen ab 4.2(?) ist.

      Grüße aus Nürnberg
      Tobias

      --
      Selfcode: sh:( fo:) ch:? rl:( br:< n4:& ie:% mo:| va:) de:] zu:) fl:( ss:| ls:[ js:|
      1. Halihallo Tobias

        Zudem solltest du register_globals auf on stellen, falls du wirklich PHP verwendest,
        da jede aktuelle Version dies so per default macht.
        ehh... das ist nicht ganz richtig - register_globals sollte auf _off_ was auch die Standardeinstellung der Versionen ab 4.2(?) ist.

        Vergeben soll mir werden die Anstiftung zu kurrios und dümmlichen Konfigurationen, du
        hast natürlich recht.

        Viele Grüsse

        Philipp

        --
        RTFM! - Foren steigern das Aufkommen von Redundanz im Internet, danke für das lesen der Manuals.
        Selbstbedienung! - Das SelfForum ist ein Gratis-Restaurant mit Selbstbedienung, Menüangebot steht in den </faq/> und dem </archiv/>.
  2. Hallo Johann,

    Gibts eine Möglichkeit nicht alle felder im insert extra nochmal aufzuzählen a la customer_strasse = '$strasse',?

    Gibt es IMHO:
    Mit mysql_list_fields() bekommst Du alle Felder einer Tabelle zurück, diese kannst Du dann in einer for-Schleife mit mysql_field_name() in ein Array schreiben.
    z.B.
    for ($i = 0; $i < $columns; $i++)
    {
      $sql_arr[] =  mysql_field_name($fields, $i) . "='$" . mysql_field_name($fields, $i) . "'";
    }

    Mit der Funktion implode kannst Du dann noch zwischen den einzelnen Werten die Kommas einfügen:
    $sql_part = implode( ", ", $sql_arr );

    $statement = "INSERT INTO kunde
    SET" . $sql_part;

    Ist nicht getestet, aber ich denke mal das es so funktionieren könnte?
    Ich hoffe das hilft Dir weiter.

    Gruss AndreD