perlunity.de - PERL | JAVASCRIPT | PHP | MySQL | APACHE



#!/COMMUNITY

Members: 5374
davon online: 1
weitere User: 20
Click for quality!




12.02.2012 / 00:20

Community-Member werden   |   Paßwort vergessen   |   OnlineMonitor (1) Wer ist online ... OnlineMonitor starten !
     

 

Home


PERLscripts


PHPscripts


JAVAscripts


Hilfreiches


Links2www


Newscenter


Community


Interna




Community  »  Perl: Allgemeines Forum zur Themenübersicht Themensuche Themenansicht in Thread-Modus


Beitragdas alte Thema: Passwortabfrage
Seitenanfang
hallo,
ich habe folgenden zustand:
in einer pl-datei ist eine html-seite hinterlegt. hier wird ein passwort mit dem befehl abgefragt:
<form action="/cgi-bin/kart/passwort.pl" method="POST">
Passwort <input type=password size="10" name="passwortfeld">
<input type="submit" value="Enter" class='button'>

die datei passwort.pl sieht dann so aus:
....
require "cgiuprgs.pl";

$daten = &CGIDatenlesen;
%daten = &CGIDatenaufbereiter ($daten);
($temp , $wert) = each %daten;

#$laenge=$ENV{'Content_length'};
#read (STDIN, $string, $laenge);

#@wertepaare=split('&', $string);

@zahl = split ('=', $daten);
$auswertung {$zahl[0]}=$zahl[1];

$passwort = $zahl[1];

$offen=open (KURSE, "passwort.txt");
if ($offen ==1)
{
foreach $x (<KURSE>)
{

$i++;
@kurs=split (';' , $x);

$wort = $kurs[0];
}
}
else
{
print "Keine Einträge vorhanden!";
}

close (KURSE);

chop($wort);

if ($passwort eq $wort)
{
&institutsseite;
}
else
{
print "<font face='comic sans ms' size=-1'>Ihr eingegebenes Passwort lautete: ";
print "Das eingegebene Passwort war falsch!";
}

sub institutsseite{
print <<ende;

<html>

<body>
war erfolgreich

</body>
</html>
ende
}

die html-befehle habe ich rausgelöscht. mein problem ist nun, dass diese abfrage mit xitami auf dem localhost läuft, aber nicht direkt online. irgendwie wird der in der passwort.txt hinterlegte inhalt nicht erkannt.

die passwort.txt hatte ich auch schon als passwort.csv gehabt. geht nicht. zugriffsrechte habe ich mit 755 bzw. 777 schon getestet.

am skript selber möchte ich nicht viel ändern, da ich kaum noch ahnung von perl habe (liegt schon jahre zurück).

kann mir einer kurz und knapp sagen, woran es liegt, dass der inhalt der csv- bzw. txt-datei nicht in der passwort.pl-datei verarbeitet werden kann?

vielen, vielen dank!!!!

Datum: 24.07.2005-13:59

