Archive for PHP

Browser.php - version 1.1 - released!

I updated the Browser.php class today to detect Google’s Chrome Browser. Additionally, thanks to an idea from Daniel ‘mavrick’ Lang, I added isBrowser($browserName) as a function to version 1.1.

Visit the Browser.php class page today to grab the update!

Interested in a PHP4 version? Daniel is maintaining a version for PHP4.

Example Usage:

1
2
3
4
5
6
7
8
9
10
11
12
 
 
$browser = new Browser();
if( ! ( $browser->getBrowser() == Browser::BROWSER_FIREFOX && $browser->getVersion() >= 2 ) ) {
	echo 'You have FireFox version 2 or greater';
}
 
// AND NOW...
 
if( $browser->isBrowser(Browser::BROWSER_CHROME) ) {
	echo '<p><strong>Hi Google Chrome User!</strong></p>';
}

jquery.suggest 1.2

A few people have contacted in the past about what I did to get IDs to work on Peter’s Script over at vulgarisoips.com (see the original post here).

Peter’s script works great; but for my needs I had to add an ID to the suggestion as a way to relate the selected value back to a dB entry.

First, I needed a way to tell the script where to add the results to in the DOM instead of having the script add the object automatically.  I created a new option called attachObject which allowed me to control the object in the DOM.  This allowed me to do this:

$('#name').suggest('/suggest/client',{dataContainer:'#cid', attachObject:'#sresults', onSelect: myFunction );

Note how above I use #sresults as my object to attach the suggestion results to.  In my edits if you leave out the attachObject it will still build the <ul> object for you without any issues.

Next, I needed a way to have the ID go along with the representation values (ex. a hash-like key, value relationship).  To do this I added two other options to the script: one called dataContainer and one called dataDelimiter which I set to a default value of tab (\t).  The dataContainer is an ID of an input box which holds the database ID of the selected object in the suggest box.  The dataDelimiter is the delimiter for the payload which contains the key values pairs separated by the dataDelimiter.  (Note: the “row” delimiter is still a new line character).

In my XHTML I have this:

<input type="hidden" name="cid" id="cid" value="-1"/>
<input type="text" id="name" size="30" maxlength="128"/>
<div id="suggestResults"></div>

(and I use the script stub above…)

On the server I have /suggest/client do something similar to this:

.
.
.
$stmt->execute();
foreach( $stmt->fetchAll(PDO::FETCH_OBJ) as $row ) {
echo "{$row->displayName}\t{$row->tmpid}\n";
}

NOTE: I do make an assumption your keys will always be unique; as I append a s_ to the key to construct the necessary <li> items (need to keep them unique for DOM reasons).

Here is the original version of Peter’s script: Original Version 1.1 (in text)

Here are my updates (let us call it v1.2):Updated Version 1.2 (in text)

In hindsight there are definitely better ways to do this but this solution is working great still (this idea and solution go back to August of 2007); and I will always suggest “working effectively in production” is always better than how it “should be.”

Missing phpize?

In an attempt to add the PECL Upload Progress package, I received the following error:

[root@zebra cbschuld]# pecl install uploadprogress-beta
downloading uploadprogress-0.3.0.tgz ...
Starting to download uploadprogress-0.3.0.tgz (4,677 bytes)
.....done: 4,677 bytes
3 source files, building
running: phpize
sh: phpize: command not found
ERROR: `phpize' failed

Hmmm, it turns out I never added the package php-devel (oops). If you are missing phpize on your machine add it with:

yum install php-devel