@Sander - den "Entdecker" der db.fields -Optionfelder und ein Prob damit - 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 hempelr (1976 Beiträge) am Freitag, 22.August.2003, 21:01.
    @Sander - den "Entdecker" der db.fields -Optionfelder und ein Prob damit

      Hallo,
      hab da seit längerem ein Prob und komm nicht auf ne praktikable Lösung, ohne numfangreiche Änderungen vornehmen zu müssen - vielleicht hast ja du ne Idee:
      der Konstrukt des Postings vor laaannger Zeit zum auslesen von Optionfeldern hat einen entscheidenden Nachteil: die params sind nicht mit \n vom Rest getrennt, so dass dann immer der erste Wert "verschluckt" wird, wenn man nicht einen Leerwert als erstes ins Optionfeld schreibt.
      wie könnte man denn ohne alles umstricken zu müssen doch irgendwie, vielleicht sogar in ner Abfrage, hinkriegen, dass wirklich "nur" die Beschreibung im Feld Params wegfällt?
      (hier mal ein Link auf die Strukturausgabe - hab die new_lines mal in | gewandelt:
      http://baseportal.de/cgi-bin/baseportal.pl?htx=/hempelr/1_test/db_tools&act=dbstrukt&db_chg=nutzer
      Wobei das erste Optionfeld ohne Leerwert ist, man sieht deutlich die Beschr. ohne new_line-Trennung....
      Hier noch mal der Code:
      get "Field==fname_optionfeld", "db.fields", "erghash";
      @l_o = split/\n/,$Params; #optionen rausdröseln
      # diese Zeile killt aber gleichzeitig den ersten Eintrag im Optionfeld, offensichtlich ist die Beschreibung nicht mittels new_line von den Params getrennt - Analyse der Struktur ergibt ein Konstrukt in der Art: #option### woran sich direkt die Parameter des Optionfeldes anschliessen,die dann durch new-line getrennt sind
      shift(@l_o); #erstes element entfernen, beschreibung des felds
      foreach (@l_o){
        if ($f_t_klasse eq $_ ){
          $a_opt_t_klasse.=  "<option selected value=\"$_\">$_</option>";
        }else{
          $a_opt_t_klasse.=  "<option value=\"$_\">$_</option>";
        }
      }
      
      ----
      Das Problem ist, dass ich für eine bestimmte Anwendung auf gar keinen Fall im Optionfeld der DB Leerwerte Stehen haben darf (so hab ich das bisher immer umschifft), aber die Bearbeitung nur über eigene Forms zulassen kann und da in Abhängigkeit von den User-Rechten als Vorgabewert der erste Wert des Optionfeldes dynamisch in hidden-Fields geschrieben wird und entsprechend mit abgespeichert werden muss.
      Hab mir heut schon etliche Stunden die Rübe zermartert, aber komm einfach nicht drauf (berühmte Proggi-Scheuklappen - festgefahrene Gedanken)
      Vielleicht hast du ja ne Idee
      Danke
      Ruben


    Ihre Antwort:

    Name: EMail: EMail bei Antwort? WWW:
    Titel:
    Text:

    Neuer Eintrag


 Alle Einträge zum Thema: Zur Liste 
    Beitrag von hempelr (1976 Beiträge) am Freitag, 22.August.2003, 21:01.
    @Sander - den "Entdecker" der db.fields -Optionfelder und ein Prob damit

      Hallo,
      hab da seit längerem ein Prob und komm nicht auf ne praktikable Lösung, ohne numfangreiche Änderungen vornehmen zu müssen - vielleicht hast ja du ne Idee:
      der Konstrukt des Postings vor laaannger Zeit zum auslesen von Optionfeldern hat einen entscheidenden Nachteil: die params sind nicht mit \n vom Rest getrennt, so dass dann immer der erste Wert "verschluckt" wird, wenn man nicht einen Leerwert als erstes ins Optionfeld schreibt.
      wie könnte man denn ohne alles umstricken zu müssen doch irgendwie, vielleicht sogar in ner Abfrage, hinkriegen, dass wirklich "nur" die Beschreibung im Feld Params wegfällt?
      (hier mal ein Link auf die Strukturausgabe - hab die new_lines mal in | gewandelt:
      http://baseportal.de/cgi-bin/baseportal.pl?htx=/hempelr/1_test/db_tools&act=dbstrukt&db_chg=nutzer
      Wobei das erste Optionfeld ohne Leerwert ist, man sieht deutlich die Beschr. ohne new_line-Trennung....
      Hier noch mal der Code:
      get "Field==fname_optionfeld", "db.fields", "erghash";
      @l_o = split/\n/,$Params; #optionen rausdröseln
      # diese Zeile killt aber gleichzeitig den ersten Eintrag im Optionfeld, offensichtlich ist die Beschreibung nicht mittels new_line von den Params getrennt - Analyse der Struktur ergibt ein Konstrukt in der Art: #option### woran sich direkt die Parameter des Optionfeldes anschliessen,die dann durch new-line getrennt sind
      shift(@l_o); #erstes element entfernen, beschreibung des felds
      foreach (@l_o){
        if ($f_t_klasse eq $_ ){
          $a_opt_t_klasse.=  "<option selected value=\"$_\">$_</option>";
        }else{
          $a_opt_t_klasse.=  "<option value=\"$_\">$_</option>";
        }
      }
      
      ----
      Das Problem ist, dass ich für eine bestimmte Anwendung auf gar keinen Fall im Optionfeld der DB Leerwerte Stehen haben darf (so hab ich das bisher immer umschifft), aber die Bearbeitung nur über eigene Forms zulassen kann und da in Abhängigkeit von den User-Rechten als Vorgabewert der erste Wert des Optionfeldes dynamisch in hidden-Fields geschrieben wird und entsprechend mit abgespeichert werden muss.
      Hab mir heut schon etliche Stunden die Rübe zermartert, aber komm einfach nicht drauf (berühmte Proggi-Scheuklappen - festgefahrene Gedanken)
      Vielleicht hast du ja ne Idee
      Danke
      Ruben

     Antworten

    Beitrag von Sander (8133 Beiträge) am Samstag, 23.August.2003, 01:13.
    Re: @Sander - den "Entdecker" der db.fields -Optionfelder und ein Prob damit

      try this:
      get "Field==fname_optionfeld", "db.fields", "erghash";
      $Params=~s/.*#([^#]+)$/$1/g; # alles bis zum letzten # löschen 
      @l_o = split/\n/,$Params; #optionen rausdröseln
      foreach (@l_o){
        if ($f_t_klasse eq $_ ){
          $a_opt_t_klasse.= "<option selected value=\"$_\">$_</option>";
        }else{
          $a_opt_t_klasse.= "<option value=\"$_\">$_</option>";
        }
      }
      

      Sander

     Antworten

    Beitrag von hempelr (1976 Beiträge) am Samstag, 23.August.2003, 11:01.
    Re: @Sander - den "Entdecker" der db.fields -Optionfelder und ein Prob damit

      danke Sander,
       - aber so richti glücklich macht mich das auch nicht (naja, erstens versteh ich den Ausdruck beim besten Willen nich komplett und dann ist ja globales ersetzten bis zum letzten # relativ gefährlich, könnte ja ein # in den Parameteren stehen....
      
      Hab jetzt noch mal intensiv mit allen "gängigen" Feldern und Möglichkeiten experimentiert, es ist m.E. bei den Paramentern eine für mich nicht ganz durchschaubare Systematik drin. Folgendes kann man durch empirische Ermittlung aber sagen:
      Wenn man sich bei den Feldern vom Typ option, checkbox, radio (also alle "auswahlfeldtypen") dran hält, bei der DB-Struktur keine Vorgabewerte zu verwenden, ist eine eindeutige Grenze zwischen Beschreibung und erstem Wert mittels ## zu ziehen, und das als index auf das erste Element der Liste der params und den teil rechts davon als substr stehengelassen sollte dann m.E. auch das Vorhandensein eines # gefolgt von einem anderen Zeichen in den Parameterwerten abdecken. (der unwahrscheinliche Fall, dass da auch zwei aufeinanderfolgende ## drin sind würde dann in die Kategorie "dumm gelaufen" fallen.....)
      Denke mal, am einfachsten ist, in den Code für die "Feldwert-Holung" einfach die Zeile:
      $l_o[0] = substr $l_o[0], rindex ($l_o[0], '##')+2;
      
      nach dem Bau der Liste einzufügen, da kann alles andere bleiben wie es ist und in der DB-Struktur einfach der Leerwert weg, wenn denn keiner sein soll.
      Hab mal nen Laufzeittest mit dieser Variante und mit der von dir gemacht, es differiert bei 300.000 Schleifendurchläufen in etwa um 8%, was die RegEx schneller ist (hängt wahrscheinlich mit der direkten Manipulation in der Liste zusammen, wird von Perl bestimmt zwischenkopiert) - Abloutwerte substr-Variante 4,8 Sekunden, Regex-Variante 4,4 Sekunden (Link: http://baseportal.de/cgi-bin/baseportal.pl?htx=/hempelr/1_test/test )
      Na dann - mach mer mal wieder weiter.....
      Ruben

     Antworten


     
 Liste der Einträge von 35550 bis 35700: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.06s by baseportal.de
Erstellen Sie Ihre eigene Web-Datenbank - kostenlos!