Schrift
[thread]9210[/thread]

Ganz simples User management? (Seite 2)

Leser: 3


<< |< 1 2 3 4 >| >> 38 Einträge, 4 Seiten
RPerl
 2007-07-20 13:11
#78691 #78691
User since
2006-11-26
384 Artikel
BenutzerIn

user image
Quote
du hast mich überzeugt, ich werd Simple::Login weglassen

Wollte dir das Modul nicht schlecht machen, sorry wenn ich das habe... oO

Zum Script ansich:

Code (perl): (dl )
my $sth = $dbh->prepare( q{ SELECT username from users });


..sollte:

Code (perl): (dl )
my $sth = $dbh->prepare( q{ SELECT username,pass from users });


sein, damit Du spaeter mit auth() pruefen kannst, ob beides passt.
Du muesstest, wenn ich richtig liege, noch die Daten die du aus der DB hast an die auth() schicken, damit die diese dann verarbeiten kann.

Die Daten hast du bis jetzt noch nicht aus der DB raus. Versuch mal sowas hier:

Code (perl): (dl )
1
2
3
while ( @row = $sth->fetchrow_array ) {
    print "@row\n";
  }


Um die Daten rauszuholen.

system("clear");

geht auch mit printf , afaik perlischer :)

Danke!

rPerl
renee
 2007-07-20 13:15
#78692 #78692
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Code (perl): (dl )
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
sub auth {
        my ($login, $password) = shift;
        my $stmt = q~SELECT Password FROM users WHERE Username = ?~;
        my $sth = $dbh->prepare( $stmt ) or die $dbh->errstr;
        $sth->execute( $login ) or die $dbh->errstr();
        my ($password_check) = $sth->fetchrow_array;

        my $return = 0;
        if( $password_check ){
            $return = $password eq $password_check ? 1 : 2;
        }

        return $return
}

my %map = (
    0 => \&createuser,  # 0 => Userexistiert noch gar nicht
    1 => \&everything_is_fine, # 1 => Login hat geklappt
    2 => \&wrong_login, # 2 => Passwort war falsch eingegeben
);

# versuche einzuloggen
my $retval = auth( $login, $password );

# wenn es fuer den Rueckgabewert einen Eintrag gibt fuehre die entsprechende Funktion aus
if( exists $map{$retval} ){
    $map{$retval}->();
}
else{
    die "irgendwas ganz komisches ist passiert"
}
\n\n

<!--EDIT|renee|1184923140-->
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/
renee
 2007-07-20 13:17
#78693 #78693
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
[quote=RPerl,20.07.2007, 11:11][...]

system("clear");

geht auch mit printf , afaik perlischer :)

Danke!

rPerl[/quote]
Was hat das eine mit dem anderen zu tun?
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/
RPerl
 2007-07-20 13:26
#78694 #78694
User since
2006-11-26
384 Artikel
BenutzerIn

user image
Ahja: Hol mal die DB-Daten aus dem Script raus...

Quote
Was hat das eine mit dem anderen zu tun?

Nichts, nur Anmerkung... :blush:

Code: (dl )
my $stmt = q~SELECT Password FROM users WHERE Username = ?~;

Pass auf das alles was zum DB Server geschickt wird auch validiert wird.

Danke !

rPerl

// Edit: Uebrigens: in der count Funktion ist auch ein Fehler. Wenn du die datensaetze zaehlen willst dann benutzt dafuer MySQL COUNT.
*script zerpflueck*\n\n

<!--EDIT|RPerl|1184923728-->
FlorianL
 2007-07-20 13:35
#78695 #78695
User since
2007-05-18
142 Artikel
BenutzerIn
[default_avatar]
zerpflück ruhig, ich bin für jede kritik und verbesserung dankbar, warum bin ich sonst hier? :)
renee
 2007-07-20 13:39
#78696 #78696
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
[quote=RPerl,20.07.2007, 11:26]
Code: (dl )
my $stmt = q~SELECT Password FROM users WHERE Username = ?~;

Pass auf das alles was zum DB Server geschickt wird auch validiert wird.[/quote]
Wie meinst Du das? Spezialzeichen wie ' etc. werden dank dem ? automatisch gequotet!

CPAN:DBI
Wiki:Wichtiger Wiki-Artikel
Leseprobe der ersten $foo-Ausgabe
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/
RPerl
 2007-07-20 13:55
#78697 #78697
User since
2006-11-26
384 Artikel
BenutzerIn

user image
Nicht das dass query dann nachher so aussieht:

