SELFPHP: Version 5.8.2 Befehlsreferenz - Tutorial – Kochbuch – Forum für PHP Einsteiger und professionelle Entwickler

SELFPHP


Professional CronJob-Service

Suche



CronJob-Service    
bei SELFPHP mit ...



 + minütlichen Aufrufen
 + eigenem Crontab Eintrag
 + unbegrenzten CronJobs
 + Statistiken
 + Beispielaufrufen
 + Control-Bereich

Führen Sie mit den CronJobs von SELFPHP zeitgesteuert Programme auf Ihrem Server aus. Weitere Infos



:: Buchempfehlung ::

PHP 5.3 & MySQL 5.1

PHP 5.3 & MySQL 5.1 zur Buchempfehlung
 

:: Anbieterverzeichnis ::

Globale Branchen

Informieren Sie sich über ausgewählte Unternehmen im Anbieterverzeichnis von SELFPHP  

 

:: Newsletter ::

Abonnieren Sie hier den kostenlosen SELFPHP Newsletter!

Vorname: 
Name:
E-Mail:
 
 

Zurück   PHP Forum > SELFPHP > PHP für Fortgeschrittene und Experten

PHP für Fortgeschrittene und Experten Fortgeschrittene und Experten können hier über ihre Probleme und Bedenken talken

Antwort
 
Themen-Optionen Ansicht
  #1  
Alt 21.07.2010, 15:00:53
Der-Dennis Der-Dennis ist offline
Anfänger
 
Registriert seit: Jul 2010
Alter: 37
Beiträge: 29
PHP / PDO / MySQL: Beim Datentyp float wird ein Komma statt einem Punkt ausgegeben

Hallo zusammen,

nachdem wir den Server gewechselt haben tritt bei uns ein recht merkwürdiges Problem auf.

In einer MySQL-Tabelle stehen einige float-Werte, die dort auch wie gewohnt einen Punkt als Trennzeichen enthalten.

Fragen wir jetzt (mit oder ohne PDO) Werte aus dieser Tabelle ab, so werden sie mit einem Komma statt mit einem Punkt versehen ausgeliefert. Also beispielsweise 0,3 statt 0.3.

PHP rechnet allerdings bekanntlich float-Werte nur mit einem Punkt als Trennzeichen.

Eine Lösung für dieses Problem ist:
$var = (float) str_replace(',', '.', $var);

Allerdings kann es ja nicht Sinn der Sache sein, alle Werte vorher so zu verändern. Zumal dieses Problem noch nie aufgetreten ist und meine Internet-Recherchen nichts zutage gefördert haben.

Deshalb meine Frage: Hat schon einmal jemand ein vergleichbares Problem gehabt? Oder eine Idee, woran das liegen könnte?

Eine Idee war, dass es sich um PHP-Locale-Einstellungen handeln könnte. localeconv() gibt allerdings auf beiden Servern exakt das gleiche Ergebnis aus.

Danke für Eure Hilfe!

Gruß, Dennis
Mit Zitat antworten
  #2  
Alt 21.07.2010, 23:20:13
DokuLeseHemmung DokuLeseHemmung ist offline
SELFPHP Experte
 
Registriert seit: Jun 2008
Alter: 15
Beiträge: 2.269
AW: PHP / PDO / MySQL: Beim Datentyp float wird ein Komma statt einem Punkt ausgegebe

Zitat:
PHP rechnet allerdings bekanntlich float-Werte nur mit einem Punkt als Trennzeichen.
Intern ja!
Aber bei der Ausgabe kann es durchaus mit Komma sein!

PHP-Code:
<?php
error_reporting
(-1);
ini_set('display_errors'TRUE);
setlocale(LC_ALL,'de_DE@euro''de_DE',  'de''ge');
date_default_timezone_set('Europe/Berlin');
 

echo 
3.77// sagt bei mir: 3,77

?>
Mit Zitat antworten
  #3  
Alt 22.07.2010, 00:07:32
Der-Dennis Der-Dennis ist offline
Anfänger
 
Registriert seit: Jul 2010
Alter: 37
Beiträge: 29
AW: PHP / PDO / MySQL: Beim Datentyp float wird ein Komma statt einem Punkt ausgegebe

Hallo DokuLeseHemmung,

danke für Deine Antwort.

Bei der Ausgabe ist dies auch nicht weiter schlimm - sogar gewünscht. Das Problem besteht nur darin, dass bereits die MySQL SELECT-Abfrage eine Zahl mit Komma liefert, mit der man so nicht rechnen kann.

Also würde die Abfrage

SELECT wert FROM tabelle

bereits 3,77 statt 3.77 ergeben, wie man dem var_dump() entnehmen kann.

Gruß, Dennis
Mit Zitat antworten
  #4  
