[php] realm/if probleem

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • pietje63
  • Registratie: Juli 2001
  • Laatst online: 16:14
Ok, teneerste sorry voor de vage titel, maar aangezien ik niet weet waar het probleem zit...

Ik heb het volgende probleem. Ik ga voor het leden gedeelte van onze nieuwe website gebruik maken van een combinatie van .htaccess en cookies/sessies. Ik wil dat er maar een keer ingelogd hoeft te worden. Ik heb echter een probleem, als mensen een verkeerde inlognaam invullen dan gaat dat niet goed. Ik heb de volgende code

PHP:
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
<?php
if (!isset($PHP_AUTH_USER) || $mode=="loguit")
  {
  $mode = "poep"; // om te zorgen dat er niet meer aan bovenstaande login wordt voldaan
  Header("WWW-Authenticate: Basic realm=\"Login leden gedeelte MSRV Saurus.\"");
  Header("HTTP/1.0 401 Unauthorized");
  echo ("Als je nog geen nickname/password hebt, of deze niet wordt geaccepteerd, neem dan contact op met de <a href=mailto:~email~>internet-cie</a>" .  $mode);
  }
else
  { // als er wel een http gebruikersnaam is
  // er moet ingelogd worden
  // de http beveiliging is nu al gebeurt
  include ("dbinfo.inc.php");
  include ("connect.inc.php");
  $PHP_AUTH_PW = md5($PHP_AUTH_PW);
  $login = "SELECT * FROM `leden_login` where `login_nickname` = '$PHP_AUTH_USER' ";
  $login_query = mysql_query($login);
  $test = mysql_num_rows($login_query);
  if ($test=="0") // lid niet gevonden in leden tabel
    {
    die ("Je gebruikersnaam staat niet in de leden tabel, <a href=login.php?mode=loguit>Log opnieuw in</a>");
    }
  while($login = mysql_fetch_array($login_query)) {
  $login_password = $login['login_password'];
  if ($PHP_AUTH_PW==$login_password) // dit betekent dat hij lid is
    {
     echo ("Ingelogd, je hebt nu toegang tot het leden gedeelte");
     //include cookies sessies bestand
    }
  else
    { // als het paswoord dus niet goed is
     echo ("Paswoord onjuist voor $PHP_AUTH_USER, <a href=login.php?mode=loguit>Log opnieuw in</a>");
    }
  }// einde while loop van inlog
  } // einde mode na het invullen van de realm
echo ("<br> wat is het nu echt??" . $PHP_AUTH_USER); // als controle voor nu
?>


De code ziet er misschien een beetje raar/ die geoptimaliseerd uit, maar dat komt omdat ik alleen nog wat aan het testen ben. Het rare is dat als je login.php?mode=loguit openen de realm elke keer terug komt na het invullen van een naam/password. Het lijkt dus dat hij de waarde van $mode niet veranderd, maar in de echo staat toch echt poep..

Een voorbeeld is te zien op: www.msrvsaurus.nl/login.php

[ Voor 9% gewijzigd door pietje63 op 14-01-2004 13:04 ]

De grootste Nederlandstalige database met informatie over computers met zoekfunctie!!


Acties:
  • 0 Henk 'm!

  • LuCarD
  • Registratie: Januari 2000
  • Niet online

LuCarD

Certified BUFH

Probeer het eens als volgt
PHP:
2
3
4
//if (!isset($PHP_AUTH_USER) || $mode=="loguit")
error_reporting(E_ALL);
if (!isset($PHP_AUTH_USER) || $_GET['mode']=="loguit")


Kijk eens naar de volgende oplossing ( het was niet fout maar volgens mij is dit handiger )
PHP:
16
17
//  $login = "SELECT * FROM `leden_login` where `login_nickname` = '$PHP_AUTH_USER' "; 
  $login = "SELECT * FROM `leden_login` where `login_nickname` = '" . mysql_escape_string($PHP_AUTH_USER) ."' and  `login_password` = '" . $PHP_AUTH_PW . "'";


En dan testen of je een record terug krijgt of niet.... Heb je ook geen loop meer nodig.

