0

I've built a site on my test server and now I'm putting it on a new server that will host my site. I'm using PDO for my connections and once the prepared statement executes I redirect back to the homepage of my website but now that my sites on a different server I'm getting this error

ERROR

Cannot modify header information - headers already sent by (output started at /home1/mlayzell/public_html/alpha/cms/includes/my-db-functions.php:17)

The code it self is for a membership activation, a user signs up it e-mails the user a confirmation e-mail they click then link and then there account gets changed to active. Here is my code if anyone could please help me figuring this out it would be very much appreciated, thanks in advance!

MY-DB-FUNCTION.PHP

<?php
require("config.php");
function connect_to_db() {
global $dbhost, $dbname, $dbuser, $dbpass, $db;

try {
    $db = new PDO('mysql:host='.$dbhost.';dbname='.$dbname.'', $dbuser, $dbpass);
    $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
} 
catch(PDOException $error) {
    echo 'ERROR: ' . $error->getMessage();
}

}
?>

PHP

if($_GET['action']==0) {

if(isset($_POST['name'],$_POST['email'],$_POST['password'])) {

    $key = md5(rand(0,1000));
    $date = date('Y-m-d H:i:s');

    $statement_user = $db->prepare("INSERT INTO `app_users` ( `use_name`, `use_key`, `use_email`, `use_password`, `use_date`, `use_status`, `use_typ_id`) VALUES (:use_name, :use_key, :use_email, :use_password, :use_date, :use_status, :use_type);");

    $statement_user->execute(array(':use_name' => $_POST['name'], ':use_key' => $key, ':use_email' => $_POST['email'], ':use_password' => $_POST['password'], ':use_date' => $date, ':use_status' => "0", ':use_type' => "0"));


        $to = $_POST['email'];  
        $subject = 'Signup | Verification';  
        $message = ' 

Thanks for signing up! 
Your account has been created, you can login with the following credentials after you have activated your account by clicking the link below. 

------------------------ 
Email: '.$email.' 
Password: '.$password.' 
------------------------ 

Please click this link to activate your account: 

http://theapplist.com/alpha/cms/users/handler-users.php?action=5&use_email='.$_POST['email'].'&use_key='.$key.' 

';

            $headers = 'From:noreply@mysite.com' . "\r\n"; 
            mail($to, $subject, $message, $headers);  

            header('location:../index.php?signup=success');
        }
        else {

            echo "FAIL";
        }
    }
Mitchell Layzell
  • 3,058
  • 3
  • 20
  • 33

1 Answers1

1

Since, you are using header('location:../index.php?signup=success');

after outputting some data to the browser already, that error will always happen.

because, the header() function or headers should be sent, before your pages even starts to render any html tags, before any of your page's contents are loaded into the browser.

So if you need a small hack to get around of this problem include echo ob_start() at the very top of your document. even before the <html>

like this:

<?php echo ob_start(); ?>
<html>
<head></head>
//and keep going
samayo
  • 16,163
  • 12
  • 91
  • 106