fetch probleem ?

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Kevin van Leeuwen

Kevin van Leeuwen

15/07/2010 11:57:58
Quote Anchor link
Beste PHPhulp'ers,

ik heb een probleem, en een lastige vind ik zelf.

Ben bezig met een rangensysteem alleen zit met het volgende:
als ik zeg maar in de database rang 2 invoer toont hij de verkeerde rang,
dus dan zie je het verkeerde :)

Wie weet wat er fout is ?

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
<?php
// include/require hier evt nog andere zaken
require ("connect.php");
// we willen op deze pagina gebruik maken van beveiliging mbv sessies,
// dus includen (requiren) we session.php

require("session.php");
?>

<html>
<head>
<title>Intern rangensysteem</title>
</head>

<body>
<?php
/*
we gaan hier kijken of de gebruiker is ingelogd, en welk
user level de gebruiker heeft. Op grond daarvan laten we
bepaalde delen al dan niet zien.
Een gebruikerslevel is een getal wat aangeeft hoeveel
"macht" je hebt. Vaak is het zo: hoe hoger het getal, hoe
meer je mag.
bijvoorbeeld:
Voor een bepaalde bewerking heb je gebruikers-
niveau 1 nodig, maar voor een andere bewerking heb je niveau
2 nodig. Een gebruiker die beide bewerkingen mag uitvoeren
heeft gebruikersniveau 1+2 = 3. MAAR: Een gebruiker die om
een of andere reden alleen de tweede bewerking mag uitvoeren
heeft gebruikersniveau 0+2 = 2. Dus je telt de nummers die
bij bepaalde rechten horen bij elkaar op.
Het nummer dat het recht geeft op een bepaalde bewerking is
altijd een macht van 2.
bijvoorbeeld:
recht #1 (bv inloggen) heeft gebruikers niveau            2^0 = 1
recht #2 (bv je eigen info veranderen) heeft gebr. niveau 2^1 = 2
recht #3 (bv nieuws toevoegen) heeft gebruikers niveau    2^2 = 4
recht #4 (bv members toevoegen) heeft gebruikersniveau    2^3 = 8
enz.
Iemand die al deze bewerkingen mag uitvoeren heeft dus
gebruikersniveau 1+2+4+8 = 15 (of 2^4 - 1)
Iemand die alleen recht #1 en recht #3 heeft, heeft
dus gebruikersniveau 1+4 = 5
*/
// controle op ingelogd zijn:

if(isset($_SESSION['suser'])) {

 }
else {
?>

Je bent op dit moment niet ingelogd.<br />
<a href="login.php">inloggen</a><br />
<?php
}
?>
<?php

    $query
= "SELECT * FROM `users` WHERE `name` = '". $_SESSION['sname'] ."'";
    
$query = mysql_query($query) or die(mysql_error());
$var = mysql_fetch_assoc($query);

echo("<h3><color='black'><b></b></font></h3>");
   if ($_SESSION['slevel'] == 2){
  
    echo "rang  2 of zo :)";
    

    echo $var['level'];
}
else {
    echo "";
    echo $_SESSION['suser'];
    
    echo $VAR['level'];
}


?>





</body>
</html>
Gewijzigd op 15/07/2010 11:58:27 door Kevin van Leeuwen
 
PHP hulp

PHP hulp

19/04/2024 05:39:11
 
Mick ForSure

Mick ForSure

15/07/2010 12:01:07
Quote Anchor link
omdat je in de db rang 2 invoert, wil nog niet zeggen dat je sessie dan ook veranderd ;)

je kijkt hier:

