Top-Themen

Aktuelle Themen (A bis Z)

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit
GELÖST

IF Abfragen

Frage Entwicklung PHP

Mitglied: voipfreak

voipfreak (Level 1) - Jetzt verbinden

26.06.2011, aktualisiert 15:11 Uhr, 3077 Aufrufe, 3 Kommentare

Folgendem Script geht ein php Formular voran indem der Wert Test übergeben wird.

Servus zusammen,

habe folgendes Problem mit einen script dass ich gerade am schreiben bin. Und zwar möchte ich
mehrere IF Vergleiche anstellen die sich wie folgt darstellen:

$test = $_POST["test"]; <------ wird von einer anderen Datei übergeben

if($test =="" )
{
echo "Es wurde kein Wert angegeben";
}
else if($test > "7")
{
echo "Wert ist zu hoch ";
}
else if($test < "6" )
{
echo "Wert ist zu niedrig ";
}
else
{
echo "Wert ist in Ordnung";
}
?>

Klappt auch alles Wunderbar nur wenn ich jetzt anstatt else if($test > "7") :
else if($test > "7,5") praktisch 7,5 als Wert hinterlege funktioniert die Übergabe nur bis 9,9
sobald vom Formular über dass ich die Daten übergebe der Wert 10 übergeben wird schreibt er mir die Antwort zu niedrig.

Wie kann dass denn sein ?

Hoffe das war nicht zu kompliziert !!

Kann mir da jemand helfen ?

Danke für eure Antworten

Gruß voipfreak
Mitglied: Arano
26.06.2011 um 16:06 Uhr
Hallo Voipfreak,

dieses Verhalten ist völlig korrekt :-P
Nur das was du Programmiert hast, entspricht nicht dem was du eigentlich möchtest !
Hä ? Was schreibt der Kerl den da !?

Ist eigentlich ganz einfach:
Es gibt Zahlen, also __numerische__ Werte und
es gibt Zeichen, also __alphanumerische__ Werte

Deswegen gibt es auch zwei Arten der Sortierung:
Wenn man numerisch sortiert:
01.
02.
03.
04.
05.
10 
06.
12 
07.
20 
08.
50
Wenn man alphanumerisch sortiert
01.
02.
10 
03.
12 
04.
05.
20 
06.
07.
50 
08.
7
Deine Werte, sowohl die übergebenen aus dem Formular, als auch die in den Bedingungen selber sind alle __alphanumerisch__ !
Wie du an den Beispielen sehen kannst kommt, bei einem alphanumerischen Vergleich, die 10 __vor__ der 7 - selbst 1000000 kommt __vor__ der 2 !

Du musst als deine Zahlen numerisch vergleichen.
  1. Kommazahlen werden mit einem Punkt geschreiben: 7,5 = 7.5, 9,9 = 9.9
  2. Sobald numerische Werte (z.B. 7.5) in Anführungszeichen stehen, ist es eine Zeichenkette also alphanumerisch.
  3. Werte die von einem Formular übergeben werden sind __immer__ alphanumerisch.

So kommt es auch das deine Vergleiche alle alphanumerisch sind.
Als erstes also erst mal alle Kommas durch Punkte ersetzen: 7,5 = 7.5 und
dann in den Vergleichen die Anführungszeichen um die Zahlen entfernen damit sie numerisch bleiben.

Zu den Eingaben vom Formular schau dir mal das "Type Juggling" an PHP-Manual - Type Juggling (cast)
Du musst also die erhaltene Zeichenkette in einen numerischen Wert umzuwandeln -casten !

Es gibt auch noch PHP-Manual - is_numeric() für den Fall das ein Anwende mal etwas anders als einen numerischen Wert eingibt
"Alle Benutzereingaben sind Böse und sollten entsprechend vorsichtig behandelt werden"


~Arano
Bitte warten ..
Mitglied: voipfreak
26.06.2011 um 16:18 Uhr
Alter Verwalter Danke dir Arano.
Hoffe du hast jetzt keinen Krampf im Finger wegen mir
Habe einfach den Wert 7,5 gegen 7.5 getauscht und siehe da funktioniert !
Dank deiner Beschreibung und dem Link habe ich dass sogar verstanden *gg*

Vielen Dank nochmals und schönen Sonntag noch!

Gruß
Andy
Bitte warten ..
Mitglied: dog
26.06.2011 um 16:27 Uhr
Anders gesagt:

POST-Übergabewerte sind immer Strings und "7,5" ist auch ein String.
Was hier passiert ist kein Zahlenvergleich sondern ein strcmp().
Das hat z.B. den Effekt:
01.
<?php 
02.
  var_dump("10,0" > "7,5"); #=> bool(false) 
