Lesson 25 - Write to a file

Features

While our forms have been sending emails, it would be nice if all the data were captured in a text file that we could later download and put into a spreadsheet.

The spredsheet would allow us to import the data (without rekeying) into a “contact database”.

 

Request Info Pretty
Click here to see a larger image

Actions

Arrow Red Right Click to see Lesson25_WriteFile.php in action on this tutorial site. Note: if you enter name an email in this form, you will send me an email.

Download this file: Lesson25_WriteFile.txt to your PC. Change:

  • the extension to php
  • the recipient address
  • the pointers to the style sheet
  • the pointers to the directory where you want the text file

Then upload all to your website. The “thank yous” should be there from the previous lesson.

Make sure the file permissions on the “directory/file to be written” are correct. See Gotchas below.

Surf to the Lesson25_WriteFile.php file on your website with your browser. You should see results similar to the image above on the right.

After completing the form and clicking “Send me more info”, you should receive an email with this in the body:

Please send me more information about Acme products
First Name = your first name
Last Name = your last name
Email = you@yoursdomain.com

My interests are:
Favorite Characters = Bugs Bunny, Daffy Duck, Wiley Coyote
Age Group = Adult
Add me to mailing list = No

Comments =first line
second line
third line

And, you should receive a confirming email, a line of text was written to the file and you should be sent to the Thank You page.

Gotchas

File permissions! Here is the problem. You (“owner”) own the directory and file that is to be written. PHP is not you. It is part of the “world”. This means that the permissions on the directory/file must allow the world to write. That is, the permissions must be rw-rw-rw- (or in Octal: 666).

Some would say that you should use chgrp and chmod to set the file permissions on your directory/file so you can write to it. Just one minor problem. If your hosting company has PHP running in safe_mode, then you can’t use these functions.

This leaves you with manually changing the permissions OUTSIDE of PHP. You connect to your website via FTP and use chmod to change the directory/file permssions. Sometimes, your web hosting company will not allow you to do this. Time to call them.

Source Code

This example assumes that we have set the directory/file permissions outside of PHP to allow the PHP code to write to the file.

The pointers to the file and the email addresses are at the beginning of the file. fopen, fwrite and fclose functions have been added to get the data into the file.

  <?php
  ob_start
();  /* Start buffer so we can use header anywhere in the page  */
  
$fileToBeWritten "../../../Data_Repository/Acme_Demographic_Data.txt";
  
$recipientAcme "dave@marketingtactics.com";
  
$senderAcme  "dave@barnesfamily.com";
?>
  
<html>
<head>
  <title>A Request Info Form writes to a file.</title>
  <link rel="stylesheet" href="/PHP_Tutorials/Styles/PHP_Tutorials_Forms_Style.css" type="text/css">
</head>

<body>
<h1>Request Information from the Acme Company</h1>
<form method="POST" name="FirstEmailForm" action="<?php echo($PHP_SELF); ?>" >
  <table width="550" border="0" cellspacing="2" cellpadding="0" bgcolor="#DFDFDF">
    <tr>
      <td colspan="2" class="FormCategoryName">About You</td>
    </tr>
    <tr>
      <td width="200" class="FormVariableName" align="right">
        First Name:<span style="color:red">*</span>
      </td>
      <td width="344">
        <input type="text" name="contactFirstName" value="<?php print $_POST['contactFirstName']; ?>" >
        &nbsp;<span class="Footer" style="color:red">* = Required</span>
      </td>
    </tr>
    <tr>
      <td width="200" class="FormVariableName" align="right">
        Last Name:<span style="color:red">*</span>
      </td>
      <td width="344">
        <input type="text" name="contactLastName" value="<?php print $_POST['contactLastName']; ?>" >
      </td>
    </tr>
    <tr>
      <td width="200" class="FormVariableName" align="right">
        Email:<span style="color:red">*</span>
      </td>
      <td width="344">
        <input type="text" name="contactEmail" value="<?php echo $_POST['contactEmail']; ?>" >
      </td>
    </tr>
    <tr>
      <td valign="Top" class="FormCategoryName" colspan="2">Interests</td>
    </tr>
            
      <td align="right" valign="Top" class="FormVariableName">Favorite Characters:</td>
            <td valign="Top">
