0

I am a newbie to PHP and have tried everything and also tried the forum threads to try and fix this but after a week - I feel I am no nearer.

The localhost version works fine - no problem. However, when I upload it, it presents me with the following messsage:

session_start(): Cannot send session cache limiter - headers already sent (output started at /home/idigital123/public_html/index.php:2) in /home/idigital123/public_html/index.php on line 41

Here is the code:

<?php require_once('Connections/idigitalconn.php'); ?> 
<?php
if (!function_exists("GetSQLValueString")) {
function GetSQLValueString($theValue, $theType, $theDefinedValue = "", $theNotDefinedValue = "") 
{
  if (PHP_VERSION < 6) {
    $theValue = get_magic_quotes_gpc() ? stripslashes($theValue) : $theValue;
  }
  $theValue = function_exists("mysql_real_escape_string") ? mysql_real_escape_string($theValue) : mysql_escape_string($theValue);
  switch ($theType) {
    case "text":
      $theValue = ($theValue != "") ? "'" . $theValue . "'" : "NULL";
      break;    
    case "long":
    case "int":
      $theValue = ($theValue != "") ? intval($theValue) : "NULL";
      break;
    case "double":
      $theValue = ($theValue != "") ? doubleval($theValue) : "NULL";
      break;
    case "date":
      $theValue = ($theValue != "") ? "'" . $theValue . "'" : "NULL";
      break;
    case "defined":
      $theValue = ($theValue != "") ? $theDefinedValue : $theNotDefinedValue;
      break;
  }
  return $theValue;
}
}

mysql_select_db($database_idigitalconn, $idigitalconn);
$query_Recordset1 = "SELECT login.username, login.password FROM login";
$Recordset1 = mysql_query($query_Recordset1, $idigitalconn) or die(mysql_error());
$row_Recordset1 = mysql_fetch_assoc($Recordset1);
$totalRows_Recordset1 = mysql_num_rows($Recordset1);
?>
<?php
// *** Validate request to login to this site.
if (!isset($_SESSION)) {
  session_start();
}
$loginFormAction = $_SERVER['PHP_SELF'];
if (isset($_GET['accesscheck'])) {
  $_SESSION['PrevUrl'] = $_GET['accesscheck'];
}

if (isset($_POST['username'])) {
  $loginUsername=$_POST['username'];
  $password=$_POST['password'];
  $MM_fldUserAuthorization = "";
  $MM_redirectLoginSuccess = "header/KS3Yr7.html";
  $MM_redirectLoginFailed = "index.php";
  $MM_redirecttoReferrer = false;
  mysql_select_db($database_idigitalconn, $idigitalconn);

  $LoginRS__query=sprintf("SELECT username, password FROM login WHERE username=%s AND password=%s",
    GetSQLValueString($loginUsername, "text"), GetSQLValueString($password, "text")); 

  $LoginRS = mysql_query($LoginRS__query, $idigitalconn) or die(mysql_error());
  $loginFoundUser = mysql_num_rows($LoginRS);
  if ($loginFoundUser) {
     $loginStrGroup = "";

    if (PHP_VERSION >= 5.1) {session_regenerate_id(true);} else {session_regenerate_id();}
    //declare two session variables and assign them
    $_SESSION['MM_Username'] = $loginUsername;
    $_SESSION['MM_UserGroup'] = $loginStrGroup;       

    if (isset($_SESSION['PrevUrl']) && false) {
      $MM_redirectLoginSuccess = $_SESSION['PrevUrl'];  
    }
    header("Location: " . $MM_redirectLoginSuccess );
  }
  else   {
    header("Location: ". $MM_redirectLoginFailed );
  }
}
?>
Isaac Bennetch
  • 11,830
  • 2
  • 32
  • 43

4 Answers4

2

What you need to check is:

if (session_status() == PHP_SESSION_NONE) {
    session_start();
}

Instead of:

if (!isset($_SESSION)) {
    session_start();
}

Also put it on top of your code as @Jay explained.

EDIT: In this part you need an absolute URL (as explained in documentaton: http://php.net/manual/es/function.header.php)

header("Location: " . $file);

So change it to (or the way you want the absolute path):

header("Location: http://" . $_SERVER["HTTP_HOST"] . "/" . $file);
  • Tried this, and the error message has now changed to:Warning: session_start(): Cannot send session cache limiter - headers already sent (output started at /home/idigital123/public_html/index.php:2) in /home/idigital123/public_html/index.php on line 41 – user3049418 Nov 06 '14 at 18:44
  • Have you change that part in puting on top? – Gerardo Charles Rojas Vega Nov 06 '14 at 18:45
  • Hi Charles, I have tried again, and the comments on this page disappeared. However, the page has a username and login facility. When I tried to login in I get these errors:Warning: session_regenerate_id(): Cannot regenerate session id - headers already sent in /home/idigital123/public_html/index.php on line 66 Warning: Cannot modify header information - headers already sent by (output started at /home/idigital123/public_html/index.php:6) in /home/idigital123/public_html/index.php on line 74 – user3049418 Nov 06 '14 at 19:04
  • I cant understand why there are no errors on my localhost version! Its so frustrating... – user3049418 Nov 06 '14 at 19:06
  • Sorry for late response, I've edited my answer so please try it and comment – Gerardo Charles Rojas Vega Nov 06 '14 at 20:15
0

session_start() must go at the top of all of your PHP pages and not tested. Checking to see if a session variable is set before starting the session is "backwards".

Please, don't use mysql_* functions, They are no longer maintained and are officially deprecated. Learn about prepared statements instead, and use PDO or MySQLi. This article will help you decide.

Community
  • 1
  • 1
Jay Blanchard
  • 34,243
  • 16
  • 77
  • 119
0

Linux uses \n as line endings. However your file is using \r\n (windows line endings). When sending data from server to your browser, some data is sended because of bad line endings. You can see it in editor with white characters display: enter image description here

Change it to unix style and everything should work fine.

Azzabi Haythem
  • 2,318
  • 7
  • 26
  • 32
Esse
  • 3,278
  • 2
  • 21
  • 25
  • Hi Esse, how do I change it to unix style - can you suggest an editor please? – user3049418 Nov 06 '14 at 18:50
  • For example notepad++ has such option. If you have access to ssh on server, you can do it right there: http://stackoverflow.com/questions/16768776/convert-line-endings or download binary to do it on windows: http://stackoverflow.com/questions/17579553/windows-command-to-convert-unix-eol-to-windows-eol – Esse Nov 06 '14 at 18:52
  • Hi Esse, I have downloaded notepad ++ but still do not know what I am doing (sorry)..Could you please explain further how to do what you have suggested. Many thanks & sorry! – user3049418 Nov 06 '14 at 19:26
  • @user3049418 open file, click edit / EOL conversion / convert to unix format. Then save file and upload into server. Edit it only using notepad++ from now on (regular windows notepad will broke line endings again). – Esse Nov 06 '14 at 19:28
0

By the way make sure You don't have BOM (Byte Order Mark) attached to source files. It causes unwanted character appearing at the begining of the output.

ad4s
  • 304
  • 1
  • 7