float variable fommt nur mit vorkommastellen in MySQL-Table
Hanjo
- php
Moin auch,
hier komme ich wieder mal nicht weiter:
$versD = 99.99 ;
$Insert = "INSERT into B_BESTELL (porto) VALUES ('".$versD."')"
if ($insresult = mysql_query("$insert")) .. usw.
In der MySQL-Datei ist das Feld 'Porto' definiert als float(5,2)
Trotzdem steht dort nur die 99 drin.
Wer nimmt mir die Tomaten von den Augen ?
Gruß von der Ostsee
Hanjo
Halihallo Hanjo
$Insert = "INSERT into B_BESTELL (porto) VALUES ('".$versD."')"
a) Zeile ist nicht durch ';' abgeschlossen.
b) Warum alles in doublequotes und die Variable $versD doch mit
String-Concat eingefügt?
c) Warum ist porto klein geschrieben, obwohl du es unten gross
schreibst? - OK, Feldnamen sind caseinsensitiv.
=> $Insert = "INSERT INTO B_BESTELL (Porto) VALUES ('$versD')";
if ($insresult = mysql_query("$insert")) .. usw.
$insert ist vorher gross geschrieben und hier _spielt es eine Rolle_.
Versuche $insert normal auszugeben und es auf syntaktische
Korrektheit zu überprüfen (ist es wirklich das SQL-Statement, dass
du dir ausgedacht hast?)
Eine Fehlerüberprüfung durch mysql_error schaded _nie_. => Baue diese
Fehlerbehandlung ein!
In der MySQL-Datei ist das Feld 'Porto' definiert als float(5,2)
Das ist OK, wenn es denn so definiert ist.
Trotzdem steht dort nur die 99 drin.
Wie liest du es denn aus? - phpMyAdmin, PHP selber, weitere...?
Wer nimmt mir die Tomaten von den Augen ?
Erstmal Fehler beseitigen, denn es sollte funktionieren. Bis auf die
zahlreichen Tippfehler, die ggf. sogar die Ursache sind, kann ich
kein Problem ausmachen.
Viele Grüsse
Philipp
Halihallo Hanjo
=> $Insert = "INSERT INTO B_BESTELL (Porto) VALUES ('$versD')";
Moin auch,
die Tippfehler sind lediglich beim Übertragen hierher eingeflossen, entschuldigung.
Das Script läuft im Prinzip.
Nur eben dieses Detail nicht.
Jetzt heißt der Insert-Befehl (original) nach Deinem obigen Hinweis
$insert = "INSERT INTO B_Bestell (Artikel,Kunde,Anzahl,Bemerkung, eingegeben,inip, Porto) VALUES (1,'".$kdnr."','".$inarray_['Anzahl']."','".$inarray_['Comments']."','".$datum."','".$remote_url."','$versD')";
aber das bringt keine Änderung.
Muß man da noch eine Typ-Konversion machen ?
Wie liest du es denn aus? - phpMyAdmin, PHP selber, weitere...?
Mit MySQL-Front, sowie einem selbstgeschriebnen Windows-Programm.
Gruß von der Ostsee
Hanjo
Halihallo Hanjo
die Tippfehler sind lediglich beim Übertragen hierher eingeflossen, entschuldigung.
Copy&Paste funktioniert nicht nur zuverlässiger, sondern auch
schneller :-)
Jetzt heißt der Insert-Befehl (original) nach Deinem obigen Hinweis
$insert = "INSERT INTO B_Bestell (Artikel,Kunde,Anzahl,Bemerkung, eingegeben,inip, Porto) VALUES (1,'".$kdnr."','".$inarray_['Anzahl']."','".$inarray_['Comments']."','".$datum."','".$remote_url."','$versD')";
Lass dir $insert per echo/print ausgeben. Ist 99.99 dort zu sehen,
oder ist es bereits hier auf 99?
Gibt dir mysql_error nun einen Fehler aus, oder nicht? -> wird Query
ausgeführt, oder Fehler?
Muß man da noch eine Typ-Konversion machen ?
Nein, das übernimmt MySQL für dich.
Wie liest du es denn aus? - phpMyAdmin, PHP selber, weitere...?
Mit MySQL-Front, sowie einem selbstgeschriebnen Windows-Programm.
Na hoffentlich arbeiten diese Programme rechtens.
Überprüfe bitte nochmals genau, ob Porto _wirklich_ FLOAT(5,2) ist,
oder ob du dies nur "glaubst".
mysql> SHOW COLUMNS FROM B_Bestell
Viele Grüsse
Philipp
Moin auch,
wünsche, wohl geruht gehabt zu haben ;-)
Jetzt heißt der Insert-Befehl (original) nach Deinem obigen Hinweis
$insert = "INSERT INTO B_Bestell (Artikel,Kunde,Anzahl,Bemerkung, eingegeben,inip, Porto) VALUES (1,'".$kdnr."','".$inarray_['Anzahl']."','".$inarray_['Comments']."','".$datum."','".$remote_url."','$versD')";Lass dir $insert per echo/print ausgeben. Ist 99.99 dort zu sehen,
oder ist es bereits hier auf 99?
Der Test ergibt:
INSERT INTO B_Bestell (Artikel,Kunde,Anzahl,Bemerkung, eingegeben,inip, Porto) VALUES (1,'44','7','Terst 10','20040106074304','217.227.210.80','99,99')
also wird die 99,99 als String weitergegeben.
Gibt dir mysql_error nun einen Fehler aus, oder nicht? -> wird Query
ausgeführt, oder Fehler?
Wird ausgeführt, keine Fehlermeldung.
Überprüfe bitte nochmals genau, ob Porto _wirklich_ FLOAT(5,2) ist,
oder ob du dies nur "glaubst".mysql> SHOW COLUMNS FROM B_Bestell
float(5,2)
sagt er...
Gruß von der Ostsee
Hanjo
Halihallo Hanjo
Der Test ergibt:
INSERT INTO B_Bestell (Artikel,Kunde,Anzahl,Bemerkung, eingegeben,inip, Porto) VALUES (1,'44','7','Terst 10','20040106074304','217.227.210.80','99,99')also wird die 99,99 als String weitergegeben.
99,99 wird als 99 interpretiert, da die Zahl für MySQL dort aufhört,
wo das erste "nicht-Zahl-Zeichen" kommt (in diesem Fall: ','). Eine
Zahl wird (wie üblich) mit Punkt (.) als Dezimaltrennzeichen
geschrieben.
Damit wird es wohl funktionieren.
Viele Grüsse
Philipp
99,99 wird als 99 interpretiert, da die Zahl für MySQL dort aufhört,
wo das erste "nicht-Zahl-Zeichen" kommt (in diesem Fall: ','). Eine
Zahl wird (wie üblich) mit Punkt (.) als Dezimaltrennzeichen
geschrieben.
Damit wird es wohl funktionieren.
Moin auch,
gut, danke.
Aber wie erreiche ich das ?
Ich gebe oben:
$versD = 99.99;
Also mit '.'
Dann
$insert = "INSERT INTO B_Bestell (Artikel,Kunde,Anzahl,Bemerkung, eingegeben,inip, Porto) VALUES (1,'".$kdnr."','".$inarray_['Anzahl']."','".$inarray_['Comments']."','".$datum."','".$remote_url."','$versD')";
Und da macht er selber einfach die '99,99' draus.
Und wie verhindere ich das ?
Kann es evtl. an dieser Funktion liegen:
---------
function rech_betr($betr)
{
if !(strstr($betr,"."))
$betr .= ".0";
$plen = strlen($betr);
$betr2 = str_pad($betr,$plen + 1,"0");
$varray = array ("." => ",");
$betr3 = strtr($betr2,$varray);
return $betr3;
}
--------
Die wird weiter oben mit rech_betr($versD) aufgerufen.
Sie soll für die nötigen Nachkommastellen sorgen, falls die nicht da sind, damit immer ein 'richtiger' Euro-Betrag rauskommt. Also z.B 2.00 oder 2.50 usw.
Gruß
Hanjo
Kann es evtl. an dieser Funktion liegen:
function rech_betr($betr)
»
Die wird weiter oben mit rech_betr($versD) aufgerufen.
Der Versuch mit diesem Konstrukt:
$VersandD = $versD;
echo rech_betr($VersandD)
half allerdings auch nicht.
Ratlos
Hanjo
Halihallo Hanjo
Und da macht er selber einfach die '99,99' draus.
Natürlich, einfach so... Klar...
Und wie verhindere ich das ?
Kann es evtl. an dieser Funktion liegen:
100% sogar. Hast du wenigstens _einmal_ in der Dokumentation
nachgesehen? - Oder muss man dir alles auf dem Silbertablett
vorhalten, dass du es siehst. Lies die Dokumentation zum Befehl strtr
und beantworte bzw. löse deine Frage und Problem selber. Du kannst es
nähmlich.
Die wird weiter oben mit rech_betr($versD) aufgerufen.
Sie soll für die nötigen Nachkommastellen sorgen, falls die nicht da sind, damit immer ein 'richtiger' Euro-Betrag rauskommt. Also z.B 2.00 oder 2.50 usw.
Eben nicht 2.00 oder 2.50, sondern 2,00 oder 2,50. Die wichtigste
Eigenschaft eines Wissenschaftlers ist es, genau zu beobachten. Ein
Programmierer ist ein Wissenschaftler (definiere ich jetzt einfach
mal).
Viele Grüsse
Philipp
Halihallo Hanjo
Und da macht er selber einfach die '99,99' draus.
Natürlich, einfach so... Klar...
Und wie verhindere ich das ?
Kann es evtl. an dieser Funktion liegen:100% sogar.
Moin Philipp,
'zuweilen schläft selbst Homer'.
Nein, es liegt 100 % _nicht_ ann der Funktion (ausprobiert!!)
Es liegt an der dazwischenliegenden Zeile, die ich standardmäßig vor dem Öffnen einer Datenbank aufrufe:
setlocale (LC_ALL, 'de_DE@euro', 'de_DE', 'de', 'ge');
Laß ich die weg, dann funktionierts.
Auch _mit_ der Funktion...
Gruß von der Ostsee
(und vom 'Wissenschaftler' ;-))
Hanjo
Halihallo Hanjo
Es liegt an der dazwischenliegenden Zeile, die ich standardmäßig vor dem Öffnen einer Datenbank aufrufe:
setlocale (LC_ALL, 'de_DE@euro', 'de_DE', 'de', 'ge');
Nun ja, die locale zu ändern hat darauf natürlich bösen Einfluss,
zumal du nur die locale von PHP, nicht jedoch die locale der
Datenbank änderst => Die Datenbank erwartet noch immer eine Zahl,
die nach "Standard-Englisher-Syntax" geschrieben steht.
(und vom 'Wissenschaftler' ;-))
Siehst'e, du kannst es :-)
Viele Grüsse
Philipp