SELECT Password FROM users WHERE Username = "iamnothere" OR Username LIKE "%" AND Password LIKE "%"

mehr meinte ich nicht.
renee
 2007-07-20 14:03
#78698 #78698
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Dann lies Dir bitte die Links durch, die ich gepostet habe. Genau so etwas wird von DBI mit der ?-Notation verhindert!
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/
RPerl
 2007-07-20 14:10
#78699 #78699
User since
2006-11-26
384 Artikel
BenutzerIn

user image
Ich schau mich gerade beim $foo Magazin um :)
Auf jedenfall Danke fuer die Links und die Erklaerung - wie immer :)\n\n

<!--EDIT|RPerl|1184926363-->
FlorianL
 2007-07-20 14:29
#78700 #78700
User since
2007-05-18
142 Artikel
BenutzerIn
[default_avatar]
hm ich hab kagge gebaut irgendwo?!

output:
Quote
Hello welcome to SlashEm!

SlashEm is a modification of the great NetHack Game...
More Info: http://nethack.org/v343/Guidebook.html or press '?' ingame...

Login: bla
Password: bla
Use of uninitialized value in exists at slashem.pl line 77, <STDIN> line 2.
irgendwas ganz komisches ist passiert at slashem.pl line 80, <STDIN> line 2.
mindfucked:/home/mindfuck/scripts#


Code (perl): (dl )
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
86
87
88
89
90
91
92
#!/usr/bin/perl
use warnings;
use strict;
use DBI;

my $gamebin = "/usr/games/slashem";

### DB ###
my $database = "nethack";
my $hostname = "127.0.0.1";
my $dsn      = "DBI:mysql:database=$database;host=$hostname";
my $dbuser   = "nethack";
my $dbpasswd = 'whatApa55';
my $dbh = DBI->connect( $dsn, $dbuser, $dbpasswd, {RaiseError => 1, AutoCommit => 0} ) || die $DBI::errstr;

### SUBS ###
sub countusers {
    my $sth = $dbh->prepare( q{ SELECT username from users });
    my $rc = $sth->execute;
    print "$sth->{COUNT} Users registered\n\n";
    $dbh->disconnect;
}

sub auth {
    my ($login, $password) = shift;
    my $stmt = q~SELECT Password FROM users WHERE Username = ?~;
    my $sth = $dbh->prepare( $stmt ) or die $dbh->errstr;
    $sth->execute( $login ) or die $dbh->errstr();
    my ($password_check) = $sth->fetchrow_array;

    my $return = 0;
    if( $password_check ){
        $return = $password eq $password_check ? 1 : 2;
    }
}

my %map = (
    0 => \&createuser,  # 0 => Userexistiert noch gar nicht
    1 => \&everything_is_fine, # 1 => Login hat geklappt
    2 => \&wrong_login, # 2 => Passwort war falsch eingegeben
);

sub wrong_login {
    print("Seems like you entered a wrong username/pass combo...\n");
    exit 0;
}

sub createuser {
    print("Username not found, do you want to register a new Account? (Y/n) >");
    chomp(my $answer = <STDIN>);
    if ($answer eq 'n') {
        print("Okay cya!\n");
        exit 0;
    } else {
        print("Okay, enter your desired login-name: ");
        chomp(my $login = <STDIN>);
        print("\nWell $login\, please enter a password: ");
        chomp(my $password = <STDIN>);
        print("\n");
        my $stmt = q~INSERT INTO users(username, password) VALUES($login, $password)~;
    }
}

sub everything_is_fine {
    print("Login DONE\n");
}

sub game {
    system("clear");
    print("Hello welcome to SlashEm!\n\nSlashEm is a modification of the great NetHack Game...\nMore Info: http://nethack.org/v343/Guidebook.html or press '?' ingame...\n\n");
    sleep("5");
    print("Login: ");
    chomp(my $login = <STDIN>);
    print("Password: ");
    chomp(my $password = <STDIN>);
    my $retval = auth($login, $password);
    if( exists $map{$retval} ){
        $map{$retval}->();
    } else {
        die "irgendwas ganz komisches ist passiert"
    }
    system("clear");
    print("You enter the World of SlashEm... Currently there are", countusers(), "Users registered\n\n");
    sleep("2");
}


### MAIN ###
main {
    game();
    #system("$gamebin -u $name");
}
<< |< 1 2 3 4 >| >> 38 Einträge, 4 Seiten



View all threads created 2007-07-20 11:06.