Gast: Abfrage auf 0

Hallo,

irgendwie klappt's nicht. Ich möchte einen per GET oder POST hereinkommenden Wert auf 5 setzen, vorausgesetzt, er ist leer. Die Zahl 0 ist ein gültiger Wert und soll nicht ersetzt werden.

  
$wert = ( $_POST['wert'] ) ? $_POST['wert'] : $_GET['wert'];  
if (!$wert && $wert!=0 ) $wert = 5;  

Wenn kein Wert hereinkommt, müsste die erste Bedingung TRUE sein. Und KEIN Wert sollte doch auch ungleich 0 sein, oder?

Die Doppelbedingung wird nicht wahr.

Auf isset kann ich nicht abfragen, denn der Wert kann mit '' (leer) hereinkommen.

Gruß, Gast.

  1. Hallo,

    isset fragt, ob die variable gesetzt ist, also überhaupt vorhanden ist. "" ist ein gültiger wert. dann ist sie gesetzt.

    "" ist ein leere String, aber im zweifel "false" - if("")
    0 ist auf "false", typenkonvertiert.

    if($notSet) sollte dir je nach Errorreporting eine Notice auswerfen: undeclared variable.

    ("" ==== "") ist true;
    ("" === false) ist false;
    (0 === false) ist false;
    ($notSet === false) ist - keine Ahnung. Probiers aus.

    isset($notSet) ist definitiv false, wenn es eben nicht gesetzt ist.

    $setToEmptyString="";
    isset($setToEmptyString) ist true!!!

    Gruß

    jobo

    1. Hello,

      Post-Parameter kommen in PHP immer als String an.
      Man kann also nur prüfen, ob überhaupt ein bestimmter Parameter mitgeschickt wurde und dann erst prüfen, ob er einen Inhalt hat, also die Stringlänge prüfen.

      Außerdem kann man noch feststellen, ob eine Typumwandlung in den erwünschten Zieltyp verlustfrei und fehlerfrei vorgenommen werden kann. Hierfür hat PHP eigene Funktionen

      http://de.php.net/manual/en/filter.filters.validate.php

      die man aber zur Not auch "zu Fuß" nachbilden kann.

      Liebe Grüße aus dem schönen Oberharz

      Tom vom Berg

      --
       ☻_
      /▌
      / \ Nur selber lernen macht schlau
      http://bergpost.annerschbarrich.de
  2. Hello,

    irgendwie klappt's nicht. Ich möchte einen per GET oder POST hereinkommenden Wert auf 5 setzen, vorausgesetzt, er ist leer. Die Zahl 0 ist ein gültiger Wert und soll nicht ersetzt werden.

    $wert = ( $_POST['wert'] ) ? $_POST['wert'] : $_GET['wert'];
    if (!$wert && $wert!=0 ) $wert = 5;

      
    if (isset($\_POST['wert']) and strlen($\_POST['wert']) > 0)  
    {  
        $wert = intval($\_POST['wert']);  
    }  
    else  
    {  
        $wert = 0;  
    }  
      
      
    Das ist aber auch nur eine Näherungslösung, denn eigentlich müsstest Du nicht nur mit intval() den Wert zum Ingteger machen, sondern auch prüfen, ob das hereinkommende Format sauber und verlustfrei  in einen Integer überführbar ist, also die literale Darstellung eines Integers hat.  
      
    Dafür hat PHP die diversen Filterfunktionen  
      
    <http://de.php.net/manual/en/book.filter.php>  
    <http://de.php.net/manual/en/filter.filters.validate.php>  
      
    Und Du musst wissen, ob Du tolerant mit Parametern umgehen willst, dann wären die Sanitize-Filter die passenden, oder strict. Dann müsstest Du nur validieren.  
      
      
      
      
      
      
    Liebe Grüße aus dem schönen Oberharz  
      
      
    Tom vom Berg  
    ![](http://selfhtml.bitworks.de/Virencheck.gif)  
      
    
    -- 
     ☻\_  
    /▌  
    / \ Nur selber lernen macht schlau  
    <http://bergpost.annerschbarrich.de>
    
  3. der Fehler ist hier:

    $wert = ( $_POST['wert'] ) ? $_POST['wert'] : $_GET['wert'];

      
    Wenn $\_POST['wert'] die gültige Zahl 0 hat, wird sie \_nicht\_ genommen.  
      
    Habe ich geändert in  
      
    ~~~php
      
    $wert = (!is_null($_POST['wert'])) ? $_POST['wert'] : $_GET['wert'];  
    if ( is_null( $wert )) $wert = 5;  
    
    

    Jetzt klappt's.

    Gast

    1. Hallo,

      is_null und isset sollten doch eigentlich ident sein, oder? bzw. eben genau den gegenteiligen boolean zurückliefern.

      is_null ($notSet) === true;

      isset ($notSet) === false;

      Gruß

      jobo

    2. Hi,

      Jetzt klappt's...

      Hat sich zwar erledigt, vielleicht findest du aber diese Links noch interessant:

      PHP type comparison tables
      Vergleichs-Operatoren

      Schöne Grüße,
      Jonny 5