[php]Login Script met meerdere users

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • w00d
  • Registratie: Juni 2004
  • Laatst online: 12:59
Hoi,

Ik ben bezig om een login script te schrijven waarbij de user in een php bestand staan. Het uitlezen van het bestand gaat goed, en ook het opvragen gegevens uit de login box. Beide zijn ook gelijk als ik met echo alles naloop. Maar toch als ik dit in php door een if statement laat doen blijft die aangegeven dat de waardes niet gelijk zijn.

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
<?php
$myFile = "user.db.php";
$fh = fopen($myFile, 'r');
$data = fread($fh, filesize($myFile));
fclose($fh);
            
$user = explode("#",$data);
$eind = substr_count($data, "#");

    if (isset($_GET['p']) && $_GET['p'] == "login") {
        for ($i = 0; $i < $eind; $i++ ){
            $temp_user = explode("|",$user[0]);
            
            $username = $temp_user[0];
            $password = $temp_user[1];
            $randomword = "abcdef123";
            
       if ($_POST['name'] == $username && $_POST['pass'] == $password) {
          setcookie('FileTransfer', md5($_POST['pass'].$randomword));
          setcookie("security2", "toegang");
          header("location: index.php");
          echo "header";
       } else {
          echo "<p>Sorry, you could not be logged in at this time. Refresh the page and try again.</p>";
       }?>


Als ik dus echo $username en echo $_POST['name'] neerzet zijn beide waardes exact gelijk. Als ik van $username = $temp_user[0] het volgnede maak: $username = 'eennaam'; en dat ook voor het wachtwoord doe ( dus gewoon een gebruikers account in de code zetten ) dan gaat het wel goed.

Ik maak dus ergens een fout in de vergelijking, maar waar..

Acties:
  • 0 Henk 'm!

  • Voutloos
  • Registratie: Januari 2002
  • Niet online
Gebruik [php] tags, maak je indenting consistent en check of je die if($_POST ...) wel in dat for-loopje wil hebben.

{signature}


Acties:
  • 0 Henk 'm!

  • w00d
  • Registratie: Juni 2004
  • Laatst online: 12:59
Ik heb de $_POST idd maar uit de for loop gehaald, is idd wel beter. Het viel me eindelijk op dat ik last had van " " een spatie dus. Met trim() was het opgelost.

Acties:
  • 0 Henk 'm!

Verwijderd

Hmm waarom read je helemaal die php file?

Je kan ook gewoon een PHP'tje includen:

PHP:
1
2
3
4
5
$users = array();

$users['foo']['bar'] = 1;
$users['yee']['haa'] = 1;
$users['baz']['foo'] = 1;


Waarbij het eerste element in het array de username is en het twee een password. En om dan te checken of iemand inlogt of niet (waarbij users.inc.php het bovenstaande script is):

PHP:
1
2
3
4
5
6
7
8
9
10
include('./users.inc.php');

if(isset($users[$_POST['username']][$_POST['password']]))
{
     //Jeej, ingelogd
}
else
{
    //Argh! Helaas pindakaas.
}


Niet getest, maar zoiets moet wel zo kunnen. Zal nog een stuk sneller zijn ook. Natuurlijk zal je voor het password MD5 o.i.d. moeten gebruiken.

Succes ;)

[ Voor 4% gewijzigd door Verwijderd op 09-06-2007 00:31 ]


Acties:
  • 0 Henk 'm!

  • GlowMouse
  • Registratie: November 2002
  • Niet online
Ik vermoed dat de vergelijking fout gaat omdat er aan het eind van iedere regel nog een newline staat. Werken met trim($password) zou dat verhelpen.

Wat commentaar op je code:
Regel 2-5 zou ik vervangen door $data = file('user.db.php'); Je hebt dan iedere regel in een element van een array staan, zodat je hele for-loop vervangen kan worden door een foreach-loop.
Tweede punt is dat je het hele bestand doorbladert, terwijl je in principe kunt stoppen wanneer de juiste gebruiker gevonden is.

Wat commentaar op je aanpak:
Iedereen kan jouw user.db.php openen in zijn browser om de userdatabase te zien. Daarnaast is de aanpak die Piet suggereert superieur aan je huidige opzet. Niet alleen kun je de userdatabase niet zien wanneer je het bestand direct opvraagt, ook zal de code iets sneller werken.

Acties:
  • 0 Henk 'm!

  • P.O. Box
  • Registratie: Augustus 2005
  • Niet online
nou ik zou nog wel even dit veranderen:
PHP:
1
include('./users.inc.php');


in een bestand dat niet bereikbaar is vanaf je webroot...

Acties:
  • 0 Henk 'm!

  • drm
  • Registratie: Februari 2001
  • Laatst online: 09-06 13:31

drm

f0pc0dert

't Is klaarblijkelijk ook geen php bestand, dus je kunt het beter gewoon een andere extensie geven die je vervolgens uitsluit voor serven door webserver, bijv .conf:
code:
1
2
3
4
# ihgv Apache in .htaccess
<FilesMatch "\.conf$">
   Deny from All
</FilesMatch>


Natuurlijk altijd nog zelf even testen en kijken of je een 403 krijgt.

Music is the pleasure the human mind experiences from counting without being aware that it is counting
~ Gottfried Leibniz


Acties:
  • 0 Henk 'm!

  • w00d
  • Registratie: Juni 2004
  • Laatst online: 12:59
Bedankt voor tips allemaal, ik zal vanavond als ik klaar ben met school alles is nalopen en zonodig erin zetten.
Pagina: 1