Zahlen mit führenden Nullen bei POST

Alles, was PHP betrifft, kann hier besprochen werden.

Zahlen mit führenden Nullen bei POST

Postby Metalmorphosis » 04. October 2006 08:09

Moin!

Ich stehe hier vor einem kleinen Problem. Und zwar habe ich hier ein Skript geschrieben, das, wenn man in einem Eingabefeld eine Rechnungsnummer eingibt, eine E-Mail versendet. Insofern ja auch kein Problem, der Rechnungsversand funzt einwandfrei. Nur ergibt sich bei Rechnungsnummern, die eine führende Null haben, das Problem, daß diese führende Null bei der Übergabe mittels POST einfach abgeschnitten wird. Also aus 046015 wird 46015. Bisher konnte ich das Problem bei Rechnungsnummern mit 2 führenden Nullen so lösen, daß im Skript eine Längenüberprüfung stattfindet, die, wenn die Nummer eine Länge von 4 hat, werden zwei Nullen vorne drangehängt. Das kann ich bei den sechsstelligen mit nur einer führenden Null aber nicht anwenden, da es in der Datenbank auch Rechnungsnummern mit nur 5 Stellen gibt, die keine führende Null haben.

Ich nehme an das liegt daran, daß, wenn eine Zahl eingegeben wird, diese auch tatsächlich als Zahl von PHP behandelt wird (also als Integer). Kann man POST irgendwie mitteilen, daß die Eingabe als String zu behandeln ist? Oder was kann ich als Alternative verwenden, um dieses Problem zu lösen?

Vielen Dank im Voraus...
Metalmorphosis
 
Posts: 36
Joined: 18. May 2006 13:21

Postby Knight1 » 04. October 2006 08:44

Hi Metalmorphosis,
Schau Dir das doch mal an: http://www.php.net/manual/de/ref.var.php

Ich würde sagen dass das hier Dir eventuell helfen könnte: http://www.php.net/manual/de/function.settype.php


Kai aka Knight1
Image
User avatar
Knight1
 
Posts: 310
Joined: 18. October 2003 10:03
Location: Trier
Operating System: Windows 7 Ultimate x64

Postby Metalmorphosis » 04. October 2006 08:58

Danke für die Antwort.

Ich habe die Funktion jetzt so verwendet:
Code: Select all
$vrenum = $_POST['vrenum'];
settype($vrenum, "string");


Leider wird aus 046902 immer noch 46902. Kann es sein, daß es schon als 46902, also ohne führende Null, in die POST-Variable kommt? Das Eingabefeld, wo die Eingabe der Rechnungsnummer erfolgt, sieht so aus:
Code: Select all
<input type="text" size="6" maxlength="6" name="vrenum" value="">
Metalmorphosis
 
Posts: 36
Joined: 18. May 2006 13:21

Postby Knight1 » 04. October 2006 09:20

Metalmorphosis wrote:Danke für die Antwort.

Ich habe die Funktion jetzt so verwendet:
Code: Select all
$vrenum = $_POST['vrenum'];
settype($vrenum, "string");


Leider wird aus 046902 immer noch 46902. Kann es sein, daß es schon als 46902, also ohne führende Null, in die POST-Variable kommt? Das Eingabefeld, wo die Eingabe der Rechnungsnummer erfolgt, sieht so aus:
Code: Select all
<input type="text" size="6" maxlength="6" name="vrenum" value="">



Probiere das doch mal:
Code: Select all
settype($_POST['vrenum'], "string");



Kai aka Knight1
Image
User avatar
Knight1
 
Posts: 310
Joined: 18. October 2003 10:03
Location: Trier
Operating System: Windows 7 Ultimate x64

Postby Metalmorphosis » 04. October 2006 09:30

Ah... vielen Dank! Das funzt! :D

Auf das einfachste kommt man meist nicht... oh, Mann. :lol:
Metalmorphosis
 
Posts: 36
Joined: 18. May 2006 13:21

Postby Wiedmann » 04. October 2006 14:27

Also aus 046015 wird 46015.

settype ist da nur scheinbar richtig. POST/GET-Daten kommen immer als String an. Die führende Null wird in irgendeiner Folgefunktion deines Scripts gelöscht. (wahrscheinlich beutzt du da diese Variable zusammen mit einem Integer.

Bisher konnte ich das Problem bei Rechnungsnummern mit 2 führenden Nullen so lösen, daß im Skript eine Längenüberprüfung stattfindet, die, wenn die Nummer eine Länge von 4 hat, werden zwei Nullen vorne drangehängt.

Dafür gibt es grundsätzlich sprintf().
Wiedmann
AF Moderator
 
Posts: 17102
Joined: 01. February 2004 12:38
Location: Stuttgart / Germany

Postby Metalmorphosis » 04. October 2006 14:47

Wiedmann wrote:
Also aus 046015 wird 46015.

settype ist da nur scheinbar richtig. POST/GET-Daten kommen immer als String an. Die führende Null wird in irgendeiner Folgefunktion deines Scripts gelöscht. (wahrscheinlich beutzt du da diese Variable zusammen mit einem Integer.


Nein, ich hatte $_POST zu Anfang ausgelesen und mittels Echo ausgegeben (zum Test - aber es wird auch innerhalb des Skripts für eine Datenbankabfrage gebraucht). strlen gab auch die Länge zurück, ohne die führende Null. Selbst echo $_POST['vrenum'] gab die Rechnungsnummer ohne führende Null aus. Und geschrieben wird $_POST['vrenum'] im ganzen Skript nicht (bis auf den HTML-Teil), nur ausgelesen. Oder wird der Typ verändert, wenn man nur ausliest?

Welche Funktion, außer Settype, wäre denn besser geeignet dafür?
Metalmorphosis
 
Posts: 36
Joined: 18. May 2006 13:21

Postby Wiedmann » 04. October 2006 15:03

Nein,

Eben.
Ein HTML-Formular sendet immer einen String. Wenn im Formularfeld "046015" drinsteht, wird auch "046015" an PHP übergeben und ist über $_POST/$_GET als "046015" abrufbar.

Wenn du an irgeneiner Stelle dann 46015 hast, dann hat dein Script den $_GET/$_POST Wert verändert oder es stand eh nur 46015 im Formularfeld.

Das ist einfach Fact und da kannst du dich drehn und wenden wie du willst ;-)

Welche Funktion, außer Settype, wäre denn besser geeignet dafür?

Das hab ich dir oben geschrieben.
Wiedmann
AF Moderator
 
Posts: 17102
Joined: 01. February 2004 12:38
Location: Stuttgart / Germany


Return to PHP

Who is online

Users browsing this forum: No registered users and 25 guests