Ik heb een inlogpagina gemaakt en daarbij ook een sessie. Ik wil dus dat de gebruiker over de hele website ingelogd blijft. Het inlogscript werkt prima, maar ik snap niet hoe ik een sessie op een andere pagina kan opvragen?
Ik heb nu dit, maar dit werkt dus niet. Hij haalt SESSION['email'] niet op.
Op de inlogpagina: (hierbij komt $Emailadres uit het inlog formulier)
<?php
session_start();
$_SESSION['email'] = $Emailadres;
// en even verderop:
if ( $_SESSION['ingelogd'] )
{
$welkom = "Welkom, U bent ingelogd met het volgende Emailadres: $Emailadres";
}
?>
Op een andere pagina:
<?php
session_start();
$Emailadres = $_SESSION['email'];
//En even verderop:
if ( $_SESSION['ingelogd'] )
{
$welkom = "Welkom, U bent ingelogd met het volgende Emailadres: $Emailadres";
}
?>
Met de code die ik hier zie kan ik niet zo heel erg veel. Kan geen fouten bespeuren. Misschien is het handig dat je iets meer code post. Dan kan ik je wat beter van dienst zijn.
Oeps die declaratie was een kopieer foutje van mij. Ik heb mijn beginbericht even gewijzigd. (Bij de andere pagina staat diezelfde zin, maar dan net andersom, daarom ging het even mis met kopieren.) Die declaratie is dus:
$Emailadres = $_SESSION['email'];
En hier is wat meer code.
Inlog pagina:
<?php
//Definieer de inloggegevens voor de database.
$mysql[host] = "localhost";
$mysql[user] = "nancy";
$mysql[pass] = "hoi";
$mysql[db] = "zonnegot";
//Maak verbinding met de database server.
mysql_connect($mysql[host], $mysql[user], $mysql[pass]);
mysql_select_db($mysql[db]);
//Oude sessie oppakken of een nieuwe aanmaken.
session_start();
$_SESSION['email'] = $Emailadres;
//Controleren of er iemand op de knop "inloggen" heeft gedrukt.
if($_SERVER['REQUEST_METHOD'] == 'POST')
{
// Haal de waarden uit het inlogformulier op.
$Emailadres = $_POST['Emailadres'];
$Wachtwoord = $_POST['Wachtwoord'];
//Controleren of alle invul velden zijn ingevuld.
if (empty($Emailadres ))
{
$error = "Vul uw Emailadres in.";
}
else if (empty($Wachtwoord ))
{
$error = "Vul uw wachtwoord in.";
}
// Haal Emailadres en wachtwoord op uit de database.
$query = "SELECT * FROM zonnegot.gebruikers WHERE email = '$Emailadres' AND wachtwoord = '$Wachtwoord'";
$result = mysql_query( $query ) or die( mysql_error() );
// Controleer of het email adres in de database voorkomt.
$aantalRijen = mysql_num_rows( $result );
if ( $aantalRijen == 0 )
{
$_SESSION['ingelogd'] = false;
$error = "Uw inloggegevens kloppen niet.";
}
else
{
$_SESSION['ingelogd'] = true;
$error = "Welkom, U bent nu ingelogd.";
}
}
//Geef aan of iemand is ingelogd. Zo ja, laat emailadres zien.
if ( $_SESSION['ingelogd'] )
{
$welkom = "Welkom, U bent ingelogd met het volgende Emailadres: $Emailadres";
}
else
{
$welkom = "Welkom, U bent niet ingelogd. Dit kan op de Homepagina.";
}
?>
Verderop in de code bij de HTML:
<?php
// Geef een welkomstbericht weer. Zo dan kan de gebruiker zien of hij is ingelogd.
{
print '<p style="color:black;">'.$welkom.'</p>';
}
?>
En die andere pagina die de SESSION wil opvragen ziet er zo uit:
<?php
//Definieer de inloggegevens voor de database.
$mysql[host] = "localhost";
$mysql[user] = "nancy";
$mysql[pass] = "hoi";
$mysql[db] = "zonnegot";
//Maak verbinding met de database server.
mysql_connect($mysql[host], $mysql[user], $mysql[pass]);
mysql_select_db($mysql[db]);
//Oude sessie oppakken of een nieuwe aanmaken.
session_start();
$Emailadres = $_SESSION['email'];
//Geef aan of iemand is ingelogd. Zo ja, laat emailadres zien.
if ( $_SESSION['ingelogd'] )
{
$welkom = "Welkom, U bent ingelogd met het volgende Emailadres: $Emailadres";
}
else
{
$welkom = "Welkom, U bent niet ingelogd. Dit kan op de Homepagina.";
}
?>
En dus verderop precies dezelfde code die ik zonet ook heb geplaatst als bij de inlogpagina verderop.
Waarom $_SESSION['ingelogt'] = false doen als je niet goed bent ingelogt? Gewoon kijken of $_SESSION['ingelogt'] bestaat.. En waarom zelfs $_SESSION['ingelogt'] gebruiken? Gewoon id/naam in sessie doen en daarmee kijken of een lid ingelogt is of niet.
Ik heb je inlog pagina iets aangepast. Dus wat kleine verbeteringen die je script wat beter maakt. Ik snap alleen niet waar bij jou $_SESSION['ingelogd'] word aangemaakt. Dit kun je bijv doen als de query gelukt is en er een match is gevonden. (hiervan een voorbeeldje in het script). Lees ff de comments die erbij staan.
<?php
//session_start() moet altijd boven aan je pagina.
session_start();
//Definieer de inloggegevens voor de database.
$mysql[host] = "localhost";
$mysql[user] = "nancy";
$mysql[pass] = "hoi";
$mysql[db] = "zonnegot";
//Maak verbinding met de database server.
mysql_connect($mysql[host], $mysql[user], $mysql[pass]);
mysql_select_db($mysql[db]);
//Oude sessie oppakken of een nieuwe aanmaken.
// ??? wat wil je hiermee doen? De variable $Emailadres is leeg.
$_SESSION['email'] = $Emailadres;
//Controleren of er iemand op de knop "inloggen" heeft gedrukt.
if($_SERVER['REQUEST_METHOD'] == 'POST')
{
// Haal de waarden uit het inlogformulier op.
//beveilig je mysql query dmv mysql_real_escape_string()
$Emailadres = mysql_real_escape_string($_POST['Emailadres']);
$Wachtwoord = mysql_real_escape_string($_POST['Wachtwoord']);
//Controleren of alle invul velden zijn ingevuld.
//Je kunt wel een error generen maar waarom laat je hem script doorlopen en alsnog een query uitvoeren die 100% gaat mislukken? Gewoon met een else die zooi overslaan.
if (empty($Emailadres ))
{
$error = "Vul uw Emailadres in.";
}
elseif (empty($Wachtwoord ))
{
$error = "Vul uw wachtwoord in.";
}
else
{
// Haal Emailadres en wachtwoord op uit de database.
//Variabelen buiten een string zetten
$query = "SELECT * FROM zonnegot.gebruikers WHERE email = '".$Emailadres."' AND wachtwoord = '".$Wachtwoord."' LIMIT 1";
$result = mysql_query( $query ) or die( mysql_error() );
// Controleer of het email adres in de database voorkomt.
$aantalRijen = mysql_num_rows( $result );
if ( $aantalRijen > 0 )
{
$_SESSION['ingelogd'] = true;
$error = "Welkom, U bent nu ingelogd.";
//als je dmv mysql_fetch_assoc je data uit de db haalt. Kun je bijvoorbeelde het email adres hier in de sessie stoppen.
//$row = mysql_fetch_assoc($result);
//$_SESSION['email'] = $row['email'];
}
else
{
$error = "Uw inloggegevens kloppen niet.";
}
}
}
//Geef aan of iemand is ingelogd. Zo ja, laat emailadres zien.
//dmv isset kun je kjiken of iets bestaat.
if (isset($_SESSION['ingelogd']))
{
$welkom = "Welkom, U bent ingelogd met het volgende Emailadres: ".$Emailadres."";
}
else
{
$welkom = "Welkom, U bent niet ingelogd. Dit kan op de Homepagina.";
}
?>
Super bedankt Pepijn!
Je was nog 1 regel vergeten: $Emailadres = $_SESSION['email'];
Die moest nog even bovenin, omdat die andere session email in een Else staat en daar kom je niet als je voor de 2e keer op deze pagina komt. Gelukkig dus zelf achter gekomen :)
Het werkt bedankt!
En @ Door, ik kwam dat op die manier ergens tegen op internet toen ik wat dingen zat te lezen over sessies. Mij leek het ook al overbodig maar aangezien het geen kwaad kan gewoon overgenomen. Ik dacht misschien extra veilig ofzo.