Werte aus Formular in DB eintragen

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Werte aus Formular in DB eintragen

    HiHo,

    Hab da mal ein kleines Porblem mit na Schleife.
    Ich habe ein Frmular das die namen der Input FElder aus der Datenbank holt.

    Da sich diese Werte unter umständen auch ändern, lese ich diese beim Absenden vorher aus der Datenbank aus und lasse dann das Formular in die DB eintragen.
    Leider erstellt er nicht eine Splate in der DB sondern legt für jeden übergebenen Wert eine neue Spalte an. Wie kann ich dies verhindern?

    Quellcode

    1. // Absenden
    2. if ($Core->get(POST, 'send', true))
    3. {
    4. // Name der Inout Felder aus der Datenbank holen
    5. $DB->set_sql('SELECT * FROM ' . BW_FIELD);
    6. $DB->execute();
    7. while ( $row = $DB->fetch_assoc() )
    8. {
    9. $field = explode(',', $row['name']);
    10. foreach ($field as $fi) {
    11. $fields = $row['title'] . ' : ' .$Core->get(POST, $fi);
    12. }
    13. $DB->set_sql("INSERT INTO " . BW_ENTRY . " (`ID`, `bw`, `user_id`) VALUES ('', '$fields', '')");
    14. $DB->execute();
    15. $DB->free();
    16. }
    17. }
    Alles anzeigen
  • Formular signieren

    Hi,
    erläutere uns lieber mal, warum du das überhaupt so kompliziert machst.
    Was genau hast du mit deinem Script vor - warum speicherst du die Daten nicht direkt in die Datenbank?

    Also du hast eine extra Tabelle für jedes Formular in der die erlaubten Spalten gespeichert sind?
    Versucht du sicherzustellen, dass das Formular nicht manipuliert wurde?

    Wenn du sichergehen willst, dass der Benutzer das Formular nicht manipuliert gibts doch auch andere Wege, die du in deine Formular Klasse einbauen kannst.

    Mein Vorschlag: Gib deinem Formular eine Signatur.
    Beim Rendern des Formulars weißt du ja die Felder, die der Benutzer benutzen darf. Ich habs mal in etwa runtergeschrieben:

    Signatur mitschicken

    Quellcode

    1. $secretkey = 'easy-coding';
    2. $erlaubte_spalten = array('optionA', 'optionB', 'signature');
    3. $signature = sha1(sha1($secretkey).serialize($erlaubte_spalten));
    4. echo '<input type="hidden" name="signature" value="'.$signature.'" />';


    Signatur verifzieren

    Quellcode

    1. $signature_erwartet = sha1($secretkey.sha1(array_keys($_POST)));
    2. if($_POST['signature'] != $signature_erwartet) {
    3. throw new Exception('Falsche Signatur.');
    4. }
  • HiHo,

    Nein hier geht es nicht ums manipulieren.
    Ich wiill einfach nur per Webformular neue input felder anlegen die in der datenbank gespeichert werden, so kann ich bequem aus meinem ACP neue input felder hinzufügen oder entfernen.
    Da der name der input felder also nur in der datenbank steht, lese ich diese mit dem script von oben aus, wenn wer auf absenden klickt soll er eben den text aus den Input feldern zusammenfassen und in der datenbank speichern.
    Für jedes absenden ne eigene spalte. Zurzeit legt er nämlich für jeden wert ne neue spalte an.
    dh, bei 6 input feldern legt er nach dem absenden 6 spalten an mit den iinahlt aus den input feldern