2016-12-21 19 views
0

私は非常に簡単なPHPスクリプト(login.php)を使用して、保護されたページにログインできるようにしています。しかし、私はセッション開始PHPエラーメッセージセッションキャッシュリミッタを送信できません - すでに送信されたヘッダ

Warning: session_start(): Cannot send session cache limiter - headers already sent (output started at /var/sites/f/mysite.co.uk/public_html/users/login.php:15) in /var/sites/f/mysite.co.uk/public_html/users/login.php on line 36 

Warning: Cannot modify header information - headers already sent by (output started at /var/sites/f/freedomprogramme.co.uk/public_html/users/login.php:15) in /var/sites/f/freedomprogramme.co.uk/public_html/users/login.php on line 39 

これらのエラーメッセージを取得し、ページはこちらトップ

<?php 
session_start(); 
if(!isset($_SESSION["sess_user"])){ 
header("Location: login.php"); 
} 
else 
{ 
?> 

でこのラインを持っているウェルカムページにリダイレクトされません保つlogin.phpの内容は

<!doctype html> 
<html> 
<head> 
<title>Login</title> 
</head> 
<body> 
<h1>Login</h1> 
<form action="" method="post"> 
<label>Username:</label><input type="text" name="user"><br/> 
<label>Password:</label><input type="password" name="pass"><br/> 
<input type="submit" value="Login" name="submit"><br/> 
<!--New user Register Link --> 
<p><a href="register.php">New User Registration!</a></p> 
</form> 
<?php 
if(isset($_POST["submit"])){ 
if(!empty($_POST['user']) && !empty($_POST['pass'])){ 
$user = $_POST['user']; 
$pass = $_POST['pass']; 
//DB Connection 
$conn = new mysqli('xxxx', 'yyyy', 'zzzz') or die(mysqli_error()); 
//Select DB From database 
$db = mysqli_select_db($conn, 'yyyy') or die("databse error"); 
//Selecting database 
$query = mysqli_query($conn, "SELECT * FROM userpass WHERE user='".$user." AND pass='".$pass."'"); 
$numrows = mysqli_num_rows($query); 
if($numrows !=0) 
{ 
while($row = mysqli_fetch_assoc($query)) 
{ 
$dbusername=$row['user']; 
$dbpassword=$row['pass']; 
} 
if($user == $dbusername && $pass == $dbpassword) 
{ 
session_start(); 
$_SESSION['sess_user']=$user; 
//Redirect Browser 
header("Location:welcome.php"); 
} 
} 
else 
{ 
echo "Invalid Username or Password!"; 
} 
} 
else 
{ 
echo "Required All fields!"; 
} 
} 
?> 
</body> 
</html> 

助けてください。事前

+0

すでに 'session_start();'の前に出力があります。この 'session_start();'をPHPスクリプトの一番上に置きます。 –

答えて

1

のおかげであなたは<!doctype html>前に、ページのトップへ

<?php if(isset($_POST["submit"])){ ... ... ... } ?>

を移動する必要があります。

なぜなら、HTTP応答のヘッダーは常に本文の前にある必要があるからです。しかし、ヘッダ(session_start()header()

+0

'session_start();'を含む –

+1

すごく感謝しました。 – Joel

+0

私は、ユーザが一致していることを確認してウェルカムページに転送する前に、ユーザ名とパスワードを入力させなければならないと考えましたが、明らかにそうではありませんでした!あなたの助けをありがとう – Joel

1

「送信済みヘッダー」を送信機能は、PHPスクリプトが既にHTTPヘッダを送信していることを意味する前に、あなたのコード内での体(HTML)があり、そしてそのようには変更を加えることはできませんそれらに今すぐ。

session_startを呼び出す前に、任意のコンテンツを送信していないことを確認してください。さらに良いことに、PHPファイルの中で最初に行うことはsession_startです(すべてのHTMLなどの前に、絶対的な始まりに置いてください)。

+0

あなたの助けをありがとう – Joel

関連する問題