![]() Visit the Official PHP Website |
PHP ProgrammingBy James N HitzThe CodeThe code that accepts and processes the form (/php-bin/mail_lst.php) is as follows:
<html><head><title>PHP Mailing List</title></head>
<body>
<h2>PHP Mailing List</h2>
<?php
$datafile = '/www/home/php-bin/list.file';
$formTop = "<form action=\"http://localhost/php-bin/mail_list.php\" method=POST>";
$formBot = "<br><input type='reset' value='clear'> <input type='submit' value='Ok'>";
if(!preg_match("/^[\w_\.]+\@[\w_\.]+\.(\w){2,3}$/",$mail)){
$outString = "Email Address: <input type='text' name='mail'><br>";
} else {
$formOk = "<input type=\"hidden\" name=\"mail\" value=\"$mail\">";
}
if($action == 1){ //if we are subscribing...
if(!preg_match("/^\w+$/", trim($fName))){
$outString .= "First Name: <input type='text' name='fName'><br>";
}else{
$formOk .= "<input type=\"hidden\" name=\"fName\" value=\"$fName\">";
}
if(!preg_match("/^\w+$/", trim($lName))){
$outString .= "Last Name: <input type='text' name='lName'><br>";
} else {
$formOk .= "<input type=\"hidden\" name=\"lName\" value=\"$lName\">";
}
if(strlen($outString) > 0){
print "<h2>Subscription Error</h2>".
"<p>Please supply valid information in the relevant field(s)".
" below. This is information is required:</p>".
$formTop.$outString.$formOk.
"<input type='hidden' value=1 name='action'>" . $formBot;
exit();
}
if(!$dfHandle = fopen($datafile,'a+')){
print "Internal Error. Cannot open data file";
exit();
}
//read entire file into array (this has its dis-advantages)
$allFile = file($datafile);
reset($allFile); //rewind array pointer
//search if email address already exists in list
while(list($linenum,$line) = each($allFile)){
$items = preg_split("/\|/",$line);
if( preg_match("/^$mail$/", $items[2]) ){
print "<p>Cannot add <b>$items[2]</b>. ".
"It already exists in the mailing list.";
exit();
}
}
unset($allFile); //release variable - save RAM
//email does not exist. Add it and thank user
$writeString = "$fName|$lName|$mail\n";
fwrite($dfHandle,$writeString);
fclose($dfHandle);
print "<p>Thank you <b>$lName</b>. ".
"Your address <b>$mail</b> has been added".
" to the PHP mailing list";
} elseif($action ==2) { //We are unsubsribing
if(strlen($outString >0)){
print "<h3>UnSubscription Error</h3>".
"<p>The specified email address is invalid. ".
"Please re-enter:" .$formTop.$outString.
"<input type='hidden' value=2 name='action'>" . $formBot;
exit();
}
$tempfile = "./temp.file";
$dfHandle = fopen($datafile,'r') or die("Error. Cannot open data file.");
$tmp = fopen($tempfile, 'w') or die("Cannot create or open temp file");
//read entire file into array
$allFile = file($datafile);
while(list($linenum,$line) = each($allFile)){
$items = preg_split("/\|/",$line);
if( preg_match("/^$mail$/", $items[2]) ){
$found = 1;
} else {
fwrite($tmp,"$line");
}
}
fclose($tmp);
fclose($dfHandle);
unlink($datafile) or die("Cannot erase datafile");
copy($tempfile,$datafile);
unlink($tempfile) or die("Cannot erase tempfile");
if($found){
print "Your email address <b>$mail</b> has been successfully".
" removed from the PHP mailing List";
}else {
print "The specified email address <b>$mail</b> does not exist ".
"in the database. Please ensure that you typed it correctly";
}
} elseif($action == 3){
$dfHandle = fopen($datafile,'r') or die("Internal Error. Cannot open data file");
echo "<h3>Current Subscriptions to the PHP Mailing List</h3>";
echo "<table width=\"100%\" bgcolor=\"#FFFFCC\" border ".
"cellspacing='0' cellpadding='3'>\n".
"<tr bgcolor='#FFCC99'><td>First Name</td><td>Last Name</td>".
"<td>Email Address</td></tr>";
$allFile = file($datafile);
while(list($linenum, $line)= each($allFile)){
$items = preg_split("/\|/",$line);
print "<tr><td>$items[0]</td><td>$items[1]</td><td>$items[2]</td></tr>\n";
}
echo "</table>";
}
?>
</body></html>
This code is VERY lengthy. The longest so far. We'll explain it slowly and patiently until we are through with it. You may need to read and re-read the explanations and hopefully things will be Aw-Okey! Go! |
JamHitz
Productions