Sod: Formularwert auf Zahl testen

Warum,

erkennt php nicht, dass keine Zahl eingegeben wurde?
Ich kann irgendeinen Müll mit Buchstaben, etc eingeben und es wird 0 als Wert in der DB gespeichert.

:(

...
$preis = str_replace(",", ".", $_POST['preis']);
$preis = sprintf("%01.2f", $preis);
if(!is_float($preis)) {
    echo "<p>Bitte geben Sie einen gültigen Preis ein.</p>";
} else {

...

  1. Warum,

    erkennt php nicht, dass keine Zahl eingegeben wurde?
    Ich kann irgendeinen Müll mit Buchstaben, etc eingeben und es wird 0 als Wert in der DB gespeichert.

    :(

    ...
    $preis = str_replace(",", ".", $_POST['preis']);
    $preis = sprintf("%01.2f", $preis);
    if(!is_float($preis)) {
        echo "<p>Bitte geben Sie einen gültigen Preis ein.</p>";
    } else {

    ...

    if (preg_match('/[^-.0-9]/', $zahl)) {
        echo "<p>Bitte geben Sie einen gültigen Preis ein.</p>";
    }

    1. Das geht leider auch nicht.

      Gleiches Ergebnis.

  2. Hallo Sod,

    erkennt php nicht, dass keine Zahl eingegeben wurde?

    warum sollte PHP das erkennen? Du bist für die Überprüfung verantwortlich. Wie Du das tun kannst, dafür hast Du ja bereits einen Tipp bekommen.

      
    
    > $preis = str_replace(",", ".", $_POST['preis']);  
      
       # Hier hoffst Du, dass in $preis eine Zeichenkette steht,  
       # die Du in eine Zahl umwandeln könntest. Prüfe es.  
      
    
    > $preis = sprintf("%01.2f", $preis);  
      
       # Was macht [link:http://www.php.net/manual/de/function.sprintf.php@title=sprintf()]?  
       # Was liefert wohl [link:http://www.php.net/manual/de/function.gettype.php@title=gettype()] zurück?  
       echo gettype($preis);  
       # Welche Auswirkungen hat dies auf Deinen Ausdruck in der folgenden Zeile?  
      
    
    > if(!is_float($preis)) {  
    >     echo "<p>Bitte geben Sie einen gültigen Preis ein.</p>";  
    > } else {  
    
    

    Freundliche Grüße

    Vinzenz