\documentclass[%
%pdf,
ps,
nocolorBG,
%colorBG,
%slideColor,
slideBW,
%draft,
%frames
%azure
%contemporain
%nuancegris
%troispoints
%lignesbleues
darkblue
%alienglow
%autumn
]{prosper}
\title{PHP, Databases and Examples}
\subtitle{SLUG Debian SIG Talk -- Jan 2002}
\author{Craig Small}
\email{csmall@eye-net.com.au}
\Logo(9.5,7){\includegraphics[width=6mm]{openlogo-nd.eps}\\{\tiny SLUG Debian SIG}}
\begin{document}
\begin{slide}{PHP, Databases and Examples}
Take a database and a webserver, you need something in the middle.  This
talk is about different types of ``middle''.

PHP has basic database access methods, but often this is not enough unless
you reinvent the wheel.
\end{slide}
\begin{slide}{Types of database access}
Looking at various types:
\begin{itemize}
\item {\bfseries Simple} : Mnogosearch and Debian search page
\item {\bfseries raw PHP4} : Debian NM pages
\item {\bfseries PHPlib} : Good extensions to PHP
\item {\bfseries phpGroupWare} : Groupware Intranet service
\item {\bfseries PostNuke} : Weblog sites like Debian Help
\end{itemize}
\end{slide}

\begin{slide}{Simple Access}
This type assumes you do not need administration or users as it has no
session management or even the concept of a user.

This makes these pages the fastest, good for high volume sites or search
engines where everyone is equal.

Example: \url{http://search.debian.org}
\end{slide}

\begin{slide}{Extra Requirements}
To go beyond a simple page, you will need a system that provides extra 
features:
\begin{itemize}
\item A better database access method
\item Session management
\item User management
\item Access Control
\end{itemize}
\end{slide}

\begin{slide}{Raw PHP4}
This method uses the simple PHP4 functions directly with no extra layers
of software.
\begin{itemize}
\item Example: Debian New Maintainer website \url{http://nm.debian.org}
\item Very labourious but can be efficient if you write the functions correctly
as they are customised for your use.
\item Very easy to make the same mistakes others have made over and over again.
\end{itemize}
\end{slide}
\begin{slide}{Raw PHP4 (cont.)}
\begin{itemize}
\item Each database type has its own functions, eg PostgreSQL (\url{http://www.php.net/pgsql}) or MySQL (\url{http://www.php.net/mysql}).
\end{itemize}
\end{slide}

\begin{slide}{Raw PHP4 Example}
{\tiny
\begin{verbatim}
session_start();
if (session_is_registered('s_username')) {
  $db = pg_connect(...
  $result = pg_exec($db, "SELECT * FROM mytable WHERE id=$id");
  while ($row = @pg_fetch_array($result)) {
    echo "This user is called ".$row[username]."<br>";
  }
}
\end{verbatim}
}
\end{slide}

\begin{slide}{PHPlib}
PHPlib is a set of extensions to PHP, was around in the PHP3 days.
\begin{itemize}
\item Provides session management and variables, templates and DB access.
\item Quite old and it shows in places.
\item Not fully using PHP4 enhancements.
\item Good general purpose library set.
\end{itemize}
\end{slide}

\begin{slide}{PHPlib Example}
{\tiny
\begin{verbatim}
pageopen(array('sess' => 'EXAMPLE_Session');
$db = DB_EXAMPLE;
$db->query("SELECT * FROM mytable WHERE id=$id");
$t = new Template();
// template setup here
while($db->next_record()) {
  $t->set_var('username', $db->f('username'));
  $t->parse('user_list', 'user_cell', true);
}
$t->pparse('out', 'page');
page_close();
\end{verbatim}
}
\end{slide}
\begin{slide}{PHPGroupWare}
PHPGroupware is a (mainly) intranet based groupware server providing email,
calendaring etc. \url{http://phpgroupware.sourceforge.net/}
\begin{itemize}
\item Very much object orientated, uses a lot of classes.
\item Uses same templating as PHPlib.
\item Database access uses own abstraction layer, similar to PHPlib.
\end{itemize}
\end{slide}

\begin{slide}{PHPGroupWare Example}
{\tiny
\begin{verbatim}
// setup variables in phpgw_info array
include('../header.inc.php');
$phpgw->db->$query = ("SELECT * FROM mytable WHERE id=$id");
// template creation same as phplib
while ($phpgw->db->next_record()) {
  // same as phplib
}
$phpgw->common->phpgw_footer();
\end{verbatim}
}
\end{slide}

\begin{slide}{PostNuke}
PostNuke is a weblog system allowing users on the Internet to post messages,
pictures or make comments. \url{http://www.postnuke.com/}
\begin{itemize}
\item Has session management and theming
\item No session variables or templating
\item Uses ADODB \url{http://php.weblogs.com/ADODB} for DB access (fast).
\item Current version Rogue, next version (in CVS) much better
\end{itemize}
\end{slide}

\begin{slide}{PostNuke Example}
{\tiny
\begin{verbatim}
include 'mainfile.php';
include 'header.php';
$result = $dbconn->Execute("SELECT * FROM mytable WHERE id=$id");
while(!$result->EOF) {
  $row = $result->GetRowAssoc(false);
  echo "This user is called ".$row[username]."<br>";
  $result->MoveNext();
}
include 'footer.php';
\end{verbatim}
}
\end{slide}

\begin{slide}{Last Thoughts}
\begin{itemize}
\item Work out what the app is for and choose a structure.
\item Plan the data and flow models correctly.
\item Don't assume people won't do bad things to the site.
\end{itemize}
\end{slide}
\begin{slide}{The End}
You can get this document at \url{http://www.eye-net.com.au/~csmall/talks/}.
\end{slide}
\end{document}