Alt 22.07.2010, 05:34:29
DokuLeseHemmung DokuLeseHemmung ist offline
SELFPHP Experte
 
Registriert seit: Jun 2008
Alter: 15
Beiträge: 2.269
AW: PHP / PDO / MySQL: Beim Datentyp float wird ein Komma statt einem Punkt ausgegebe

Zitat:
wie man dem var_dump() entnehmen kann.
Aha!
(sehe ich leider nicht)
Mit Zitat antworten
  #5  
Alt 22.07.2010, 11:50:22
Der-Dennis Der-Dennis ist offline
Anfänger
 
Registriert seit: Jul 2010
Alter: 37
Beiträge: 29
AW: PHP / PDO / MySQL: Beim Datentyp float wird ein Komma statt einem Punkt ausgegebe

Sorry, dachte das wäre meinem ersten Post zu entnehmen gewesen.

Der var_dump liefert aber auf jeden Fall so etwas wie string(3) => "0,3"

Gruß, Dennis
Mit Zitat antworten
  #6  
Alt 22.07.2010, 12:29:10
cortex cortex ist offline
SELFPHP Profi
 
Registriert seit: Apr 2008
Alter: 48
Beiträge: 1.938
AW: PHP / PDO / MySQL: Beim Datentyp float wird ein Komma statt einem Punkt ausgegebe

lieber Der-Dennis, was soll das hier: crossposting ?

ist es denn so schwer zu verstehen, dass es antisozial ist, (ehrenamtliche) helfer in unterschiedlichen foren gleichzeitig zu beschäftigen? wenn man nach tagen keine lösung für ein problem findet, ist ein erneutes posten in einem anderen forum sicher ein legitimer schritt. aber (nahezu) gleichzeitig?

wenn du so dringend support benötigst und nicht warten kannst, solltest du nicht in den selbsthilfe-foren dieser welt nachfragen, sondern profis (gegen cash) beauftragen.

der einzige grund, den thread nicht sofort zu schliessen, ist die (aus meiner perspektive) interessante thematik...

cx
Mit Zitat antworten
  #7  
Alt 22.07.2010, 13:38:05
Der-Dennis Der-Dennis ist offline
Anfänger
 
Registriert seit: Jul 2010
Alter: 37
Beiträge: 29
AW: PHP / PDO / MySQL: Beim Datentyp float wird ein Komma statt einem Punkt ausgegebe

Sorry, ich weiß, dass das blöd ist. Den Beitrag findest Du übrigens auch bei SelfHTML.org.

Ich wollte den zuerst bei SelfHTML.org einstellen, hab mich aber erst bei SelfHTML.de angemeldet und das nicht gecheckt. Erst später hab ich gemerkt, dass ich auf der falschen Seite bin...

Und anschließend hab ich mich gefragt, warum ich das dann eigentlich bei SelfHTML.org gepostet hab, wo es doch auch das spezialisiertere SelfPHP gibt und hab mich hier angemeldet.

Es wird nicht wieder vorkommen, seht es bitte als eine zugegeben blöde Ausnahme eines Neulings in diesen Foren.

Gruß, Dennis
Mit Zitat antworten
  #8  
Alt 22.07.2010, 13:41:24
Der-Dennis Der-Dennis ist offline
Anfänger
 
Registriert seit: Jul 2010
Alter: 37
Beiträge: 29
AW: PHP / PDO / MySQL: Beim Datentyp float wird ein Komma statt einem Punkt ausgegebe

Zitat:
Zitat von cortex Beitrag anzeigen
wenn du so dringend support benötigst und nicht warten kannst, solltest du nicht in den selbsthilfe-foren dieser welt nachfragen, sondern profis (gegen cash) beauftragen.
Hierzu noch ganz kurz: Da sind bereits Profis (oder welche, die es zumindest sein sollten, nämlich das Rechenzentrum meiner Uni) dran, die aber zur Zeit auch keinen wirklichen Rat haben. Deshalb vertraue ich auf die Netzgemeinde :-)

Gruß, Dennis
Mit Zitat antworten
  #9  
Alt 22.07.2010, 19:22:40
Der-Dennis Der-Dennis ist offline
Anfänger
 
Registriert seit: Jul 2010
Alter: 37
Beiträge: 29
AW: PHP / PDO / MySQL: Beim Datentyp float wird ein Komma statt einem Punkt ausgegebe

Wir haben das Problem soweit behoben.

In dem Projekt wurde in einer Datei

PHP-Code:
<?php

setlocale
(LC_ALL, array('de_DE.UTF-8''deu_deu.65001'));
aufgerufen, was anscheinend das Problem auslöst. Eine Änderung auf

PHP-Code:
<?php

setlocale
(LC_ALL'en_US.UTF-8');
brachte keinen Erfolg, dafür aber die Änderung auf

