Ok thanx.. yeah I knew that you can set a cookie before anything is set to
the browser, however, if you view my code, nothing is sent as output before
the cookie is set.

<?
  // Don't forget you have to use php4.cgi to call this script and this
script's URL will be:
  // /cgi-bin/cgiwrap/ppowell/php4.cgi/~ppowell/my/process.php

  phpinfo();
  $willChangeLayout = 1; $isEmptyLayoutValues = 1;

  $path = $DOCUMENT_ROOT . "/my/";

  // SERVER-SIDE VALIDATION
  foreach ($HTTP_POST_VARS as $key => $val) {
   if (strcmp($key, "isDefaultLayout") == 0) $willChangeLayout = 0;
   if (!empty($HTTP_POST_VARS[$key])) $isEmptyLayoutValues = 0;
   if (!empty($HTTP_POST_FILES['myImage']['name'])) $isEmptyLayoutValues =
0;
  }

  if ($willChangeLayout && $isEmptyLayoutValues) {
   header("Location: " . $refURL . "?errorMsg=" . urlencode("Please fill out
all required fields"));
   //--END OF SERVER-SIDE VALIDTION
  } else {

  // FILE UPLOAD HANDLING

   if (!is_dir("$path/images/")) mkdir("$path/images/", 0755);

   if (is_uploaded_file($HTTP_POST_FILES['myImage']['tmp_name']) &&
       !file_exists("$DOCUMENT_ROOT/my/images/" .
$HTTP_POST_FILES['myImage']['name']) &&
       $willChangeLayout)
    move_uploaded_file($HTTP_POST_FILES['myImage']['tmp_name'], $path.
"/images/" . urlencode($HTTP_POST_FILES['myImage']['name']));
   //--END OF FILE UPLOAD HANDLING


   // IF LAYOUT COLORS HAVE BEEN SUBMITTED COMBINE THEM INTO WORKABLE STRING
TO PLACE INTO FILE
   if ($willChangeLayout) {

    $stuff = "";

    // OPEN UP FILE "layout.txt" TO GET MOST CURRENT ID, ELSE DEFAULT TO 1
    if (file_exists("$path/layout.txt")) {
     $layoutID = fopen("$path/layout.txt", "r") or die("Could not open file:
$path/layout.txt");
     $stuff .= fread($layoutID, filesize("$path/layout.txt"));
     fclose($layoutID) or die("Could not close file: $path/layout.txt");
     // OBTAIN MAX ID BY DOING PREG_MATCH_ALL TO GET ALL PATTERNS OF
"id=number"
     preg_match_all("/id=[0-9]+/", $stuff, $idArray, PREG_PATTERN_ORDER);
     list($key, $id) = split("=", end($idArray[0]));
     $id++;
    } else {
     $id = 1;
    }

    $layoutString = "id=" . $id . "&";

    $varExceptionArray = array("isDefaultLayout", "submit", "refURL",
"previewButton", "cancel",
                              "MAX_FILE_SIZE");
    foreach ($HTTP_POST_VARS as $key => $val) {
     if (!in_array($key, $varExceptionArray)) {
      $val = preg_replace("/&/", "#", $val); // IN THEORY YOUR EXTERNAL
IMAGE HAS NO "&"
      $val = preg_replace("/=/", "#", $val); // IN THEORY YOUR EXTERNAL
IMAGE HAS NO "="
      if (strcmp($key, "myExternalImage") == 0) {
       $layoutString .= "background=" . urlencode($val) . "&";
      } else {
       $layoutString .= $key . "=" . urlencode($val) . "&";
      }
     }
    }

    if (!empty($HTTP_POST_FILES['myImage']['name'])) {
     $layoutString .= "background=" .
urlencode($HTTP_POST_FILES['myImage']['name']);
    } else {
     $layoutString = substr($layoutString, 0, -1);
    }
    $layoutID = fopen("$path/layout.txt", "w") or die("Could not write to
file: $path/layout.txt");
    fwrite($layoutID, $stuff . $layoutString . "\n");
    fflush($layoutID); fclose($layoutID);
    // SET THE COOKIE FOR LAYOUT
    setcookie("valLayout", $id, time()+3600*24*30*12*100, $SERVER_NAME); //
WILL EXPIRE IN 100 YEARS.. UM YEAH
   } else {  // $willChangeLayout IS FALSE YOU ARE USING "isDefaultLayout" -
DESTROY COOKIE
    $id = $HTTP_COOKIE_VARS["valLayout"];
    if (empty($id)) $id = 0;
    // DELETE ENTRY FROM layout.txt
    $layoutID = fopen("$path/layout.txt", r) or die("Could not open file:
$path/layout.txt");
    $stuff = fread($layoutID, filesize("$path/layout.txt"));
    fclose($layoutID) or die("Could not close file: $path/layout.txt");
    preg_match_all("/id=[\n]+\n/", $stuff, $idArray, PREG_PATTERN_ORDER);
    preg_replace("end($idArray[0])", "", $stuff);
    $layoutID = fopen("$path/layout.txt", w) or die("Could not open file:
$path/layout.txt");
    fwrite($layoutID, $stuff); fflush($layoutID); fclose($layoutID);
    // DELETE COOKIE
    setcookie("valLayout", "", time()-3600, $SERVER_NAME);
   }
   //--END OF LAYOUT COLOR TO WORKABLE STRING HANDLING

   // REDIRECT
   header("Location: " . $HTTP_POST_VARS["refURL"]);

  } //--END OF LAYOUT CHANGING
?>

Perhaps I'm just not finding it. :(

Phil
"John W. Holmes" <[EMAIL PROTECTED]> wrote in message
000e01c26754$cf27c8c0$7c02a8c0@coconut">news:000e01c26754$cf27c8c0$7c02a8c0@coconut...
> You can only set a cookie before any output is send to the browser. A
> newline, space, or <html>, etc, is output to the browser. Redesign your
> code so the cookie is set before any output or use output buffering.
>
> ---John Holmes...
>
> > -----Original Message-----
> > From: Phil Powell [mailto:[EMAIL PROTECTED]]
> > Sent: Saturday, September 28, 2002 9:03 PM
> > To: [EMAIL PROTECTED]; [EMAIL PROTECTED]
> > Subject: [PHP] Help! Can't set cookie or redirect!!!
> >
> > I am getting the following errors attempting to set a cookie and
> redirect:
> >
> > Warning: Cannot add header information - headers already sent by
> (output
> > started at /users/ppowell/web/my/process.php:5) in
> > /users/ppowell/web/my/process.php on line 76
> >
> > Warning: Cannot add header information - headers already sent by
> (output
> > started at /users/ppowell/web/my/process.php:5) in
> > /users/ppowell/web/my/process.php on line 77
> >
> >
> > Lines:
> >
> >    setcookie("valLayout", $id, time()+3600*24*30*12*100,
> $SERVER_NAME); //
> > WILL EXPIRE IN 100 YEARS.. UM YEAH
> >     header("Location: " . $HTTP_POST_VARS["refURL"]);
> >
> > The first time I ran this script it set the cookie just fine;
> subsequent
> > runnings of this script produce this error.  What am I doing wrong,
> > anyone?
> >
> > Thanx
> > Phil
>
>



-- 
PHP General Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php

Reply via email to