1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies. Weitere Informationen
  2. Willkommen im Forum für alle Datenbanken! Registriere Dich kostenlos und diskutiere über DBs wie Mysql, Oracle, Sql-Server, Postgres, Access uvm
    Information ausblenden

Nur Variablen mit Wert eintragen

Dieses Thema im Forum "MySQL und MariaDB" wurde erstellt von exzel, 19 Juli 2011.

  1. exzel

    exzel Datenbank-Guru

    Hallo zusammen,

    ich habe folgenden INSERT-Anweisung um eine Tabelle mit Werten zu füllen.

    $inserthaushaltsausgaben="INSERT INTO haushaltsausgaben(id_vn, ausgaben, euro) VALUES
    ('{$_SESSION['kundenauswahl']}','{$_POST['haushaltsausgaben']}','{$_POST['beitraghaushaltsausgaben']}'),
    ('{$_SESSION['kundenauswahl']}','{$_POST['autoberufsverkehr']}','{$_POST['beitragautoberufsverkehr']}'),
    ('{$_SESSION['kundenauswahl']}','{$_POST['sonstigezahlungen']}','{$_POST['beitragsonstigezahlungen']}')";

    In der Eingabemaske gibt es drei Auswahllisten und dahinter jeweils ein Textfeld. Nun kann es eben sein, dass eine oder zwei Listen und Felder bei der Eingabe leer bleiben. Angenommen es würde die zweite und dritte Auswahlliste und das jeweils dahinterliegende Textfeld leer bleiben. Die Variablen $_POST['autoberufsverkehr'],$_POST['beitragautoberufsverkehr'] und $_POST['sonstigezahlungen'],$_POST['beitragsonstigezahlungen'] sind somit leer.

    Dann würde trotzdem in der Datenbank für diese leeren Variablen eine neue Zeile gespeichert werden, da die Variable {$_SESSION['kundenauswahl'] die Kunden-ID enthält, die immer gefüllt ist.

    Gibt es eine Möglichkeit nur dann eine neue Zeile zu speichern, wenn wirklich alle Variablen, die darin enthalten sind einen Wert enthalten.

    Gruß und Dank

     
  2. ukulele

    ukulele Datenbank-Guru

    Du kannst bei der Anlage einer Tabelle bestimmen welche Spalten NULL Werte enthalten dürfen. Setzt du die entsprechenden Spalten auf NOT NULL, wird dir deine DB einen Fehler zurück geben wenn nicht alle NOT NULL Spalten auch gefüllt sind. Ich weiss aber nicht genau, ob das das ist, worauf du hinaus willst. In jeder Tabelle werden pro Eintrag (Zeile) immer Werte für alle Spalten gespeichert, NULL wenn ein Wert leer ist. Um das zu vermeiden müsstest du schon mit 3 Tabellen und Schlüsseln arbeiten.
     
  3. bieber

    bieber Benutzer

    du musst vor deinem SQL-Statement einfach die Inhalte der Variablen überprüfen:

    if(isset($1) and $1 != '' and isset($2) and $2 !='' ...){
    //sql ausführen
    }else{
    //nüscht
    }

    Hinweis: dein Code ist anfällig für SQL-Injection und andere angriffsvektoren! du solltest die Eingaben mind. mit mysql_real_escape_string() bearbeiten bevor du sie in die Datenbank schreibst
     
    Walter gefällt das.
  4. ukulele

    ukulele Datenbank-Guru

    Sry aber SQL Injection zu filtern ist nicht Aufgabe von SQL und deine Frage scheint sich auch nicht auf T-SQL Code zu beziehen, sieht mehr aus wie PHP^^
    Meine Lösung legt nur Spalteneigenschaften der Tabelle in der Datenbank fest und wird deinem Frontend eine Fehlermeldung zurück geben, wenn Werte nicht vorhanden sind.
     
  5. exzel

    exzel Datenbank-Guru

    Hallo nochmal,

    danke für den Hinweis mit den SQL-Injections. Ich habe es jetzt auch mit PHP gelöst, da die Lösung mit den Datenbankspalten in meinem Fall nicht passend war.

    Gruß und Dank
     
Die Seite wird geladen...

Diese Seite empfehlen