2016-12-21 11 views
0

Ich benutze ein ziemlich einfaches PHP-Skript (login.php), um einen Benutzer auf einer geschützten Seite anmelden zu lassen. Allerdings habe ich immerSitzung starten PHP Fehlermeldung kann Session Cachebegrenzer nicht senden - Header bereits gesendet

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 

diese Fehlermeldungen bekommen und die Seite wird nicht auf der Begrüßungsseite umleiten, die diese Linie an der Spitze

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

Hier sind die Inhalte von 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> 

Jede Hilfe wird geschätzt. Vielen Dank im Voraus

+0

Sie haben bereits eine Ausgabe vor 'session_start();'. Setzen Sie dieses 'session_start();' ganz oben in Ihre PHP-Skripte. –

Antwort

1

Sie benötigen

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

Zum Seitenanfang zu bewegen, bevor <!doctype html>.

Der Grund ist, dass die Header einer HTTP-Antwort immer vor dem Rumpf sein müssen. Aber in Ihrem Code ist der Körper (HTML), bevor die Funktionen, die Header senden (session_start() und header())

+0

einschließlich 'session_start();' –

+1

Großartig - danke - das hat funktioniert. – Joel

+0

Ich dachte, ich hätte den Benutzer den Benutzernamen und das Passwort eingeben lassen müssen, bevor es übereinstimmte und sie an die Begrüßungsseite weiterleitete, aber offensichtlich nicht! Danke für Ihre Hilfe – Joel

1

„Header bereits gesendet“ bedeutet, dass Ihr PHP-Skript bereits die HTTP-Header gesendet, und als solche kann es nicht Änderungen vornehmen zu ihnen jetzt.

Vergewissern Sie sich, dass Sie KEINE Inhalte senden, bevor Sie session_start anrufen. Besser noch, mach einfach session_start das erste, was du in deiner PHP-Datei machst (also stell es am absoluten Anfang, vor allem HTML usw.).

+0

Danke für Ihre Hilfe – Joel

Verwandte Themen