ik had van joran de wit een leuk login formuliertje gezien.
nu wil ik meerdere gebruikersnamen en wachtwoorden toevoegen.
ik heb al de or of xor gebruik en || maar dan werkt het niet optimaal.

<?php
// We gaan sessies gebruiken
session_start();

// Gebruikersnaam en wachtwoord instellen
$sGebruikerControle = 'admin'||'user';
$sWachtwoordControle = 'voor'||'hallo';

// Controle of het formulier verzonden is
if($_SERVER['REQUEST_METHOD'] == 'POST')
{
// Controle of benodigde velden wel ingevuld zijn
if(isset($_POST['user'], $_POST['pass']))
{
// Overbodige spaties verwijderen
$sGebruiker = trim($_POST['user']);
$sWachtwoord = trim($_POST['pass']);

// Gebruikersnaam en wachtwoord controleren
if($sGebruiker == $sGebruikerControle && $sWachtwoord == $sWachtwoordControle)
{
// Juiste gebruikersnaam en wachtwoord: inloggen!
$_SESSION['logged_in'] = true;
$_SESSION['gebruiker'] = $sGebruiker;

// Doorsturen en melding geven
header('Refresh: 3; url=beveiligd.php');
echo 'Je bent succesvol ingelogd. Je wordt doorgestuurd.';
}
else
{
// Terugsturen en foutmelding geven
header('Refresh: 3; url=login_form.php');
echo 'Deze combinatie van gebruikersnaam en wachtwoord is niet juist!';
}
}
else
{
header('Refresh: 3; url=login_form.php');
echo 'Een vereist veld bestaat niet!';
}
}
else
{
// Terug naar het formulier
header('Location: login_form.php');
exit();
}
?>
Rene janssen op 25/10/2014 18:32:05

Hoe kan het dat het dan niet goed gaat.
Ik gebruik het or teken of als ik xor in vul dan gaat het ook niet goed.
Dan zou het toch ook moeten werken. of zie ik dat helemaal verkeerd?
Of beter nog waarom zie ik dat verkeerd..


&& is het zelfde ala AND.
|| is het zelfde als OR.

Dit zijn beiden vergelijkings operatoren. Ze worden gebruikt als twee vergelijkingen met elkaar gecombineerd moeten worden. Als een vergelijking klopt dan geeft de operator TRUE terug. als een vergelijking niet klopt dan geeft ie FALSE terug. Je gebruikt deze operatoren voornamelijk in de if(..) statements.

$resultA = ( 1 == 2 && 4 == 4)
$resultB = ( 1 == 2 || 4 == 4)

1 == 2 is niet waar dus FALSE
4 == 4 is waar dus TRUE

Dat vullen we in:
$resultA = ( FALSE && TRUE )
$resultB = ( FALSE || TRUE )

Dan komen de AND en OR operatoren aan de beurt:
FALSE AND TRUE wordt FALSE. Immers a EN b moeten beiden waar zijn
FALSE OR TRUE wordt TRUE. Immers a OF b moet waar zijn.

$resultA krijgt dus de waarde FALSE en $resultB krijgt dus de waarde TRUE.


en daar is geen if statement...
werkte het daarom niet..
Het gaat op meerdere punten mis...

In je post van vanmorgen 08:45 zie ik bijvoorbeeld staan:

