Reputation: 129
Could you please help me? My website does not set the following simple cookie. Although some other login scripts does but this one does not work. Thanks
test.php
...
<form action="test2.php" method="post">
Email: <br />
<input type="email" name="email" value=""/> <br />
<input type="submit" name="submit" value="Next"/>
</form>
...
test2.php
<?php ob_start(); ?>
<?php
// call the header of the page
require('header.html');
// connect to database
require "connect.php";
?>
<?php
$email = $_POST['email'];
// set cookie
$one_hour = time() + 3600;
$set = setcookie(user_email, $email, $one_hour);
if($set == TRUE) {
print '<p> Cookie set</p>';
} else {
print '<p> Cookie not set</p>';
}
// call footer of the page
require('footer.html');
?>
<?php ob_flush(); ?>
After running the above scripts, I get this error:
Warning: Cannot modify header information - headers already sent by (output started at /websites/public_html/test2.php:1) in /websites/public_html/test2.php on line 16
Cookie not set
Upvotes: 0
Views: 552
Reputation: 1828
just change above code in following way and try, put ob_start() after require()
<?php
require "connect.php";
require('header.html');
?>
<?php ob_start(); ?>
Upvotes: 2
Reputation: 219087
You're sending content to the output buffer before you need to:
<?php ob_start(); ?>
<--- right here
<?php
// call the header of the page
require('header.html');
// connect to database
require "connect.php";
?>
<--- and right here
<?php
$email = $_POST['email'];
You should get rid of that unnecessary whitespace in the output so you can conduct your server-side processing (including header modification) before building output.
Ideally, you don't want to mix the two. The server-side processing should occur before the output is built, then the output would be built using the results of the processing and sent to the client.
Upvotes: -1