Beitrag von Phixxi (280 Beiträge) am Donnerstag, 21.Februar.2002, 18:50.
@CB, AJ, Stefan K. oder andere Perl Profis: Einfacher Zugangsschutz
Hallo!
Ich bräuchte für folgendes Problem nochmal eine Lösung:
Auf meiner Website (kein bp Server) liegt ein winzig, kleines LogIn Formular.
Dort kann man nur 2 Felder ausfüllen, nämlich "Benutzer" und "KundenNr".
Diese beiden Felder sind auch Bestandteil der Datensätze in der DB, welche durch das Form aufgerufen wird.
Ergebnis ist also: "Zeige mir alle Datensätze in denen das Feld "Benutzer" = Eingabe & das Feld "KundenNr" = Eingabe sind!
Nun soll folgendes gewährleistet sein:
Ausgabe der Datensätze nur wenn:
- BEIDE Feldwerte mit den Einträgen in der DB übereinstimmen!
- Sollte nur ein Wert übereinstimmen (z.B. Benutzer) der andere aber nicht, oder falls gar kein Eintrag erfolgt ist, darf KEIN Datensatz ausgegeben werden!
- Sollte gar nix eingegeben werden, darf KEIN Datensatz ausgegeben werden!
- Sollte nur ein Teil der Eingabe richtig sein, z.B. KundenNr 123 anstatt 12345, darf KEIN Datensatz ausgegeben werden!
- Sollte * o.ä. eingegeben werden (die Abfrage geht ja über URL), darf KEIN Datensatz ausgegeben werden!
Ich habe bereits ein ähnliches/einfacheres Script, was auch funktioniert:
<perl>
unless ($_sel{ObjektNr}=~ /^(\d{4,4})$/)
{
$inc="noobject";
} else
{
$inc="Expose2";
}
</perl>
<include src=$inc>
#Das Template, in welchem dieser Zugangschutz realisiert werden soll sieht so aus:
<perl>
if($cmd eq "mod")
{
mod;
$_get{cmd}="";
}
</perl>
<do action=all selectbrowse=no formfields=-MaxObjekte,Benutzer,KundenNr databack=f0f0f0 datasize=2 headback=e0e0e0 border=0 spacing=1 padding=2 gridcolor=b0b0b0 dataface=arial,helvetica range^=0,20 pagebrowse=top buttonbrowse=top listtype=list listfields=ObjektNr,Objekt\ aktiv\ bis,MaxObjekte,Objektname input=link>
Es muß also praktisch nur das "Schutzscipt" erweitert und ins Template eingebaut werden...
Wäre super klasse, wenn mir da jemand helfen könnte...
Für einen richtigen Perl Fuchs dürfte das wahrscheinlich kein Problem sein.
Leider bin ich eher ein Perl Esel...;-)
Vielen, vielen Dank!!!
Phixxi
Antworten
Beitrag von Stefan Krupop (311 Beiträge) am Donnerstag, 21.Februar.2002, 22:02.
Re: @CB, AJ, Stefan K. oder andere Perl Profis: Einfacher Zugangsschutz
Hi!
So sollte es hinhauen, gleiches Vorgehen wie bei dem anderen Templates das du auch mit includes gemacht hast:
<perl>
$Benutzer=~s/^( |\*)//;
$KundenNr=~s/^( |\*)//;
if ($Benutzer ne "" & $KundenNr ne "") {
get "Benutzer==$Benutzer&KundenNr==$KundenNr", "DEINEDATENBANK";
if ($_amount_query > 0) {
$inc="TEMPLATE_MIT_DEM_DO";
} else {
$inc="TEMPLATE_MIT_FEHLERMELDUNG";
}
} else {
$inc="TEMPLATE_MIT_FEHLERMELDUNG";
}
</perl>
<include src=$inc>
Stefan
Antworten
Beitrag von Phixxi (280 Beiträge) am Freitag, 22.Februar.2002, 12:19.
Re: @CB, AJ, Stefan K. oder andere Perl Profis: Einfacher Zugangsschutz
Hi Stefan,
jap, so in etwa hab ich's mir auch gedacht.
Leider blick ich aber die ganzen "Kleinigkeiten" noch nich so...
Wenn man mal ein ; oder }, o.ä. vergisst, klappt gleich gar nix.
Muß unbedingt mal ein bissi Perl lernen.
Ich bau Dein Scrpit gleich mal ein.
Vielen Dank nochmal!
Auch dafür, dass Du mir schon so oft geholfen hast!
Gruß
Phixxi
Antworten
Beitrag von Phixxi (280 Beiträge) am Freitag, 22.Februar.2002, 13:03.
Re: @Stefan Krupop: Einfacher Zugangsschutz
Hi Stefan,
klappt leider noch nicht so ganz:
Gebe ich keine, unvollständige oder falsche Werte ein, kommt wie erwartet die Fehlermeldung (Template "error").
(Allerdings zusätzlich mit bp interner Fehlermeldung -s.u.-
Ist beim anderen Template aber auch so. Nicht so wíld...)
Gebe ich aber korrekte Werte ein, erfolgt:
[ Fehler: init:
Ursache: Die angegebene Datenbank ist für den gewünschten Zugriff nicht freigegeben.
Lösung: Gehen Sie in Ihren privaten Bereich (Anmelden), wählen Sie die entsprechende Datenbank aus, klicken Sie auf 'Verwaltung' und ändern Sie die Rechte entsprechend. ]
Hier nochmal alle -vollständigen- Templates:
1. Template "Zugang" (Standard Formularziel):
<perl>
$Benutzer=~s/^( |\*)//;
$KundenNr=~s/^( |\*)//;
if ($Benutzer ne "" & $KundenNr ne "") {
get "Benutzer==$Benutzer&KundenNr==$KundenNr", "profis_input";
if ($_amount_query > 0) {
$inc="profis_input";
} else {
$inc="error";
}
} else {
$inc="error";
}
</perl>
<include src=$inc>
# 2. Template "error":
<html><head><title>LogIn fehlgeschlagen!</title>
</head><body bgcolor="#ffffff">
<br><ul>
<font face="arial,helvetica" size=2>
<h2 align=middle>LogIn fehlgeschlagen!</h2>
<p>Bitte überprüfen Sie Ihre Eingaben
und versuchen Sie sich erneut einzuloggen</p></font>
<do action=all>
<p><font face="arial,helvetica" size=2><b></b>
<p></font>
</ul>
</body></html>
# 3. Template "profis_input" (Standard DB Template):
<html><head><title></title></head>
<body bgcolor=ffffff>
<font face=arial,helvetica>
<font size=1></font>
<h3></h3>
<perl>
if($cmd eq "mod")
{
mod;
$_get{cmd}="";
}
</perl>
<do action=all selectbrowse=no formfields=-MaxObjekte,Benutzer,KundenNr databack=f0f0f0 datasize=2 headback=e0e0e0 border=0 spacing=1 padding=2 gridcolor=b0b0b0 dataface=arial,helvetica range^=0,20 pagebrowse=top buttonbrowse=top listtype=list listfields=ObjektNr,Objekt\ aktiv\ bis,MaxObjekte,Objektname input=link>
<p><font face=arial,helvetica size=2>
<p><font size=1></font>
</body></html>
Alle Template sehen genau so aus!
Im Zugangs & Error Template sind keine DB's angegeben...
Hast Du 'ne Idee?
THX
Phixxi
Antworten
Beitrag von Stefan Krupop (311 Beiträge) am Freitag, 22.Februar.2002, 19:05.
Re: @Stefan Krupop: Einfacher Zugangsschutz
Antworten
Beitrag von Phixxi (280 Beiträge) am Samstag, 23.Februar.2002, 11:13.
Re: @Stefan Krupop: Einfacher Zugangsschutz
Hi Stefan,
scroll doch mal nach unten und schau Dir noch mal meine Tempels an.
Wo soll denn da der mod Befehl rein?
Konnte ihn irgendwie nicht richtig einsetzten.
bp hat immer was von Script Fehlern gemeckert...
Vielleicht kannst Du ja das entsprechende Template copieren und den Befehl an der richtigen Stelle einfügen...;)
DB Namen hab ich diesmal richtig geschrieben;)
Wo meinst Du denn wo ich die angeben soll?
Im Zugangs Template?
Im Standard(profis_input) brauch ich's ja eh nicht und im error Tempel...?
Ich hab vorher schon mal im Zugang die DB angegeben.
Ergebnis war, dass sofort alle Daten angezeigt wurden.
Trotz Zugangsschutz...
Und jetzt...?
:-(
Gruß
Phixxi
Antworten
Beitrag von Phixxi (280 Beiträge) am Samstag, 23.Februar.2002, 11:16.
Re: @Stefan Krupop: Einfacher Zugangsschutz
Antworten
Beitrag von Stefan Krupop (311 Beiträge) am Samstag, 23.Februar.2002, 14:03.
Re: @Stefan Krupop: Einfacher Zugangsschutz
Hi!
Das "unless" ist eigentlich nur eine andere Form des if und die Bedingung dahinter ist halt mit einer RegEx aufgebaut, aber vom Prinzip (Festlegen der "Ausgabeseite" über $inc) her sind beide gleich...
Stefan
Antworten
Beitrag von Stefan Krupop (311 Beiträge) am Samstag, 23.Februar.2002, 14:10.
Re: @Stefan Krupop: Einfacher Zugangsschutz
Hi!
Hm, irgendwie verlier ich langsam den Überblick über deine Templates ;)
Inhalt von Template "Zugang" (neu):
<perl>
$Benutzer=~s/^( |\*)//;
$KundenNr=~s/^( |\*)//;
if ($Benutzer ne "" & $KundenNr ne "") {
get "Benutzer==$Benutzer&KundenNr==$KundenNr", "profis_input";
if ($_amount_query > 0) {
$inc="profis_input";
} else {
$inc="error";
}
} else {
$inc="error";
}
</perl>
<include src=$inc>
Inhalt Template "Error" bleibt gleich (kein BP-spezifischer Inhalt)
Inhalt Template "profis_input":
html><head><title></title></head>
<body bgcolor=ffffff>
<font face=arial,helvetica>
<font size=1></font>
<h3></h3>
<perl>
if($cmd eq "mod") {
mod undef, "profis_input";
$_get{cmd}="";
}
if ($cmd eq "del") {
out "Es dürfen keine Datensätze gelöscht werden!<br>";
$_get{cmd}="";
}
</perl>
<do action=all db=profis_input selectbrowse=no formfields=-MaxObjekte,Benutzer,KundenNr databack=f0f0f0 datasize=2 headback=e0e0e0 border=0 spacing=1 padding=2 gridcolor=b0b0b0 dataface=arial,helvetica range^=0,20 pagebrowse=top buttonbrowse=top listtype=list listfields=ObjektNr,Objekt\ aktiv\ bis,MaxObjekte,Objektname input=link>
</body></html>
(Hab die Änderung wegen löschen/ändern gleich mit reinkopiert)
Stefan
Antworten
Beitrag von Phixxi (280 Beiträge) am Samstag, 23.Februar.2002, 17:30.
Re: @Stefan Krupop: Einfacher Zugangsschutz
Sei unbesorgt! Ich verlier auch langsam den Überblick ;)))
Ich denke aber, Du hast es noch richtig erkannt.
Werd ich gleich mal testen...
Nur nochmal wegen des Überblicks:
1. Tempel=Zugang
Zweck: Überprüfung der Eingabe (Benutzer & KundenNr)
wenn korrekt, dann zu>
2. Tempel=profis_input (Originaltemplate)
Zweck: Eingabe und ändern von Datensätzen
Es können nur die DS des jeweiligen (angemeldeten) Users bearbeitet werden (wird dadurch erreicht, dass der User ja nur "seine" DS sieht)
3. Tempel=error
Wird angezeigt wenn
-falsche Eingabe
-unvollständige
-oder gar keine Eingabe
Das war's eigentlich...
Ich hoffe, Du hast jetzt wieder den Duchblick.
Damit Du Bescheid weißt, wenn's doch noch nicht funzt...;))
Aber ich test' erstmal!
Vielen Dank,
Phixxi
Antworten
Beitrag von Phixi (2 Beiträge) am Samstag, 23.Februar.2002, 17:55.
Re: @Stefan Krupop: Einfacher Zugangsschutz
Ja, ja, wär ja auch zu schön gewesen...
Also, erst dachte ich, es funzt.
Zugang funktioniert!
Bei falscher, unvollständiger oder gar keiner Angabe von Benutzer/KundenNr erfolgt Fehlermeldung. Richtig.
Bei korrekter Eingabe erfolgt Ausgabe der Datensätze. Richtig.
Wenn ich versuche zu löschen, kommt bp internes PopUp (Wirklich löschen) und nach Bestätigung mit Ja wird Eintrag gelöscht.
Erst DANN kommt Meldung "Es dürfen keine Datensätze gelöscht werden!"...
Weiteres Problem:
Nach jedem Ändern eines Datensatzes wird die KundenNr und der Benutzer, sowie alle anderen Angaben welche ich vorher per csv Import angegeben hatte, gelöscht!
Dadurch reduzieret sich die Anzahl der gefundenen Einträge mit jeder Editierung um Eins.
Das Problem hatte ich vorher auch schon mal und Christoph o. Sander hatten da ein Mini Script welches das verhindern sollte:
<perl>
if($cmd eq "mod")
{
chg;
$_get{cmd}="";
}
</perl>
vor das <do action=all>
Das ist jetzt wohl irgendwie außer Kraft...
Und das letzte Problem ist, dass ich, wenn ich in der Detailansicht oder im Eingabeformular war, nicht mehr zurück zur Übersicht komme. Dabei hab ich doch Pagebrowse=top angegeben...!?
Hmm...
Ich hoffe, Du bist noch nicht am Ende mit Deinem Latein...äh Perl.
Um nicht zu sehr durcheinander zukommen, hier nochmal das Template:
<html><head><title></title></head>
<body bgcolor=ffffff>
<font face=arial,helvetica>
<font size=1></font>
<h3></h3>
<perl>
if($cmd eq "mod") {
mod undef, "profis_input";
$_get{cmd}="";
}
if ($cmd eq "del") {
out "Es dürfen keine Datensätze gelöscht werden!<br>";
$_get{cmd}="";
}
</perl>
<do action=all db=profis_input selectbrowse=no formfields=-MaxObjekte,Benutzer,KundenNr databack=f0f0f0 datasize=2 headback=e0e0e0 border=0 spacing=1 padding=2 gridcolor=b0b0b0 dataface=arial,helvetica range^=0,20 pagebrowse=top buttonbrowse=top listtype=list listfields=ObjektNr,Objekt\ aktiv\ bis,MaxObjekte,Objektname input=link>
</body></html>
Please don't let me häng now! ;)
THX & Gruß
Phixxi
P.S.
Nur damit Du das blickst:
Jeder User kann eine bestimmte Anzahl an Datenbankplätzen buchen, z.B. 10
Ich erstelle dann in Access 10 leere Datensätze in denen nur der Benutzer, die KundenNr und 10 aufeinander folgende ObjektNr enthalten sind.
Diese importiere ich dann per csv in bp.
Wenn sich der User dann mit seinen Zugangsdaten einloggt, sieht er nur seine 10 gebuchten Datensätze (noch leer), welche er nach Herzenslust mit Inhalten füllen und jederzeit ändern kann.
Löschen können sollte er sie nicht, weil er dann statt 10 nur noch 9 Datensatzplätze hat...
Logo?
Antworten
Beitrag von Stefan Krupop (311 Beiträge) am Samstag, 23.Februar.2002, 18:14.
Re: @Stefan Krupop: Einfacher Zugangsschutz
Hi!
Logo! ;)
Das mit dem Nicht-Löschen erst nach Bestätigung ist schon richtig (Javascript mit im Lösch-Link) und dürfte sich ohne Änderungen von CB auch nicht verhindern lassen...
Das Mini-Perl-Script hatte mich ein bisschen gewundert, da mir kein Befehl "chg" bekannt ist. Eben deswegen weiss ich auch nicht wie man ihm den Namen der DB beibringen kann. Vielleicht geht's trotzedem, ersetze also 'mod undef, "profis_input";' durch 'chg;'.
Zum letzten Problem: Pagebrowse bestimmt die Ausgabe der "Zähl-Reiter", was du meinst ist "selectbrowse" und das steht bei dir auf "no"...
Stefan
Antworten
Beitrag von Phixxi (280 Beiträge) am Samstag, 23.Februar.2002, 18:34.
Re: @Stefan Krupop: Einfacher Zugangsschutz
Ich krich noch die Kriese...
Jetzt happich wieder das alte "Antilöschnacheditierscript" eingesetzt und es geht nich mehr...
Jetzt muß ich erstmal alle alten Postings von mir im Forum durchsuchen um das betreffende zu finden. Vielleicht finde ich da den Grund...:(
Jetzt klappt das mit dem Zugang und dann schmiert das andere wieder ab *grmpf*
Das mit selectbrowse happich auch schon bemerkt.
Wieder mal en Flüchtigkeitsfehler...
Aber eins noch:
Kann ich irgendwie verhindern, dass "Neu" im selectbrowse auftaucht?
Der User soll ja keine neuen Einträge machen können, sondern nur die ihm zustehenden "Schablonen" verändern können...
THX
Phixxi
Antworten
Beitrag von Phixxi (280 Beiträge) am Samstag, 23.Februar.2002, 18:41.
Re: @Stefan Krupop: Einfacher Zugangsschutz
Antworten
Beitrag von Phixxi (280 Beiträge) am Samstag, 23.Februar.2002, 18:53.
Re: @Stefan Krupop: Einfacher Zugangsschutz
AAAAAAAAAAAAAAARGH!!!!!
Ich fasses nich!
Kannst Du mir bitte folgendes erklären?
Wieso funzt es, wenn ich den Aufruf Link über dem HTML Feld anklicke und Änderungen vornehme, aber nicht, wenn ich mich über mein LogIn Formular auf dieselbe Seite einlogge und Veränderungen vornehme???
Tu ich letzteres, und ändere einen Datensatz, so werden dei anderen Felder gelöscht.
Mach ich's direkt über den Aufruf Link des Templates, dann klappt alles und das Script tut seinen Dienst!
Ich versteh's nich...
Antworten
Beitrag von Stefan Krupop (311 Beiträge) am Samstag, 23.Februar.2002, 23:05.
Re: @Stefan Krupop: Einfacher Zugangsschutz
Hi!
Zuerst dachte ich es liege an dem get (das das irgendwie die Änderungen überschreibt), aber das konnte ich nicht reproduzieren...
So langsam gehen mir die Ideen aus, ne Test-URL wäre vielleicht mal gut!
Übrigens hab ich noch n kleinen Fehler in das Zugangs-Script eingebaut, der allerdings hiermit nichts zu tun haben dürfte: In der Zeile " if ($Benutzer ne "" & $KundenNr ne "") {" müssten es nicht & sondern && heißen...
Stefan
Antworten
Beitrag von Phixxi (280 Beiträge) am Sonntag, 24.Februar.2002, 22:21.
Re: @Stefan Krupop: Einfacher Zugangsschutz
'n Abend Stefan,
hab die && gerade aktualisiert...
Du hast sicher Recht. Mit einer Test URL gings leichter.
Werde ich morgen mal machen. Wird eh langsam Zeit...
Wenn ich den ganzen Krempel drin habe, lass ich's Dich wissen.
Wo steckt eigentlich der Christoph?
Irgendwo eingeschneit...?;)
Bis morgen,
Phixxi
Antworten
Beitrag von Sander (8133 Beiträge) am Sonntag, 24.Februar.2002, 22:39.
Re: @Stefan Krupop: Einfacher Zugangsschutz
Aber klaro hats geschneit - in Spindler Mühle in Tschechien ;-)
Morgen sollte er wieder da sein.
Sander
Antworten
Beitrag von Phixxi (280 Beiträge) am Montag, 25.Februar.2002, 12:15.
Re: @Stefan Krupop: Einfacher Zugangsschutz
:)))
Wie schön für ihn...
Meine Freundin ist gerade in der Schweiz,
da hat's auch Schnee.
Und ich bin sicher, Du warst kürzlich auch erst boarden, stimmt's?
Wirklich klasse! Ich sitze hier bei diesem Ultramegahyperscheisswetter vor'm Rechner und kann mir den Schnee per Webcam angucken...*grmpf*
Werde mich gleich vor's Eisfach setzten, die Augen schliessen und an der Spinatpackung lecken.
Mit ein bisschen Fantasie fühle ich mich dann vielleicht auch wie auf der Piste...;-)
Aber mal was anderes:
Vielleicht weißt Du da ja auch Bescheid?
Kannst ja mal schauen:
http://www.baseportal.de/cgi-bin/baseportal.pl?htx=/baseportal/forum&wcheck=1&Pos=4907
...und tschüss!
Phixxi
Antworten