Hallo Allemaal,

In mijn vorige post kreeg ik van Jelmer de tip om naar http://wiki.phpfreakz.nl/Gebruikerniveaus_binnen_webapplicatie

te gaan, teneinde meer te weten te komen over gebruikersniveaus, bedankt nog daarvoor!
Ik ben een aantal dagen bezig nu en heb nogal wat moeite om een script te schrijven wat omgaat met de $_SESSION['userdata'] zoals vermeld in het artikel. Sterker nog, mijn huidige loginscript laat in alle gevallen (dus ook zonder usernaam en password) de bezoeker naar de "logged.php" pagina gaan.

Ik heb een index pagina met daarin een login form, dat verwijst naar auth.php. Auth.php heeft het volgende script:
<?php

session_start ();

//Include db login and details
include("login details");

//username and password from signup form
$_POST['username'];
$_POST['password'];

//start query and retrieve Level to check login and user rights
$sql="SELECT Level from Testuser WHERE username='$username' AND password='$password'";
$result=mysql_query($sql);

//count rows and store result
$count=mysql_num_rows($result);
$row=mysql_fetch_assoc($result);

//start function to determine if username and password are correct, store username and Level in a session
if ($count = 1) {
$_SESSION['username']=$row['username'];
$_SESSION['Level']=$row['Level'];
header ('Location:logged.php');
}
else {
header ('Location:index.php');
}
?>

Logged.php heeft het volgende:
<?
require ("auth.php");
?>

Enig idee waar mijn script zover de mist in gaat, ik zie het niet meer...
Alvast bedankt!
Hier klopt al iets niet:

include("login details");


Dit is geen bestand...
Hallo Joost,

Bedankt voor je reactie, ik ga natuurlijk mijn bestandsnaam niet weggeven :-)
waar haal je $username en $password in je querie vandaan.

wat include je hier:
(joost was me voor, maar wil je dan wel even posten wat er in staat?)

<?php
    include("login details");
?>


haal je variabelen buiten quotes in je query:


<?php
    $sql="SELECT Level from Testuser WHERE username='".$username."' AND password='".$password."'";
?>


let even op sql injection

en als laatste, waar contoleer je of er wel resultaat uit je query komt
if ($count = 1) {

Moet natuurlijk
if ($count == 1) {

Zijn
Hallo Erwin,

$username en $password komen uit de form (method POST) en zijn de namen die de twee velden hebben meegekregen.

Dit staat er in de file die included wordt:

<?php
$host = "localhost";
$user = "**";
$password = "**";
$db = "**";
$connection = mysql_connect($host,$user,$password)
or die ("Could not connect to the server");
mysql_select_db($db,$connection)
or die ("Could not select DB");
?>

Ik snap je opmerking "waar contoleer je of er wel resultaat uit je query komt" niet helemaal, kun je proberen dit te verduidelijken?

Alvast bedankt!
In plaats van:
//username and password from signup form
$_POST['username'];
$_POST['password'];

//start query and retrieve Level to check login and user rights
$sql="SELECT Level from Testuser WHERE username='$username' AND password='$password'";


Moet dat natuurlijk dit zijn:
//username and password from signup form
$username = mysql_real_escape_string($_POST['username']);
$password = mysql_real_escape_string($_POST['password']);

//start query and retrieve Level to check login and user rights
$sql="SELECT Level from Testuser WHERE username='" . $username . "' AND password='" . $password . "'";
En het is altijd wel vriendelijk om een hash van het wachtwoord op te slaan in plaats van het wachtwoord zelf. Mocht er dan om een of andere reden data uit je database lekken, bijvoorbeeld door SQL injection, dan staat daar niet direct vol glorie het wachtwoord.
JP Berkenhagen schreef op 13.04.2008 15:48
Hallo Erwin,
Ik snap je opmerking "waar contoleer je of er wel resultaat uit je query komt" niet helemaal, kun je proberen dit te verduidelijken?


Dat doe jij hier.

<?php
if ($count = 1) {
$_SESSION['username']=$row['username'];
$_SESSION['Level']=$row['Level'];
header ('Location:logged.php');
}


Alleen niet goed, want je kijkt of $count naar 1 geset kan worden. wat altijd slaagt. Vandaar dat ik zei dat het if($count == 1) moet zijn.
Allen,

Bedankt voor de input zover! Er gebeurt in ieder geval iets...Alleen met de setup hieronder, blijft de browser in auth.php hangen.

<?php

session_start ();

//Include db login and details
include("login.inc");

//username and password from signup form
$username = mysql_real_escape_string($_POST['username']);
$password = mysql_real_escape_string($_POST['password']);

//start query and retrieve Level to check login and user rights
$sql="SELECT username, Level from Testuser WHERE username='".$username."' AND password='".$password."'";
$result=mysql_query($sql);

//count rows and store result
$count=mysql_num_rows($result);


//start function to determine if username and password are correct, store username and Level in a session
if ($count == 1) {
$row=mysql_fetch_assoc($result);
$_SESSION['username']=$row['username'];
$_SESSION['Level']=$row['Level'];
header ('Location:logged.php');
}
else {
header ('Location:index.php');
}
?>

Blijkbaar maak ik ergens nog een fout...Alvast bedankt voor jullie input!
Niemand een idee? Zou het aan het header () deel kunnen liggen, ik heb namelijk ook een script gevonden wat anders is opgebouwd maar min of meer hetzelfde probleem geeft...

Alvast bedankt voor jullie reacties!

Reageren