Seite 1 von 1

Wie finde ich einen leeren Datensatz heraus (MySQL) ?

Verfasst: 16.05.2007 17:06
von Dickus
Hallo,

habe eine kleine Webanwendung gebastelt, in der man Dienstleistungen
eingeben kann. Diese werden dann per PHP und MySQL in eine DB
geschrieben.
Es gibt u.a. eine Tabelle, die lediglich die Mwst und die Umst beinhaltet.
Als Primärschlüssel dient dort eine ID (i.d.R. hat die den Wert 1).

Man muss sich das nun so vorstellen:
Es wird eine Dienstleistung per Name eingegeben.
Z.B.: Füße waschen.
Dann wird der Berechnungspreis eingegeben.
Aber hier kann bei der Eingabe der Preis als Brutto oder Netto markiert werden.

Bei der Rechnungserstellung wird der DB-Preis ausgelesen und
falls bei der Dienstleistung netto eingegeben wurde, werden dann
noch 19% (ist ja gerade aktuell) hinzuaddiert.

Ist ja bis hier kein Problem, aber das geht ja nur dann, wenn in der
Tabelle (nennen wir sie 'steuern') auch tatsächlich ein Wert eingetragen
wurde.
Und genau das ist das Problem.
Ich möchte nicht, dass standardmäßig der Wert von 19% in der DB
steht. Der Dienstleistungsanbieter soll die entsprechenden Steuersätze
selber eingeben. (Das funktioniert auch schon!)

Sobald die Weboberfläche gestartet wird, werden alle benötigten
Tabellen erstellt. Auch die Tabelle 'steuern'.
Dort steht aber noch nichts drin.

Wie kann ich abfragen, ob die Steuersätze schon eingetragen wurden oder nicht?
Ich möchte nämlich, dass der Dienstleistungsanbieter dann einen
entsprechenden Hinweis bekommt.

Meine bisherigen Bemühungen gingen in folgende Richtung:

Code: Alles auswählen

$steuertest_mwst = mysql_query("SELECT mwst FROM steuern");
if($steuertest_mwst == " ")
{
	echo "Sie haben noch keine Steuersätze eingetragen !";
}
else
{
	echo "OK, Steuersätze vorhanden.";
}
Mit ==" " bekomme ich aber nicht das gewünschte Resultat.
Weiss jemand Rat?

Danke
Dickus

Verfasst: 16.05.2007 17:14
von Balint
Hallo!

Eigentlich ein PHP und kein MySQL-Problem.

Schau mal hier: http://www.php-faq.de/q/q-variable-testen.html

Es geht vornehmlich darum, daß Du mit einem Leerzeichen " " vergleichst, aber der Datensatz leer ist. Leerzeichen != leer.

Solch grundlegendes Wissen am Besten mit einem PHP-Buch aneignen (z.B. http://www.galileocomputing.de/openbook/php4/ )


Viele Grüße,
Bálint

Verfasst: 16.05.2007 17:41
von Dickus
Alles klaro,
Problem gelöst.

Danke
Dickus

Verfasst: 16.05.2007 17:44
von gn#36
Der von dir dargestellte Code funktioniert so nicht, da die Funktionsweise der Abfrage vielleicht ein wenig anders funktioniert als du denkst.
Der Befehl mysql_query('xyz') tut nichts anderes als die Abfrage auszuführen. Allerdings auch nicht mehr, denn der Rückgabewert ist lediglich eine Art ID mit der das Query und damit die dazugehörigen Ergebnisse identifiziert werden können.
Diese ID kannst du dann mit anderen Funktionen zusammen verwenden, um die Ergebnisdatensätze durchzugehen. Die ID wird false wenn das Query fehlgeschlagen ist, z.b. durch einen Syntaxfehler, daher kannst du z.b. durch diesen Code herausfinden ob das Query geklappt hat:

Code: Alles auswählen

$result = mysql_query($sql) or die('Fehlgeschlagen');
In $sql muss dann natürlich das Query stehen. Das trifft aber noch keine Aussage darüber ob tatsächlich Daten den Kriterien entsprechen (oder in der Tabelle enthalten sind).
Ob dein Abruf tatsächlich Daten zurückliefert kannst du feststellen mit mysql_num_rows($result); Das liefert die Anzahl der Datensätze die das Query zurückgibt. Wenn es keine Daten gibt, dann ist dieser Wert natürlich 0. Die Daten selbst bekommst du mit mysql_fetch_assoc($result), wobei du hier immer genau eine Reihe als assoziatives Array bekommst (also ein Array, wo die enthaltenen Elemente die Spaltenüberschriften als Namen tragen). Bei jeder Abfrage erhältst du immer das nächste Element in der Liste, bist du am Ende angekommen wird false zurückgegeben. Das kannst du z.b. in einer Schleife nutzen die automatisch abbricht, wenn keine Daten mehr kommen:

Code: Alles auswählen

while($row = mysql_fetch_assoc($result))
{
//Code
}
Dein Ansatz hat - abgesehen von diesen technischen Dingen auch einen logischen Fehler denke ich: Wenn du einen speziellen Steuersatz abfragen willst der sich ja je nach Produkt unterscheiden kann, dann musst du diesen ja auch fest bestimmen und nicht alle Steuersätze der Tabelle auslesen, das bringt dir nichts. Wenn du prüfen willst ob du den Steuersatz neu eintragen musst dann kannst du ja in der Spalte mit dem Zahlenwert direkt danach suchen lassen (per Query) und dir die ID zurückliefern lassen die sich im Erfolgsfall ergibt:

Code: Alles auswählen

SELECT id FROM steuern WHERE steuersatz = 19
Diese ID kannst du dann dem Produkt zuordnen und wenn du das Produkt auslesen willst kannst du dann per JOIN das ganze verknüpfen über die ID. Existiert kein Datensatz (mysql_num_rows($result) == 0) dann kannst du ihn ja neu anlegen (INSERT). Allerdings verstehe ich nicht warum du überhaupt eine eigene Tabelle für die Mehrwertsteuer anlegen willst, vermutlich braucht es weniger Platz, wenn du die Werte direkt zusammen mit den Produkten speicherst, schließlich musst du sonst ja zu jedem Produkt die ID der Steuer speichern. Sinnvoll ist das natürlich trotzdem wenn da noch weitere Infos in der Tabelle sind, aber nur zwei Spalten die noch dazu beides Zahlen sind verursachen nur zusätzlichen Datenwust.