<?php
if($_POST['contactCharacterBugs'] == "YES")
$cbvalue "checked"; }
else
$cbvalue "unchecked"; }
echo(
"<input type='checkbox' name='contactCharacterBugs' value='YES'" .$cbvalue .">Bugs Bunny<br>");
if(
$_POST['contactDaffy'] == "YES")
$cbvalue "checked"; }
else
$cbvalue "unchecked"; }
echo(
"<input type='checkbox' name='contactDaffy' value='YES'" .$cbvalue .">Daffy Duck<br>");
if(
$_POST['contactRoadRunner'] == "YES")
$cbvalue "checked"; }
else
$cbvalue "unchecked"; }
echo(
"<input type='checkbox' name='contactRoadRunner' value='YES'" .$cbvalue .">Road Runner<br>");
if(
$_POST['contactCoyote'] == "YES")
$cbvalue "checked"; }
else
$cbvalue "unchecked"; }
echo(
"<input type='checkbox' name='contactCoyote' value='YES'" .$cbvalue .">Wiley Coyote");
?>
              </td>
          </tr>
    <tr>
      <td  align="right" valign="Top" class="FormVariableName" width="200"> Age Group:</td>
      <td valign="Top" width="344">
        <select name="contactAgeGroup">
          <option value="NONE">Select One</option>
          <option value="Kid">Child</option>
          <option value="Teen">Teenager</option>
          <option value="TatooFreak">GenX</option>
          <option value="Adult">Adult</option>
          <option value="OldFart">Senior</option>
<?php  
switch ($_POST['contactAgeGroup'])
{
  case 
"Kid":
    print (
"<option value=\"Kid\" selected>Child<option>");
    break;
  case 
"Teen":
    print (
"<option value=\"Teen\" selected>Teenager<option>");
    break;
  case 
"TatooFreak":
    print (
"<option value=\"TatooFreak\" selected>GenX<option>");
    break;
  case 
"Adult":
    print (
"<option value=\"Adult\" selected>Adult<option>");
    break;
  case 
"OldFart":
    print (
"<option value=\"OldFart\" selected>Senior<option>");
    break;
}
?>
        </select>
     </td>
    </tr>
    
          
    <tr>
            
      <td  align="right" valign="Top" class="FormVariableName" width="200">Please add to me to your mailing list:</td>
      <td valign="Top" width="344">
        <?php
if ($_POST['contactAddMailingList'] == "YES")
{
echo (
"<input type='radio' name='contactAddMailingList' value='YES'  checked>YES<br>
       <input type='radio' name='contactAddMailingList' value='No'>No"
);
}
elseif (
$_POST['contactAddMailingList'] == "No")
{
echo (
"<input type='radio' name='contactAddMailingList' value='YES'>YES<br>
       <input type='radio' name='contactAddMailingList' value='No' checked>No"
);
}
else
{
echo (
"<input type='radio' name='contactAddMailingList' value='YES'>YES<br>
       <input type='radio' name='contactAddMailingList' value='No'>No"
);
}
?>
          
       </td>
    </tr>
    <tr>
      <td  align="right" valign="Top" class="FormVariableName" width="200">Comments:</td>
      <td valign="Top" width="344">
        <textarea name="contactComments" rows="4" cols="40"><?php print $_POST['contactComments']; ?></textarea>
      </td>
    </tr>
    <tr>
      <td width="200" class="FormVariableName" align="right">
      </td>
      <td width="344">
        <input type="hidden" name="firstPass" value="No">
        <input type="submit" name="subRequestButton" value="Send me more info">
        <br>
        <span class="Footer">Please click only once.</span>
      </td>
    </tr>
  </table>
</form>

<?php
/* Set variables equal to their "posted" values". We need to do this because "register_globals = off" is the default.  */
$contactFirstName $_POST['contactFirstName'];
$contactLastName $_POST['contactLastName'];
$contactCharacterBugs $_POST['contactCharacterBugs'];
$contactDaffy $_POST['contactDaffy'];
$contactRoadRunner $_POST['contactRoadRunner'];
$contactCoyote $_POST['contactCoyote']; 
$contactEmail $_POST['contactEmail'];
$contactAgeGroup $_POST['contactAgeGroup'];
$contactAddMailingList $_POST['contactAddMailingList'];
$contactComments $_POST['contactComments'];

$firstPass $_POST['firstPass'];

