(HTML) Generiertes mehrteiliges Formular
$xNeTworKx
- perl
Hi,
Ich hab ein kleines Problem.
Ich habe ein Formular mit mehreren gleichen Eingabefeldern (Passwort), welches mit Perl generiert wird.
Jetzt ist es so, wenn ich in der ersten Eingabebox das Passwort eingebe, funktioniert es. Gebe ich es in eine der unteren Boxen ein, funktioniert es nicht (Passwort nicht nicht erkannt).
Ich nehme mal an, dass das Script dann die Eingabe als leere Eingabe, bzw Eingabe mit ein paar Leerzeichen davor sendet, aber was kann ich dagegen tun ?
Ich habe bei der Übergabe auch schon if ($query->param('adminlogin') =~ /$ippasswd/) statt if ($query->param('adminlogin') eq $ippasswd), hat aber nichts geholfen.
Ich könnte auch bei jedem generierten Teil ein extra Formular mit generieren lassen, dass es eben so viele Formulare gibt, wie generierte Teile, aber das will ich doch vermeiden, da sonst zwischen den generierten Teilen ein häßlicher Rand entsteht.
Zur besseren Veranschaulichung habe ich hier den Teil, den ich meine upgeloadet.
http://tools.acid4u.com/forumteil.html
$xNeTworKx.
Halihallo $xNeTworKx
Ich habe ein Formular mit mehreren gleichen Eingabefeldern (Passwort), welches mit Perl generiert wird.
Jetzt ist es so, wenn ich in der ersten Eingabebox das Passwort eingebe, funktioniert es. Gebe ich es in eine der unteren Boxen ein, funktioniert es nicht (Passwort nicht nicht erkannt).
Ich nehme mal an, dass das Script dann die Eingabe als leere Eingabe, bzw Eingabe mit ein paar Leerzeichen davor sendet, aber was kann ich dagegen tun ?
Hab mir nicht wirklich alles zu Gemüt geführt, aber könnte es sein, dass die Eingabefelder alle denselben Namen enthalten? - Wenn dem so ist, kannst du alle Werte über
my @pwds = $cgi->param( 'Pwd' );
holen und dann über @pwds iterieren und nach dem richtigen Pwd suchen. Bei mehreren Formularen kann man den Rand auch "löschen", geht über CSS (nur mag ich mich nimmer daran erinnern, steht aber im /archiv).
Viele Grüsse
Philipp
PS: PostingsID als Timestamp: Was, wenn zwei in der selben Sekunde posten? - Nur mal so nebenbei :-)
Hi,
my @pwds = $cgi->param( 'Pwd' );
danke, ich glaube es scheint so zu klappen.
PS: PostingsID als Timestamp: Was, wenn zwei in der selben Sekunde posten? - Nur mal so nebenbei :-)
PostingID ist nur die Postingnummerierung und dient dazu, dass man auch auf das richtige Posting antwortet, also dass es nicht "wegflutscht", falls jemand einige Sekunde davor drauf antwortet. Früher habe ich nach der Anzahl der Replies gezählt, und da kam das schon 1 Mal vor, dass man plötzlich auf ein Posting weiter unten antwortete, obwohl man eines weiter oben beantworten wollte . Wenn es zur gleicher Zeit gepostet wird, bekommt sowieso jedes eine extra Nummerierung, da Perl ja sowieso nicht beide Daten auf die Hundertstel Sekunde genau auswerten kann. Die Nummerierung ist ausserdem in einem extra File gespeichert, welches mit FLOCK geperrt wird, sobald daruf zugegriffen wird.
$xNeTworKx.
Halihallo $xNeTworKx
my @pwds = $cgi->param( 'Pwd' );
danke, ich glaube es scheint so zu klappen.
PS: PostingsID als Timestamp: Was, wenn zwei in der selben Sekunde posten? - Nur mal so nebenbei :-)
PostingID ist nur die Postingnummerierung und dient dazu, dass man auch auf das richtige Posting antwortet, also dass es nicht "wegflutscht", falls jemand einige Sekunde davor drauf antwortet. Früher habe ich nach der Anzahl der Replies gezählt, und da kam das schon 1 Mal vor, dass man plötzlich auf ein Posting weiter unten antwortete, obwohl man eines weiter oben beantworten wollte . Wenn es zur gleicher Zeit gepostet wird, bekommt sowieso jedes eine extra Nummerierung, da Perl ja sowieso nicht beide Daten auf die Hundertstel Sekunde genau auswerten kann. Die Nummerierung ist ausserdem in einem extra File gespeichert, welches mit FLOCK geperrt wird, sobald daruf zugegriffen wird.
Du brauchst dich nicht zu rechtfertigen, es war nicht so ernst gemeint :-)
Ist mir nur aufgefallen und muss gestehen, dass ich das auch schon so gelöst habe. Die drei minuten Mehraufwand sinds nicht Wert, wenn mein Forum gleich mal ca. 500 Besucher im Monat hat; die Wahrscheinlichkeit dass zwei Postings zur selben Zeit geschrieben werden ist schlicht nicht relevant; zudem ist die Fehlerfreiheit auch nicht als Wichtig zu klassifizieren. Naja, Kosten/Nutzen - Koeffizient :-)
Aber bei dir ist die Timestamp sowieso nicht dazu verwendet...
Viele Grüsse
Philipp
Hi,
habe es jetzt so gelöst :
if ($query->param('action') eq 'admin') {
my $posting = $query->param('posting');
my $postingid = $query->param('postingid');
my @passwords = $query->param('adminlogin');
my $indicator = 0;
foreach (@passwords) {
if ($_ eq $ippasswd) {
htmlbegin();
getipadresses();
htmlend();
$indicator = 1;
last;
}
if ($_ eq $deletepasswd) {
deleteposting($postingid,$posting);
$indicator = 1;
last;
}
}
if ($indicator == 0) {
htmlbegin();
loginerror($posting);
htmlend();
}
}
Kann man das noch etwas schöner machen ?
Ich beziehe moch auf $indicator. Wenn kein Passwort gefunden wird, sollen die letzten 3 Subroutinen ausgegeben werde. So wie es jetzt ist, funktioniert es, es gefällt mir aber nicht ganz, weil ich eine extra Variable dafür anpatze.
Kann man das irgendwie noch effizienter lösen ?
$xNeTworKx.
Halihallo $xNeTworKx
[...]
Kann man das noch etwas schöner machen ?
Ich beziehe moch auf $indicator. Wenn kein Passwort gefunden wird, sollen die letzten 3 Subroutinen ausgegeben werde. So wie es jetzt ist, funktioniert es, es gefällt mir aber nicht ganz, weil ich eine extra Variable dafür anpatze.
Kann man das irgendwie noch effizienter lösen ?
Spontan fällt mir keine elegantere Methode ein. Du musst ja irgendwie herausfinden, ob kein Pwd gefunden wurde. Dies ist am einfachsten über eine Variable (wie in deinem Beispiel) zu machen.
Eine Möglichkeit vielleicht doch noch:
Schreibe eine Subroutine aus dem Code. Wird ein Pwd gefunden werden die entsprechenden Aktionen ausgeführt und der Wert 1 zurückgegeben, undef andernfalls. Im Hauptprogramm kannst du nun testen:
unless (&login) {
htmlbegin();
loginerror($posting);
htmlend();
}
optional kannst du über den Rückgabewert auch die Aktion beschreiben, z. B. undef: unbekannt/falscher login, 1: normal, getipaddresses, 2: delete_posting.
In jedem Falle steht aber klar, dass der Rückgabewert auch einer Variablen entspricht und somit die Programmierung nur bedingt schöner macht... Ob du das subjektiv nun als schöner betrachtest, bleibt dir überlassen.
Viele Grüsse
Philipp
Hi,
ok danke.
Grüße, $xNeTworKx.