Programmer - an organism that turns coffee into software.


Acties:
  • 0 Henk 'm!

  • Erkens
  • Registratie: December 2001
  • Niet online

Erkens

Fotograaf

Notice: Undefined variable: PHP_AUTH_USER in /opt/www/msrvsaurus/web/www.msrvsaurus.nl/login.php on line 38

:z

Acties:
  • 0 Henk 'm!

  • pietje63
  • Registratie: Juli 2001
  • Laatst online: 16:14
LuCarD schreef op 14 januari 2004 @ 13:13:
Probeer het eens als volgt
PHP:
2
3
4
//if (!isset($PHP_AUTH_USER) || $mode=="loguit")
error_reporting(E_ALL);
if (!isset($PHP_AUTH_USER) || $_GET['mode']=="loguit")
Dit werkt niet, en had ik ook niet verwacht, want $_GET['mode'] blijft continu op loguit staan. $mode wordt wel vervangen door poep... Ok ik had eigenlijk $mode = $_GEt['mode'] VOOR de if statement in moeten voegen maar dat maakt niet uit.
Kijk eens naar de volgende oplossing ( het was niet fout maar volgens mij is dit handiger )
PHP:
16
17
//  $login = "SELECT * FROM `leden_login` where `login_nickname` = '$PHP_AUTH_USER' "; 
  $login = "SELECT * FROM `leden_login` where `login_nickname` = '" . mysql_escape_string($PHP_AUTH_USER) ."' and  `login_password` = '" . $PHP_AUTH_PW . "'";


En dan testen of je een record terug krijgt of niet.... Heb je ook geen loop meer nodig.
Is inderdaad mooier, en zoiets wil ik uiteindelijk ook gaan doen, wilde alleen testen ALS het inloggen nu niet lukt waar de fout zit.
Erkens schreef op 14 januari 2004 @ 13:18:
Notice: Undefined variable: PHP_AUTH_USER in /opt/www/msrvsaurus/web/www.msrvsaurus.nl/login.php on line 38

:z
Dat komt doordat ik net de code van LuCarD overgenomen heb met errer_reporting aan.. maar volgens mij is dat niet het probleem

[ Voor 19% gewijzigd door pietje63 op 14-01-2004 13:22 ]

De grootste Nederlandstalige database met informatie over computers met zoekfunctie!!


Acties:
  • 0 Henk 'm!

  • Erkens
  • Registratie: December 2001
  • Niet online

Erkens

Fotograaf

pietje63 schreef op 14 januari 2004 @ 13:21:
Dat komt doordat ik net de code van LuCarD overgenomen heb met errer_reporting aan.. maar volgens mij is dat niet het probleem
tuurlijk ;)
maar je eigen code gebruikt ook deze ongedefinieerde variabele :)

http://www.php.net/manual....variables.predefined.php

Acties:
  • 0 Henk 'm!

  • pietje63
  • Registratie: Juli 2001
  • Laatst online: 16:14
Hmm, ik snap dat probleem niet helemaal. Aangezien op het moment dat jij het script aanriep de variable $PHP_AUTH_USER niet gevuld was, maar dat is logisch zolang je de realm niet ingevuld hebt.. Ik heb die regel alleen toegevoegd om te kijken wat er in $PHP_AUTH_USER zit, om te kijken of hij wel elke keer goed veranderd enzo.

Maar denk jij dat dit te maken heeft met mijn probleem of niet? want dat snap ik niet helemaal.

De grootste Nederlandstalige database met informatie over computers met zoekfunctie!!


Acties:
  • 0 Henk 'm!

  • pietje63
  • Registratie: Juli 2001
  • Laatst online: 16:14
Subtiel schopje....
Kan iemand mij uitleggen waar mijn loop verkeerd gaat? Het gaat dus vooral om
PHP:
1
2
3
4
5
6
7
if (!isset($PHP_AUTH_USER) || $mode=="loguit") 
  { 
  $mode = "poep"; // om te zorgen dat er niet meer aan bovenstaande login wordt voldaan 
  Header("WWW-Authenticate: Basic realm=\"Login leden gedeelte MSRV Saurus.\""); 
  Header("HTTP/1.0 401 Unauthorized"); 
  echo ("Als je nog geen nickname/password hebt, of deze niet wordt geaccepteerd," .  $mode); 
  }
