Nur Variablen mit Wert eintragen

exzel

SQL-Guru
Beiträge
170
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

 
Werbung:

ukulele

Datenbank-Guru
Beiträge
4.579
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.
 

bieber

Benutzer
Beiträge
16
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
 

ukulele

Datenbank-Guru
Beiträge
4.579
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.
 
Werbung:

exzel

SQL-Guru
Beiträge
170
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
 
Oben