Beitragre: das alte Thema: Passwortabfrage
Seitenanfang
mach mal aus
$offen=open (KURSE, "passwort.txt");
if ($offen ==1)
{
foreach $x (<KURSE>)

das hier:

if(open (KURSE, "passwort.txt"))
{
while my $x (<KURSE>){
# code
}
}
else{
print $!;
}

Du solltest Dir auch dringend mal das Modul CGI.pm (http://search.cpan.org) und das pragma use strict (http://wiki.perl-community.de/bin/view/Wissensbasis/UseStrict ) anschauen

Datum: 24.07.2005-20:48

Beitragre: das alte Thema: Passwortabfrage
Seitenanfang
hallo renee,
erst mal vielen dank für deine schnelle hilfe. habe auch alles fein ausprobiert (auch die links von dir). aber :)
mein skript funktioniert nicht mit my.
wenn ich die anleitung bei usestrict richtig verstanden habe, muss ich ja die variable my erstmal mit my = ... deklarieren. nun meine verzweifelte frage, wie ich das machen soll, da sich die variable $x ja erst aus dem auslesen der datei passwort.txt ergibt.

und zweite nervige frage: bei deiner lösung hast du die zeile #code eingetragen. meinst du damit die zeilen zum split der variablen gemeint?

danke schon mal im voraus!!!!

Datum: 25.07.2005-13:45

Beitragre: das alte Thema: Passwortabfrage
Seitenanfang
Hi,

das Wort my deklariert eine lokale Variable und ist keine Solche. Das Kontrukt


while my $x (<IRGENDWAS>)
{
#code
}

deklariert also eine Variable $x, die nur innerhalb des Skriptes, bzw. der sub in der die definiert ist, gültig. In diesem Falle sogar nur innerhalb der while-Schleife, wenn ich richtig liege.

Meines Erachtens ist das diese Art der Codierung aber nicht notwendig, da Perl vordefinierte Variablen zur Verfügung stellt, in diesem Falle ist das $_. In der Verwendung sieht das dann so aus.


my $string;
while (<DATEI_HANDLE>)
{
$string .= $_;
}

Nach Abarbeitung des DateiHandles steht das komplette file in $string.

-uw

Datum: 26.07.2005-00:46

Beitragre: das alte Thema: Passwortabfrage
Seitenanfang
hallo,
vielen dank nochmal für die nächste hilfe.
konnte jetzt auch einiges erfolgreich umsetzen.
aber:
local mit einem webserver funktioniert alles. wenn ich alles auf meine domäne hochlade und teste, verliert die variable aus dem dateihandle den wert. hat noch einer eine idee, woran es liegen kann? wenn ihr meinen code benötigt:
geänderte passwort.pl-datei:
....
if (open (KURSE, "passwort.csv"))
{
my $string;
while (<KURSE>)
{
$string .=$_;
@kurs=split (';' , $x);
$wort = $_;
chop($wort);
if ($passwort eq $wort)
{ &institutsseite;
}
else
{
#im folgenden print ist die variable wort nicht mehr gefüllt

print "variable wort (aus der datei): $wort <br> variable passwort (das ist die eingabe): $passwort<br></font>"; print "<font face='comic sans ms' size=-1'>Das eingegebene Passwort war falsch!<br></font>";
}

print "</body></html>";

vielen dank an euch alle schon mal im voraus!!!!

Datum: 26.07.2005-12:23

Beitragre: das alte Thema: Passwortabfrage
Seitenanfang
Hi,

zunächst die Daten einlesen und die Quelle wieder schließen:


use Fcntl ':flock';
[...]
my $string = "not_available";
if (open (KURSE, "passwort.csv") || die "Fehler db-02 ist aufgetreten, bitte wenden Sie sich an den <a...mailto:...>Webmaster</a>.<br>\n")
{
flock(KURSE, LOCK_EX);
while (<KURSE>)
{
$string .= $_;
}
flock(KURSE, LOCK_UN);
close(KURSE);
}

Hinweis:
Wenn das Skript auf einem anderen Rechner laufen soll dann müssen etwaige Dateien mithochgeladen werden, oder gegebenenfalls die Pfade angepasst werden.

Den nachfolgenden Code nur ausführen, wenn $string ungleich "not_available", dann hat die Geschichte nämlich geklappt, ansonsten sparen wir Zeit.


unless($string eq "not_available")
{
@kurs = split (/;/, $string);
$wort = $kurs[0];
chop($wort);
if ($passwort eq $wort)
{
&institutsseite;
}
else
{
print "variable wort (aus der datei): $wort <br> variable passwort (das ist die eingabe): $passwort<br></font>"; print "<font face='comic sans ms' size=-1'>Das eingegebene Passwort war falsch!<br></font>";
}#if
}
else
{
print "Fehler db-06 ist aufgetreten, bitte wenden Sie sich an den <a...mailto:...>Webmaster</a>.<br>\n";
}#unless

Kleines Beispiel mit Fehlerbehandlung. Die unless-Abfrage kannst eigentlich weglassen, weil das skript eh' stribt (die) wenn die Passwortdatei nicht geöffnet werden kann. Sollte nur ein kleiner Hinweis sein, wie Du Deine User ermuntern kannst Feedback zu geben. Manche Fehler meiner Site bekomme ich als Webmaster ja nur mit, wenn ich drauf hingewiesen werde. Und meine Erfahrung sagt, dass der FehlerCode die Sache ungemein vereinfacht.

Erläuterungen:
http://de.selfhtml.org/perl/sprache/skalare.htm
http://de.selfhtml.org/perl/funktionen/einausgabe.htm#open
http://de.selfhtml.org/perl/funktionen/kontrolle.htm#die
http://de.selfhtml.org/perl/funktionen/einausgabe.htm#flock
http://de.selfhtml.org/perl/funktionen/zeichenketten.htm#split
http://de.selfhtml.org/perl/sprache/bedingt.htm#unless

-uw

Datum: 26.07.2005-17:18

-






-
-