if ($_SESSION['slevel'] == 2){

of het slevel 2 is in je sessie.
Is dit ook wel zo?

Voor de rest gebruik foutafhandeling voor je query's en geen die() <- Kerkhofmethode
 
Niels K

Niels K

15/07/2010 12:12:38
Quote Anchor link
Let ook op SQL injection
 
Kevin van Leeuwen

Kevin van Leeuwen

15/07/2010 12:29:04
Quote Anchor link
ja ok, alleen de beveiliging tegen sql injections zijn later aan de beurt en de fouten die kunnen optreden ook, klopt idd.

alleen dit werkt nog niet:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
<?php
// include/require hier evt nog andere zaken
require ("connect.php");
// we willen op deze pagina gebruik maken van beveiliging mbv sessies,
// dus includen (requiren) we session.php

require("session.php");
?>

<html>
<head>
<title>Intern rangensysteem</title>
</head>

<body>
<?php
/*
we gaan hier kijken of de gebruiker is ingelogd, en welk
user level de gebruiker heeft. Op grond daarvan laten we
bepaalde delen al dan niet zien.
Een gebruikerslevel is een getal wat aangeeft hoeveel
"macht" je hebt. Vaak is het zo: hoe hoger het getal, hoe
meer je mag.
bijvoorbeeld:
Voor een bepaalde bewerking heb je gebruikers-
niveau 1 nodig, maar voor een andere bewerking heb je niveau
2 nodig. Een gebruiker die beide bewerkingen mag uitvoeren
heeft gebruikersniveau 1+2 = 3. MAAR: Een gebruiker die om
een of andere reden alleen de tweede bewerking mag uitvoeren
heeft gebruikersniveau 0+2 = 2. Dus je telt de nummers die
bij bepaalde rechten horen bij elkaar op.
Het nummer dat het recht geeft op een bepaalde bewerking is
altijd een macht van 2.
bijvoorbeeld:
recht #1 (bv inloggen) heeft gebruikers niveau            2^0 = 1
recht #2 (bv je eigen info veranderen) heeft gebr. niveau 2^1 = 2
recht #3 (bv nieuws toevoegen) heeft gebruikers niveau    2^2 = 4
recht #4 (bv members toevoegen) heeft gebruikersniveau    2^3 = 8
enz.
Iemand die al deze bewerkingen mag uitvoeren heeft dus
gebruikersniveau 1+2+4+8 = 15 (of 2^4 - 1)
Iemand die alleen recht #1 en recht #3 heeft, heeft
dus gebruikersniveau 1+4 = 5
*/
// controle op ingelogd zijn:

if(isset($_SESSION['suser'])) {

 }
else {
?>

Je bent op dit moment niet ingelogd.<br />
<a href="index.php?return=login">inloggen</a><br />
<?php
}
?>

<?php
echo $_SESSION['slevel']; // check level
echo $_SESSION['suser']; // check user
?>

<?php
// query doen

$query = "SELECT * FROM `users` WHERE `id` = '". $_SESSION['sname'] ."'";
    
$query = mysql_query($query) or die(mysql_error());
$var = mysql_fetch_assoc($query);
echo("<h3><color='black'><b></b></font></h3>");
  
?>

<?php
// intern rangen systeem
if ($var['level'] == 2) {
    echo "dus dit word rang 2";
}
else {
    echo "en dit rang 1";
}
  

?>





</body>
</html>
 
Thomas de vries

thomas de vries

15/07/2010 12:39:22
Quote Anchor link
Probeer dit eens
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
<?php
//de include
require ("connect.php");
require ("session.php");
?>

<html>
<head>
<title>Intern rangensysteem</title>
</head>

<body>
<?php
//Controle of user is ingelogd of niet
if(isset($_SESSION['suser']))
{

    //Als de gebruiker is ingelogd resultaten
}
else
{
    //Fout niet ingelogd.
    echo 'Je bent op dit moment niet ingelogd.<br />
    <a href="login.php">Inloggen</a><br />'
;
}

$sql = "SELECT * FROM users WHERE name = '".$_SESSION['name']."'";
if(!$res = mysql_query($sql))
{

    //Fout melding
}
else
{
    $var = mysql_fetch_assoc($res);
    echo '<h3><font color="black"></font></h3>';
    if($var['slevel'] == 2)
    {

        //rang weer geven
    }
}

?>

</body>
</html>
Gewijzigd op 15/07/2010 12:44:56 door thomas de vries
 
Lars Groot

Lars Groot

15/07/2010 12:39:36
Quote Anchor link
Beste,
Hierbij heb ik de code verbeterd, wat injecties eruit gehaald.
Hierbij wat tips:
1) Gebruik altijd echo met enkele quotes, en dubbele quotes voor html/javascript.
2) Gebruik NOOIT `` bij een query
3) Als je iets wil outputten nooit php eindigen en weer openen, = onnodig.

Ik hoop dat het nu werkt:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
<?php
include "connect.php";
include "session.php";
?>

<html>
<head>
<title>Intern rangensysteem</title>
</head>

<body>
<?php
// controle op ingelogd zijn:
if(isset($_SESSION['suser'])) {
echo strip_tags($_SESSION['slevel']); // check level
echo strip_tags($_SESSION['suser']); // check user

$query = mysql_query("SELECT level FROM users WHERE name='".strip_tags($_SESSION['suser'])."'") or die(mysql_error());
$var = mysql_fetch_array($query);
echo '<h3><font color="black"><b>Rangensysteem</b></font></h3>';
  
if($var['level'] == 2) {
    echo 'Welkom admin!';
}
else{
    echo 'Welkom gebruiker!';
}
}
else{
echo 'Je bent op dit moment niet ingelogd.<br /><a href="index.php?return=login">inloggen</a><br />';
}

?>

</body>
</html>


(ik neem aan dat je een standaard ledensysteem gebruikt, wat ergens te downloaden is, want ik gebruik het zelf ook, dus vandaar dat ik wat heb veranderd).

Lars
 
Kevin van Leeuwen

Kevin van Leeuwen

15/07/2010 12:59:07
Quote Anchor link
Beste,

nee werkt nog niet, in de database staat rang 2
en als ik het online zet zie ik ,,Welkom gebruiker! ''
Terwijl ik moet zien ,, Welkom admin! ''

jah dit komt uit een ledensysteem.

alleen dit werkt niet :S
 
P Lekensteyn

P Lekensteyn

15/07/2010 13:07:40
Quote Anchor link
Begin eens een nieuwe sessie, en log goed in.
strip_tags != mysql_real_escape_string!
Niks 'beveiliging doe ik later wel', je gaat ook geen computeronderdelen vervangen met 'ik zet het later wel uit'.
 
