Beitrag von bernd (25 Beiträge) am Freitag, 10.September.2004, 20:16.
verzweiflung: eintrag nur bis bestimmten zeitpunkt möglich
hallo,
ich bastel schon seit stunden um mein problem rum,
mit dem wissen, nicht zu wissen, was ich da wirklich
mache, da perl für mich totales neuland ist.
bin schon recht weit gekommen, doch die letzte hürde bringt
mich zum verzweifeln.
user können über einen pw-bereich einträge in "db1"vornehmen.
in der "db4" habe ich ein datumsfeld.
ab dem zeitpunkt, wenn dieses "datum" abgelaufen ist, soll
kein eintrag mehr in "db1" möglich sein.
ich hatte mir das ungefähr so gedacht, was aber ignoriert wird:
-------------------------
get "$Datum", "db4";
if($Datum>jetzt)
{
do_all "db=db1 ...
-------------------------
nachfolgend der ganze perlblock.
ich hoffe, mir kann jemand helfen.
danke
bernd
<perl>
if($Name ne "")
{
get "Name==!$Name", "db3";
if($Passwort ne "" && $Passwort eq $pwrein)
{
if (%_put ){
if ($cmd eq "add"){
put undef, "db2";
} elsif ($cmd eq "mod"){
mod undef, "db2";
}
}
get "$Datum", "db4";
if($Datum>jetzt)
{
do_all "db=db1 ...", "Name", "pwrein";
} else {
out "geht nicht mehr";
$namerein="";
}
}
}
</perl>
Antworten
Beitrag von herbert (549 Beiträge) am Samstag, 11.September.2004, 14:39.
Re: verzweiflung: eintrag nur bis bestimmten zeitpunkt möglich
soll das ueber 4 datenbanken funktionieren ??
Antworten
Beitrag von bernd (25 Beiträge) am Samstag, 11.September.2004, 19:08.
Re: verzweiflung: eintrag nur bis bestimmten zeitpunkt möglich
hallo,
in db3 sind die nutzer registriert
in db 1 und 2 werden die daten gespeichert
den part mit db2 kann ich auch weglassen
und in db4 steht das datum von-bis, was abhängig
machen soll, ob in db1 geschrieben werden darf.
im grunde so:
wenn user in db3 registriert ist, darf er in der
zeit, die in db4 eingetragen ist, in db1 schreiben.
mir fehlt momentan nur die einhaltung, bzw. prüfung der
datumsfelder.
hoffe, mir kann da jemand helfen.
danke
bernd
Antworten
Beitrag von bernd (25 Beiträge) am Sonntag, 12.September.2004, 01:39.
Re: verzweiflung: eintrag nur bis bestimmten zeitpunkt möglich
hallo,
ich hätte nicht gedacht, so ein großes problem zu haben.
im grunde habe ich eine pw-schutz aus der bib, d.h.
in db1 dürfen nur einträge gemacht werden, wenn der user
in db3 registriert ist.
zusätzlich sollen diese einträge nur in der zeit zwischen datum1 und
datum2 möglich sein, die in der db4 gespeichert sind.
das ist ein wirklich dringendes problem.
hoffe, mir kann da jemand weiterhelfen.
danke
bernd
Antworten
Beitrag von hempelr (1976 Beiträge) am Sonntag, 12.September.2004, 09:42.
Re: verzweiflung: eintrag nur bis bestimmten zeitpunkt möglich
mhm - da wäre noch was unklar - hat jeder in db3 eigetragene User die gleiche Zeit oder sind die Zeiten auch noch unterschiedlich, so dass erst mal der zum jeweiligen User gehörige DS geholt werden muss?
Vom Prinzip:
datum1 und datum2 holen und in Zwischenvariablen sichern.
Abfragen, ob %_put vorhanden ist, wenn ja, vergleichen, ob das ins interne Format gewandelte aktuelle Datum größer als datum1 und kleiner als datum2 ist. Wenn das der Fall ist, dann speichern/ändern/löschen, wenn nicht, %_put auf undef setzen´bzw. cmd von do_del ändern, damit nichts gespeichert/geändert/gelöscht wird.
Das alles vor dem do_all, damit die Aktionen entsprechend beeinflusst werden können.
hth
Ruben
Antworten
Beitrag von bernd (25 Beiträge) am Sonntag, 12.September.2004, 11:25.
Re: verzweiflung: eintrag nur bis bestimmten zeitpunkt möglich
guten morgen ruben,
und danke, daß sich jemand meinem hilfeschrei annmimmt.
das von-bis datum ist für alle user von db3 gleich.
wichtig ist, daß alle user nur zwischen der "von" und "bis" zeit
einträge vornehmen können.
da ich, was perl betrifft, nicht unbedingt weiß, was ich da tue,
ist es für mich schwierig für mich nachzuvollziehen, wo der fehler
liegt, bzw. was ich falsch mache.
hoffe, daß man mir hier im forum helfen kann.
danke
bernd
ich hatte das mal so versucht (kläglich gescheitert):
get "Name==!$Name", "db3";
if($Passwort ne "" && $Passwort eq $pwrein)
{
if (%_put ){
if ($cmd eq "add"){
put undef, "db2";
} elsif ($cmd eq "mod"){
mod undef, "db2";
}
}
get "$bisDatum", "db4";
if($bisDatum>jetzt)
{
do_all "db=db1 ...", "Name", "pwrein";
} else {
out "geht nicht mehr";
$namerein="";
}
}
}
</perl>
Antworten
Beitrag von hempelr (1976 Beiträge) am Sonntag, 12.September.2004, 17:43.
Re: verzweiflung: eintrag nur bis bestimmten zeitpunkt möglich
mhm - also leider muss ich hier mal etwas ausholen - es liegt offensichtlich ein grundlegendes Verständnisproblem vor.
1. Doku zu get mal anschaun - dein get geht komplett ins leere, welcher Datensatz soll denn nun geholt werden? Es muss eine klare Filterbedingung rein , also in der Art: Hole alle Datensätze mit wo die Obstfarbe rot ist, hieße in bp-Perl, wenn das Feld Obstfarbe heisst:
get "Obstfarbe==rot", "dbname";
bei dir wird nix als Filterbedingung eingetragen, weil die Variable $Datum nirgendwo belegt wurde! das get holt dann alle Datensätze und füllt die Feldvariablen mit den Werten des neuesten Datensatzes, weil zur Sccriptlaufzeit dann
get "", "db4";
evaluiert wird - (in der Variabel $bisDatum steht ja noch nix zu dem Zeitpunkt) und das holt halt alle Datensätze.
Weiterhin sind die Datumsfunktionen von bp nur in bp-eigenen Befehlen und Vergleichsopreatoren anwendbar, in normalem Perl ist das bp-interne Datum zwingend als String zu betrachten und auch so zu vergleichen, also
anstatt < - lt (für lower then)
anstatt <= - le (für lower equal)
anstatt == - eq (für equal)
anstatt > - gt (für greater then)
anstatt >= - ge (für greater equal)
Es kann auch nicht einfach so mit den Datumswerten "gerechnet" werden....
Nun ist mir immer noch nicht klar, wie der Datensatz mit dem Vergleichsdatum geholt werden soll bzw. welcher Datensatz das ist und nach welchen Kriterien man den holen könnte - du schreibst alle User aus db3 haben das gleiche, hast du also mehrere User-DBs mit unterschiedlichen Zeiten und musst den Datensatz für alle User der db3 holen? - ich geh mal davon aus.
Unter dieser Prämisse solltest du folgendes als Anregung nehmen können:
Ich nehme mal folgendes an:
Felder in der db4:
Usergruppe - Typ Text, Sortierung auf Text
vonDatum - Typ Datum, sortiert
bisDatum - dito.
---schnipp
get "Usergruppe==db3", "db4"; # heisst, dass der Datensatz geholt wird, in dessen Feld "Usergruppe" der Wert "db3" steht, Groß/Kleinschreibung wird ignoriert
$vergl_datum = datum("jetzt","intern");
if($vonDatum lt $vergl_datum && $bisDatum gt $vergl_datum)
{
do_all "db=db1 ...", "Name", "pwrein";
} else {
out "geht nicht mehr";
$namerein="";
}
---schnapp
Antworten
Beitrag von bernd (25 Beiträge) am Sonntag, 12.September.2004, 18:03.
Re: verzweiflung: eintrag nur bis bestimmten zeitpunkt möglich
Antworten
Beitrag von hempelr (1976 Beiträge) am Sonntag, 12.September.2004, 18:39.
Re: verzweiflung: eintrag nur bis bestimmten zeitpunkt möglich
okok - bin auch manchmal schwer von kapee,
also, da ist das dann ohne die Bedingung zu holen, also einfach ein Datensatz (der einzige der drin ist)
Die Sache mit den registrierten Usern klappt wohl, oder?
also nur noch die "Zeitfrage", und die ist dann irgendwie so:
---schnipp
....
get "", "db4";
$vergl_datum = datum("jetzt","intern");
if($startdatum lt $vergl_datum && $enddatum gt $vergl_datum)
{
do_all "db=db1 ...", "Name", "pwrein";
} else {
out "geht nicht mehr";
$namerein="";
}
....
---schnapp
Antworten
Beitrag von bernd (25 Beiträge) am Sonntag, 12.September.2004, 18:54.
Re: verzweiflung: eintrag nur bis bestimmten zeitpunkt möglich
hallo ruben,
die usersache klappt.
es war nur das zeitenproblem.
werden deinen vorschlag nachher gleich mal
testen.
vorab schon mal danke.
bernd
Antworten
Beitrag von bernd (25 Beiträge) am Sonntag, 12.September.2004, 23:09.
danke
hallo ruben ;-)
es klappt - vielen, vielen dank!
bernd
Antworten