Door
Brandon Cooper
op 01-11-2010 19:55
gewijzigd op 01-11-2010 19:56
3.352 views
Beste,
Ik heb een foutje opgelopen als ik in mijn index.php login.php include. Dit doe ik omdat die dan mooi in het frame komt.
Zie hier de fout
Warning: session_start() [function.session-start]: Cannot send session cache limiter - headers already sent (output started at /home/bas/domains/beerboys.nl/public_html/site/beveiligd/index.php:8) in /home/bas/domains/beerboys.nl/public_html/site/beveiligd/login.php on line 2
Session_start(); moet altijd (meeste gevallen) boven aan de pagina staan. Nu verstuur je dus al HTML code en vervolgens ga je verder met login.php waar session_start() staat. Dus je zult eerst session_start() moeten aanroepen en vervolgens de rest van de code etc.
@bas van de Pol,
Het beste wat je kan doen is eerste alle php code uitvoeren en dan pas de html code te maken, nog beter is het gebruik van een template engine zoals smarty.
Ja ik merk het. De HTML zit in de login.php verwerkt. En.. Als ik de sessie boven aan de pagina open. Dan log ik in, en op een of andere manier zegt ie dan alsof de sessie NIET is aangemaakt. Hmm erg vreemd.
<?PHP
session_start();
$host="localhost"; // De host (Meestal localhost)
$username="members_login"; // Je mySQL
$password="dAH8Eur"; // Je wachtwoord
$db_name="dahdateauihd"; // Database naam
mysql_connect("$host", "$username", "$password")or die("cannot connect");
mysql_select_db("$db_name")or die("cannot select DB");
?>
<?php
if($_SERVER['REQUEST_METHOD'] == 'POST') {
// Dit is niet mijn gewoonte om queries op deze manier in te springen, maar om de layout
// van Sitemasters niet naar de knoppen te helpen doe ik dit even gek :)
$qLogin = mysql_query("SELECT id FROM gebruikers WHERE
gebruikersnaam = '".mysql_real_escape_string($_POST['gebruikersnaam'])."' AND
wachtwoord = '".sha1($_POST['wachtwoord'])."'");
// Met deze query selecteren we het gebruikers-id van de gebruikersnaam en controleren we of
// de account geactiveerd is in 1 keer. Als je deze niet snapt, lees hem dan 20 keer :)
// Je kan natuurlijk ook een tutorial over dit soort queries lezen, alhoewel
// ze poepsimpel zijn IMO.
// Deze query mag overigens geen resultaten opleveren om te mogen inloggen. Als deze
// wél een resultaat oplevert is de account nog niet geactiveerd (en bestaat de
// activatiedata dus nog).
$qActivatie = mysql_query("SELECT COUNT(id) FROM gebruikers, gebruikers_activaties WHERE
gebruikers.gebruikersnaam = '".mysql_real_escape_string($_POST['gebruikersnaam'])."' AND
gebruikers.id = gebruikers_activaties.gebruikers_id");
if(mysql_result($qActivatie,0) != 0) {
echo 'De account is nog niet geactiveerd.';
} elseif(mysql_num_rows($qLogin) == 0) {
echo 'De gebruikersnaam/wachtwoord combinatie is niet correct.';
} else {
// Alles ok, inloggen dus.
// Nu is 1 ding belangerijk:
// ZORG DAT ER EEN session_start() GEPLAATST IS, HETZIJ IN JE INDEX.PHP WAAR
// DEZE PAGINA IN GEPLAATS WORDT, HETZIJ BOVENAAN DEZE PAGINA (ALS ER GEEN
// INCLUDESYSTEEM IS)!!!
$_SESSION['gebruiker'] = mysql_result($qLogin, 0);
$_SESSION['gebruikersnaam'] = $_POST['gebruikersnaam'];
// Mocht je nog andere data willen in je sessie,
// zoals een level, dien je dit hier te plaatsen.
?>
Je bent succesvol ingelogged. Klik <a href="controlepaneel.php">hier</a> om naar je controlepaneel te gaan.
<?php
}
}
?>
<form action="<?=htmlentities($_SERVER['REQUEST_URI'])?>" method="post">
Gebruikersnaam:<br />
<input type="text" name="gebruikersnaam" /><br />
Wachtwoord:<br />
<input type="password" name="wachtwoord" /><br />
<br />
<input type="submit" value="Inloggen die handel" />
</form>
<?PHP
session_start();
$host="localhost"; // De host (Meestal localhost)
$username="members_login"; // Je mySQL
$password="dAH8Eur"; // Je wachtwoord
$db_name="dahdateauihd"; // Database naam
mysql_connect("$host", "$username", "$password")or die("cannot connect");
mysql_select_db("$db_name")or die("cannot select DB");
?>
<?php
// Zorg dat hierboven ERGENS session_start() staat!
if(isset($_SESSION['gebruiker'])) {
// E-mailadres bijwerken:
// De variabele fout aanmaken om fouten ivm 'undefined variable' te voorkomen
$fout = '';
if($_SERVER['REQUEST_METHOD'] == 'POST') {
// Zelfde functie als bij registratie
// Een globale functies.php waarin je al je functies gooit is dus wel handig
function is_email($in) {
list($local, $host) = explode('@', $in);
$pattern_local = '^([0-9a-z]*([-|_]?[0-9a-z]+)*)(([-|_]?)\.'
. '([-|_]?)[0-9a-z]*([-|_]?[0-9a-z]+)+)*([-|_]?)$';
$pattern_host = '^([0-9a-z]+([-]?[0-9a-z]+)*)(([-]?)\.([-]?)'
. '[0-9a-z]*([-]?[0-9a-z]+)+)*\.[a-z]{2,4}$';
$match_local = eregi($pattern_local, $local);
$match_host = eregi($pattern_host, $host);
return ($match_local && $match_host ? true : false);
}
if(!is_email($_POST['email'])) {
$fout = 'Geen geldig e-mailadres!';
} else {
mysql_query("UPDATE gebruikers SET
email = '".mysql_real_escape_string($_POST['email'])."'
WHERE id = ".$_SESSION['gebruiker']);
// Vervolgens moet de pagina vernieuwd worden.
header('Location: '.$_SERVER['REQUEST_URI']);
}
} else {
// Het formulier is nog niet verzonden, dus vullen we het veldje met het huidig e-mailadres
$email = mysql_result(mysql_query("SELECT email FROM gebruikers WHERE id = ".$_SESSION['gebruiker']),0);
}
?>
<h1>Welkom, <?=htmlentities($_SESSION['gebruikersnaam'])?>!</h1>
Wijzig je e-mailadres:
<?=$fout?>
<form action="<?=htmlentities($_SERVER['REQUEST_URI'])?>" method="post">
<input type="text" name="email" value="<?=htmlentities($email)?>" />
<input type="submit" value="Bijwerken" />
</form>
<a href="uitloggen.php" onclick="return confirm('Ben je zeker dat je je wilt afmelden?');">Uitloggen</a>
<?php
} else {
echo 'Je bent niet ingelogged, klik <a href="login.php">hier</a> om dit te doen.';
}
?>
[/quote]
[quote]
<!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>Beerboys design</title>
<link rel="stylesheet" type="text/css" href="./beerboys2.css" media="all" />
<!--[if IE]>
<style type="text/css" media="all">.borderitem {border-style: solid;}</style>
<![endif]-->
</head>
<body>
<div id="Shape_1">
</div>
<div class="Oh_lager_beer_It_makes_good_cheer_And_proves_the_poor_man">
<p class="lastNode">"Oh, lager beer! It makes good cheer, And <br />proves the poor man's worth; It cools <br />the body through and through, and <br />regulates the health."
</p>
</div>
<div id="Shape_2">
</div>
<div class="Agenda">
<p class="lastNode">Agenda
</p>
</div>
<div class="Foto’s">
<p class="lastNode">Foto’s
</p>
</div>
<div class="Ledenlijst">
<p class="lastNode">Ledenlijst
</p>
</div>
<div class="Home">
<p class="lastNode">Home
</p>
</div>
<div class="Biografie">
<p class="lastNode">Biografie
</p>
</div>
<div class="Nieuws">
<p class="lastNode">Nieuws
</p>
</div>
<div id="Shape_9">
</div>
<div class="Actueel">
<p class="lastNode">Inloggen
</p>
</div>
<div class="Txt_Lorem">
<p>
<?PHP
include('login.php');
?>
</p><p class="lastNode">
</p>
</div>
</div>
<div id="beerboys_r1_c1">
</div>
<div id="beerboys_r1_c7">
</div>
<img src="images/beerboys_r1_c17.jpg" id="beerboys_r1_c17" alt="" />
<img src="images/beerboys_r2_c17.jpg" id="beerboys_r2_c17" alt="" />
<div id="beerboys_r5_c1">
</div>
<div id="beerboys_r6_c1">
</div>
<div id="beerboys_r6_c3">
</div>
<div id="beerboys_r6_c5">
</div>
<div id="beerboys_r6_c8">
</div>
<div id="beerboys_r6_c10">
</div>
<div id="beerboys_r6_c12">
</div>
<div id="beerboys_r11_c1">
</div>
</body>
</html>
Onthou: Die include, daar moet ik dus een oplossing voor vinden.
[size=xsmall]Toevoeging op 01/11/2010 20:20:58:[/size]
1e script is dus login.php
2e is de controle pnaeel waar je dan heen gaat, die geeft aan dat je dus dan neit ingelogd bent als ik men sessie boven het 3e script doet de pagina met de makeup enzo waar die inkomt
@Bas,
Ik zou eerder voor een structuur als deze gaan als ik geen template engine gebruik.
<?php
/**
* @author Jasper
* @copyright 2010 vanOeffelHaarlem
*/
//alleen voor debugging nooit zo online zetten!
ini_set('display_errors', 'On');
error_reporting(E_ALL);
session_start();
$host="localhost"; // De host (Meestal localhost)
$username="members_login"; // Je mySQL
$password="dAH8Eur"; // Je wachtwoord
$db_name="dahdateauihd"; // Database naam
mysql_connect("$host", "$username", "$password")or die("cannot connect");
mysql_select_db("$db_name")or die("cannot select DB");
//controleer of iemand probeert in te loggen
if($_SERVER['REQUEST_METHOD'] == 'POST') {
//controlleer username en password
}
else{
//controlleer of de gebruiker is ingelogd
if($_SESSION['ingelogd'] == true){
//laat het controle paneel zien
}
else{
//de gebruiker is niet ingelogd, dus laat een login forum zien
}
}
echo $html;
?>