Umwandlung in integer WERT
Mumma
- php
0 Gunnar Bittersmann
0 Gunnar Bittersmann
0 Multi0 Der Martin
0 Multi
0 Tom1 Vinzenz Mai
Aus meinem Formular kommt der WERT mittels $_POST['eingabe']
$neu = settype ($_POST['eingabe'], 'integer' );
jetzt ist es ein INTEGER, doch wenn nichts drin war in der VARIABLE ist trotzdem eine 1 drin, es sollte aber eine 0 drin sein. Wie bekomme ich also die 0 darein?
Oder, wäre das eigentlich nicht dasselber:
if ($_POST['eingabe']>0) $neu = $_POST['eingabe'];
@@Mumma:
nuqneH
if ($_POST['eingabe']>0) $neu = $_POST['eingabe'];
Sechs, setzen.
Qapla'
@@Gunnar Bittersmann:
nuqneH
if ($_POST['eingabe']>0) $neu = $_POST['eingabe'];
Sechs, setzen.
Hm, warum hab ich da echo
gelesen, wo gar kein echo
dastand?
Das Umkopieren von $_POST['eingabe']
in eine Variable $neu
erscheint mir aber nicht sinnvoll.
Qapla'
Das Umkopieren von
$_POST['eingabe']
in eine Variable$neu
erscheint mir aber nicht sinnvoll.
"Gehört" $_POST überhaupt dem Programmierer? Ich meine, wenn der Server diese Variable setzt, darf ich sie als Programmierer denn überschreiben. In C/C++ kann sowas zu Problemen führen, in PHP klappt es ohne Probleme (von denen ich weiss), aber ist es sauber?
Wenn ein Tylecast erfolgt, wäre das ja ein Überschreiben, ich würdehier, der Sauberkeit willen, ebenfalls eine eigene Variable benutzen die wirklich mir gehört. Wenn der Wert unverändert bleibt, ist ein umkopieren IMO nicht nötig.
Hallo,
Das Umkopieren von
$_POST['eingabe']
in eine Variable$neu
erscheint mir aber nicht sinnvoll.
"Gehört" $_POST überhaupt dem Programmierer? Ich meine, wenn der Server diese Variable setzt, darf ich sie als Programmierer denn überschreiben.
ja, darf man gern tun - bei $_SESSION ist es gar der Normalfall. Bei $_GET und $_POST würde ich es aber der klaren Struktur wegen auch vermeiden.
In C/C++ kann sowas zu Problemen führen, in PHP klappt es ohne Probleme (von denen ich weiss), aber ist es sauber?
In C habe ich aber nur wenige vordefinierte Variablen, wie etwa stdin oder stdout. Die haben einen klar festgelegten Typ, und theoretisch kann ich sie überschreiben, ohne dass es dem Programmablauf schadet (dass ich dann Probleme mit I/O bekomme, ist eine andere Geschichte).
Ein wenig anders verhält es sich mit argc und argv[], deren Name ich eigentlich auch nach Belieben anders wählen könnte. Diese Variablen deklariere ich als Programmierer selbst, nämlich als formale Parameter in main(). Und auch die darf ich theoretisch überschreiben, wie ich lustig bin.
Problematisch wird es, wenn ich die Strings überschreibe, auf die argv[] verweist - aber nicht deshalb, weil sie mir nicht "gehören", sondern nur, weil ich nicht davon ausgehen darf, dass für diese Strings mehr Speicher reserviert wurde, als für ihre Initialwerte nötig war.
Welche Fälle in C oder C++ hattest du konkret im Sinn, wo das Überschreiben problematisch sein könnte?
Ciao,
Martin
Welche Fälle in C oder C++ hattest du konkret im Sinn, wo das Überschreiben problematisch sein könnte?
Genau solche Fälle, bei denen ich nicht weiss, welcher Speicher reserviert wurde. Das gilt dann auch für APIs, die Werte zurückgeben.
Sollte bei PHP kein Problem sein, da der Speicher dynamisch verwaltet wird.
Hello,
Aus meinem Formular kommt der WERT mittels $_POST['eingabe']
$neu = settype ($_POST['eingabe'], 'integer' );
jetzt ist es ein INTEGER, doch wenn nichts drin war in der VARIABLE ist trotzdem eine 1 drin, es sollte aber eine 0 drin sein. Wie bekomme ich also die 0 darein?
Was ist jtzt ein Integer und wo ist jetzt "eine 1 drin"?
Für deine Zwecke könnten die Filterfunktionen besser geeignet sein
http://de2.php.net/manual/en/book.filter.php
Liebe Grüße aus dem schönen Oberharz
Tom vom Berg
Also
$_POST['eingabe']
hier ist die 0 oder die 5 drin
$neu = settype ($_POST['eingabe'], 'integer' );
wenn jetzt die 5 drin ist dann ok.
aber wenn keine Eingabe in $_POST['eingabe'] drin ist, steht aufeinmal eine 1 drin, aber es sollte eine 0 drin sein.
Hi,
$_POST['eingabe']
hier ist die 0 oder die 5 drin
$neu = settype ($_POST['eingabe'], 'integer' );
wenn jetzt die 5 drin ist dann ok.
aber wenn keine Eingabe in $_POST['eingabe'] drin ist,
Was genau ist "keine Eingabe"? Wirklich der Wert '0', oder meinst du den Fall, in dem $_POST['eingabe'] gar nicht gesetzt ist?
steht aufeinmal eine 1 drin, aber es sollte eine 0 drin sein.
$neu wird bei obigem Code immer ein boole'scher Wert sein, weil das nun mal der Rückgabetyp von settype ist.
MfG ChrisB
Dann sollte es so gut sein:
if ((!isset($_POST['eingabe']))OR(empty($_POST['eingabe']))) $neu=0;
else
$neu = settype ($_POST['eingabe'], 'int' );
Hallo,
Dann sollte es so gut sein:
if ((!isset($_POST['eingabe']))OR(empty($_POST['eingabe']))) $neu=0;
else
$neu = settype ($_POST['eingabe'], 'int' );
Nein. Du willst settype überhaupt nicht verwenden!
Freundliche Grüße
Vinzenz
Hallo,
if ((!isset($_POST['eingabe']))OR(empty($_POST['eingabe']))) $neu=0;
wenn du mit empty() prüfst, brauchst du isset() nicht mehr. Das ist bei der Prüfung mit empty() eingeschlossen.
$neu = settype ($_POST['eingabe'], 'int' );
Und dass dir das Ergebnis von settype() nicht weiterhilft, hat doch auch schon jemand gesagt.
$neu = ( empty($_POST['eingabe']) ? 0 : intval($_POST['eingabe']) );
Ciao,
Martin
Danke Martin und die anderen,
$neu = ( empty($_POST['eingabe']) ? 0 : intval($_POST['eingabe']) );
Doch eine Frage habe ich noch:
bekomme ich da auch noch eine zweite Abfrage rein
wie $_POST['eingabe']<5 dann 0
oder muss ich das in einem weiteren, extra Schritt machen
Hallo,
bekomme ich da auch noch eine zweite Abfrage rein
wie $_POST['eingabe']<5 dann 0
oder muss ich das in einem weiteren, extra Schritt machen
ich würde das tatsächlich in einem zweiten Schritt machen.
Im bisher erklärten Schritt bilden wir uns den Zahlenwert der Eingabe, bzw. 0 als Ersatzwert bei fehlender Angabe.
Im zweiten Schritt können wir dann den Wertebereich überprüfen und bei Bedarf Fehler melden oder bestimmte Werte intern korrigieren.
Ciao,
Martin
Ja ich habe sie hinter die erste Abfrage gehängt, danke an alle :-)
bekomme ich da auch noch eine zweite Abfrage rein
Du musst die Abfrage ja nur passend verknüpfen, in diesem Fall mit OR bzw. ||
Hello,
if ((!isset($_POST['eingabe']))OR(empty($_POST['eingabe']))) $neu=0;
wenn du mit empty() prüfst, brauchst du isset() nicht mehr. Das ist bei der Prüfung mit empty() eingeschlossen.
Aber die Prüfung mit empty() ist bei einem erwarteten Integer äußerst ungeschickt.
Nehmen wir mal an, dass ein nicht ausgefülltes Eingabefeld bedeuten soll "keine Änderung am serverseits vorhandenen Wert gewünscht", dann würde die Prüfung mit empty() und das anschließende 0-setzen ein sachlicher Fehler sein.
Wir vergessen deshalb nicht, dass empty() sowohl bei numerisch 0 (hier als Stringabbild übermittelt), als auch bei leerem String oder Leerzeichen im String mit TRUE antwortet.
Es ist also besser, hier
if(isset($_POST['eingabe']) and is_string($_POST['eingabe']) and strlen($_POST['eingabe']) > 0)
oder
if(isset($_POST['eingabe']) and is_string($_POST['eingabe'])
and strlen(trim($_POST['eingabe'])) > 0)
zu arbeiten, je nachdem, was gewünscht wird.
Denn außerdem könnte $_POST['eingabe'] auch noch ein array sein ...
Die Filterfunktionen versuchen, diese ganzen Anforderungen kompakt zusammenzufassen.
http://de3.php.net/manual/en/book.filter.php
Liebe Grüße aus dem schönen Oberharz
Tom vom Berg
aber wenn keine Eingabe in $_POST['eingabe'] drin ist, steht aufeinmal eine 1 drin, aber es sollte eine 0 drin sein.
Wenn $_POST['eingabe'] leer ist, wirft dein Konstrukt eh ein Notice. Daher solltest du vorher sowieso prüfen, ob $_POST['eingabe'] gesetzt ist. Wenn das nicht der Fall ist, weisst du einfach 0 zu.
Hallo,
Aus meinem Formular kommt der WERT mittels $_POST['eingabe']
$neu = settype ($_POST['eingabe'], 'integer' );
jetzt ist es ein INTEGER, doch wenn nichts drin war in der VARIABLE ist trotzdem eine 1 drin, es sollte aber eine 0 drin sein. Wie bekomme ich also die 0 darein?
$neu enthält keine Integer, sonderen eine Boolean. Steht doch im Handbuch zu settype().
$neu = [link:http://de.php.net/manual/de/function.intval.php@title=intval]($_POST['eingabe']);
wäre die korrekte Anweisung, um den in eine Integer umgewandelten Wert in $_POST['eingabe'] in die Variable $neu zu schreiben, vorausgesetzt $_POST['eingabe'] existiert.
Siehe auch Handbuchabschnitt Typen-Tricks.
Freundliche Grüße
Vinzenz