Door
bart de kinkelaar
op 20-06-2016 09:20
gewijzigd op 20-06-2016 09:21
20.071 views
Ik ben bezig met een formulier, waarbij je op basis van gegevens uit de database naar een bepaalde pagina word gestuurd.
Staat er in de database dat je een Gebruiker bent, dan ga je naar gebruiker.php?...
ben je volgens de database een Medewerker, dan ga je naar admin.php
De volgende code heb ik geprobeerd met eerst alleen een check of je gebruiker bent, zonder succes:
<?php
session_start(); // Start a new session
if(isset($_GET['Medewerkerscode']))
{
$ID = intval($_GET['Medewerkerscode']);
// getting info from db
}
?>
<?php
if(isset($_GET['Gebruikersnaam']))
{
$username = $_GET['Gebruikersnaam'];
// getting info from db
}?><?php
$con=mysqli_connect("-t");
// Check connection
if (mysqli_connect_errno())
{
echo "Failed to connect to MySQL: " . mysqli_connect_error();
};
// Get the data passed from the form
$username = $_POST['Gebruikersnaam'];
$password = $_POST['Wachtwoord'];
// escape variables for security
$username = mysqli_real_escape_string($con, $_POST['Gebruikersnaam']);
$password = mysqli_real_escape_string($con, $_POST['Wachtwoord']);
$ID = mysqli_real_escape_string($con, $_POST['Medewerkerscode']);
$sql = "select * FROM gebruikers WHERE Gebruikersnaam = '$username' and id = '$ID' and Wachtwoord = '$password'";
$result = mysqli_query($con, $sql) or die ( mysql_error() );
$nrOfRows = mysqli_num_rows($result);
if ($nrOfRows > 0)
{
if(mysqli_query("SELECT Functie FROM gebruikers WHERE Functie = 'Medewerker'")){
$_SESSION['Inloggen'] = "true";
header("Location:admin.php?id=" . $row['Medewerkerscode'] . "&&Gebruikersnaam=" . $row['Gebruikersnaam'] . "&&Wachtwoord=" . $row['Wachtwoord'] . "");
}
}
else
{
echo "Het inloggen is mislukt.";
}
mysqli_close($con);
?></body></html>
if(mysqli_query("SELECT Functie FROM gebruikers WHERE Functie = 'Medewerker'")){
Je moet wel aangeven welke gebruiker het is.
Maar kan je de functies niet opslaan in de ledentabel? Dan kan je direct als een account goed is gevalideerd het record fetchen en kijken of diegene een gebruiker of medewerker is.
Ik zou het anders doen, en in het algemeen de gebruiker eerst ophalen, ongeacht zijn functie:
<?php
$result = mysqli_query("SELECT * FROM gebruikers WHERE id = '".$ID."'");
if($result) {
$data = mysqli_fetch_assoc($result);
$_SESSION['Inloggen'] = true;
if($data['Functie']=='Medewerker') {
}
if($data['Functie']=='Medewerker') {
$_SESSION['Medewerker'] = true;
header("Location:admin.php");
exit();
} else {
header("Location:gebruiker.php");
exit();
}
} else {
// je query is foutgegaan, bouw hier foutafhandeling in
}
?>
En wachtwoorden in een URL geven? Ai ai ai ai ai.......
Verder kan je in plaats van de functie op te slaan in een sessie, deze ook op admin.php opnieuw ophalen. Zo voorkom je dat iemand nog vrolijk doorgaat met zijn beheerderstaken na het degraderen ervan in de database terwijl hij nog vrolijk ingelogd is.
Bij witte pagina's waarin de HTML-source ook zo goed als leeg is, kan het altijd geen kwaad om foutafhandeling aan te zetten, door dit bovenaan te zetten:
Verder over je code:
- Ik hoop niet dat je je wachtwoorden onbeveiligd en in plain-text opslaat?
- Waarom als je query mislukt laat je je inlog.php pagina opnieuw? Ik zou liever een foutmelding geven dat er een 'technische storing' is. Waarbij op de achtergrond de fout gelogd wordt.
<?php
if ($test = false) {
echo 'cake';
} else {
echo 'no cake';
}
// levert "no cake"
?>
De toekenning is alleen "waar" als de toegekende waarde "waar" is.
Of liever gezegd, de toekenning zelf "$test = false" wordt geevalueerd en het resultaat van deze evaluatie is de waarde van de toekenning, zodat er dus effectief "if (false)" staat.
@Bart, het lijk mij handiger om ook het user id mee te geven in de sessie. Je zou dan ook kunnen overwegen om de rechten die die gebruiker heeft elke keer opnieuw uit te rekenen. Op het moment dat de rechten of rol van die persoon wijzigt is deze dan ook direct doorgevoerd, en niet pas op het moment dat deze uitlogt of zijn/haar sessie verloopt...