Beitrag von Marco (840 Beiträge) am Samstag, 14.April.2001, 17:59.
Get? ,Datum?, Vergleichsoperatoren?
Hallo,
vielleicht sollte ich meinen Namen ändern damit es nicht so aussieht, als wäre ich fast der einzige, der über die Ostertage an seiner Seite bastelt!
1. Ich frage mich, ob perl (bp) wahrheitswerte wie true und false kennt.
die ip des users soll ausgelesen ($_remo...) und am besten in einer anderen Variablen z.B. "ipuser" gespeichert werden, dann soll die diese mit dem Feld "IP" in Datenbak "gbook" verglichen werden.(Knackpunkt: Geht das mit get und wenn ja wie?)
Kommt der eintrag schon vor, soll variable "ipexist"
true gesetzt werden oder halt entsprechend umgekehrt!
Muss nicht sein: Sollte die ip mehrmals vorkommen, dann soll der letzte Datensatz verwendet werden.
2. Der datensatz der im punkt 1 ausgelesen wurde, soll im Feld "Datum" mit dem jetzigem Datum verglichen werden, ist die Differenz kleiner als z.B. 5min, so
soll die Variable kl5 (kleiner 5) true gesetzt werden
ich habe dazu in der doku folgendes gefunden:
if($date lt datum("jetzt", "intern"))
angepasst an meine Datenbank, wenn ich´s richtig verstanden habe:
if($Datum lt datum("jetzt", "gbook"))
bloß wie bekomm ich jetzt die differenz raus????
3. jetzt müssen beide bedingungen nur noch miteinander verglichen werden
zuerst ob "ipexist" = true und dann ob "kl5" = true
dann soll out "Falsch"; augegeben werden.
ist eine der bedingungen false, dann immer out "Richtig"; (Nicht verdreht).
da dies immer sehr schwer zu erkären ist, hier noch eine skizze http://home.nexgo.de/fr/freewarestation/skizze.gif"
Erklärung:
Die soll ein spam-schutz für mein gb werden.
wenn ein eintrag in der db gemacht wird, wird autmatisch das Datum und die ip gespeichert
Dies soll es möglich machen, dass von einer ip z.B. nur alle 5 Minuten ein Eintrag gemacht werden kann.
ich freue mich auch über teilansätze
mfg marco
Antworten
Beitrag von Christoph Bergmann (8110 Beiträge) am Samstag, 14.April.2001, 20:01.
Re: Get? ,Datum?, Vergleichsoperatoren? - klar...
Antworten
Beitrag von Marco (840 Beiträge) am Samstag, 14.April.2001, 23:01.
Re: Get? ,Datum?, Vergleichsoperatoren? - klar...
NEEE!!!!
alle Felder wie "Datum" und "IP" stehen in einer db
Teil von view
<perl>
$ip = $_REMOTE_ADDR;
get "IP==$ip Datum>-:05", "gbook";
if($ip ne "")
{
out "Eintragung leider nicht möglich";
} else
{
if ($cmd eq "add")
{
put undef,"gbook";
out "<div align=\"center\"><font size=\"-1\"><b>Eintrag hinzugefügt...</b></font></div>";
}
}
</perl>
er zeigt jetzt immer:
"Eintragung leider nicht möglich" (auch wenn ich gar nichts eintragen habe)
Antworten
Beitrag von Marco (840 Beiträge) am Sonntag, 15.April.2001, 11:27.
Re: Get? ,Datum?, Vergleichsoperatoren? - klar...
Hab es angepasst dass nur bei "hinzufügungen" der check gemacht wird: (hatte ja ne nacht lang zeit)
<perl>
if ($cmd eq "add")
{
$ip = $_REMOTE_ADDR;
get "IP==$ip Datum>-:05", "gbook"; ###Diese zeile verstehe ich nicht! vorher kommt var $ip??? ich habe $ip $_remote_addr gleichgesetzt
if($ip ne "")
{
out "Eintragung leider nicht möglich";
} else
{
put undef,"gbook";
out "<div align=\"center\"><font size=\"-1\"><b>Eintrag hinzugefügt...</b></font></div>";
}
}
</perl>
trotzdem kommt immer noch die "eintragung nicht möglich" obwohl ich mit gerade frisch eingrwählt habe
ich habe eine eingabeseite und eine ausgabeseite!!
Antworten
Beitrag von Ruben (403 Beiträge) am Sonntag, 15.April.2001, 12:14.
Re: Get? ,Datum?, Vergleichsoperatoren? - klar...
Antworten
Beitrag von Marco (840 Beiträge) am Sonntag, 15.April.2001, 21:32.
Re: Get? ,Datum?, Vergleichsoperatoren? - klar...
Ich bin einfach zu doof...
ich würd einen bitte ganz freundlich bitten, dass er mir folgende Passage entsprechend anpasst:
<perl>
if ($cmd eq "add")
{
$ip = $_REMOTE_ADDR;
get "IP==$ip Datum>-:05", "gbook";
if($IP ne "")
{
out "Eintragung leider nicht möglich";
} else
{
put undef,"gbook";
out "<div align=\"center\"><font size=\"-1\"><b>Eintrag hinzugefügt...</b></font></div>";
}
}
</perl>
Meine db hat 8 felder, wichtig sind da "IP" und "Datum"
die ip-nummern und das Datum werden beim 1. Eintragen auch korrekt in db eingetragen. wenn ich nur..
<perl>
if ($cmd eq "add")
{
put undef,"gbook";
out "<div align=\"center\"><font size=\"-1\"><b>Eintrag hinzugefügt...</b></font></div>";
}
</perl>
..dazustehen hab.
wenn ich auf meiner "Hinzufügen"-Seite mit namen "add" meine eintragungen vornehme, erscheint nach dem klicken auf "submit" die Seite "view" immer mit folgendem text: "Eintragung nicht möglich",
obwohl ich mit dieser Ip gar nicht innerhalb der 5min einen neuen Eintrag gemacht habe, es wird natürlich auch nichts hinzugefügt.
Brauche hilfe!!!!!!!!!!!!
das muss doch klappen
mfg marco
Antworten
Beitrag von Ruben (403 Beiträge) am Montag, 16.April.2001, 09:47.
Re: Get? ,Datum?, Vergleichsoperatoren? - klar...
Hallo, Marco,
mhm, irgendwas mit der Porgrammablauflogik muß da verändert werden.
Wenn das put ohne die Abfrage nach IP funzt, dann muß meines Erachtens nach die Bedingungsabfrage andersrum sein.
Folgendes in "normalen" Worten:
Wenn cmd gleich add, ip=remoteadress. Hole den Datensatz, wo das Feld IP den Wert von ip hat und der jünger als 5 Minuten ist. Wenn keiner vorhanden ist, speichere die eingegebenen Werte (oder gib halt aus Eintrag gespeichert), wenn so ein Datensatz vorhanden ist, blocke das Speichern ab.
Ist das so richtig erfaßt? Wenn ja, dann halt den Code in etwa wie folgt ändern:
<perl>
if ($cmd eq "add")
{
$ip = $_REMOTE_ADDR;
get "IP==$ip Datum>-:05", "gbook";
if($IP ne "")
{
out "Eintragung leider nicht möglich";
} else
{
put undef,"gbook";
out "<div align=\"center\"><font size=\"-1\"><b>Eintrag hinzugefügt...</b></font></div>";
}
}
</perl>
Antworten
Beitrag von Ruben (403 Beiträge) am Montag, 16.April.2001, 10:01.
Re: Get? ,Datum?, Vergleichsoperatoren? - klar...
Hallo, Marco,
mhm, irgendwas mit der Porgrammablauflogik muß da verändert werden.
Wenn das put ohne die Abfrage nach IP funzt, dann muß meines Erachtens nach die Bedingungsabfrage andersrum sein.
Folgendes in "normalen" Worten:
Wenn cmd gleich add, ip=remoteadress. Hole den Datensatz, wo das Feld IP den Wert von ip hat und der jünger als 5 Minuten ist. Wenn keiner vorhanden ist, speichere die eingegebenen Werte (oder gib halt aus Eintrag gespeichert), wenn so ein Datensatz vorhanden ist, blocke das Speichern ab.
Ist das so richtig erfaßt? Wenn ja, dann halt den Code in etwa wie folgt ändern:
<perl>
if ($cmd eq "add")
{
$ip = $_REMOTE_ADDR;
get "IP==$ip Datum>-:05", "gbook";
if($IP eq "")
{
put undef,"gbook";
out "<div align=center><font size=-1><b>Eintrag hinzugefügt...</b></font></div>";
}
elsif ($IP ne "")
{
out "Eintragung leider nicht möglich";
}
else
out "Allgemeiner Datenbankfehler, bitte kontaktieren Sie den Webmaster unter <a href=mailto:webmaster\@deineDomain.de?subject=Fehler bei der Eintragung ins Gästebuch>eMailkontakt</a>;
}
</perl>
So ist die Bedingungs-Logik eine andere und es wird immer davon ausgegangen, daß ein Datensatz zunächst eingetragen wird (halt auch ins Feld IP) und bei nochmaligem Eintragsversuch dann geblockt wird.
Es könnte auch noch sein, daß mit dem Datumszeitvergleich irgendwas nicht stimmt, das ist eh recht kompliziert zu beherrschen. Laß mal Testweise die Filterbedingung fürs Datum weg, obs dann geht.
Na dann, viel Erfolg und: nicht aufgeben!!!
CU
Ruben
Antworten
Beitrag von Marco (840 Beiträge) am Montag, 16.April.2001, 12:17.
Re: Get? ,Datum?, Vergleichsoperatoren? - klar...
hallo Ruben
hab es verändert:
habe es testsweise nur auf die ip reduziert:
<perl>
if ($cmd eq "add")
{
$adresse = $_REMOTE_ADDR;
get "IP==$adresse", "gbook";
if($IP eq "")
{
put undef,"gbook";
out "<div align=center><font size=-1><b>Eintrag hinzugefügt...</b></font></div>";
}
elsif ($IP ne "")
{
out "IP: $IP";
out "Eintragung leider nicht möglich";
}
else
{
out "Allgemeiner Datenbankfehler, bitte kontaktieren Sie den Webmaster unter <a href=mailto:webmaster\@deineDomain.de?subject=Fehler bei der Eintragung ins Gästebuch>eMailkontakt</a>";
}
}
</perl>
hab dem script jetzt vor dem "Eintragung nicht möglich" noch eine ausgabe des Feldes "IP" hinzugefügt
und auf verdacht wegen fehler mit der groß und kleinschreibung die variable "$ip" nach "$adresse" umgeändert
wenn man auf folgenden link geht: (und was einträgt)
http://baseportal.de/cgi-bin/baseportal.pl?htx=/freewarestation/gbook/view&range=0,10
bekommt man vor "eintragung n..." seine Ip angezeigt, obwohl die gar nicht in db drin steht.
die if-anweisungen sind meiner meinung nach ok
da problem liegt bestimmt bestimmt bei
get "IP==$adresse", "gbook";
Wie kann der get-befehl eine IP-adresse aus db holen, wobei doch gar keine in der selbigen vorhanden ist???
Vermutung:
wahrscheinlich wird, wenn kein eintrag im Feld "IP" vorhanden ist, einfach der wert von $adresse genommen und in den if-anweisungen verarbeitet
mfg marco
Antworten
Beitrag von Ruben (403 Beiträge) am Montag, 16.April.2001, 15:06.
Re: Get? ,Datum?, Vergleichsoperatoren? - klar...
High, Marco,
hab grad mal den Quelltext des Templates angeschaut, da ist das hidden-Feld IP mit dem Wert meiner IP belegt, so daß also immer ein Wert für IP vorhanden ist. (value=$adresse wahrscheinlich)
Da wäre dann mal der Umweg über die Anzahl der gefundenen Datensätze mittels get zu versuchen - in etwa so:
if ($cmd eq "add")
{
$adresse = $_REMOTE_ADDR;
get "IP==!$adresse", "gbook";
if($_amount_query = 0)
{
put undef,"gbook";
out "<div align=center><font size=-1><b>Eintrag hinzugefügt...</b></font></div>";
}
elsif ($_amount_query >0 )
{
out "IP: $IP";
out "Eintragung leider nicht möglich";
}
War nur mal noch son kurzer Gedanke, vielleicht hilfts ja.
CU
Ruben
Antworten
Beitrag von Marco (840 Beiträge) am Montag, 16.April.2001, 16:27.
Re: Get? ,Datum?, Vergleichsoperatoren? - klar...
hai zurück
übergebe ip nun nicht mehr von add aus
<perl>
if ($cmd eq "add")
{
$adresse = $_REMOTE_ADDR;
get "IP==$adresse Datum>-:05", "gbook";
if($IP eq "")
{
put ["Name", $Name, "EMail", $EMail, "WWW", $WWW, "Betreff", $Betreff, "Text", $Text, "IP", $_REMOTE_ADDR], "gbook";
out "<div align=center><font size=-1><b>Eintrag hinzugefügt...</b></font></div>";
}
elsif ($IP ne "")
{
out "IP: $IP";
out "Aus Sicherheitsgründen können sie nur ein Eintrag alle 5 Minuten vornehmen!!";
}
else
{
out "Allgemeiner Datenbankfehler, bitte kontaktieren Sie den Webmaster unter <a href=mailto:webmaster\@deineDomain.de?subject=Fehler bei der Eintragung ins Gästebuch>eMailkontakt</a>";
}
}
</perl>
ohne Datum>-:05
...geht es auch wunderbar, dann kann ich mit der selben ip nur einen eintrag machen
ich musste "put undef" abändern und jedes feld einzeln eintragen.
das datum muss ich nicht eintragen seh ich dass richtig????
wenn ich
Datum>-:05
hinzufüge werden wieder alle einträge hinzugefügt, egal ob ip schon existent oder zeit des letzten eintrags weniger als 5 min !!
mfg marco
Antworten
Beitrag von Ruben (403 Beiträge) am Montag, 16.April.2001, 15:14.
Re: Get? ,Datum?, Vergleichsoperatoren? - klar...
Antworten
Beitrag von Marco (840 Beiträge) am Dienstag, 17.April.2001, 07:43.
Re: Get? ,Datum?, Vergleichsoperatoren? - klar...
weitere lösungsansätze bitte direkt an mich mailen ich fahre jetzt bis zum 21. in den Urlaub
Antworten