PHP-Code:
<?php

setlocale
(LC_ALL'en_US.8859-1');
Warum auch immer das der Fall ist.

Insgesamt ist es nun so, dass der Großteil der Server die setlocale()-Deklaration einfach ignoriert, was bei unseren vorherigen Servern wohl auch der Fall war. Höchstwahrscheinlich sind bestimmte Server- oder php.ini-Einstellungen dafür verantwortlich, die wir aber noch nicht näher bestimmen konnten. Hat jemand eine Idee hierzu?

Deshalb konnten wir das Problem auch so schlecht finden. Wie gesagt, vorher lief alles super, erst beim Umzug fiel das Problem auf. Denn eigentlich übernimmt unsere View die Aufgabe, die Ausgabe bezüglich der länderspezifischen Einstellungen zu ändern. Hier stand also im "Modus deutsch" immer ein Komma statt einem Punkt, obwohl PHP mit englischen Fließkommazahlen gerechnet hatte.

Eine große Frage bleibt jedoch noch im Raum: Warum sind die Locale-Einstellungen augenscheinlich das Problem, dass PHP mit diesen Werten nicht mehr rechnen kann? Warum werden diese bereits beim Auslesen aus der Datenbank genutzt und nicht erst, wenn Werte ausgegeben werden? Denn sollte sich dies bestätigen, wären sie doch vollkommener Unsinn. Warum sollte ich die Einstellungen benutzen, wenn ich die Werte zwischendurch wieder in das englische System übertragen muss, um sie anschließend wieder für die Ausgabe zu ändern!?

Wenn noch jemand Ideen hierzu hat, würde ich mich sehr freuen, von Euch zu hören.

Gruß, Dennis
Mit Zitat antworten
  #10  
Alt 22.07.2010, 19:52:01
cortex cortex ist offline
SELFPHP Profi
 
Registriert seit: Apr 2008
Alter: 48
Beiträge: 1.938
AW: PHP / PDO / MySQL: Beim Datentyp float wird ein Komma statt einem Punkt ausgegebe

Zitat:
Zitat von Der-Dennis Beitrag anzeigen
Insgesamt ist es nun so, dass der Großteil der Server die setlocale()-Deklaration einfach ignoriert, was bei unseren vorherigen Servern wohl auch der Fall war. [...] Hat jemand eine Idee hierzu?
ich persönlich habe mit setlocale nach zahlreichen tests in der vergangenheit vorerst abgeschlossen. im entsprechenden kapitel des handbuchs ist darüber hinaus vermerkt:

Zitat:
Die Locale-Informationen wirken auf den Prozess, nicht auf den Thread. Sofern Sie PHP mit einer Multithreaded Server API wie IIS oder Apache unter Windows einsetzen, rechnen Sie mit unerwarteten Änderungen der Locale-Einstellungen zur Laufzeit des Skripts, auch wenn das Skript selbst keinen setlocale()-Aufruf durchführt. Dies passiert, da andere Skripte in verschiedenen Threads des selben Prozesses zur selben Zeit prozessweit die Locale-Einstellungen mittels setlocale() ändern.
imho ein krasses ding.

Zitat:
Zitat von Der-Dennis Beitrag anzeigen
Eine große Frage bleibt jedoch noch im Raum [...]
setlocale ist ein systemisches setting:

Zitat:
Eine Locale ist ein Einstellungssatz, der die Gebietsschemaparameter für Computerprogramme enthält. Dazu gehören in erster Linie die Sprache der Benutzeroberfläche, das Land und Einstellungen zum Zeichensatz, Tastaturlayout, Zahlen-, Währungs-, Datums- und Zeitformaten.
quelle: locale in der wikipedia.

cx
Mit Zitat antworten
Antwort


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 
Themen-Optionen
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind aus.
[IMG] Code ist aus.
HTML-Code ist aus.

Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
IExplorer <-> Firefox + CSS rsciw HTML, CSS und JavaScript Help! 10 25.09.2006 17:06:34
Mysql eingave sprict php / ODBC Treiber Problem bei Access tak47 MySQLi/PDO/(MySQL) 0 28.08.2006 14:00:19
installationspfade (php & mysql) jan99 PHP Grundlagen 24 16.06.2006 10:37:31
PHP -> MYSQL läuft nicht richtig jeyare PHP Grundlagen 8 03.08.2002 16:54:55
PHP Server unter Windows mit DBM oder MySQL PartyHammerPipe PHP für Fortgeschrittene und Experten 0 19.02.2002 23:51:44


Alle Zeitangaben in WEZ +2. Es ist jetzt 12:05:34 Uhr.


Powered by vBulletin® Version 3.8.3 (Deutsch)
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.


© 2001-2024 E-Mail SELFPHP OHG, info@selfphp.deImpressumKontakt