mmofacts.com

Mehrfaches Minus -> Kacke!

gepostet vor 18 Jahre, 2 Monate von meisterjoda
Tach zusammen,
ich habe ein großes Problem. Wenn man in meinen Formularen mehrfache Minus eingibt, verpeilt mein Negativ-Check das. Also wenn ich z.B. in die Allianzkasse etwas überweise und dann ---1000 angebe, dann bekomme ich 1000 Einheiten gutgeschrieben. Gebe ich -1000 an, blickt mein Negativ-Check das und bringt ne Fehlermeldung. Woran kann das liegen? Ich bin grade am verzweifeln... Der Check ist eigentlich ganz simpel:
$menge=$_POST["menge"];

if($menge<0) { $menge=0; error=1; }
Muss ich das irgendwie anders überprüfen??
Gruß
meister
gepostet vor 18 Jahre, 2 Monate von Rylor
Ich denke das liegt daran, dass das ganze wie +4 gewertet wird,
da -(-4) = 4.
Warum du dann was gutgeschrieben bekommst wenn du was überweist (hoffe ich habs richtig verstanden) versteh ich allerdings nicht. Es müsste dann theoretisch genau so funktionieren.
Gruß Rylor
gepostet vor 18 Jahre, 2 Monate von meisterjoda
schon klar, dass das als + gewertet wird. nur das problem ist, dass --- als - gewertet wird (was ja korrekt ist), aber in der negativ-abfrage nicht als - erkannt wird.
gepostet vor 18 Jahre, 2 Monate von Aviator
Was hälst du davon, zu prüfen ob etwas anderes als Zahlen eingegeben wird? Dann nur noch einen Button zum Einzahlen, einen zum Auszahlen.
if(eregi('[^0-9]',$_POST["menge"] )) $hinweis = "Bitte Eingaben prüfen!";

Dann kann dich auch keiner ärgern und versuchen Code einzugeben... you never know..
gepostet vor 18 Jahre, 2 Monate von Toby
Wie wärs ganz einfach mit intval?

$menge=intval($_POST["menge"]);
if($menge<0) { $menge=0; error=1; }
Denn ---1000 ist für PHP keine Zahl mehr, sondern ein String. Daher schlägt die Abfrage fehl (String ist größer als 0).
Wenn du ein Int erwartest, sorge dafür, das du einen bekommst.
Wenn du gemein sein willst, baust du noch ein abs ein...
gepostet vor 18 Jahre, 2 Monate von TheUndeadable
Ich würde sowieso IMMER alle Zahlen mit intval aus $_POST bzw $_REQUEST auswerten.
gepostet vor 18 Jahre, 2 Monate von Rylor
Mensch, ich hab grad verkrampft überlegt wie die Funktion für den Betrag ist, aber abs() ist mir irgendwie nicht eingefallen
gepostet vor 18 Jahre, 2 Monate von meisterjoda
die idee mit abs hatte ich auch schon, dann gehen solche versuche nämlich böse nach hinten los
und danke für die anderen tipps!
gepostet vor 18 Jahre, 2 Monate von Tetha
Original von Toby
Wie wärs ganz einfach mit intval?

$menge=intval($_POST["menge"]);
if($menge<0) { $menge=0; error=1; }
Denn ---1000 ist für PHP keine Zahl mehr, sondern ein String. Daher schlägt die Abfrage fehl (String ist größer als 0).
Wenn du ein Int erwartest, sorge dafür, das du einen bekommst.
Wenn du gemein sein willst, baust du noch ein abs ein...

ich hab das grade mal getestet, auch inval('---1') wird zu 0 ausgewertet.
Das Problem ist scheinbar, dass PHP von links nach rechts auswertet und sich nach dem zweiten - sagt, dass das Ding keine vernuenftige Zahl sein kann. Warum das spaeter funktioniert, scheint nur dadurch erklaerbar, dass die Datenbank da dann wieder mit umgehen kann.
Das einzige, was ich grade sehe, waere eine Funktion, die solange iteriert, wie sie zwei - am Anfang matcht und in einer Iteration zwei - am Anfang durch eines ersestzt.
Sowas (das da ist ungetested ):

function trim_negations_from_STRING($string) {
while($string{0} == '-' && $string{1} == '-') {
$string = substr($string, 1);
}
return $string;
}
[/code}
MfG
PS: mein kleiner test ist im Anhang zu finden, wenn mir das wer nicht glaubt.
gepostet vor 18 Jahre, 2 Monate von Drezil
ich nehm da meist immer stumpf

$var = abs($_REQUEST['var']);
wenns nen string ist, wirds 0, sonst bekommste den positiven wert...
Tobys intval() geht auch
gepostet vor 18 Jahre, 2 Monate von Drezil
*aaargh* .. erwischt ..

Auf diese Diskussion antworten