Re: shortest possible check: field is set, integer or 0

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Steve Edberg wrote:
At 5:30 PM +0100 12/1/05, Jochem Maas wrote:

Steve Edberg wrote:
Only problem with intval() is that it returns 0 (a valid value) on

I knew that. :-)



I figured so, but I thought I'd make it explicit for the mailing list...


failure, so we need to check for 0 first. Adding more secure checks

do we? given that FALSE casts to 0.

would make this more than just a one-liner,  eg;

$_CLEAN['x'] = false;
if (isset($_POST['x'])) {
   if (0 == 1*$_POST['x']) {


I find the 1*_POST['x'] line a bit odd. why do you bother with the '1*' ?



I tend to use that to explicitly cast things to numeric; usually not necessary, but I have occasionally hit situations where something got misinterpreted, so I habitually do the 1*.


      $_CLEAN['x'] = 0;
   } else {
      $x = intval($_POST['x']);
      if ($x > 0 && $x == 1*$_POST['x']) {


this is wrong ... if $_POST['x'] is '5.5' this won't fly
but is valid according to the OP.



I guess I was interpreting the OP differently; your version is the shortest method I can see to force the input to an integer (but to ensure the non-negative requirement, one should say

    $_CLEAN['x'] = abs(intval(@$_POST['x']));

for some reason I have been assuming that intval() drops the sign - but
it doesn't the use of abs() would indeed be required.

thanks for that info :-)


). I was adding extra code to indicate an invalid entry as false. And I think that 5.5 would not be considered valid - to quote: "What is the shortest possible check to ensure that a field coming from a form as a text type input is either a positive integer or 0, but that also accepts/converts 1.0 or 5.00 as input?"

Although, with more caffeine in my system, doing something like

    $x = abs(intval(@$_POST['x']));
$_CLEAN['x'] = isset($_POST['x']) ? ($x == $_POST['x'] ? $x : false) : false;

or, to be more obfuscated,

$_CLEAN['x'] = isset($_POST['x']) ? (($x = abs(intval(@$_POST['x']))) == $_POST['x'] ? $x : false) : false;

should do what I was trying to do, more succinctly.

    - slightly more awake steve



plenty for the OP to chew on anyway ;-)

--
PHP General Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php


[Index of Archives]     [PHP Home]     [Apache Users]     [PHP on Windows]     [Kernel Newbies]     [PHP Install]     [PHP Classes]     [Pear]     [Postgresql]     [Postgresql PHP]     [PHP on Windows]     [PHP Database Programming]     [PHP SOAP]

  Powered by Linux