03.
?>
Warum?
Weil hier die Buchstaben 1 und 7 verglichen werden und die 1 (entspricht 49) hat einen kleineren Wert als 7 (entspricht 55).

Karsten hilft an der Stelle auch nichts, denn:
01.
<?php 
02.
 
03.
	$a = "7,5"; 
04.
	 
05.
	var_dump((float)$a); #=> float(7) 
06.
 
07.
?>
Da hilft nur die Daten wirklich zu parsen (siehe die Kommentare zu floatval() im Handbuch).

Denn sonst:
01.
<?php 
02.
  var_dump("7,7" < 7.5); #=> bool(true) 
03.
?>
Das Dezimaltrennzeichen beim Programmieren ist immer der Punkt!
Bitte warten ..
Ähnliche Inhalte
Exchange Server
Powershell Archivmailbox abfrage Abfrage
Frage von Clubby84Exchange Server5 Kommentare

Hallo zusammen, möchte gerne eine Ausgabe in eine Datei haben, mit allen Mailboxen, bei denen das Archiv noch nicht ...

Datenbanken
MYSQL Abfrage
gelöst Frage von datadexxDatenbanken20 Kommentare

Halo an alle MySQL Spezialisten! Wie kann ich denn am besten folgende Werte abfragen und berechnen? Ausgang für die ...

Monitoring
Abfrage Netzwerkdruckerstatus
Frage von phil905Monitoring13 Kommentare

Hallo zusammen, ich hoffe Ihr habt einen Lösungsansatz. Ich möchte gerne via Monitoring Terminalserver abfragen welche Netzwerkdrucker verbunden haben, ...

PHP
Abfrage SQL
gelöst Frage von dudeldoedelPHP3 Kommentare

Hallo zusammen, kann man das in einer SQL Abfrage erreichen ??? Feldwert lautet: {"565":{"textinput":{"comment":"1400"}}} als Ergebnis soll ausgelesen werden ...

Neue Wissensbeiträge
Erkennung und -Abwehr

Necur-Botnet soll Erpressungstrojaner Scarab massenhaft verbreiten

Information von BassFishFox vor 8 StundenErkennung und -Abwehr

12,5 Millionen Spam-Mails aus einem Bot-Netz mit 6 Millionen Computern? Eigentlich eine schwache Leistung. Die Erpresser setzen dabei auf ...

Microsoft

Nadeldrucker-Problem unter Windows - Microsoft liefert Updates

Information von BassFishFox vor 8 StundenMicrosoft

Hat ja nicht lange gedauert. Nachdem die November-Updates für Windows 7, 8.1 und 10 zahlreiche Nadeldrucker lahmgelegt hatten, stellt ...

Linux

Limux-Ende in München: Wie ein Linux Projekt unter Ausschluss der Öffentlichkeit zerstört wurde

Information von Frank vor 16 StundenLinux14 Kommentare

Mein persönlicher Kommentar zum Thema "Limux-Ende". Die SPD-Politikerin Anne Hübner hat die Richtung von München ganz klar definiert: "Wir ...

Batch & Shell

Open Object Rexx: Eine mittlerweile fast vergessene Skriptsprache aus dem Mainframebereich

Information von Penny.Cilin vor 1 TagBatch & Shell9 Kommentare

Ich kann mich noch sehr gut an diese Skriptsprache erinnern und nutze diese auch heute ab und an noch. ...

Heiß diskutierte Inhalte
Windows Server
Kann man im KMS nachschauen , wieviele Clients den Key in Anspruch genommen haben
gelöst Frage von rainergugusWindows Server15 Kommentare

Hallo, wir haben einen KMS Windows 10 Key. Dieser ist ja W7 kompatibel. Aber unser Windows 7 Pool registriert ...

Linux
Limux-Ende in München: Wie ein Linux Projekt unter Ausschluss der Öffentlichkeit zerstört wurde
Information von FrankLinux14 Kommentare

Mein persönlicher Kommentar zum Thema "Limux-Ende". Die SPD-Politikerin Anne Hübner hat die Richtung von München ganz klar definiert: "Wir ...

Router & Routing
Zwei Netzwerke erstellen
Frage von bunteblumeRouter & Routing14 Kommentare

Hallo Zusammen, Ich möchte gerne ein backup von einem bestimmten Folder welcher auf dem Server regelmässig synchronisiert wird auf ...

Off Topic
Fachkräftemangel in Deutschland? - Talentschmiede schreibt alle 2 Tage die gleichen Stellen aus
Frage von Penny.CilinOff Topic12 Kommentare

Hallo, haben wir in Deutschland Fachkräftemangel? Die Talentschmiede schreibt gefühlt alle zwei Tage dieselben Stellen aus. Und das schon ...