Re: Eigenes Formular / Doppelte Speicherung - baseportal Forum - Web-Anwendungen einfach, schnell, leistungsfähig!
baseportal
English - Deutsch "Es gibt keine dummen Fragen - jeder hat einmal angefangen"

 baseportal-ForumDie aktuellsten 10, 30, 50, 100 Einträge anzeigen.  

 
 Ausgewählter Eintrag: Zur Liste 
    Beitrag von Norbert (178 Beiträge) am Montag, 24.März.2003, 07:13.
    Re: Eigenes Formular / Doppelte Speicherung

      Danke für deine Mühe Ruben, allerdings komme ich an o.g. Beispiel-Datenbank "andernutz" mangels Passwort nicht ran.

      Ich hab inzwischen eine Zwischenlösung realisiert, indem ich das do_all komplett rausgenommen und einfach einen Link auf ein weiteres Template gesetzt habe, in dem wiederum das do_all drin steht. So funktioniert zwar alles so, wie ich mir das vorstelle, aber leider lassen sich dann im automatisch generierten Änderungsformular Felder bearbeiten, die eigentlich einen automatisch ermittelten Wert enthalten. Ich füge z.B. jedem Datensatz das Kürzel des angemeldeten Users hinzu und hab natürlich wenig Interesse dran, wenn er selbst das durch die Hintertür ändern kann. Umgekehrt muss ich dem User aber die Gelegenheit geben, seine Eingaben zu ändern.

      Kann ich denn einzelne Felder bei do_all irgendwie ausklammern, wenn es um die Änderung von Datensätzen geht?

      Gruss, Norbert


    Antworten

 Alle Einträge zum Thema: Zur Liste 
    Beitrag von Norbert (178 Beiträge) am Sonntag, 23.März.2003, 07:45.
    Eigenes Formular / Doppelte Speicherung

      Hallo,
      ich habe ein eigenes Formular zum Erfassen von Datensätzen in eine Webseite integriert. Nach der Ausgabe lasse ich zusätzlich noch mit der do_all Routine die existenten Datensätze anzeigen, um diese bei Bedarf ändern oder löschen zu können.

      Nun habe ich aber zwei Dinge, die ich nicht verstehe: zum einen wird nach dem Erfassen eines neuen Datensatzes zweimal ein Formular zur Eingabe weiterer Sätze ausgegeben, nämlich einmal das Formular von mir und anschliessend das von BP selbst generierte Standardformat.

      Zum anderen, und das ist weitaus schlimmer, wird jeder Datensatz doppelt gespeichert. Warum?

      Oder wie kann ich anders realisieren, dass nach einem eigenen Formular anschliessend bestehende Datensätze aufgelistet werden, welche wiederum per Klick bearbeitet werden können? Könnte zwar auf ein eigens Template verlinken, aber dann kann jeder, der die URL kennt, Daten ohne Passwort ändern.

      Im Prinzip will ich die Standard-Ausgabe wie do_all, nur eben selbst formatiert.

      Wäre für Unterstützung echt dankbar!

      Gruss, Nobbi



      <include src=../mainmenue>
      <!-- Seiteninhalt -->
      <do action=input db=main>
      

      <perl>
      if($namerein ne "")
      {
        get "Name==!$namerein", "../einsaetze/nutzer";
        get "Kuerzel", "../einsaetze/main", "Autor"; 
      
        if($Passwort ne "" && $Passwort eq $pwrein)
        
      {
      get "Nummer==#", "../einsaetze/main"; ## letzte Nummer aus DB holen
      $Nummer++; ## diese Nummer um eins erhöhen
         
      out <<EOF;
      <table><form action="http://domain.name/cgi-bin/baseportal.pl?namerein=$namerein&pwrein=$pwrein&htx=/einsaetze/anmeldung&db=main&cmd=add" method="post" enctype="multipart/form-data">
      <input type=hidden name="namerein=" value="$namerein">
      <input type=hidden name="pwrein=" value="$pwrein">
      <input type=hidden name="htx=" value="/einsaetze/anmeldung">
      <input type=hidden name="db=" value="einsaetze/main">
      <input type=hidden name="cmd=" value="add">
      <input type=hidden name="namerein=" value="test">
      <input type=hidden name="pwrein=" value="user">
      <input type=hidden name="htx=" value="/ffwn/einsaetze/anmeldung">
      
      --- Def. Eingabefelder ---
      </form>
      do_all "db=main listfields=Nummer,Datum,Stichwort,Einsatzort sort=-Datum databack=f0f0f0 datasize=2 headback=e0e0e0 border=0 spacing=1 padding=2 gridcolor=b0b0b0 dataface=arial selectbrowse=no", "namerein", "pwrein", "ip";
      EOF
      
        } else   {     out "Unbekannter Benutzername oder falsches Passwort.";     $namerein="";   }
      }

      if($namerein eq "")
      {
      

      out <<EOF;
      Bitte melden Sie sich an:
      <form action="http://domain.name/cgi-bin/baseportal.pl?htx=$htx" method="post" enctype="multipart/form-data">
      <input type=hidden name="htx=" value="$htx">
      <table>
      <tr><td>Name:</td><td><input type="text" name="namerein="></td></tr>
      <tr><td>Passwort:</td><td><input type="password" name="pwrein="></td></tr>
      <tr><td></td><td><input type=submit value="Anmelden"></td></tr>
      </table></form>
      EOF
      

      }

      </perl>
      <include src=../mainfooter>
      

     Antworten

    Beitrag von hempelr (1976 Beiträge) am Sonntag, 23.März.2003, 20:28.
    Re: Eigenes Formular / Doppelte Speicherung

      Hallo, Norbert,
      mhm - du hast zum einen dein Formular drin - zum anderen das mittels do_all generierte (do_all ist ja der BP-eigene Perl-Pedant zu do action all)
      Nun hast du oben stehen do action=input. Das ist dann verantwortlich fürs erstemal speichern - im do_all wird es dann das nächstemal gespeichert (hoffe, daß das so richtig erklärt ist...)
      Die Kombination mit do action und do_all hab ich selbst noch nie verwendet, und nach meinen Erfahrungen ist das do_all auch nur bedingt geeignet; z.B. werden Datenfelder, die als Formfields ausgeklammert werden beim Ändern vorh. Datensätze komplett geleert; beim Neuanlegen dann nicht gefüllt u. einige andere Einschränkungen.
      Das Beispiel von Marco Weber in der Bib (http://baseportal.de/cgi-bin/baseportal.pl?htx=/main&uid=andernutz&sid=2043016.31530196.12023496.3278044&type=0&dir=&cmd=bib&bcmd=load&bId=71) umschifft einiges und ist ein gutes Beispiel für die Nutzung von bp-internen Formularen. Wenn du "nur" eigene Formulare verwenden willst ist do_all eigentlich nicht geeignet, du müßtest dir dann im Script was mit put und mod basteln, dazu aber dann halt auch die durchgereichten Variablen entweder in die URL oder ins Form als hidden Fields mitgeben.
      Hier mal ein Stück Code für die Aktionen auf die Datenbank mit eigenen Forms:
      ---- schnipp-----
      # Parameter use für Datenbank, die bearbeitet wird
      # Parameter act: n-neu c-ändern d-löschen r-registrieren
      if ($use ne "" && $zug == 4) # zug aus &chk_zugang (4=Erlaubt)
      {$a_debug.=".\$use($use) vorhanden zug==4 - Aktionsauswahl:<br>";
      # -------- Aktionen in Datenbanken je nach $act ------- #
         my $db_daten = substr($use,2);   # Datenbankname aus Parameter $use extrahieren (erste 2 Zeichen weg)
         if ($act eq "n")
            {
            put undef ,"$db_daten";
            $act = "n";
            $act = "c" if $db_name eq "$db1"; # wenn Nutzerdb nur ändern erlauben
            $a_actiontext = "Datensatz hinzugefügt...";
            $a_actionalert = "alert('Datensatz gespeichert !');";
            $a_debug.=".. put (in db $db_name) ausgeführt<br>";
            }elsif ($act eq "c" && $dsn ne "")
            {  # - - - - - - - - - - - - - - - - - - - - - - - - - - - - #
               # Wenn Daten aus eig. Form mit "feldname=" übergeben werden und
               # %_put deshalb nicht da ist; Workaround f. chg, damit DS-Inhalte nicht
               # gekillt werden, die erhalten bleiben sollen (Feld bspw. nicht im eigenen Formular)
               if (not defined $_put{_amount})   # wenn %_put nicht vorhanden
               {
               $_put{_amount} = 1;       # Wichtigstes Paar f. %_put, damit es aktiv ist und chg undef richtig ausgef. wird
               get "Id==!$dsn", "$db_daten", "hole_chgds";
               $a_debug.="DS mit Id \$dsn($dsn) aus $db_daten geholt<br>";
               get "Id==*", "$db_daten.fields", "edsfelder";
               $a_debug.="<font color=red>DS aus \$db_daten($db_daten).fields geholt<br></font>";
               while(get_next("edsfelder"))
                    {
                    if ($Field ne "Id") # ID nicht mit in \%_put (Ändern) - sonst inkonsistente DB!
                       {
                       $_put{$Field} = ${$Field};  #alle Werte ausser ID des DS
                       $a_debug.="\%_put Key-Wertpaar: (\$_put{$Field} - ${$Field})<br>";
                       }
                    if (exists ($_get{$Field}) && $_get{$Field} ne $_put{$Field})
                       {
                       $_put{$Field} = $_get{$Field} ;  # Inh. ändern wenn in get vorh. und anders
                       $a_debug.="´Diff. in \%_get geändert:  (\$_put{$Field} - $_put{$Field})<br> ";
                       }
                    }
               }
               # - - - - - - - - - - - - - - - - - - - - - - - - - - - - #
               chg "Id==!$dsn", undef, "$db_daten";
               $act = "n";
               $a_actiontext = "Datensatz geändert...";
               $a_actionalert = "alert('Datensatz geändert !');";
               $a_debug.=".. chg (in db $db_name) ausgeführt<br>";
               }elsif ($act eq "d" && $dsn ne "")
               {
               del "Id==!$dsn", "$db_daten";
               $act = "n";
               $act = "c" if $db_name eq "$db1"; #s.o.
               $a_actiontext = "Datensatz gelöscht...";
               $a_actionalert = "alert('Datensatz gelöscht !');";
               $a_debug.=".. del (in db $db_name) ausgeführt<br>";
               }
      }
      
      ---- schnapp ----
      (Erläuterungen sowohl als Kommentar als auch in $a_debug-Zeilen; sind auch noch paar Testzeilen auskommentiert drin, ansonsten ist es voll ausgetesteter Code)
      Vielleicht hilft dirs ja weiter....
      Ruben

     Antworten

    Beitrag von Norbert (178 Beiträge) am Montag, 24.März.2003, 07:13.
    Re: Eigenes Formular / Doppelte Speicherung

      Danke für deine Mühe Ruben, allerdings komme ich an o.g. Beispiel-Datenbank "andernutz" mangels Passwort nicht ran.

      Ich hab inzwischen eine Zwischenlösung realisiert, indem ich das do_all komplett rausgenommen und einfach einen Link auf ein weiteres Template gesetzt habe, in dem wiederum das do_all drin steht. So funktioniert zwar alles so, wie ich mir das vorstelle, aber leider lassen sich dann im automatisch generierten Änderungsformular Felder bearbeiten, die eigentlich einen automatisch ermittelten Wert enthalten. Ich füge z.B. jedem Datensatz das Kürzel des angemeldeten Users hinzu und hab natürlich wenig Interesse dran, wenn er selbst das durch die Hintertür ändern kann. Umgekehrt muss ich dem User aber die Gelegenheit geben, seine Eingaben zu ändern.

      Kann ich denn einzelne Felder bei do_all irgendwie ausklammern, wenn es um die Änderung von Datensätzen geht?

      Gruss, Norbert

     Antworten

    Beitrag von hempelr (1976 Beiträge) am Montag, 24.März.2003, 07:31.
    Re: Eigenes Formular / Doppelte Speicherung

     Antworten


     
 Liste der Einträge von 39450 bis 39600:Einklappen Zur Eingabe 
Neueste Einträge << 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | Neuere Einträge < Zur Eingabe  > Ältere Einträge | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 >> Älteste Einträge


Zurück zur Homepage

© baseportal.de. Alle Rechte vorbehalten. Nutzungsbedingungen



powered in 0.05s by baseportal.de
Erstellen Sie Ihre eigene Web-Datenbank - kostenlos!