Seltsames Problem mit ereg_replace

worki2k1

Erfahrenes Mitglied
Hallo Leute,

ich bin gerade auf ein sehr seltsames Problem mit der Funktion "ereg_replace" gestoßen. Ich will die Situation mal kurz schildern:

Ich habe ein Formular mit einem normalen Textfeld. Dort kann eine Zahl mit Nachkommastellen eingegeben werden. Also in meinem Beispiel jetzt mal "1,8". Wichtig ist, dass der Benutzer ein Komma eingeben kann! Jetzt kommt das eigentliche Problem.

Der Wert wird richtig übergeben (per Echo überprüft). Jetzt will ich das Komma in einen Punkt ändern um es in einer MySQL-Tabelle in einem Feld mit dem Typ "double" zu speichern. Hab ich mir gedacht ich nehme "ereg_replace" dazu. Hab also folgenden Code.

Erstmal das Formular:
PHP:
<form action="machewas.php" method="post">
...
<input type="text" name="a[name]" />
...
</form>

Jetzt die machewas.php
PHP:
// Werte aus der URL holen. Das funktioniert.

echo $a["name"];   // Gibt zum Beispiel "1,8" aus.

$a["name"] = ereg_replace (",", ".", $a["name"]);

echo $a["name"];   // Gibt dann "1.0" aus.

Auf meinem Localhost geht alles einwandfrei. Der einzige Unterschied zwischen Localhost und Remoteserver ist die PHP Version. Localhost hat 4.3.1 und Remote hat 4.2.3

Ich hab es auch schon mit "str_replace" und "eregi_replace" probiert. Alles das gleiche Problem.

Übrigens die Funktion kann keinen Fehler haben, denn folgendes geht:
PHP:
$a = "1,8";
echo ereg_replace (",", ".", $a);


Hat jemand eine Ahnung was das sein kann? Wäre über ne Antwort doch sehr erfreut.
 
mach doch einfach

PHP:
$a=$name;

$name = eregi_replace (",", ".", "$name");
oder

PHP:
$a=$name;

$name = ereg_replace (",", ".","$name");


so müsste das klappen, wenn ich dich nicht falsch verstanden habe ;)
 
Zuletzt bearbeitet:
Du hast mich schon nicht falsch verstanden. Auf meinem Localhost klappt das ja auch alles super. Nur aufm Webserver bei Puretec geht das nicht.

Folgende Versionen habe ich jetzt probiert und geht nicht:

PHP:
// Version 1

$school_education = (isset ($_POST["school_education"])) ? $_POST["school_education"] : null;
  
  $school_education["abschluss_note"] = ereg_replace (",", ".", $school_education["abschluss_note"]);

// Version 2

$school_education = (isset ($_POST["school_education"])) ? $_POST["school_education"] : null;
  
  $variable = $school_education["abschluss_note"];
  $school_education["abschluss_note"] = ereg_replace (",", ".", $variable);

// Version 3

$school_education = (isset ($_POST["school_education"])) ? $_POST["school_education"] : null;
  
  $variable = $school_education["abschluss_note"];
  $variable = ereg_replace (",", ".", $variable);
  $school_education["abschluss_note"] = $variable;

Wie gesagt wenn ich das genauso mit eregi_replace oder str_replace probiere geht es auch nicht. Das einzige was ich denke, woran es jetzt noch liegen kann, ist, dass bei der Übergabe vom Formular irgendwelche Zeichen mitgeschickt werden, mit denen er nichts anfangen kann.

Aber selbst wenn ich das ganze mit echo oder so ausgebe ist dort nichts ungewöhnliches.

Und wie gesagt ist es mir schleierhaft warum das nur bei Puretec nicht geht.
 
ja hm ich bin auch bei puretec, aber funktionert da alles soweit richtig..an deinem script scheint auch nix falsch zu sein, zumal wenn es auf localhost läuft..ruf doch einfach mal bei puretec an und frag, obs da irgendnen problem gibt...weil bei meinem newsscript wars mal so dass die da am server rumgefummelt hatten und dann traten teilweise fehler auf...sag dene dann aber auch welche version du aufm localhost hast und dass das bei dir auch läuft.
 
Das Blatt hat sich mehr oder weniger gewendet.

Soooo, also ich hab inzwischen rausgefunden, dass es nicht an dem ereg_replace liegt. Es ist mehr oder weniger die Funktion number_format(), die hier nicht ganz richtig mitmacht.
Das erste Argument an diese Funktion ist bekanntlich ein Wert vom Typ "float". Alles schön und gut ... nur habe ich bemerkt, dass folgendes bei Puretec nicht zu funktionieren scheint:
PHP:
$a = "1.8";
echo number_format ($a, 2, ",", ".");

// so gehts :
$a = 1.8;
echo number_format ($a, 2, ",", ".");

Mir liegen die Werte allerdings nur als String vor. Gibts da ne Möglichkeit die in ein Float-Wert umzuwandeln? Folgendes hab ich ohne erfolg probiert:
PHP:
$a = doublevar ($a);
$a = floatvar ($a);
settype ($a, "double");
 
ui damit kenn ich mich leider net so gut aus, ich hoffe da kann dir wer anders helfen, was du aber alternativ versuchen könntest, ist einfach die anführungszeichen im string entfernen lassen.

ich hab auch z.z. viel mit replace zu tun..das könnte gehen..hatte da auch so was ähnliches. oder halt typ ändern, aber das müsste dir hier wer anders sagen.
 
Probier mal, zu Deinem Textfeld-Wert einfach einen Float-Wert zu addieren, also z.B.
PHP:
$a = $a + 0.0;
oder Du schreibst den gewünschten Typ (hier: float) einfach in Klammern vorweg:
PHP:
$a = (float) $a;
Nachzulesen hier.
 
Zuletzt bearbeitet:
@cocoon:

Danke für den Tipp, hab ich getestet, klappt aber auch nicht. :-( ... Ich kanns mir nicht erklären. Bei mir aufm Localhost funktionierts auch, dass ich an die number_format() einen String als Wert übergeben kann.
 
Ansonsten müsste es eigentlich so gehen, wie cocoon gesagt hat, mit Typenumwandlung:
PHP:
$a = "1.8";
echo number_format ((float)$a, 2, ",", ".");

Kannst du mal den Fehler (wenn einer kommt) posten?
 
Zurück