if(
$firstPass == "No")
{
  
/* If the user skipped required fields or entered invalid values, write an appropriate error message. */
  
if ($contactFirstName == "")
    exit(
"<p class='PhpError'>Your First Name is missing.</p>");
  if (
$contactLastName == "")
  {
    exit(
"<p class='PhpError'>Your Last Name is missing.</p>");
  }
  if (!(
eregi("^[a-z0-9\._-]+@+[a-z0-9\._-]+\.+[a-z]{2,4}$",$contactEmail))):
    exit(
"<p class='PhpError'>Email Address appears to be invalid.</p>");
  endif;
  
$emailDomain ltrim(strstr($contactEmail'@'), '@');   
  if(!(
checkdnsrr($emailDomainANY)))
    exit(
"<p class='PhpError'>Email Address Domain can not be found on the internet.</p>");
    
  
/* Construct list of favorite characters  */
  
$favoriteCharactersList "";
  if (
$contactCharacterBugs == "YES")
     
$favoriteCharactersList .= "Bugs Bunny, ";
  if(
$contactDaffy == "YES")
     
$favoriteCharactersList .= "Daffy Duck, ";
  if(
$contactRoadRunner == "YES")
     
$favoriteCharactersList .= "Road Runner, ";
  if(
$contactCoyote == "YES")
     
$favoriteCharactersList .= "Wiley Coyote";
    
  
/* Create Date Time in Human Readable Form */
  
$humanDateTime date("Y") . strtoupper(date("M")) . date("d H:i");

  
/* Replace all LineFeeds within Comments with 2 spaces. */
  
$commentsSingleLine str_replace("\n""  "$contactComments);
  
$commentsSingleLine str_replace("\r""  "$commentsSingleLine);
    
  
/* Construct the email messages  */
  
$messageToAcme "Please send me more information about Acme products";
  
$messageToAcme .= "\n\n First Name = " $contactFirstName;
  
$messageToAcme .= "\n Last Name = " $contactLastName;
  
$messageToAcme .= "\n Email = " $contactEmail;
  
$messageToAcme .= "\n\n My interests are:";
  
$messageToAcme .= "\n Favorite Characters = " $favoriteCharactersList;
  
$messageToAcme .= "\n Age Group = " $contactAgeGroup;
  
$messageToAcme .= "\n Add me to mailing list = " $contactAddMailingList;
  
$messageToAcme .= "\n\n Comments = " $contactComments;
  
$fullAcmeName $contactFirstName ." " .$contactLastName;
  
$mailAcmeHeaders "From: \"".$fullAcmeName."\"<".$contactEmail.">\n";  
  
$mailAcmeHeaders .= "Reply-to: ".$contactEmail;
  
  
$messageToRequestor "Thanks, " .$contactFirstName .", for requesting information about Acme products";
  
$messageToRequestor .= "\n Your email will totally ignored just like 38% of the F500 ignore emails.";
  
$mailRequestorHeaders "From: \"Dave Barnes\"<dave@marketingtactics.com>\n";  
  
$mailRequestorHeaders .= "Reply-to: " ."dave@marketingtactics.com";
  
  
/* Build the line of data to be appended to the data file */
  /* WARNING - Do not change the order of the items in the file */
  /* This file is imported (using a map) by Marketing */
  
$messageDataLine $humanDateTime "|";
  
$messageDataLine .= "reqinfo" "|";
  
$messageDataLine .= $contactFirstName "|";
  
$messageDataLine .= $contactLastName "|";
  
$messageDataLine .= $contactEmail "|";
  
$messageDataLine .= $favoriteCharactersList "|";
  
$messageDataLine .= $contactAgeGroup "|";
  
$messageDataLine .= $contactAddMailingList "|";
  
$messageDataLine .= $commentsSingleLine "|" "\n";
  
  if (
mail($recipientAcme"Please Send Acme Info"$messageToAcme$mailAcmeHeaders))
  {
    
mail ($contactEmail"Acme Request Received"$messageToRequestor$mailRequestorHeaders);
    
$handleAcmeFile fopen($fileToBeWritten"a");
    
$fwriteSuccess fwrite($handleAcmeFile$messageDataLine);
    
$fcloseSuccess fclose($handleAcmeFile);
    
header("Location: ../../ThankYous/Thanks_Request_Info_Success.html");  /* Redirect browser */
    
exit;                                                                 /*   Make sure that code below does not get executed when we redirect. */
  
}
  else
  {
    
header("Location: ../../ThankYous/Thanks_Request_Info_Failure.html");
    
mail("webmaster@marketingtactics.com""Acme, Request Info Failure"$messageToAcme$mailAcmeHeaders);
    exit;
  }
}
?>


</body>
</html>
<?php
  ob_end_flush
();
?>

Final Thoughts

None.

Go To MarketingTactics home