[PHP] Controle uit DB werkt niet

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • kleautviool
  • Registratie: Mei 2003
  • Laatst online: 17-09 15:43
Voor een website die ik aan het maken ben loop ik tegen een (in mijn ogen) vreemd probleem aan.

Voor deze site heb ik een registratie-systeem gemaakt, waarbij er bij het inloggen 2 cookies geplaatst worden, namelijk a_m_id en a_m_hash, en er worden 2 sessies aangemaakt (1 met het IP-adres van de gebruiker en 1 waarin staat of met ingelogd is of niet). De eerste cookie heeft als waarde de ID van de gebruiker, en het 2e cookie heeft een hash van 10 karakters. Deze hash staat ook in de database.

Nu wil ik dus controleren dat als iemand zijn profiel wil wijzigen, of hij/zij dan daadwerkelijk wel zijn eigen profiel aan het wijzigen is. Hiervoor had ik de volgende controle gemaakt:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<?php
    // Haal de hash en het wachtwoord uit de database
    $sql = ("SELECT m_id, m_hash, m_wachtwoord FROM members WHERE m_id = '".$_aGET[0]."'");
    $result = mysql_query($sql) or die(mysql_error());
    $show = mysql_fetch_assoc($result);
    // Kijk of de persoon is ingelogd
    if(!isset($_SESSION['a_ingelogd']) && $_SESSION['a_ingelogd'] != 1){
        // Zonee, error weergeven
        show_error('Om deze pagina te kunnen bekijken dien je ingelogd te zijn!','Niet ingelogd!');
    }
    // Indien de persoon is ingelogd, kijken of dit wel zijn profiel is
    elseif($_COOKIE['a_m_hash'] != $show['m_hash'])  {
        // Zonee, error weergeven
        show_error('Je hebt geen toestemming om deze pagina te kunnen bekijken!','Geen rechten!');
    }else{
        // Hier het formulier
    }
?>

Als ik bovenstaande code uitvoer, krijg ik voortdurend de error te zien dat ik geen toestemming heb om deze pagina te bekijken. Alleen het vreemde is nu dat als ik via phpmyadmin in de database kijk, dan staat daar precies dezelfde waarde als in mijn cookie...

Ik heb al het e.e.a. geprobeerd om te kijken waar het probleem ligt, en als ik het volgende doe:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
<?php
    // Haal de hash en het wachtwoord uit de database
    $sql = ("SELECT m_id, m_hash, m_wachtwoord FROM members WHERE m_id = '".$_aGET[0]."'");
    $result = mysql_query($sql) or die(mysql_error());
    $show = mysql_fetch_assoc($result);
    // Dit werkt dus wél
    echo($show['m_hash']);
    // Kijk of de persoon is ingelogd
    if(!isset($_SESSION['a_ingelogd']) && $_SESSION['a_ingelogd'] != 1){
        // Zonee, error weergeven
        show_error('Om deze pagina te kunnen bekijken dien je ingelogd te zijn!','Niet ingelogd!');
    }
    // Indien de persoon is ingelogd, kijken of dit wel zijn profiel is
    // En in onderstaande controle werkt het niet....
    elseif($_COOKIE['a_m_hash'] != $show['m_hash'])  {
        // Zonee, error weergeven
        show_error('Je hebt geen toestemming om deze pagina te kunnen bekijken!','Geen rechten!');
        echo("Cookie: ".$_COOKIE['a_m_hash']." - Hash: ".$show['m_hash']."<br>");
        echo("Cookie: ".md5($_COOKIE['a_m_hash'])." - Hash: ".md5($show['m_hash'])."<br>");
    }else{
        // Form
    }
?>

Dan blijkt dat de hash uit de database leeg is bij de controle of de hash gelijk is aan de waarde van mijn cookie, maar wél werkt als ik de hash bóven de controle echo.

Ik heb ook al geprobeerd om de query via een functie te returnen en dan de uitkomst van de functie te vergelijken met de waarde van mijn cookie, maar dat werkte ook niet

Nu is mijn vraag dus hoe ik de waarde van de hash in de DB ook in de controle kan gebruiken.
Het lijkt me een héél simpel en logisch antwoord, maar ik zit er al dagen naar te kijken en kom er niet uit....

[ Voor 10% gewijzigd door kleautviool op 16-10-2005 14:40 ]


Acties:
  • 0 Henk 'm!

  • Andre-85
  • Registratie: April 2003
  • Niet online

Andre-85

Sid

Ik weet niet helemaal zeker of ik het goed begrijp maar volgens mij is het veel handiger om een user _id in een sessie op te slaan. Je kan dan aan de hand van het user_id het juiste profiel tonen met de mogelijkheid om wijzigingen door te voeren.

Lorem
Whenever we feel the need to comment something, we write a method instead. - Martin Fowler
People who think they know everything really annoy those of us who know we don't - Bjarne Stroustrup


Acties:
  • 0 Henk 'm!

  • kleautviool
  • Registratie: Mei 2003
  • Laatst online: 17-09 15:43
Zou kunnen, maar ik heb inmiddels de hele site op deze manier gemaakt dus om dat nou allemaal weer helemaal om te gooien lijkt me ook wat te veel werk

Acties:
  • 0 Henk 'm!

  • kleautviool
  • Registratie: Mei 2003
  • Laatst online: 17-09 15:43
* * Schopje * *

Acties:
  • 0 Henk 'm!

Verwijderd

Dan blijkt dat de hash uit de database leeg is bij de controle of de hash gelijk is aan de waarde van mijn cookie, maar wél werkt als ik de hash bóven de controle echo.
Dus voor de if staat er nog wel iets in?? Dat lijkt me heel stug, dat zou alleen kunnen als je de var in de if een waarde geeft. Dat is niet het geval met !=....

[ Voor 82% gewijzigd door Verwijderd op 17-10-2005 15:03 ]


Acties:
  • 0 Henk 'm!

  • kleautviool
  • Registratie: Mei 2003
  • Laatst online: 17-09 15:43
Nou het werkt inmiddels. Lag aan die elseif(). Heb nu het volgende gedaan en dat werkt:

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<?php
    // Haal de hash en het wachtwoord uit de database
    if(isset($_SESSION['a_ingelogd']) && $_SESSION['a_ingelogd'] == 1){
        // Zoja, controleer of er niet met de cookies geknoeit is
        $sql = ("SELECT m_id, m_hash, m_wachtwoord FROM members WHERE m_id = '".$_COOKIE['a_m_id']."' ");
        $result = mysql_query($sql) or die(mysql_error());
        $show = mysql_fetch_assoc($result);
        if($_COOKIE['a_m_hash'] == $show['m_hash']){
            // Formulier
        }else{
            // De hash van het cookie komt niet overeen met de hash uit de database dus gooi er een error uit
            show_error('Je hebt geen toestemming om deze pagina te kunnen bekijken!','Geen rechten!');
        }
    }else{
        // De gebruiker is niet ingelogd, dus gooi er een error uit
        show_error('Om deze pagina te kunnen bekijken dien je ingelogd te zijn!','Niet ingelogd!');
    }


Sorry voor dit domme topic, maar kwam er écht niet uit... :X |:(
Pagina: 1