-3

I am trying to make a login and register system in PHP and i keep getting an error code when i use header("Location: index.php")and this is the error i get:

Warning: Cannot modify header information - headers already sent by (output started at C:\Users\Omg\Desktop\XAMPP\htdocs\Websites\Social-Network\register.php:43) in C:\Users\Omg\Desktop\XAMPP\htdocs\Websites\Social-Network\register.php on line 141 index.php

Here's my PHP code:

if(!empty($_POST)) {
  if(empty($_POST['username'])){
    echo("Please enter a Display Name<br />");
  }
  if(empty($_POST['password'])){
    echo("Please enter a password<br />");
  }

  if(!filter_var($_POST['email'], FILTER_VALIDATE_EMAIL)){
    echo("Please enter a valid email address<br />");
  }

  $query = "
      SELECT 
          1
      FROM users
      WHERE
          username = :username
  ";

  $query_params = array(
    ':username' => $_POST['username']
  );
  try{
    $stmt = $db->prepare($query);
    $result = $stmt->execute($query_params);
  }
  catch(PDOException $ex) {
    die("Failed to run query: ");
  }
  $row = $stmt->fetch();

  if($row){
    echo("This name is taken by another person<br />");
  }
  $query = "
      SELECT 
          1
      FROM users
      WHERE
          email = :email
  ";

  $query_params = array(
    ':email' => $_POST['email']
  );
  try{
    $stmt = $db->prepare($query);
    $result = $stmt->execute($query_params);
  }
  catch(PDOException $ex) {
    echo("Failed to run query: ");
  }

    $row = $stmt->fetch();

  if($row){
    echo("This email is already taken!<br />");
  }

  $query = "
      INSERT INTO users (
        username,
        password,
        salt,
        email
      ) VALUES (
        :username,
        :password,
        :salt,
        :email
      )
  ";

  $salt = dechex(mt_rand(0, 2147483647)) . dechex(mt_rand(0, 2147483647));

  $password = hash('sha256', $_POST['password'] . $salt);

  for($round = 0; $round < 65536; $round++) {
    $password = hash('sha256', $password . $salt);
  }

  $query_params = array(
    ':username' => $_POST['username'],
    ':password' => $password,
    ':salt' => $salt,
    ':email' => $_POST['email']
  );

  try{
    $stmt = $db->prepare($query);
    $result = $stmt->execute($query_params);
  }catch(PDOException $ex) {
    echo("Failed to run query: ");
  }

  header("Location: index.php");



  die("index.php");

}

I am using a website to help me with this, i also have a database connection but it doesn't mention that. Any help would be appreciated.

adam hope
  • 3
  • 6

1 Answers1

2

Actually the error is quite explicative: the header must be the very first thing you send to the client, before the body.

All that echoes are part of a body.

Furthermore it looks like a mixture between an ajax call and a standard one. What are you exactly trying to achieve?

Fylax
  • 1,138
  • 2
  • 15
  • 24