Re: [PHP] reason for a "Notice:.." on one site but not another? (Same code.)
On Mon, 2009-08-10 at 15:40 -0300, Martin Scotta wrote: > This "intelligence" is given by the laziness of the && operator. > > $res = a() && b(); # if a() is false then b() does not evaluate > $res = a() & b(); # b() evaluates no matter a()'s result > > so, order matters. > > On Mon, Aug 10, 2009 at 3:29 PM, Andrew Ballard wrote: > > > On Mon, Aug 10, 2009 at 1:50 PM, Ralph Deffke > > wrote: > > > this is not "intelligence" its just pure math. the '&&' says if BOTH > > > expressions are true then the whole expression is true. > > > > > > so if the first one is false, the whole is false, why checking the next > > one > > > in the underlaying C it would be something like this > > > { > > > if ( expression == false ) return false; > > > if ( expression == false) return false; > > > return true; > > > } > > > > > > ralph > > > ralph_def...@yahoo.de > > > > That's logically correct, and while PHP does implement this > > "short-circuit" logic, not all languages do. In that regard, I > > appreciate what John meant by saying it makes it look "more > > intelligent." Some languages evaluate each of the conditions to their > > respective boolean results before evaluating the logical operators. > > > > Andrew > > > > -- > > PHP General Mailing List (http://www.php.net/) > > To unsubscribe, visit: http://www.php.net/unsub.php > > > > > > You get the same thing in bash. You call a bunch of commands to run in series, but the next one only runs if it's predecessor was successful. It's frequent to see this sort of command chain: ./configure && make && make install Thanks, Ash http://www.ashleysheridan.co.uk -- PHP General Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php
Re: [PHP] reason for a "Notice:.." on one site but not another? (Same code.)
That should be !== not !=== Adam. On Mon, Aug 10, 2009 at 12:17 PM, Ralph Deffke wrote: > for the same story there are the -- PHP General Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php
AW: [PHP] reason for a "Notice:.." on one site but not another? (Same code.)
the single & is a logical AND so a() NOR b() is evaluatet ! its usually used on binary integer. e.g. 0x0001 & 0x0001 = 0x0001 equlals TRUE while 0x0002 & 0x0001 equals FALSE so something like $a & $b guides to some very interisting results depending of their values but nothing u expect. while && tells 'evaluate' the expressions on both sites and combine its results in an AND operation. thats why compilers and interpreters do have a definition what value TRUE has. its very likely that TRUE is 1 and false is 0 lets say $a = 1 $b = 1 then $a & $b is 1 or true and it would give the same like $a && $b in that case at that point its also to mention that an empty string in PHP is NOT == FALSE this gives the following result on an empty string: $a = ""; isset( $a ) == TRUE while $a = null; isset( $a ) == FALSE; for the same story there are the == === and != !=== operators Von: Martin Scotta An: Andrew Ballard CC: Ralph Deffke ; php-gene...@lists..php.net Gesendet: Montag, den 10. August 2009, 20:40:19 Uhr Betreff: Re: [PHP] reason for a "Notice:.." on one site but not another? (Same code.) This "intelligence" is given by the laziness of the && operator. $res = a() && b(); # if a() is false then b() does not evaluate $res = a() & b(); # b() evaluates no matter a()'s result so, order matters. On Mon, Aug 10, 2009 at 3:29 PM, Andrew Ballard wrote: On Mon, Aug 10, 2009 at 1:50 PM, Ralph Deffke wrote: >>> this is not "intelligence" its just pure math. the '&&' says if BOTH >>> expressions are true then the whole expression is true. >>> >>> so if the first one is false, the whole is false, why checking the next one >>> in the underlaying C it would be something like this >>> { >>> if ( expression == false ) return false; >>> if ( expression == false) return false; >>> return true; >>> } >>> >>> ralph >>> ralph_def...@yahoo.de > >That's logically correct, and while PHP does implement this >>"short-circuit" logic, not all languages do. In that regard, I >>appreciate what John meant by saying it makes it look "more >>intelligent." Some languages evaluate each of the conditions to their >>respective boolean results before evaluating the logical operators. > >>Andrew > > >>-- >>PHP General Mailing List (http://www.php.net/) >>To unsubscribe, visit: http://www.php.net/unsub.php > > -- Martin Scotta
Re: [PHP] reason for a "Notice:.." on one site but not another? (Same code.)
This "intelligence" is given by the laziness of the && operator. $res = a() && b(); # if a() is false then b() does not evaluate $res = a() & b(); # b() evaluates no matter a()'s result so, order matters. On Mon, Aug 10, 2009 at 3:29 PM, Andrew Ballard wrote: > On Mon, Aug 10, 2009 at 1:50 PM, Ralph Deffke > wrote: > > this is not "intelligence" its just pure math. the '&&' says if BOTH > > expressions are true then the whole expression is true. > > > > so if the first one is false, the whole is false, why checking the next > one > > in the underlaying C it would be something like this > > { > > if ( expression == false ) return false; > > if ( expression == false) return false; > > return true; > > } > > > > ralph > > ralph_def...@yahoo.de > > That's logically correct, and while PHP does implement this > "short-circuit" logic, not all languages do. In that regard, I > appreciate what John meant by saying it makes it look "more > intelligent." Some languages evaluate each of the conditions to their > respective boolean results before evaluating the logical operators. > > Andrew > > -- > PHP General Mailing List (http://www.php.net/) > To unsubscribe, visit: http://www.php.net/unsub.php > > -- Martin Scotta
Re: [PHP] reason for a "Notice:.." on one site but not another? (Same code.)
On Mon, Aug 10, 2009 at 1:50 PM, Ralph Deffke wrote: > this is not "intelligence" its just pure math. the '&&' says if BOTH > expressions are true then the whole expression is true. > > so if the first one is false, the whole is false, why checking the next one > in the underlaying C it would be something like this > { > if ( expression == false ) return false; > if ( expression == false) return false; > return true; > } > > ralph > ralph_def...@yahoo.de That's logically correct, and while PHP does implement this "short-circuit" logic, not all languages do. In that regard, I appreciate what John meant by saying it makes it look "more intelligent." Some languages evaluate each of the conditions to their respective boolean results before evaluating the logical operators. Andrew -- PHP General Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php
Re: [PHP] reason for a "Notice:.." on one site but not another? (Same code.)
If you switch it around you'll get a notice because the IF evaluates from left to right. So you just want to make sure you check isset() first. This would throw a notice: if($_POST['UserWishesDateRange'] == 'T' && isset($_POST['UserWishesDateRange'])) { Aha! That must be what I tried and was still getting the notice! Interesting that it works (without notice) if we check against the isset () one first. It makes if() look more intelligent that I would think... as if it saying, "good now that we've established that the var isset, now is it also equal to '___'., as opposed to just, "is var set, and is var equal to "___'. this is not "intelligence" its just pure math. the '&&' says if BOTH expressions are true then the whole expression is true. so if the first one is false, the whole is false, why checking the next one in the underlaying C it would be something like this { if ( expression == false ) return false; if ( expression == false) return false; return true; } I would have thought both would have to be true on their own (without notice) in order for the the combined expression to be true (without notice). But Shawn pointed out that the order matters; if we check for the var's value before checking if it isset then we get a notice, but if the order is reversed, then we get no notice.
Re: [PHP] reason for a "Notice:.." on one site but not another? (Same code.)
On Mon, Aug 10, 2009 at 1:07 PM, Martin Scotta wrote: > Why do you all always use isset? > Why do you don't use array_key_exists instead? is it a more semantic > solution? > > > $key = 'UserWishesDateRange'; # just to make statement shorter > if( array_key_exists($key, $_POST ) && 'T' == $_POST[$key] ) > { > echo ' the key exists... and it is a "T" ''; > } > > *isset*: Determine if a variable is set and is not NULL* > array_key_exists: *Checks if the given key or index exists in the array > > > On Mon, Aug 10, 2009 at 1:42 PM, John Butler > wrote: > >> If you switch it around you'll get a notice because the IF evaluates >>> from left to right. So you just want to make sure you check isset() >>> first. >>> >>> This would throw a notice: >>> >>> if($_POST['UserWishesDateRange'] == 'T' && >>> isset($_POST['UserWishesDateRange'])) { >>> >> >> Aha! That must be what I tried and was still getting the notice! >> Interesting that it works (without notice) if we check against the isset () >> one first. It makes if() look more intelligent that I would think... as if >> it saying, "good now that we've established that the var isset, now is it >> also equal to '___'., as opposed to just, "is var set, and is var equal to >> "___'. > > > > > -- > Martin Scotta > Two reasons: 1. isset() is orders of magnitude faster 2. The theory is, if a variable is null you don't care about it -- PHP General Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php
Re: [PHP] reason for a "Notice:.." on one site but not another? (Same code.)
this is not "intelligence" its just pure math. the '&&' says if BOTH expressions are true then the whole expression is true. so if the first one is false, the whole is false, why checking the next one in the underlaying C it would be something like this { if ( expression == false ) return false; if ( expression == false) return false; return true; } ralph ralph_def...@yahoo.de "John Butler" wrote in message news:9ada6df4-649c-4790-b51b-cc9cc0505...@gmail.com... > >> > > If you switch it around you'll get a notice because the IF evaluates > > from left to right. So you just want to make sure you check isset() > > first. > > > > This would throw a notice: > > > > if($_POST['UserWishesDateRange'] == 'T' && > > isset($_POST['UserWishesDateRange'])) { > > Aha! That must be what I tried and was still getting the notice! > Interesting that it works (without notice) if we check against the > isset () one first. It makes if() look more intelligent that I would > think... as if it saying, "good now that we've established that the > var isset, now is it also equal to '___'., as opposed to just, "is var > set, and is var equal to "___'. -- PHP General Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php
Re: [PHP] reason for a "Notice:.." on one site but not another? (Same code.)
Why do you all always use isset? Why do you don't use array_key_exists instead? is it a more semantic solution? wrote: > >>> If you switch it around you'll get a notice because the IF evaluates >> from left to right. So you just want to make sure you check isset() >> first. >> >> This would throw a notice: >> >> if($_POST['UserWishesDateRange'] == 'T' && >> isset($_POST['UserWishesDateRange'])) { >> > > Aha! That must be what I tried and was still getting the notice! > Interesting that it works (without notice) if we check against the isset () > one first. It makes if() look more intelligent that I would think... as if > it saying, "good now that we've established that the var isset, now is it > also equal to '___'., as opposed to just, "is var set, and is var equal to > "___'. -- Martin Scotta
Re: [PHP] reason for a "Notice:.." on one site but not another? (Same code.)
If you switch it around you'll get a notice because the IF evaluates from left to right. So you just want to make sure you check isset() first. This would throw a notice: if($_POST['UserWishesDateRange'] == 'T' && isset($_POST['UserWishesDateRange'])) { Aha! That must be what I tried and was still getting the notice! Interesting that it works (without notice) if we check against the isset () one first. It makes if() look more intelligent that I would think... as if it saying, "good now that we've established that the var isset, now is it also equal to '___'., as opposed to just, "is var set, and is var equal to "___'.
Re: [PHP] reason for a "Notice:.." on one site but not another? (Same code.)
John Butler wrote: >> if(isset($_POST['UserWishesDateRange']) && $_POST['UserWishesDateRange'] >> == 'T') { > > > Thought I tried that. Apparently not exactly; it works now! Thanks. I > know it is clunky but I wanted to see how compact it could be done. If you switch it around you'll get a notice because the IF evaluates from left to right. So you just want to make sure you check isset() first. This would throw a notice: if($_POST['UserWishesDateRange'] == 'T' && isset($_POST['UserWishesDateRange'])) { -- Thanks! -Shawn http://www.spidean.com -- PHP General Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php
Re: [PHP] reason for a "Notice:.." on one site but not another? (Same code.)
if(isset($_POST['UserWishesDateRange']) && $_POST['UserWishesDateRange'] == 'T') { Thought I tried that. Apparently not exactly; it works now! Thanks. I know it is clunky but I wanted to see how compact it could be done. -- PHP General Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php
Re: [PHP] reason for a "Notice:.." on one site but not another? (Same code.)
John Butler wrote: >> http://us3.php.net/manual/en/errorfunc.configuration.php#ini.error-reporting >> > > Thank you guys for the isset() heads up. And Ben, for this good > explanation of error reporting! > >> As others have pointed out, it's a good idea to call isset() on a >> POST-variable before trying to get at its value. This will avoid a >> notice being thrown. > > OK, and I can work around all this anyway, but I would love to get it > all in one line of code, that essentially says: (pseudocode) > if ($IamNotEmpty && $IamEqualto='T') { > (where those are both the same var) if(isset($_POST['UserWishesDateRange']) && $_POST['UserWishesDateRange'] == 'T') { -- or -- $uwdr = $_POST['UserWishesDateRange']; if(isset($uwdr) && $uwdr == 'T') { -- Thanks! -Shawn http://www.spidean.com -- PHP General Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php
Re: [PHP] reason for a "Notice:.." on one site but not another? (Same code.)
http://us3.php.net/manual/en/errorfunc.configuration.php#ini.error-reporting Thank you guys for the isset() heads up. And Ben, for this good explanation of error reporting! As others have pointed out, it's a good idea to call isset() on a POST-variable before trying to get at its value. This will avoid a notice being thrown. OK, and I can work around all this anyway, but I would love to get it all in one line of code, that essentially says: (pseudocode) if ($IamNotEmpty && $IamEqualto='T') { (where those are both the same var) http://us2.php.net/manual/en/function.filter-input.php The filter_* functions are only available in core since 5.2.0, though. OK, ..good to plant seeds, but since that server is PHP 4.3, I'll save my brain now for until I can actually integrate that study. John Butler (Govinda) govinda.webdnat...@gmail.com
Re: [PHP] reason for a "Notice:.." on one site but not another? (Same code.)
On Aug 9, 2009, at 7:43 PM, John Butler wrote: Hi sunday coders, I've been using this kind of logic on one PHP site I work on to display one thing or another depending on whether the form was submitted or not: and it works great on that site. But on another site it still works, but gives this error: Notice: Undefined index: in /home/vs/site/phvs/bl/7solarsecrets/ admin/trackingcode.html on line 79 I assume that is because the error display settings are set to a more rigorous level in this latter site. Is this correct? (Both sites reside on servers where I am not the admin.) John Butler (Govinda) govinda.webdnat...@gmail.com -- PHP General Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php You could also simply define / initialize the variable. $UserWishesDateRange=''; if($_POST['UserWishesDateRange']) { //--line 79 echo'submitted'; } else { echo'NOT submitted'; } Bastien Sent from my iPod -- PHP General Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php
Re: [PHP] reason for a "Notice:.." on one site but not another? (Same code.)
Bastien Sent from my iPod -- Bastien Cat, the other other white meat -- PHP General Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php
Re: [PHP] reason for a "Notice:.." on one site but not another? (Same code.)
> But on another site it still works, but gives this error: > Notice: Undefined index: UserWishesDateRange in > /home/vs/site/phvs/bl/7solarsecrets/admin/trackingcode.html on line 79 > > I assume that is because the error display settings are set to a more > rigorous level in this latter site. > Is this correct? It's either the 'error_reporting' configuration directive that's different between the two servers, or 'display_errors', or both. On one server the E_NOTICE bit-field is set in 'error_reporting', and it sounds like 'display_errors' is also set (unless you're seeing that notice in a log file). On the other server, one or the other of those things is not set (or both of them aren't). You can use call ini_get('error_reporting') and ini_get('display_errors'), to see what they're set to on each server. Or just create a small page that only calls phpinfo(), to see all configuration directives. Here's the write-up of the directives (one is right below the other): http://us3.php.net/manual/en/errorfunc.configuration.php#ini.error-reporting As others have pointed out, it's a good idea to call isset() on a POST-variable before trying to get at its value. This will avoid a notice being thrown. Lately I've stopped touching $_POST directly and started using filter_input() instead; this also avoids the problem and provides several other benefits: http://us2.php.net/manual/en/function.filter-input.php The filter_* functions are only available in core since 5.2.0, though. Ben -- PHP General Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php
Re: [PHP] reason for a "Notice:.." on one site but not another? (Same code.)
John Butler wrote: > if($_POST['UserWishesDateRange']) { //--line 79 > echo'submitted'; > } else { > echo'NOT submitted'; > } Try this instead: if (isset('UserWishesDateRange'])) { // [...stuff goes here...] } James -- "Black holes are where God divided by zero." --Steven Wright -- PHP General Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php
Re: [PHP] reason for a "Notice:.." on one site but not another? (Same code.)
On Aug 9, 2009, at 16:43, John Butler wrote: Hi sunday coders, I've been using this kind of logic on one PHP site I work on to display one thing or another depending on whether the form was submitted or not: if($_POST['UserWishesDateRange']) { //--line 79 echo'submitted'; } else { echo'NOT submitted'; } and it works great on that site. But on another site it still works, but gives this error: Notice: Undefined index: UserWishesDateRange in /home/vs/site/phvs/ bl/7solarsecrets/admin/trackingcode.html on line 79 I assume that is because the error display settings are set to a more rigorous level in this latter site. Is this correct? (Both sites reside on servers where I am not the admin.) John Butler (Govinda) govinda.webdnat...@gmail.com You could do something like: if(isset($_POST['UserWishesDateRange'])) { //--line 79 or you could use something like !empty($_POST['UserWishesDateRange']) echo 'submitted'; } else { echo 'NOT submitted'; } This will check if $_POST['UserWishesDateRange'] is set to something. You are getting the error message because $_POST ['UserWishesDateRange'] is not set if the form is not submitted. The server where you don't get the error message probably just has error reporting turned off. -- PHP General Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php
[PHP] reason for a "Notice:.." on one site but not another? (Same code.)
Hi sunday coders, I've been using this kind of logic on one PHP site I work on to display one thing or another depending on whether the form was submitted or not: if($_POST['UserWishesDateRange']) { //--line 79 echo'submitted'; } else { echo'NOT submitted'; } and it works great on that site. But on another site it still works, but gives this error: Notice: Undefined index: UserWishesDateRange in /home/vs/site/phvs/bl/ 7solarsecrets/admin/trackingcode.html on line 79 I assume that is because the error display settings are set to a more rigorous level in this latter site. Is this correct? (Both sites reside on servers where I am not the admin.) John Butler (Govinda) govinda.webdnat...@gmail.com -- PHP General Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php