Als de mode eenmaal op loguit staat blijft hij de realm, om voor mij onverklaarbare reden, terug komen

[ Voor 15% gewijzigd door pietje63 op 15-01-2004 12:06 ]

De grootste Nederlandstalige database met informatie over computers met zoekfunctie!!


Acties:
  • 0 Henk 'm!

  • Erkens
  • Registratie: December 2001
  • Niet online

Erkens

Fotograaf

pietje63 schreef op 15 januari 2004 @ 12:04:
Subtiel schopje....
Kan iemand mij uitleggen waar mijn loop verkeerd gaat? Het gaat dus vooral om
PHP:
1
2
3
4
5
6
7
if (!isset($PHP_AUTH_USER) || $mode=="loguit") 
  { 
  $mode = "poep"; // om te zorgen dat er niet meer aan bovenstaande login wordt voldaan 
  Header("WWW-Authenticate: Basic realm=\"Login leden gedeelte MSRV Saurus.\""); 
  Header("HTTP/1.0 401 Unauthorized"); 
  echo ("knip" .  $mode); 
  }
Als de mode eenmaal op loguit staat blijft hij hier, om voor mij onverklaarbare reden, op staan...
op die $PHP_AUTH_USER var die je niet hoort te gebruiken na is er niets mee.
want doordat je die headers stuurt op het moment dat je wil uitloggen (wat niet echt kan met deze vorm van authenticatie) krijg je weer dat inlog venstertje, simpel op esc rammen en je krijgt je tekst en je bent uitgelogt.

Acties:
  • 0 Henk 'm!

  • pietje63
  • Registratie: Juli 2001
  • Laatst online: 16:14
Dat is dus niet het geval.
Ik wil inderdaad 1x de headers krijgen en verzoek mensen om uit te loggen met het username "log" en het paswoord "uit"
Op dat moment is $PHP_AUTH_USER als het goed is gevuld met log, en dat is ook het geval, op dat moment is $mode gevuld met poep (beide gecontroleerd door een een echo) . En toch blijf ik het inlog venster krijgen.

En $PHP_AUTH_USER is de term die php.net zelf gebruikt (http://nl3.php.net/features.http-auth) en ook zend http://www.zend.com/zend/tut/authentication.php

De grootste Nederlandstalige database met informatie over computers met zoekfunctie!!


Acties:
  • 0 Henk 'm!

  • Michali
  • Registratie: Juli 2002
  • Laatst online: 29-05 22:54
Ik gebruik zelf $_SERVER['PHP_AUTH_USER'] en $_SERVER['PHP_AUTH_PW']. Ik denk dat dat ook is wat Erkens bedoelde.

Noushka's Magnificent Dream | Unity


Acties:
  • 0 Henk 'm!

  • Erkens
  • Registratie: December 2001
  • Niet online

Erkens

Fotograaf

pietje63 schreef op 15 januari 2004 @ 15:15:
Dat is dus niet het geval.
Ik wil inderdaad 1x de headers krijgen en verzoek mensen om uit te loggen met het username "log" en het paswoord "uit"
Op dat moment is $PHP_AUTH_USER als het goed is gevuld met log, en dat is ook het geval, op dat moment is $mode gevuld met poep (beide gecontroleerd door een een echo) . En toch blijf ik het inlog venster krijgen.
ehm in PHP_AUTH_USER zit de username die de browser naar jou toe stuurt.
En $PHP_AUTH_USER is de term die php.net zelf gebruikt (http://nl3.php.net/features.http-auth) en ook zend http://www.zend.com/zend/tut/authentication.php
leuk dat die link van PHP gewoon aangeeft dat je $_SERVER['PHP_AUTH_USER'] moet gebruiken, en dat linkje van zend is een document uit 2000
Pagina: 1