Hallo, Es geht um folgendes Konstrukt # Ergebnis auf den Bildschirm while(@ergebnis=$sth->fetchrow_array) { if ( @ergebnis[0] eq $value01 && @ergebnis[1] eq $value02 ) { print "<tr>
Hallo Martin, hab von perl nicht viel Ahnung, aber sollte es nicht "elseif" statt "elsif" heißen? lg Boris Martin Mewes wrote:
Hallo,
Es geht um folgendes Konstrukt
# Ergebnis auf den Bildschirm while(@ergebnis=$sth->fetchrow_array) { if ( @ergebnis[0] eq $value01 && @ergebnis[1] eq $value02 ) { print "<tr>
Login korrekt</td></tr>\n"; } elsif ( @ergebnis[0] eq $value01 && @ergebnis[1] ne $value02 ) { print "<tr> Falsches Passwort</td></tr>\n"; } else { print "<tr> Unbekannter Benutzername</td></tr>\n"; } }; @ergebnis[0] und $value01 steht für Benutzername @ergebnis[1] und $value02 steht für Passwort
Der Sinn ist, daß jemand via Webinterface Benutzername und Passwort eintippt und das soll gegen das Paar aus der Datenbank verglichen werden.
Am Ende soll der Benutzer entweder "Unbekannter Benutzer", "Falsches Passwort" oder eben "Ist in Ordnung" sehen, und ist dann drinne.
Bitte nehmt mir das Brett vorm Kopf weg, danke :-) Liegt es an der while()-Schleife?
bis dahin - kind regards
Martin Mewes
18:02HalloBoris, Boris Wokurka
wrote : hab von perl nicht viel Ahnung, aber sollte es nicht "elseif" statt "elsif" heißen?
[Fullquote fachgrecht entsorgt - muttu nicht tun] Ja, das dacht ich am Anfang auch mal, weil es syntaktisch richtig ist. Programmiertechnisch ist es jedoch falsch. bis dahin - kind regards Martin Mewes -- Member of the Webmin Translation Team http://www.webmin.com/ http://webmin.mamemu.de/ Debian, SuSE and Securityfocus - Mailinglist mboxes http://www.mewes.tv/mbox/
15:45Am Dienstag, 9. November 2004 16:21 schrieb Martin Mewes:
@ergebnis[0] und $value01 steht für Benutzername --^- ist hier (und an den anderen Stellen) wirklich der @ gemeint oder nicht eher $
Jürgen -- Dr.rer.nat. Juergen Vollmer, Viktoriastrasse 15, D-76133 Karlsruhe Tel: +49(721) 9204871 Fax: +49(721) 24874 Juergen.Vollmer@informatik-vollmer.de www.informatik-vollmer.de Internet-Telefonie: www.skype.com Benutzer: juergen.vollmer
15:57Hallo, ich glaube der Fehler ist in der ersten Zeile: # Ergebnis auf den Bildschirm while(@ergebnis=$sth->fetchrow_array) in Perl Vergleich sehen so aus: == Ein = ist ein Zuweisung Wenn Du schreibst while (@ergebnis == $sollAnzahlElementeSein) { .. dann ist der Array @Ergenis als scalar abgefragt (entspräche scalar @ergebnis und liefert die Anzahl der Array-Elemente). @ergebnis[0] ist zawr nicht so schön und sollte besser $ergebnis[0] sein, wäre aber trotzdem richtig, da so 'slices' geschrieben werden: @tmp = @ergebnis[0,1,4,8,22,56] @tmp hätte jetzt nur 6 Elemente. Calli Am Dienstag, 9. November 2004 16:21 schrieb Martin Mewes:
# Ergebnis auf den Bildschirm while(@ergebnis=$sth->fetchrow_array)
18:07Hallo Carl, "Carl A. Schreiber"
wrote : ich glaube der Fehler ist in der ersten Zeile: # Ergebnis auf den Bildschirm while(@ergebnis=$sth->fetchrow_array) in Perl Vergleich sehen so aus: ==
Wenn ich das hier mache ... while(@ergebnis==$sth->fetchrow_array) { print "<tr><td>$ergebnis[0]</td><td>$ergebnis[1]</td></tr>\n"; } Dann gibt es einen loop und der Prozess geht ins Nirwana. while(@ergebnis=$sth->fetchrow_array) { print "<tr><td>$ergebnis[0]</td><td>$ergebnis[1]</td></tr>\n"; } Erzeugt ein Ergebnis. bis dahin - kind regards Martin Mewes -- Member of the Webmin Translation Team http://www.webmin.com/ http://webmin.mamemu.de/ Debian, SuSE and Securityfocus - Mailinglist mboxes http://www.mewes.tv/mbox/
16:05uups, Kommando zurück, $sth->.. ist die Funktion, die den Array liefert? Wenn das so ist könnte es einfach sein dass Du um die eq und && Vergleiche Klammer machst.. (?) if ( (@ergebnis[0] eq $value01) && (@ergebnis[1] eq $value02) ) Eventuell könnte auch die Funktion diverse unsichbare Zeichen senden. Ich hatte des öfteren Probleme mit \x0D (\x0A ="\n" ist ok) ist Windows und gab immer Problme.. Mußte das dierekt mit einem s/\x0D//g entfernt. Calli Am Dienstag, 9. November 2004 16:21 schrieb Martin Mewes:
Hallo,
Es geht um folgendes Konstrukt
# Ergebnis auf den Bildschirm while(@ergebnis=$sth->fetchrow_array) { if ( @ergebnis[0] eq $value01 && @ergebnis[1] eq $value02 ) { print "<tr>
Login korrekt</td></tr>\n"; } elsif ( @ergebnis[0] eq $value01 && @ergebnis[1] ne $value02 ) { print "<tr> Falsches Passwort</td></tr>\n"; } else { print "<tr> Unbekannter Benutzername</td></tr>\n"; } }; @ergebnis[0] und $value01 steht für Benutzername @ergebnis[1] und $value02 steht für Passwort
Der Sinn ist, daß jemand via Webinterface Benutzername und Passwort eintippt und das soll gegen das Paar aus der Datenbank verglichen werden.
Am Ende soll der Benutzer entweder "Unbekannter Benutzer", "Falsches Passwort" oder eben "Ist in Ordnung" sehen, und ist dann drinne.
Bitte nehmt mir das Brett vorm Kopf weg, danke :-) Liegt es an der while()-Schleife?
bis dahin - kind regards
Martin Mewes
-- ###################################################################### http://www.webmin.com/ http://webmin.mamemu.de/ Webbased Administration Tool for Unixoid Systems :-) Member of the Webmin Translation Team ######################################################################
16:55Hallo, On Tuesday 09 November 2004 17:05, Carl A. Schreiber wrote:
uups,
Kommando zurück, $sth->.. ist die Funktion, die den Array liefert? Wenn das so ist könnte es einfach sein dass Du um die eq und && Vergleiche Klammer machst.. (?) if ( (@ergebnis[0] eq $value01) && (@ergebnis[1] eq $value02) )
Das kann nicht sein. eq geht vor &&. Muss eigentlich das TOFU sein?
Am Dienstag, 9. November 2004 16:21 schrieb Martin Mewes:
Hallo,
Es geht um folgendes Konstrukt
# Ergebnis auf den Bildschirm while(@ergebnis=$sth->fetchrow_array) { if ( @ergebnis[0] eq $value01 && @ergebnis[1] eq $value02 ) { print "<tr>
Login korrekt</td></tr>\n"; } elsif ( @ergebnis[0] eq $value01 && @ergebnis[1] ne $value02 ) { Wozu das 'ne $value02'? Eine Idee habe ich aber nicht. Was macht denn fetchchrow_array? Ferdinand
18:15Hallo Ferdinand, Ferdinand Ihringer
wrote : Wozu das 'ne $value02'? Eine Idee habe ich aber nicht. Was macht denn fetchchrow_array?
Hatte ich das nicht geschrieben? $ergebnis[0] und $value01 steht für Benutzername $ergebnis[1] und $value02 steht für Passwort $ergebnis[0] + $ergebnis[1] kommt aus der Datenbank $value01 + $value kommen über den Browser. Folgendes soll im Browser erscheinen ... $ergebnis[0] eq $value01 && $ergebnis[1] eq $value02 -> Einloggen Username und Passwort passt. $ergebnis[0] eq $value01 && $ergebnis[1] ne $value02 -> Falsches Passwort, nochmal probieren $ergebnis[0] ne $value01 && $ergebnis[1] ne $value02 -> Unbekannter Benutzername, nochmal probieren. Ich gebe zu, das für die letzte Bedingung eigentlich $ergebnis[0] ne $value01 ausreicht, aber wenn wir schonmal so nett zusammen sind ;-) bis dahin - kind regards Martin Mewes -- Member of the Webmin Translation Team http://www.webmin.com/ http://webmin.mamemu.de/ Debian, SuSE and Securityfocus - Mailinglist mboxes http://www.mewes.tv/mbox/
22:07Hallo Martin, hallo Leute, Am Dienstag, 9. November 2004 16:21 schrieb Martin Mewes:
Es geht um folgendes Konstrukt
# Ergebnis auf den Bildschirm while(@ergebnis=$sth->fetchrow_array) { if ( @ergebnis[0] eq $value01 && @ergebnis[1] eq $value02 ) { print "<tr>
Login korrekt</td></tr>\n"; [...] @ergebnis[0] und $value01 steht für Benutzername @ergebnis[1] und $value02 steht für Passwort Der Sinn ist, daß jemand via Webinterface Benutzername und Passwort eintippt und das soll gegen das Paar aus der Datenbank verglichen werden.
Am Ende soll der Benutzer entweder "Unbekannter Benutzer", "Falsches Passwort" oder eben "Ist in Ordnung" sehen, und ist dann drinne.
Bitte nehmt mir das Brett vorm Kopf weg, danke :-) Liegt es an der while()-Schleife?
Zumindest sehe ich darin einen Teil des Bretts ;-) Ich verstehe nicht ganz, warum Du überhaupt eine while-Schleife brauchst (leider hast Du die SQL-Query nicht mit angegeben). Für den gegebenen Anwendungsfall würde ich folgendes verwenden: dbh->prepare( "SELECT username,password FROM secrets WHERE username=? LIMIT 1" ); sth->execute($username); @ergebnis=$sth->fetchrow_array; Die Verlagerung von $username ins execute hat übrigens den einfachen Grund, dass $username automatisch gequotet wird und der "User" namens x ; delete * from secrets keinen Schaden Anrichten kann ;-) Das LIMIT 1 einfach nur aus Performancegründen, Loginnamen sind ja wohl einmalig (idealerweise in einer UNIQUE-Spalte), also kann man sich das weitersuchen sparen. Ergebnisauswertung in Pseudocode: - Kein Ergebnis aus der DB -> User unknown - Ergebnis aus der DB -> User gefunden -> Passwort prüfen Gruß Christian Boltz PS: Evtl. brauchst Du noch $sth->finish, aber das wird Dir die entsprechende Warnmeldung schon verraten ;-) -- Dann siehst du nämlich ganz genau, daß der Cursor blinkt, und er hat feuerrote tote Augen, mit denen er dich anstarrt und brüllt: ".. UND WENN DU DICH VERTIPPST, DANN FRESSE ICH DICH MITSAMT DEINEM MAUSZEIGER!!!!" [Ratti in suse-programming]
10 Nov 10 Nov18:23Hallo Christian, Christian Boltz
wrote : Zumindest sehe ich darin einen Teil des Bretts ;-)
In der Tat, danke :-) Ich habe dies einmal umbrochen. Nichts für Copy&Paste # Datenbankabfrage my $connect="DBI:mysql:$database"; my $dbh = DBI->connect("$connect","$sqluser","$sqlpass") || die "Database connection not made: $DBI::errstr"; my $sth = $dbh->prepare("SELECT username,pwd FROM $tab_user WHERE \\ username=? LIMIT 1"); $sth->execute($value01); my @ergebnis=$sth->fetchrow_array; # Datenbank schliessen $sth->finish(); $dbh->disconnect(); # Ergebnis auf den Bildschirm print "<tr><td>Datenbankuser: $ergebnis[0]</td> \\ <td>Datenbankpasswort: $ergebnis[1]</td></tr>\n"; if ( ($ergebnis[0] eq $value01) && ($ergebnis[1] eq $value02) ) { print "<tr>
Login korrekt</td></tr>\n"; } elsif ( ($ergebnis[0] eq $value01) && ($ergebnis[1] ne $value02) ) { print "<tr> Falsches Passwort</td></tr>\n"; } else { print "<tr> Unbekannter Benutzername</td></tr>\n"; }; Liefert nun das richtige Ergebnis. Vielen Dank :-) bis dahin - kind regards Martin Mewes -- Member of the Webmin Translation Team http://www.webmin.com/ http://webmin.mamemu.de/ Debian, SuSE and Securityfocus - Mailinglist mboxes http://www.mewes.tv/mbox/ 23:49Hallo, Am Wed, 10 Nov 2004, Martin Mewes schrieb: [..]
my $sth = $dbh->prepare("SELECT username,pwd FROM $tab_user WHERE \\ username=? LIMIT 1"); $sth->execute($value01); my @ergebnis=$sth->fetchrow_array; [..] if ( ($ergebnis[0] eq $value01) && ($ergebnis[1] eq $value02) )
BTW: du benamst deine Variablen IMHO unguenstig. Verwende doch statt $value01 $username, statt $value02 $password und statt @ergebnis @userinfo. Evtl. waere es noch klarer, wenn du statt fetchrow_array ein fetchrow_hashref verwendest und dann my $userinfo = $sth->fetchrow_hashref(); if( ( $userinfo->{username} eq $username ) && ( $userinfo->{password} eq $password ) ) { Allerdings ist das weniger performant als mit _arrayref oder _array. -dnh --
Ich geh' jetzt erstmal Gummienten beim Wettschwimmen zugucken... Du Gluecklicher. Ich darf morgen "echten" eNTen beim Umfallen zuschaun. -- Jochen Erwied und Thomas Ogrisegg
12 Nov 12 Nov08:29*** Martin Mewes
wrote: } else { print "<tr>
Unbekannter Benutzername</td></tr>\n"; }; Du machst es einem recht einfach einen gültigen Login zu erraten. Absicht? Micha --
09:04Hallo Michael, Michael Meyer
wrote : *** Martin Mewes
wrote: } else { print "<tr>
Unbekannter Benutzername</td></tr>\n"; }; Du machst es einem recht einfach einen gültigen Login zu erraten. Absicht?
Debugging ... damit ich sehe, ob das was der Benutzer eingibt mit dem aus der Datanbank passt, oder ob das Skript irgendwo noch schwächelt. Fliegt wohl raus. bis dahin - kind regards Martin Mewes -- ###################################################################### http://www.webmin.com/ http://webmin.mamemu.de/ Webbased Administration Tool for Unixoid Systems :-) Member of the Webmin Translation Team ######################################################################
15:38Hallo Martin, hallo Leute, Am Freitag, 12. November 2004 10:04 schrieb Martin Mewes:
Michael Meyer
wrote : *** Martin Mewes
wrote: } else { print "<tr>
Unbekannter Benutzername</td></tr>\n"; }; Du machst es einem recht einfach einen gültigen Login zu erraten. Absicht?
Debugging ... damit ich sehe, ob das was der Benutzer eingibt mit dem aus der Datanbank passt, oder ob das Skript irgendwo noch schwächelt. Fliegt wohl raus.
Dann kannst Du das Script nochmal vereinfachen: SELECT * FROM secrets WHERE username=? AND password=? LIMIT 1 Die ? wie gewohnt beim ->execute übergeben. Die Prüfung ist dann recht einfach: - kein Ergebnis -> ungültiger Login - Ergebnis -> gültiger Login. Wobei Du eigentlich nichtmal nachsehen musst, was genau im Ergebnis steht ;-) Gruß Christian Boltz -- Ich frage mich manchmal, ob elektronische Kommunikation so viel besser ist als Brieftauben. Die kommen wenigstens an. :-) [Ratti in fontlinge-devel]
Download7117Age (days ago)7120Last active (days ago)
14 comments8 participantsparticipants (8)
Boris Wokurka Carl A. Schreiber Christian Boltz David Haller Dr. Jürgen Vollmer Ferdinand Ihringer Martin Mewes Michael Meyer