Re: A weird problem / bug with concatenation operator in a class
| From: | Lars Torben Wilson | Date: | Fri, 01 Feb 2002 22:41:36 +0000 |
| Subject: | Re: A weird problem / bug with concatenation operator in a class | ||
| References: | 1 | Groups: | php.general |
| Request: | Send a blank email to php-general+get-83209@lists.php.net to get a copy of this message | ||
On Fri, 2002-02-01 at 14:27, Administrator wrote:
> Yesterday I presented this problem to a local usergroup...
>
> // the following lines are contained in a class
> // although I am echoing the value of $age from within the class
> // this is only for testing during development.
> // $age will be assigned to [$this->age_Range] later in the code
No bug here: you're outputting text containing a '<' to a web page,
so the browser will try to interpret it as the start of a tag if it's
immediately followed by a character. In your profile class, change
$this->age_Range = $age;
to
$this->age_Range = htmlspecialchars($age);
and you'll see what I mean. (You could always just use 'View source',
I s'pose).
Cheers,
Torben
> $age = " AND ((YEAR(CURRENT_DATE)-YEAR(dob)) -
> (RIGHT(CURRENT_DATE,5)<RIGHT(dob,5))";
> $age .= " BETWEEN '$this->minAge' AND '$this->maxAge')";
> echo $age."<br>";
> Output of the echo statement looks exactly like this...
> AND ((YEAR(CURRENT_DATE)-YEAR(dob)) - (RIGHT(CURRENT_DATE,5)<RIGHT(dob,5))
> -----------------------------------------------------------------------------------------------
> Here is what I found:
>
> Now, from the above if I add white space between "...)<R..." like this "...)
> < R..." everything works!
> The revised assignment looks like this:
> $age = " AND ((YEAR(CURRENT_DATE)-YEAR(dob)) - (RIGHT(CURRENT_DATE,5) <
> RIGHT(dob,5))";
> $age .= " BETWEEN '28' AND '42')";
> And echoes:
> AND ((YEAR(CURRENT_DATE)-YEAR(dob)) - (RIGHT(CURRENT_DATE,5)<RIGHT(dob,5))BETWEEN
> '28' AND '42')
> -----------------------------------------------------------------------------------------------
> If you run the following code, you will see what I mean. I found this to be the case with PHP
> 4.0.2 on Windows NT 4.0 and with PHP 4.0.6 on Linux. At one point I found that echo of $age from
> outside the class returned the proper value regardless of white space, now I can not re-create this.
> The behavior would appear to be the same regardless of where you echo the var from.
> For what it's worth...
> Kevin
> ---------------------------------------------------------
> <?PHP
> /*+------------------------------------------+
> |File: testclass.cls.php |
> |By: Kevin Koons |
> |On: Friday, February 01, 2002 11:34:41 AM |
> +------------------------------------------+*/
> $myProfile = new profile;
> $sql = $myProfile->profile1();
> echo "<B>The value of [\$age] returned by</B>
> \$myProfile->profile1()<br><hr><br>".$sql."<br><hr><br><br><br>";
> echo "<B>called from class profile using</B> echo
> \$myProfile->age_Range<br><hr><br>".$myProfile->age_Range."<br><hr><br><br><br>";
> $sql = $myProfile->profile2();
> echo "<B>The value [\$age] returned by</B>
> \$myProfile->profile2()<br><hr><br>".$sql."<br><hr><br><br><br>";
> echo "<B>called from class profile using</B> echo
> \$myProfile->age_Range<br><hr><br>".$myProfile->age_Range."<br><hr><br><br><br>";
> class profile
> {
> var $age_Range;
> var $minAge = 28;
> var $maxAge = 42;
> Function profile1() {
> // orig code, no white space
> $age = " AND ((YEAR(CURRENT_DATE)-YEAR(dob)) -
> (RIGHT(CURRENT_DATE,5)<RIGHT(dob,5))";
> $age .= " BETWEEN '$this->minAge' AND '$this->maxAge')";
> $this->age_Range = $age;
> echo "<B>Echoed from IN class Profile, no white
> space</B><br><hr><br>";
> echo $this->age_Range."<br><hr><br><br><br>";
> Return ($age);
> }
> Function profile2() {
> // added white space between "...) < RIGHT..."
> $this->age_Range = " AND ((YEAR(CURRENT_DATE)-YEAR(dob)) - (RIGHT(CURRENT_DATE,5) <
> RIGHT(dob,5))";
> $this->age_Range .= " BETWEEN '$this->minAge' AND
> '$this->maxAge')";
> echo "<B>Echoed from IN class Profile, white space
> added</B><br><hr><br>";
> echo $this->age_Range."<br><hr><br><br><br>";
> Return ($age);
> }
> }
> ?>
>
--
Torben Wilson <torben@php.net>
http://www.thebuttlesschaps.com
http://www.hybrid17.com
http://www.inflatableeye.com
+1.604.709.0506