The concepts in the article are ok, but the code seems to be pretty poor. An example from edit_user.php:
foreach ($s_preferences as $index => $pref) { $pref_str .= $s_preferences[$index]; }
should be:
$pref_str = implode("", $s_preferences);
and storing the preferences as a bit string (010010101) is not intuitive (you would need a key to find out what the third digit represented, etc.). Although this method minimizes database space used, it is not easy to parse to specific data.
I would recommend storing user preferences in the database as wddx using an associative array so you could then parse the wddx to a var. such as $prefs and say
if ($prefs["news"]["general"]) echo "General News";
if ($prefs["news"]["geek"]) echo "Geek News";
This article also uses embedded php. While embedded php is ok for small pages, it doesn't work well for templated pages or user defined preferences because it is much harder to add new preferences and harder to maintain, especially if the site is large.
I use customized templates on my own site by using phplib's template object. It has allowed me to let users create their own templates...something embedded php cannot do.
The article uses native php db calls instead of a database class. While this is ok because it makes running the code easy for most machines, the article and code should stress the importance of using base db classes for any project.
Tom