Redirecting using header after updating database [duplicate] - php

This question already has answers here:
How to fix "Headers already sent" error in PHP
(11 answers)
Closed 8 years ago.
I need help with redirecting using header.
My code:
<?php
if($fname != "") {
$query = mysql_query("UPDATE customer_address SET first_name='$fname',last_name='$lname',company='$company',company_id='$company_id',
address_1='$address_1',address_2='$address_2',city='$city',county='$county', post_code='$postcode',country='$country'
WHERE address_id='$editThisId';");
if($query==true) {
header('Location: address.php');
} else {
echo "Update Error!";
}
}
And I get the following error:
Warning: Cannot modify header information - headers already sent by (output started at C:\xampp\htdocs\eula\edit-address.php:72) in C:\xampp\htdocs\eula\edit-address.php on line 129
Pastebin for whole file: http://pastebin.com/vj2Mp7u0
Thanks in advance!

You are getting this error because your server already sent information to the client's browser - Headers need to be sent first before any HTML is transferred.
Simply put the code which is supposed to redirect the user at the very top of your file before any HTML or echo-calls.
Alternatively, you can call ob_start() at the top of your file to disable output buffering and send the page as a whole after every bit of your PHP code has executed.

You can not have any html content being displayed before the header, example:
<html>
...
<?php
// your code
header('Location: address.php');
?>
Try putting the php code, before any html content.

"Remember that header() must be called before any actual output is sent, either by normal HTML tags, blank lines in a file, or from PHP. It is a very common error to read code with include, or require, functions, or another file access function, and have spaces or empty lines that are output before header() is called. The same problem exists when using a single PHP/HTML file."
from
http://www.php.net/manual/en/function.header.php

You could also try moving your php to the top of the page (before any of the HTML) instead of the bottom. That way the php would look for if(isset($_POST['submit'])) before anything on the page is rendered.
Your redirects should work then I think.

Related

PHP: Header wont redirect [duplicate]

This question already has answers here:
How to fix "Headers already sent" error in PHP
(11 answers)
Closed 9 years ago.
When i put my website online, all of the headers will not work. But when i built it, just on a local database etc. it worked "Works" fine.
I get this ERROR on the website currently:
Warning: Cannot modify header information - headers already sent by (output started at /customers/5/8/4/infuze.dk/httpd.www/index.php:22) in /customers/5/8/4/infuze.dk/httpd.www/includes/functions.php on line 16
I used my google foo a little and as far as i can understand is that i cant output any data before i use headers. But i dont thing that is the case here.
Here is the code i used in on the site.
if(empty($_GET['page'])){
header('location: index.php?page=homepage');
}
or at least one example
I usually get the error "Cannot modify header information - headers already sent by" when the page you're trying to redirect from contains information. Check to see if the script uses echo, include, require, etc., or contains HTML markup before the line at which you try to redirect.
<p>Hello!</p>
<?php
header('location: index.php?page=homepage');
?>
Will NOT work, because it sends the browser information before trying to redirect.
<?php
echo "Hi!";
header('location: index.php?page=homepage');
?>
Also won't work, because it also sends the browser information before trying to redirect.
<?php
header('location: index.php?page=homepage');
include('setup.txt');
?>
<h1>Amazing page!</h1>
WILL work, because it tries to send the browser information AFTER the redirect, but not before.
Headers won't redirect in the following conditions:
Any blank space is remaining in the file after ?> tag.
To avoid this, please avoid ending ?> tag (file end).
Please check whether, any echo or print statement is written accidentally.
Also, please check whether any HTML tag is remaining there.
If you follow, all this, your script will work.
Finally, in the starting of the file, put
ob_start()
This function will store all your page's output in a buffer and thus your redirection will work.
Try this;
<?php
ob_start();
// code
ob_end_flush();
?>
>> Call ob_start() at start of the script.
>> call ob_end_flush() at the end of script.
Thanks!

header of php not working btw html? [duplicate]

This question already has answers here:
How to fix "Headers already sent" error in PHP
(11 answers)
Closed 9 years ago.
<body>
<p>We hope to see you again..</p>
<?php header('Location: http://something/com'); ?>
</body>
how come? I copy the syntax from w3school
header() must be called before any actual output is sent, either by normal HTML tags, blank lines in a file, or from PHP. It is a very common error to read code with include, or require, functions, or another file access function, and have spaces or empty lines that are output before header() is called. The same problem exists when using a single PHP/HTML file.
You can do something like this:
<?php
$message = "We hope to see you again..";
header('Location: http://something/com?msg='.$message);
exit;
?>
And show your message in redirected page echo $_GET['msg'];
No whitespace before and heder() function. Header is before any output.
you need to put your code stat of that page
Like
<?php
header("Location: http://www.example.com/"); /* Redirect browser */
/* Make sure that code below does not get executed when we redirect. */
exit;
?>

Header location issue, how to solve it? [duplicate]

This question already has answers here:
How to fix "Headers already sent" error in PHP
(11 answers)
Closed 9 years ago.
I created a web site, with php and SQL using WampServer.
And after a condition or in boucle I use Header location to transfer the user to another page. But I got an error from the server, I think is because I use the header after a code and not in . I deleted all blank spaces.
if($passfinal['contrasena']==$_POST['password'])
{
$_SESSION['logedin']=TRUE;
$_SESSION['userid']=$passfinal['id'];
header('Location: ../index.php');
}
Do you have something to help me?
Thnak you.
I think, here is problem $_POST['password'], because before you make compare, first you must check if(isset($_POST['password'])), blank spaces isn't important in this case and last one: I advise you, that you must write full url in header function, like this: header('location: http://example.com/index.php'), because this is more nice and true way.
Warning: Cannot modify header information - headers already sent by (output started at /home/sirobdco/public_html/login/login.php:11) in /home/sirobdco/public_html/login/includes/loginform/loginform.php on line 37
You already sent headers so PHP cannot send them again!
That is, before your code
header('Location: ../index.php');
You already send headers - blank space in html, an echo in PHP, etc.
Have a read through this:
http://php.net/manual/en/function.header.php
Remember that header() must be called before any actual output is sent, either by normal HTML tags, blank lines in a file, or from PHP. It is a very common error to read code with include, or require, functions, or another file access function, and have spaces or empty lines that are output before header() is called. The same problem exists when using a single PHP/HTML file.

Can i change header redirect in php to javascript redirect with same status in PHP [duplicate]

This question already has answers here:
Closed 10 years ago.
Possible Duplicate:
Headers already sent by PHP
My site is http://www.seoitc.com, we are using joomla for this site, but have 1 problem when i try auto redirect to anypage that show error: Warning: Cannot modify header information - headers already sent by ().
I tried change redirect to use js but cant use same status(302,303...) same as in php. Please help to fix this problem please.
Thanks!
Any output is being sent before you call your header function. Check for any html code before your header call, even a white space or a blank line will cause that
According to PHP Manual
Remember that header() must be called before any actual output is
sent, either by normal HTML tags, blank lines in a file, or from PHP.
It is a very common error to read code with include, or require,
functions, or another file access function, and have spaces or empty
lines that are output before header() is called. The same problem
exists when using a single PHP/HTML file.
You can use ob_start() at the top of the page. to prevent error.
but also you can use this code. if any error happens in your page it will redirect you to the $page:
// page address
function redirect($page)
{
header("Location: ".$page);
}
set_error_handler("redirect");
And you can check this out: Headers already sent by PHP

header function [duplicate]

This question already has answers here:
Closed 10 years ago.
Possible Duplicate:
Headers already sent by PHP
I have a PHP file which I'm using to check username and password. This part is working, but after successful login I would like to use header() to redirect to user panel page. This is the logged error that I'm getting:
[10-Dec-2012 12:25:26] PHP Warning: Cannot modify header information - headers already sent by (output started at /home2/jzperson/public_html/imes/php/login.php:10) in /home2/jzperson/public_html/imes/php/login.php on line 32
This is line 10:
<script src="http://code.jquery.com/jquery-1.7.2.min.js"></script>
And this is line 32:
header("Location: http://imes.jzpersonal.com/userpanel.html");
Any idea why?
You probably have some output echoed out before getting to the line 32 with your header call.
See description of the header function: http://php.net/manual/en/function.header.php
Remember that header() must be called before any actual output is sent, either by normal HTML tags, blank lines in a file, or from PHP. It is a very common error to read code with include, or require, functions, or another file access function, and have spaces or empty lines that are output before header() is called. The same problem exists when using a single PHP/HTML file.
Clarifications
To clarify things a little bit, the redirection using header() is performed by including a raw location response-header field to the server response. When the receiving party reads the response and sees that header field, it drops the current response and issues another request to the destination you provided.
Now, headers always come at the top (head) of the server response. That's why they are called headers! If you output any content, PHP will immediately "prefix" it with default headers and it's not possible to add any more of them after this point. So, by attempting to set another header later in your code, you get an error:
Cannot modify header information - headers already sent
By outputting HTML at line 10 you can no longer issue any more headers, because they were already sent (prefixed to your HTML output).
You can find more information about headers here: http://www.faqs.org/rfcs/rfc2616.html
Basically, you need to check whether the user is logged in or not (and redirect) before anything is sent to the browser (before HTML). Your code, then, would look something like this:
<?php
...
if($loggedIn)
{
header("Location: http://imes.jzpersonal.com/userpanel.html");
exit();
}
?>
<html>
...
<script src="http://code.jquery.com/jquery-1.7.2.min.js"></script>
You are trying to write something before header statement
Remove any echo statements/html content before header statement. That should do the trick
You could also cheat and just use output buffering - at the very beginning of the script tree use ob_start(); to begin capturing the output. You can use headers and set cookies etc as much as you like then.
At the last line of the script tree use ob_end_flush(); to send the output. You can also grab it to a variable to further process if you wish with $buffer = ob_get_clean();
Although its not a solution as such it does allow for a more flexible coding environment AND it will solve your above problem.
Its best to flush and die if you are going to be sending a Location header:
ob_start();
/* very long snip */
header('Location: somepage.php');
ob_end_flush();
die();
This will prevent any further processing after the location change has been sent.
Just as a side note: When I speak of a script tree I mean the include path - like put the ob_start(); into a header file thats included before anything else and a footer file that flushes (and processes if required) the output buffer. Remembering, as highlighted above, that Location changes should have the script halted immediately after.
Sessions may also need to be closed with a header Location followed by a die - to use that simply
ob_start();
/* very long snip */
header('Location: somepage.php');
ob_end_flush();
session_write_close();
die();
I found that one out after hours of wondering why session data was being lost! Bear that on mind.
You can't use header(); if anything has already been sent as output. This means HTML. Do all your PHP processing first, then output your HTML/JS.

Categories