if($sGebruikers['username'] == $sGebruikers

Dit gaat nooit true opleveren: je vergelijkt een gehele array met een element van zichzelf. Is per definitie nooit gelijk. Bovendien bestaat $sGebruikers['username'] niet eens. Wat je hier ruwweg bedoelt, is:

if($gebruiker['username'] == $_POST['user']

En dat is wat ik met mijn eerdere posts bedoelde: in je openingspost deed je dat gedeelte goed (de POST-variabelen ophalen en gebruiken in je vergelijkingen) maar bij het herschrijven van je code is de gehele verwerking van je POST-variabelen eruit gevallen. Je hebt dus niets meer om mee te vergelijken.

Verder lijkt het erop dat je probeert een soort Hongaarse notatie te gebruiken voor de naamgeving van je variabelen. sGebruikers suggereert dan dat je met een string te namen hebt. Het is echter een array. Hiermee ga je jezelf ontzettend in de vingers snijden (en dat is ook meteen een van de punten waarom ik tegen Hongaarse notatie ben). Wat mij betreft hernoem je sGebruikers per direct in gebruikers of gebruikerslijst of wat dan ook, maar in ieder geval iets waarmee je jezelf en anderen niet op het verkeerde been zet.
Hoi Willem,
De hongaarse notatie kende ik tot nu toe nog niet.
Ik heb steeds meer het gevoel dat ik niet meer weet waar ik mee bezig ben.
hier onder heb ik het nu gemaakt zoals ik dacht dat het wel zou moeten werken..
Maar helaas...


<?php
// We gaan sessies gebruiken
session_start();

// Gebruikersnaam en wachtwoord instellen
$sGebruikerControle = array(
array(
'gebruikersnaam' => 'admin',
'wachtwoord' => 'voor'
)
array(
'gebruikersnaam' => 'user',
'wachtwoord' => 'hallo'
)
)

// Controle of het formulier verzonden is
if($_SERVER['REQUEST_METHOD'] == 'POST')
{
// Controle of benodigde velden wel ingevuld zijn
if(isset($_POST['user'], $_POST['pass']))
{
// Overbodige spaties verwijderen
$sGebruiker = trim($_POST['user']);
$sWachtwoord = trim($_POST['pass']);

// Gebruikersnaam en wachtwoord controleren
if($sGebruiker == $sGebruikerControle && $sWachtwoord == $sGebruikerControle)
{
// Juiste gebruikersnaam en wachtwoord: inloggen!
$_SESSION['logged_in'] = true;
$_SESSION['gebruiker'] = $sGebruiker;

// Doorsturen en melding geven
header('Refresh: 3; url=beveiligd.php');
echo 'Je bent succesvol ingelogd. Je wordt doorgestuurd.';
}
else
{
// Terugsturen en foutmelding geven
header('Refresh: 3; url=login_form.php');
echo 'Deze combinatie van gebruikersnaam en wachtwoord is niet juist!';
}
}
else
{
header('Refresh: 3; url=login_form.php');
echo 'Een vereist veld bestaat niet!';
}
}
else
{
// Terug naar het formulier
header('Location: login_form.php');
exit();
}
?>
Nu mis ik de foreach weer. ;-)

$sGebruikerControle is een array met daarin meerdere gebruikers. Je kan niet zomaar een string vergelijken met een array; dat is ongeveer hetzelfde als een banaan vergelijken met een hele tros. Je moet dus eerst de array opdelen in stukjes en die losse stukjes afzonderlijk vergelijken. En dat is dus waar je die foreach voor gebruikt.

In dit geval moet je die if-then-else-constructie (regel 28-43 van je laatste script) nog in een foreach-loop zetten. En dan krijg je ongeveer:
<?php
foreach ($sGebruikerControle as $gebruiker)
{
if ($gebruiker['gebruikersnaam'] == $sGebruiker && $gebruiker['wachtwoord'] == $sWachtwoord)
{
// Juiste gebruikersnaam en wachtwoord: inloggen!
}
else
{
// Terugsturen en foutmelding geven
}
}
?>
De foreach knipt $sGebruikerControle (de tros) op in losse stukjes $gebruiker (de bananen). Elke $gebruiker is zelf ook weer een array met elementen 'gebruikersnaam' en 'wachtwoord'. Omdat $gebruiker een array is, kun je die dus niet rechtstreeks vergelijken met $sGebruiker en $sWachtwoord. Om te kunnen vergelijken zul je daarom de losse elementen uit die array moeten pakken: $gebruiker['gebruikersnaam'] kun je vergelijken met $sGebruiker en $gebruiker['wachtwoord'] met $sWachtwoord.

Reageren