Re: Keiner da???? @Profis!!!!!! - Übergabe einer Liste im mod/chg möglich? - 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 Sander (8133 Beiträge) am Freitag, 28.Februar.2003, 11:50.
    Re: Keiner da???? @Profis!!!!!! - Übergabe einer Liste im mod/chg möglich?

      nein, das geht nicht mit string.
      [...]
      baut eine referenz auf eine liste also muß da drin auch ne liste sein ;-)


    Antworten

 Alle Einträge zum Thema: Zur Liste 
    Beitrag von hempelr (1976 Beiträge) am Donnerstag, 27.Februar.2003, 21:21.
    @Profis!!!!!! - Übergabe einer Liste im mod/chg möglich?

      Nun bin ich immer noch am lösen des mod - chg- Problems im Zusammenhang mit eigenen Formularen, die nicht alle Datenfelder enthalten und auch nicht alle Feldvariablen als hidden-Fields im HTML-Code enthalten sollen(dürfen aus Sicherheitsgründen).
      Es darf aber auch kein nicht im Formular stehender Inhalt in dem Datensatz, für den die Aktion ausgeführt wird geändert werden und nach dem mod/chg im Script mit den neuen Werten ohne ein get zur Verfügung stehen!
      (das macht es aber mittels mod undef db; komischerweise ist danach unter Verwendung der Werte des Hashs %_put nach dem mod/chg put komplett voll mit den Feldvariablen und zugehörigen Datensatzwerten und verändert die "Eingangswerte". Das darf aber in meinem Fall nicht sein!
      Kann man an mod / chg eine Liste bzw. Key-Wertpaare aus einem Hasgh übergeben - so in der Art:

      mod $Id==!$dsn [forach ($schlüssel,$wert) %_hash], $dbname;
      

      vielleicht kann ich dann das Prob lösen, indem in den Hash die Schlüssel-Wertpaare aus %_get geschrieben werden, die geändert werden sollen (mhm nur kommen geleerte Feldwerte halt nicht mit an.... shit, da geht mod schon mal wieder nicht, also dann doch chg...)
      Für nen Tipp wäre ich sehr dankbar
      Ruben

     Antworten

    Beitrag von hempelr (1976 Beiträge) am Freitag, 28.Februar.2003, 09:28.
    Re: Keiner da???? @Profis!!!!!! - Übergabe einer Liste im mod/chg möglich?

      Keiner da oder alles geheim? ;-)
      Bitte nochmal um Tipp dazu - wie Hash oder Liste an mod/chg zu übergeben ist.
      Danke!
      Ruben

     Antworten

    Beitrag von Sander (8133 Beiträge) am Freitag, 28.Februar.2003, 09:36.
    Re: Keiner da???? @Profis!!!!!! - Übergabe einer Liste im mod/chg möglich?

      mod "...",[@list],"dbname";
      

      trozdem werden felder die in @list leer sind nicht leer gemacht.

      Sander

     Antworten

    Beitrag von hempelr (1976 Beiträge) am Freitag, 28.Februar.2003, 10:18.
    Re: Keiner da???? @Profis!!!!!! - Übergabe einer Liste im mod/chg möglich?

      Danke Sander -
      bin grad am testen obs vielleicht so geht:
      $chg_strg = join ',' @chg_list;
      mod "..." [$chg_strg], dbname;
      wobei @chg_list aus dem %_get und in ner while get_next schleife auf die dbname.fields aufgebaut wird 
      
      also so:
      get "Id==*", "$db_name.fields", "chghash";
      while (get_next(chghash))
      { $cnt_chglist++;
        push @chg_list, $Field, $_get{$Field} if defined $_get{$Field};
      }
      
      Müßte doch eigentlich gehen, oder wird beim join kein Leerstring eingebaut?
      Ruben

     Antworten

    Beitrag von Sander (8133 Beiträge) am Freitag, 28.Februar.2003, 11:50.
    Re: Keiner da???? @Profis!!!!!! - Übergabe einer Liste im mod/chg möglich?

      nein, das geht nicht mit string.
      [...]
      baut eine referenz auf eine liste also muß da drin auch ne liste sein ;-)

     Antworten

    Beitrag von Sander (8133 Beiträge) am Freitag, 28.Februar.2003, 12:45.
    Re: Keiner da???? @Profis!!!!!! - Übergabe einer Liste im mod/chg möglich?

      also Ablauf
      nach dem abschicken:
      ## ds holen
      get "Id=übergebeneid"..
      ## alle geholten durchlaufen
      foreach (keys %_loop){
         ## wenn das feld in put nicht exisiert, vom orginal übernehmen
         if(!exists($_put{$_})){
          $_put{$_}=$_loop{$_};
         }
         ## der rest wird leer weggespeichert
         ## wenn das aus dem get geleert werden soll:
         $$_="";
         delete($_loop{$_});
      }
      chg "id==$übegebeneid",undef,"dbname";
      

      Sander

     Antworten

    Beitrag von hempelr (1976 Beiträge) am Freitag, 28.Februar.2003, 14:15.
    Re: Keiner da???? @Profis!!!!!! - Übergabe einer Liste im mod/chg möglich?

      erst mal Danke Sander.
      Diesen Gedanken hab ich schon in ähnliche Richtung gehabt, aber irgendwie scheint es nicht zu funzen, den Hash %_put "manuell" zur Laufzeit zu initialisieren und zu belegen.
      Im %_loop steht aber ja alles drin, was irgendwo mal aus ner DB geholt wurde - das sind bei mir so an die 80 Schlüssel-Wertpaare - bin mir nicht sicher, ob das der richtige Hash für das Auslesen der (zu ändernden Feld)Werte ist...
      Ich übergebe das Form mit Feldnamen "Feldname=", da ist das ganze Zeugs dann in %_get.
      Die manuelle Erstellung von %_put im Script mit den Werten aus %_get (übrigens auch aus %_loop - grad getestet) interessiert das mod/chg überhaupt nicht, beim mod passiert nix, beim chg wird der Datensatz gekillt (Also die ID bleibt erhalten, alles andere ist komplett undef, auch die Datumsfelder!!!)
      Überpüft habe ich unmittelbar vorm mod ob überhaupt was und was im %_put steht, es sind genau die Schlüssel-Wertpaare wie ich sie als Feldname-Feldinhalt im DS haben will, aber aber, baseportal kümmert sich überhaupt nicht drum, daß %_put vorhanden ist.
      Vielleicht hilft ja, ein "Dummy-Feld" im Formular mit der Namenskonvention "Feldname:=", ich werd das mal noch probieren. Hauptsache nur, daß die Modifikationen vom %_put dann auch richtig gemacht werden, naja, mal sehn.....
      Nochmal Danke für die Zeit, die du dir für mich genommen hast
      Ruben

     Antworten

    Beitrag von Sander (8133 Beiträge) am Freitag, 28.Februar.2003, 14:55.
    Re: Keiner da???? @Profis!!!!!! - Übergabe einer Liste im mod/chg möglich?

      wenn du delete(%_loop) vor dem get machst, ist es erst mal leer.
      um einen selbst geschriebenen %_put zu speichern muß unbeding $_put{_amount}=1; mit rein, sonst wirds nicht.

      Sander

     Antworten

    Beitrag von hempelr (1976 Beiträge) am Freitag, 28.Februar.2003, 15:57.
    Re: Keiner da???? @Profis!!!!!! - Übergabe einer Liste im mod/chg möglich?

      jepp - so in etwa, vielen Dank - hab nochmal gecheckt und probiert - ich glaub so kommen wir der Sache näher (das %_loop kann ich nicht leeren, weil Subs weiter unten da Werte draus brauchen und dynamische Subs mit nem eval auf weit vorher in nem includierten Stammtemplate geholte Datenfelder machen.
      Ja, gut, das mit dem _amount hatte mir Claus schon gesagt - ich habs vor lauter Hektik heute dann leider dummerweise wieder vergessen gehabt, daher offensichtlich die Nullaktion im mod/chg (ASCHE auf MEIN HAUPT!!!!)
      So, es scheint fast zu funzen wie ich will - allen Helfern ein großeß Dankeschön von ganzem Herzen!!!!!
      Ruben

     Antworten

    Beitrag von Sander (8133 Beiträge) am Freitag, 28.Februar.2003, 16:19.
    Re: Keiner da???? @Profis!!!!!! - Übergabe einer Liste im mod/chg möglich?

      das loop kannst du ja vorher mal fix umspeichern...dann wieder zurück

     Antworten

    Beitrag von hempelr (1976 Beiträge) am Freitag, 28.Februar.2003, 11:24.
    geht nicht - Re: Keiner da???? @Profis!!!!!! - Übergabe einer Liste

      Hallo, Sander,
      nochmal dazu
      Er übernimmt keine Änderungen, überhaupt keine, weder neue Werte als auch keine leeren Werte.
      Die Rahmenbedingungen wie ID des zu ändernden DS und der Db-name stimmen, der String, der an mod übergeben wird auch, aber niente - keine Aktion!
      Hier mal die entscheidenden Code-Stücke:
      ---- schnipp
      get "Id==*", "$db_name.fields", "chghash";
      while (get_next(chghash))
      { $cnt_chglist++;
        push @chg_list, "\"".$Field."\"", "\"".$_get{$Field}."\"" if defined $_get{$Field};    
        $a_debug.= "\@chg_list nach Durchl. Nr. $cnt_chglist: @chg_list<br>";
      }
      .....
                $chg_strg = join ", " , @chg_list;           $chg_strg = "[".$chg_strg."]";
      $a_debug.="<span class=dunkel><b>Liste in String zum Ändern für \$db_name($db_name) DS-ID \$dsn($dsn):<br>\$chg_strg($chg_strg)</b></span><br>";
                mod "Id==!$dsn", $chg_strg, "$db_name"; 
      
      --- schnapp
      und hier die Debugausgabe für den String $chg_strg:
      Liste in String zum Ändern für $db_name(nutzer) DS-ID $dsn(8):
      $chg_strg: ["name", "admin", "passwort", "********", "a_frei", "1", "a_art_admin", "2", "a_kalender", "2", "a_nutzer", "2", "Vorname", "Admin", "Nachname", "Nn_Admin", "Strasse", "Strasse", "PLZ", "PLZ", "Ort", "Adminsort", "Telefon", "", "Fax", "", "Mobiltelefon", "", "eMail", "", "n_mod_Name", "admin"]
      Wo liegt denn nun hier das Prob - ich kanns eigentlich nicht begreifen, ist alles (theoretisch) so, wie es dokumentiert ist......
      
      Danke für nen Tipp
      Ruben

     Antworten

    Beitrag von Christoph Bergmann (8110 Beiträge) am Mittwoch, 5.März.2003, 23:33.
    Re: geht nicht - Re: Keiner da???? @Profis!!!!!! - Übergabe einer Liste

      Das geht so nicht:

      mod "Id==!$dsn", $chg_strg, "$db_name";
      

      auch wenn die _Ausgabe_ von $chg_strg so aussieht, wie der Perl-Code der da stehen müsste ist das nicht dasselbe - hier müsstest Du mit "eval" arbeiten - aber das is auch Unsinn, das geht direkter, nämlich indem Du tatsächlich eine Liste aufbaust und keinen String (der wie eine Liste aussieht)

      get "Id==*", "$db_name.fields", "chghash";
      while (get_next("chghash"))
      {
        push @chg_list, $Field, $_get{$Field} if defined $_get{$Field}; 
      }
      chg "Id==!$dsn", \@chg_list, $db_name;
      

      So sollte es funzen ("chg" is nötig um leere Felder auch zu löschen)...

     Antworten

    Beitrag von hempelr (1976 Beiträge) am Samstag, 8.März.2003, 13:21.
    Danke an alle, die geholfen haben, war Re: geht nicht - Re: Keiner da???? @Pr...

      Hallo, erst mal an alle Danke, die irgendwelche Denkanstöße und Lösungsvorschläge gemacht haben, ich habs durch die verschiedenen Ideen und Vorschläge zu ner eigenen Lösung gebracht.
      *Schweißvonderstirnwisch*
      Sowohl ein Teil von Sanders Vorschlag, als auch von Christophs als auch der Anstoß von Claus Christmeier hat letztendlich dazu geführt, daß es jetzt geht.

      @CB - ist die Syntax oben (chg "Id==!$dsn", \@chg_list, $db_name;) als Referenzierung oder als Maskierung zu verstehen?
      @Sander - Knackpunkt war das fehlende $_put{_amount}; aus dem $_loop brauchts gar nichts rauszudröseln, da die Werte nach dem Datensatzholen eh direkt zur Verfügung stehen und "nur" die im $_put geändert werden, die in $_get andere Werte haben (bei Vergleich mit der zugehörigen Fields-DB)....
      @Claus Christmeier  - dein Tipp mit dem "Feldname=" in Forms und dann erst dem Aufbau von $_put aus $_get ist suuuper, so kann man allerhand richtig frei gestalten
      

      Prinzipielle Bitte noch: Kann mal jemand genau die Funktion der BasePortal-internen "Systemhashs" erklären (und vielleicht mit in die Doku aufnehmen), insbesondere wann welcher womit gefüllt und wie die Values verfügbar sind (also bspw. direkt über $varname wie beim $_get wenn was ans Script übergeben wurde) - insbesondere $_sel und $_loop sind recht unverständlich, aber auch $_get und $_put nicht ganz offensichtlich.

      CU
      Ruben

     Antworten


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