Hallå gott folk.
Har satt mig ner för att lära mig lite php, och försöker lägga till ett enkelt inloggningsskript till en enkel "visa de tre senaste nyhetsinläggen-sida". :)
Men där stöter jag på patrull.
<?php
session_start(); // Alltid överst på sidan
//ini_set ("display_errors", "1");
include ("includes/include.php");
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>icosonline.com</title>
<link rel="SHORTCUT ICON" href="pics/memyself.ico" />
<link href="includes/styles.css" type="text/css" rel="stylesheet" />
</head>
<body>
<div id="container">
<div id="headpic">
<img src="pics/offview.jpg" alt="The view from my office." />
</div>
<div id="loginform">
<div class="divhead">
<h1>Please log in.</h1>
</div>
<?php
// Inloggning
if (isset($_POST['submit'])){
$_POST = db_escape($_POST);
$sql = "SELECT f_id FROM t_users
WHERE f_namn='{$_POST['username']}'
AND f_pass='{$_POST['password']}'";
$result = mysql_query($sql);
// Hittades inte användarnamn och lösenord
// skicka till formulär med felmeddelande
if (mysql_num_rows($result) == 0){
header("Location: default.php?badlogin=&name".$_POST['username']);
exit;
}
// Sätt sessionen med unikt index
$_SESSION['sess_id'] = mysql_result($result, 0, 'id');
$_SESSION['sess_user'] = $_POST['user'];
echo ("Du är inloggad! yeah...");
//header("Location: welcome.php");
exit;
}
// Utloggning
if (isset($_GET['logout'])){
session_unset();
session_destroy();
header("Location: default.php");
exit;
}
// Om inte inloggad visa formulär, annars logga ut-länk
if (!isset($_SESSION['sess_user'])){
// Visa felmeddelande vid felaktig inloggning
if (isset($_GET['badlogin'])){
echo "<p>Fel användarnamn eller lösenord!<br />";
echo "Försök igen!</p>";
}
?>
<form name="login" action="<?php echo ($pageRoot); ?>default.php" method="post">
<p class="infotext"><label for="username">Username:</label></p><input type="text" class="infield" id="username" name="username" value="<?php echo ($_GET['name']); ?>" />
<p class="infotext"><label for="password">Password:</label></p><input type="password" class="infield" id="password" name="password" value="" />
<input type="submit" class="button" id="loginbtn" name="loginbtn" onmouseover="this.className='button buttonhov'" onmouseout="this.className='button'" value="Login" />
</form>
<?php
} else {
?>
<input type="button" class="button" id="loginbtn" name="loginbtn" onmouseover="this.className='button buttonhov'" onmouseout="this.className='button'" value="Logout" />
<?php
}
?>
</div>
<div id="main">
<div class="divhead">
<h1>Latest news.</h1>
</div>
<?php
// Hämta information från databasen
$sql = mysql_query("SELECT `t_news`.`f_date` , `t_news`.`f_news`
FROM t_news
ORDER BY `t_news`.`f_date` DESC
LIMIT 0 , 3") or die("Kunde inte hämta info.");
// Presentera resultatet
while($result = mysql_fetch_array($sql)){
?>
<div class="divpost">
<div class="posthead">
<h2><?php echo ($result['f_date']); ?></h1>
</div>
<p><?php echo ($result['f_news']); ?></p>
</div>
<?php
}
?>
</div>
</div>
</body>
</html>
Denna kod genererar följande felmeddelande:
"Warning: session_start() [function.session-start]: Cannot send session cache limiter - headers already sent (output started at H:\PHP\www\default.php:1) in H:\PHP\www\default.php on line 2"
Och vad jag har läst mig till så borde det vara att jag har nån form av output innan första <?php-taggen, men det har jag inte, absolut ingenting är det innan den.
Och vad jag har läst mig till så borde det vara att jag har nån form av output innan första <?php-taggen, men det har jag inte, absolut ingenting är det innan den.
Nja, nästan rätt. Ingen output innan stället i koden som skickar vidare besökaren. Du har kanske ingenting innan din första php-tagg, men du avslutar taggen och skickar en massa htmlkod (dvs output) till klienten innan du försöker skicka vidare honom.
Ändra början till följande så borde det fungera fint sen:
<?php
session_start(); // Alltid överst på sidan
ob_start();
//ini_set ("display_errors", "1");
include ("includes/include.php");
?>
/r Ähum, jag läste nog lite väl dåligt. Fick för mig att det stog något om location. :r
Nja, nästan rätt. Ingen output innan stället i koden som skickar vidare besökaren. Du har kanske ingenting innan din första php-tagg, men du avslutar taggen och skickar en massa htmlkod (dvs output) till klienten innan du försöker skicka vidare honom.
Ok, då var det jag som har missuppfattat det hela. :r
<?php
session_start(); // Alltid överst på sidan
ob_start();
//ini_set ("display_errors", "1");
include ("includes/include.php");
?>
Tyvärr så vill inte det där fungera heller.
Men jag får ju helt enkelt tänka om när jag ska skriva ut html-koden beroende på statusen på inloggningen eller vad man ska säga. :)
jag har haft många problem som detta och då har det hjälpt genom att jag har kagt till
ob_start(); efter session_start(); tycker det är konstigt att det inte fungerar så,,
Efter att ha sovit en timme :), lagt alla "header (Location)" i början OCH lagt till ob_start(); direkt efter session_start() så fungerar det hela utan problem.
Egentligen skulle man ju vilja markera bägge svaren som slutgiltiga eftersom clovec fick mig att inse vad Peeer egentligen skrev. :)