TeamTwo: Schlauerer Kniff gesucht

Hi,

ich habe ein Skript ausgeweitet, das früher damit auskam, sämtliche Vergleichsabfragen (mysql), die die User betrafen, im Cleartext zu vergleichen.

Also: select ... where User="Bert"...

Oder im php-Kontext: If (S_SESSIOn['Username']=="Ernie")...

Nach Ausweitung des Skriptes kann diese Technik nicht mehr mithalten und ich wäre froh, ich hätte gleich immer die UserID (im mysql-Kontext), bzw. Username und Namenszusatz (z.B. Vorname) im php-Kontext.

Leider (oder zum Glück?) ist das Skript inzwischen doch schon größer geworden und ich komme an einer Aufarbeitung des vor Jahren eingepflegten Fehlers nicht mehr vorbei.

Frage: Muss ich tatsächlich alles von Grund auf neu programmieren, was den Usernamen betrifft und auch alle db-Einträge entsprechend updaten oder gibt es irgendwen, der diese Erfahrung schon hinter sich hat und über einen Workaround viel Arbeit hat einsparen können?

Danke für Tips

TT

  1. Hi,

    Frage:

    Gegenfrage: Was willst du eigentlich wissen, bzw. was ist eigentlich dein Problem?

    Aus deiner Beschreibung kann ich das nicht erkennen.

    MfG ChrisB

    --
    “Whoever best describes the problem is the person most likely to solve the problem.” [Dan Roam]
    1. Gegenfrage: Was willst du eigentlich wissen, bzw. was ist eigentlich dein Problem?

      Aus deiner Beschreibung kann ich das nicht erkennen.

      Das tut mir leid. Sorry dafür
      Wo verstehst Du mich nicht? Die Aussage meines Textes scheint mir sehr klar dargelegt zu sein.
      Ich habe versucht, durch Beispiele die Frage zu konkretisieren und ich weiß grad nicht, wo hier etwas missverstänbdlich sein könnte.

      Also sag mir einfach, wasd Du nicht verstehst.

      Danke, TT

  2. Grüße,
    habe ich dich richtig verstanden, dass deine Frage, nach der Effizienz der chinesischen Programmierparadigma ist?
    MFG
    bleicher

    --
    __________________________-

    FirefoxMyth
  3. hi,

    Danke für Tips

    Programmiere das objektorientiert und Du hast einen Haufen Arbeit weniger, falls da mal was geändert werden soll.

    Viele Grüße,
    Horst Haselhuhn

    --
    Orientierungslosigkeit ist subjektiv.
  4. Aloha 'oe,

    Also: select ... where User="Bert"...

    Oder im php-Kontext: If (S_SESSIOn['Username']=="Ernie")...

    Nach Ausweitung des Skriptes kann diese Technik nicht mehr mithalten und ich wäre froh, ich hätte gleich immer die UserID (im mysql-Kontext), bzw. Username und Namenszusatz (z.B. Vorname) im php-Kontext.

    Ich werde aus deiner Beschreibung zwar auch nicht so recht schlau, aber willst du vielleicht einfach eine Variable in den MySQL-Abfrage-String einbauen?
    Sowas wie "SELECT ... WHERE User=" . $_SESSION['Username'] ?

    Gruß, Volker

    --
    „I conclude that there are two ways of constructing a software design: One way is to make it so simple that there are obviously no deficiencies and the other way is to make it so complicated that there are no obvious deficiencies."
    - Tony Hoare
  5. Hi,

    immer an der Wand lang, ist todsicher, der Weg aus dem Garten, dem Irrgarten.

    MfG
    Peter

  6. Und deshalb noch ein paar ergänzende Hinweise. Vielleicht ist es dann verständlicher.

    Ich hatte den Usernamen als eindeutigen Index. Das geht solange gut, solange die Anwendung nicht in einem Familienunternehmen laufen soll ;-) Soll sie nicht, ist aber als WorstCase-Beispiel durchaus geeignet.

    Somit wären in diesem Worstcase-Beispiel alle Dinge, die zuvor vom Usernamen abhängig sind, nicht mehr eindeutig zuornungsbar.

    Nun stehen also in ca. 10 Tabellen der db Usernamen, wo besser eine UserID drin stünde. Und auch innerhalb der Scripte werden Dinge am Usernamen festgemacht, die besser an der UserID festgemacht werden würden.

    Aber so nach und nach denke ich sowieso, dass ich das alles per Handarbeit werde ändern müssen und das es hierfür keinen schlauen Kniff gibt, mit dem ich das umgehen kann.

    Also alle Tabellen Username in ID ändern. In allen Ausagebn, in denen ich zuvor einfach den namen aus der db nehmen konnte, nun also über eine Funktion aus der ID erstmal den namen machen. Und alle Scripte durchgehen und danach suchen, wo der Username entweder ausgegeben oder in die db eigetragen wird.

    Das ist dann schon alles zusammen massig Arbeit, an der ich gerne vorbei geklommen wäre. Doofe Altlasten. :-(

    Grüße, TT

    1. Hallo,

      fuer eine eindeutige Identifizierung benoetigt man natuerlich einen eindeutigen Wert.

      Entweder du modifizierst deine bisherige Anwendung so, dass sie hierfuer die ID eines Benutzers nutzt, oder du machst den Benutzernamen unique. Im letzteren Falle fuegst du bei gleichen Namen zb noch Buchstaben des Nach- oder Vornamen hinzu, so dass eine Eindeutigkeit gewaehrleistet werden kann.

      MfG
      Peter

      1. die ID eines Benutzers nutzt, oder du machst den Benutzernamen unique. Im letzteren Falle fuegst du bei gleichen Namen zb noch Buchstaben des Nach- oder Vornamen hinzu, so dass eine Eindeutigkeit gewaehrleistet werden kann.

        Das ist sicherlich schonmal eine grosse Arbeitserleichterung. Hat den nachteil, dass natürlich grundsätzlich mehr Zeichen bei jedem Tabelleneintrag mitgeschleppt werden als wenn cih die ID nehme, aber den Vorteil, dass Tabellen noch einigermaßen fürs menschliche Auge lesbar bleiben.
        Und natürlich, dass ich jetzt weniger ändern muss, als wenn ich auf ID umschwenke.

        Grüße, TT

        1. Hi,

          Im letzteren Falle fuegst du bei gleichen Namen zb noch Buchstaben des Nach- oder Vornamen hinzu, so dass eine Eindeutigkeit gewaehrleistet werden kann.
          Das ist sicherlich schonmal eine grosse Arbeitserleichterung. Hat den nachteil,

          daß es nicht funktioniert.

          Mein Chef z.B. hat den gleichen Namen wie sein Vater. Und sein Opa hatte auch den gleichen Namen.

          cu,
          Andreas

          --
          Warum nennt sich Andreas hier MudGuard?
          O o ostern ...
          Fachfragen per Mail sind frech, werden ignoriert. Das Forum existiert.
          1. Hallo MudGuard,

            Mein Chef z.B. hat den gleichen Namen wie sein Vater. Und sein Opa hatte auch den gleichen Namen.

            Daran wird es doch nicht scheitern. Der Vorschlag sollte doch nur eine moegliche Richtung zeigen. Und wenn am Ende so was herauskommt wie bei so vielen Email-Adressen (zb Maik87@example.org, Maik31@example.org etc pp), dann ist das auch in Ordnung*.

            * Mit der Praemisse, dass der OP tunlichst nicht die gesamte Applikation umschreiben moechte.

            MfG
            Peter

            1. Hi,

              * Mit der Praemisse, dass der OP tunlichst nicht die gesamte Applikation umschreiben moechte.

              Jetzt muß er halt dafür büßen, daß er es anfangs falsch gemacht hat.

              Wenn er's jetzt wieder nicht grade zieht, fällt er halt irgendwann wieder damit auf die Schnauze ...

              cu,
              Andreas

              --
              Warum nennt sich Andreas hier MudGuard?
              O o ostern ...
              Fachfragen per Mail sind frech, werden ignoriert. Das Forum existiert.
              1. Hallo Andreas,

                * Mit der Praemisse, dass der OP tunlichst nicht die gesamte Applikation umschreiben moechte.
                Jetzt muß er halt dafür büßen, daß er es anfangs falsch gemacht hat.
                Wenn er's jetzt wieder nicht grade zieht, fällt er halt irgendwann wieder damit auf die Schnauze ...

                das ist halt kreativ ;-)

                Freundliche Grüße

                Vinzenz

          2. Das ist sicherlich schonmal eine grosse Arbeitserleichterung. Hat den nachteil,

            daß es nicht funktioniert.

            Warum sollte es nicht funktionieren?
            Ich nehme einfach anstelle der ersten 2 Buchstaben als Anhängsel an den Usernamen die UserID als Anhängsel.
            Gleichzeitig durchlaufen alle Ausageben der Namen eine funktion, die das Anhängsel vor Ausgabe abschneidet.
            Und werde damit keine Probleme haben, solange es keine User gibt, deren Nachnahmen mit einer Ziffer oder Zahl enden.

            Grüße, TT

            1. Und werde damit keine Probleme haben, solange es keine User gibt, deren Nachnahmen mit einer Ziffer oder Zahl enden.

              Grüße, TT

              Andererseits gebe ich zu, dass das Ganze nicht wirklich weniegr Arbeit ist, als den damaligen Fehler nun ordentlich und korrekt auszubügeln ;-)

    2. Hallo

      Nun stehen also in ca. 10 Tabellen der db Usernamen, wo besser eine UserID drin stünde. Und auch innerhalb der Scripte werden Dinge am Usernamen festgemacht, die besser an der UserID festgemacht werden würden.

      Die Usernamen sind, so wie sie sind, einzigartig, sprich es gibt definitiv keine Doppelungen?

      Dann würde ich für die Benutzernamen (und zum einzelnen Benutzer gehörige Daten?) eine eigene Tabelle anlegen, sie mit den Benutzernamen und einer per autoincrement hinzugefügten ID befüllen. In den Tabellen, die Bezug auf die Benutzernamen haben, wird neben dem Feld für die Benutzernamen ein weiteres für die Benutzer-ID angelegt. Unter Bezug auf die vorhandenen Benutzernamen wird jeweils die dazugehörige ID eingetragen.

      Sind diese bezüge vollständig, kannst du daran gehen, die Abfragen von benutzernamen auf die IDs umzustellen. Das Vorgehen ist zumindest "halbautomatisch", erfordert also nicht soviel Zeit, wie die reine Handarbeit.

      Um herumzuprobieren, was wie geht, würde ich lokal mit einem Backup oder mit einem Teilbackup der DB mit einigen Beispieldatensätzen arbeiten.

      Tschö, Auge

      --
      Verschiedene Glocken läuteten in der Stadt, und jede von ihnen vertrat eine ganz persönliche Meinung darüber, wann es Mitternacht war.
      Terry Pratchett, "Wachen! Wachen!"
      Veranstaltungsdatenbank Vdb 0.3
      1. Die Usernamen sind, so wie sie sind, einzigartig, sprich es gibt definitiv keine Doppelungen?

        Klar. Bisher ist das so.

        Dann würde ich für die Benutzernamen (und zum einzelnen Benutzer gehörige Daten?) eine eigene Tabelle anlegen, sie mit den Benutzernamen und einer per autoincrement hinzugefügten ID befüllen.

        Na, die gibts schon jetzt im Original.

        In den Tabellen, die Bezug auf die Benutzernamen haben, wird neben dem Feld für die Benutzernamen ein weiteres für die Benutzer-ID angelegt. Unter Bezug auf die vorhandenen Benutzernamen wird jeweils die dazugehörige ID eingetragen.
        Sind diese bezüge vollständig, kannst du daran gehen, die Abfragen von benutzernamen auf die IDs umzustellen. Das Vorgehen ist zumindest "halbautomatisch", erfordert also nicht soviel Zeit, wie die reine Handarbeit.

        Was findest Du, ist an dieser Lösung anders als an reiner Handarbeit? Genauso habe ich mir die reine Handarbeit ja vorgestellt.

        Grüße, TT

        1. Hallo

          Die Usernamen sind, so wie sie sind, einzigartig, sprich es gibt definitiv keine Doppelungen?

          Klar. Bisher ist das so.

          Dann würde ich für die Benutzernamen (und zum einzelnen Benutzer gehörige Daten?) eine eigene Tabelle anlegen, sie mit den Benutzernamen und einer per autoincrement hinzugefügten ID befüllen.

          Na, die gibts schon jetzt im Original.

          In den Tabellen, die Bezug auf die Benutzernamen haben, wird neben dem Feld für die Benutzernamen ein weiteres für die Benutzer-ID angelegt. Unter Bezug auf die vorhandenen Benutzernamen wird jeweils die dazugehörige ID eingetragen.
          Sind diese bezüge vollständig, kannst du daran gehen, die Abfragen von benutzernamen auf die IDs umzustellen. Das Vorgehen ist zumindest "halbautomatisch", erfordert also nicht soviel Zeit, wie die reine Handarbeit.

          Was findest Du, ist an dieser Lösung anders als an reiner Handarbeit? Genauso habe ich mir die reine Handarbeit ja vorgestellt.

          Ähm, ich überlege, wie ich das Ziel erreichen kann und schreibe ein Skript, das die Arbeit erledigt. Handarbeit ist in dem Moment das "am Kopf kratzen" während des Nachdenkens, das Umsetzen der Ergebnisse in Code und das Starten des Programms. Damit hat sich's aber auch mit der Handarbeit.

          Tschö, Auge

          --
          Verschiedene Glocken läuteten in der Stadt, und jede von ihnen vertrat eine ganz persönliche Meinung darüber, wann es Mitternacht war.
          Terry Pratchett, "Wachen! Wachen!"
          Veranstaltungsdatenbank Vdb 0.3
          1. Ähm, ich überlege, wie ich das Ziel erreichen kann und schreibe ein Skript, das die Arbeit erledigt.

            Echt? Das wäre doch nicht nötig gewesen, aber Danke im Voraus dafür! ;-))

            Ok, ich werd' mich dann jetzt mal selber an die Arbeit machen.

            Danke fürs "mitdenken".

            TT

            1. Hallo

              Ähm, ich überlege, wie ich das Ziel erreichen kann und schreibe ein Skript, das die Arbeit erledigt.

              Echt? Das wäre doch nicht nötig gewesen, aber Danke im Voraus dafür! ;-))

              Ok, ich werd' mich dann jetzt mal selber an die Arbeit machen.

              Danke fürs "mitdenken".

              Du musst jetzt nicht so tun, als würde ich dich verarschen. Wenn du das Schreiben eines Skripts, welches eine Folge von DB-Queries absetzt, als die "umfangreiche Handarbeit" bezeichnest, ist das deine Sache. Mache mich bitte nicht dafür verantwortlich, dass ich unter diesem Begriff etwas anderes verstehe (beispielsweise: umfangreiche Handarbeit, die sich dieses Namen würdig erweist).

              Tschö, Auge

              --
              Verschiedene Glocken läuteten in der Stadt, und jede von ihnen vertrat eine ganz persönliche Meinung darüber, wann es Mitternacht war.
              Terry Pratchett, "Wachen! Wachen!"
              Veranstaltungsdatenbank Vdb 0.3
              1. Hallo

                Ähm, ich überlege, wie ich das Ziel erreichen kann und schreibe ein Skript, das die Arbeit erledigt.

                Echt? Das wäre doch nicht nötig gewesen, aber Danke im Voraus dafür! ;-))

                Ok, ich werd' mich dann jetzt mal selber an die Arbeit machen.

                Danke fürs "mitdenken".

                Du musst jetzt nicht so tun, als würde ich dich verarschen.

                Stop. Mis(t)verständniss!
                Ich weiß, dass Du keinen verarschen wolltest und hab das auch nicht so verstanden. Ich hab kurz geschmunzelt, dass wir haarscharf aneinander vorbei geschrieben haben, obwohl wir in der Lösung vollkommen einer Meinung sind. Und ich bin in Summe mit dem Thread absolut einverstanden, inklusive Deinem Post.

                O.g. war also gar nicht zynisch, sondern Dir zustimmend gemeint. Ok, ich habe Deinen fehlenden Konjunktiv schmunzelnd auf den Arm genommen, aber dafür steht ja der Smilie dahinter, der das als nicht ganz ernst gemeint qualifiziert. Die Anführungszeichen bei "mitdenken" waren, weil ich das Wort nicht ganz passend fand.

                Also alles im grünen Bereich, nicht ärgern.

                Ciao, TT

                1. Hallo

                  Ok, alles geklärt.

                  ... einen habe ich aber noch:

                  Stop. Mis(t)verständniss!

                  Eines der Esse ist an der falschen Stelle (sag ich mal ganz verständnisvoll). ;-)

                  Tschö, Auge

                  --
                  Verschiedene Glocken läuteten in der Stadt, und jede von ihnen vertrat eine ganz persönliche Meinung darüber, wann es Mitternacht war.
                  Terry Pratchett, "Wachen! Wachen!"
                  Veranstaltungsdatenbank Vdb 0.3
                  1. Eines der Esse ist an der falschen Stelle (sag ich mal ganz verständnisvoll). ;-)

                    Ganz schön nett von mir, Dir die Tür zum Konter 'nen Spalt weit aufzuhalten, nicht? ;-)

                    Grüße, TT