Kevin van Leeuwen

Kevin van Leeuwen

15/07/2010 13:19:13
Quote Anchor link
werkt nog niet,

dit is de loginpagina :

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
<?php
require("connect.php"); // connectie met database maken en database selecteren // start een sessie of zet een sessie voort

// controleer hier of iemand inlogt - dit moet _voor_ de <HTML>-tag gebeuren gebeuren

if(isset($_POST['login'])) {
  if(trim($_POST['naam']) <> "" && trim($_POST['wacht']) <> "") {
    // naam en wachtwoord zijn ingevuld. Haal het (versleutelde) wachtwoord en
    // het gebruikersniveau dat bij deze gebruikersnaam hoort uit de database op
    // en vergelijk dit wachtwoord met het in het formulier opgegeven wachtwoord.


    $naam  = $_POST['naam'];
    $wacht = md5($_POST['wacht']);
    $res = mysql_query("SELECT klantnummer, pass, level FROM users where name='".$naam."'") or die(mysql_error());

    // Als er een resultaat is, oftewel er bestaat een gebruiker met de naam $naam
    if(mysql_num_rows($res) > 0) {
      $row = mysql_fetch_assoc($res);
      // aanname: het wachtwoord in de database is eenmalig gehashed mbv de functie md5()
      // vergelijk het opgehaalde wachtwoord met een versleutelde versie van het in het
      // formulier opgegeven wachtwoord

      if(!strcmp($wacht, $row['pass'])) {
        // alle gegevens kloppen

        // v1.2 extra functionaliteit, onthouden login
        // wil de gebruiker zijn gegevens onthouden ?

        if(isset($_POST['memory'])) {
          // set cookie (voor 2 maanden) en onthoud het IP
          // gebruik hierbij het id van de gebruiker

          setcookie("login_cookie", $row['id'].";".$row['pass'], time()+3600*24*31*2, "/");
          $ip = $_SERVER['REMOTE_ADDR'];
          mysql_query("UPDATE users SET last_ip='".$ip."' WHERE klantnummer=".$row['id']) or die(mysql_error());
        }


        // vul sessievariabelen
        $_SESSION['suser']    = $naam;         // gebruikersnaam van ingelogd persoon
        $_SESSION['klantnummer']= $row['klantnummer'];          // gebruikersnaam va
        $_SESSION['slevel']   = $row['level']; // bijbehorende gebruikersniveau
        $_SESSION['stime']    = time();        // de huidige tijd
        $_SESSION['smaxidle'] = 60 * 60;       // het aantal seconden inactiviteit      
      } else {
        // wachtwoorden komen niet overeen, breek de sessie weer af
        $_SESSION = array();
        session_destroy();
      }

      // geef de resultaten van deze query weer vrij
      unset($row);
      mysql_free_result($res);
    }

    // ververs, of de gebruikersnaam/wachtwoord combinatie nou klopt of niet, de pagina
    echo "<b></b>";
  }
}

?>

<html>
<head>
<title>Shop Test/title>
</head>

<body>
<?php
// als de (een willekeurige) sessievariabele suser in het sessie-array nog geen waarde heeft
// (dus als iemand nog niet is ingelogd)

if(!isset($_SESSION['suser'])) {
?>

<h2>BOVSHOP : Authorisatie punt</h2>
<form action="index.php?lang=Nl_nl" method="post">
Klantnummer <input type="text" name="naam" size="16"><br />
wachtwoord &nbsp;<input type="password" name="wacht" size="16"><br>
<br />
    <!-- v1.2 extra functionaliteit, login onthouden -->
<input type="checkbox" name="memory" value="1"> onthoud mijn login (gebruikt cookie) (tijdsduur : 2 dagen)<br>
<br />
<input type="submit" name="login" value="Aanmelden"><br />
</form>
<?php
} else {
  // de gebruiker is ingelogd - geef een welkomstboodschap oid
  // hier kun je tevens kijken of alle sessievariabelen de goede
  // waarden hebben (debugging)


include("accp.php");
}

?>

</body>
</html>


en die accp.php pagina :

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
<?php
include "connect.php";
include "session.php";
?>

<html>
<head>
<title>Intern rangensysteem</title>
</head>

<body>
<?php
// controle op ingelogd zijn:
if(isset($_SESSION['suser'])) {
echo mysql_real_escape_string($_SESSION['slevel']); // check level
echo mysql_real_escape_string($_SESSION['suser']); // check user

$query = mysql_query("SELECT level FROM users WHERE name='".$_SESSION['suser']."'") or die(mysql_error());
$var = mysql_fetch_array($query);
echo '<h3><font color="black"><b>Rangensysteem</b></font></h3>';
  
if($var['level'] == 1) {
    echo 'Welkom admin!';
}
else{
    echo 'Welkom gebruiker!';
}
}
else{
echo 'Je bent op dit moment niet ingelogd.<br /><a href="index.php?return=login">inloggen</a><br />';
}

?>

</body>
</html>


<b>edit : het werkt nog niet</b>
Gewijzigd op 15/07/2010 13:20:00 door Kevin van Leeuwen
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.