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