emetiel: alter Wert in hidden Feld

Hallo,

Kurz zu den Randbedingungen
   HTML mit eingebetteten ASP Seiten
   PHP und Pearl sind nicht gestattet
   JS ist nicht gewünscht
   IIS6 bzw 7 als Server
   MS Sql DB 2008

Dazu kommt, dass ich zwar HTML und ASP kenne aber nur etwas mehr als Grundkenntnisse habe, also eben keine Experte in beiden bereichen bin. Dummerweise bin ich aber der, der das ganze Übernommen und auch weiter zu entwickeln bzw. zu Pflegen hat.

Wir haben mehrere Seiten in welche auch ASP eingebaut ist.

Auf einer dieser Seiten ist ganz zu beginn unter anderem angegeben:
   sVersion = Request.form("version")

am Ende der ASP Seite steht
   <input type="hidden" name="version" value="<%= sVersion %>">

Dazu gibt es dann innerhalb der Seite noch eine Tabelle in welcher unter anderem das hier steht:
      <td><b>Version:</b></td>
      <td width=400>
        <% call DbConn("open") %>
        <% if Prjkt <> "" and Tprjkt <> "" and ( iStep = "" or iStep = 0 or iStep = 1 ) then %>
          <font color="#dc5132"><b>ACHTUNG:</b><br>
          <%
            call getVersion( myPrjktID )
            if not IdFound then
              response.write("noch keine Version übergeben<br><br>")
              iStep = 0
            else
          %>
            <%
              call checkVersion( myTprjktId, sVersion )
              if VerionExist then
                response.write("eingegebene Version existiert schon, neue Version angeben!<br>")
                iStep = 0
              else
                call CheckVersionNumber( sVersion )
                if not VersionOk and sVersion <> "" then
                  response.write( "Als Versionsnummer bitte nur ""0123456789."" verwenden;<br>Dabei muss mit eine Ziffer sowohl am Anfang, als auch am Ende stehen!<br>" )
                  iStep = 0
                else
                  response.write( sVersion )
                end if
              end if
            end if
            call DbConn("close")
          %>
          <br>
          <input name="vers" size="10">
          <input type="image" src="../Images/OKButton.gif" name="OKPrjInfo">
        <% else %>
          <%= sVers %>
        <% end if %>
        <% call cDbConn() %>
      </td></font>

damit habe ich nun folgendes Problem:
Die Seite ruft sich je nach aktion selber wieder auf. Dabei werden fast alle Daten richtig behandelt. Ausnahme die Versionsnummer ( sVersion )
Denn immer wenn die Seite erneut aufgerufen wird, wird der neue Wert in sVersion einfach an den alten angehängt. Somit habe ich nach dem 3. Aufruf mit Falsch eingegebenen Versionsnummern diese alle hintereinander in sVersion stehen. ?????

nehme ich jetzt die Zeile
   <input type="hidden" name="version" value="<%= sVersion %>">
am Ende heraus, so stimmt beim ersten eigenaufruf ser Seite zwar meine Versionsnummer, aber eben nicht mehr beim zweiten eigenaufruf :(

  1. Mahlzeit emetiel,

    Dazu kommt, dass ich zwar HTML und ASP kenne aber nur etwas mehr als Grundkenntnisse habe, also eben keine Experte in beiden bereichen bin. Dummerweise bin ich aber der, der das ganze Übernommen und auch weiter zu entwickeln bzw. zu Pflegen hat.

    Mein Beileid. Derartige Probleme sind mein täglich Brot ...

    Auf einer dieser Seiten ist ganz zu beginn unter anderem angegeben:
       sVersion = Request.form("version")

    Das heißt in der Variablen namens "sVersion" wird das gespeichert, was per Postback-Parameter "version" an das Skript übergeben wird. So weit, so gut.

    am Ende der ASP Seite steht
       <input type="hidden" name="version" value="<%= sVersion %>">

    Und hier sollte genau dieser Wert als verstecktes Eingabeelement ausgegeben werden.

    Hast Du mal Wunsch und Wirklichkeit überprüft? D.h. also an der oberen Stelle direkt nach der Wertzuweisung mal eine Debug-Ausgabe des in "sVersion" enthaltenen Werts getätigt?

    Könnte es sein, dass die beiden folgenden Funktionsaufrufe die als Parameter übergebene Variable manipulieren? Standardmäßig wird nämlich AFAIK bei ASP keine Kopie, sondern eine Referenz übergeben:

    call checkVersion( myTprjktId, sVersion )

    call CheckVersionNumber( sVersion )

    Was genau erscheint an dieser Stelle?

    response.write( sVersion )

    nehme ich jetzt die Zeile
       <input type="hidden" name="version" value="<%= sVersion %>">
    am Ende heraus, so stimmt beim ersten eigenaufruf ser Seite zwar meine Versionsnummer, aber eben nicht mehr beim zweiten eigenaufruf :(

    Das sollte eigentlich logisch sein.

    MfG,
    EKKi

    --
    sh:( fo:| ch:? rl:( br:> n4:~ ie:% mo:} va:) de:] zu:) fl:{ ss:) ls:& js:|
    1. Dazu kommt, dass ich zwar HTML und ASP kenne aber nur etwas mehr als Grundkenntnisse habe, also eben keine Experte in beiden bereichen bin. Dummerweise bin ich aber der, der das ganze Übernommen und auch weiter zu entwickeln bzw. zu Pflegen hat.

      Mein Beileid. Derartige Probleme sind mein täglich Brot ...

      Du hast Grundkenntnisse aber bist kein Experte? SCNR :p

      Ich bin glücklicehrweise raus aus der ASP-Todesspirale.

    2. Hallo EKKi, hallo Steel

      Erst einmal Danke für die schnellen Antworten

      Was genau erscheint an dieser Stelle?
                        response.write( sVersion )

      Hier wird die Versionsnummer angezeigt. Und leider nicht nur die zuletzt eingegebene, sondern eben auch die, die beim letzten Versuch eingegeben wurde. Daher ist es mir aufgefallen, das etwas nicht so funktioniert, wie ich es erwartet hatte.

      nehme ich jetzt die Zeile
         <input type="hidden" name="version" value="<%= sVersion %>">
      am Ende heraus, so stimmt beim ersten eigenaufruf ser Seite zwar meine Versionsnummer, aber eben nicht mehr beim zweiten eigenaufruf :(

      Das sollte eigentlich logisch sein.

      Ist es derzeit für mich eben noch nicht, aber das wird schon noch

      Könnte es sein, dass die beiden folgenden Funktionsaufrufe die als Parameter übergebene Variable manipulieren? Standardmäßig wird nämlich AFAIK bei ASP keine Kopie, sondern eine Referenz übergeben:

      Ich behaupte nein.
      Im checkVersion wird lediglich in der DB nachgesehen, ob es die Versionsnummer bereits gibt.
      In checkVersionNumber wird die Versionsnummer daraufhin überprüft, ob sie etwas anderes als Ziffern enthält. Mehr nicht.

      Ich behelfe mir jetzt damit, dass wenn einer der Checks ein false zurückliefert ( also version schon vorhanden bzw. ungültiges Zeichen gefunden ) ich Version = "" eingefügt habe.
      Ist zwar nicht die feine Art aber es geht. ( Fürs erste )

      gruß
      Emetiel

      1. Mahlzeit emetiel,

        Was genau erscheint an dieser Stelle?
                          response.write( sVersion )
        Hier wird die Versionsnummer angezeigt. Und leider nicht nur die zuletzt eingegebene, sondern eben auch die, die beim letzten Versuch eingegeben wurde.

        Darum ging's mir. Es wird also an *dieser* Stelle bereits der falsche Wert angezeigt.

        Was hat Dein Debugging an anderer Stelle (sinnvollerweise jeweils *vor* UND *nach* jeder Verwendung der Variablen "sVersion") ergeben?

        nehme ich jetzt die Zeile
           <input type="hidden" name="version" value="<%= sVersion %>">
        am Ende heraus, so stimmt beim ersten eigenaufruf ser Seite zwar meine Versionsnummer, aber eben nicht mehr beim zweiten eigenaufruf :(

        Das sollte eigentlich logisch sein.

        Ist es derzeit für mich eben noch nicht, aber das wird schon noch

        Wieso nicht? Wenn Du kein entsprechend benanntes verstecktes Eingabeelement in Dein Formular integrierst, kann der Server nach dem Abschicken des Formulars auch keinen entsprechend benannten Wert auswerten und die Variable "sVersion" ist dann selbstverständlich leer.

        Könnte es sein, dass die beiden folgenden Funktionsaufrufe die als Parameter übergebene Variable manipulieren? Standardmäßig wird nämlich AFAIK bei ASP keine Kopie, sondern eine Referenz übergeben:

        Ich behaupte nein.

        Hast Du Deine Behauptung verifiziert? Sinnvollerweise z.B. durch entsprechende

        Response.Write(sVersion)

        jeweils *vor* UND *nach* jedem Auftreten der Variablen ...

        Ich behelfe mir jetzt damit, dass wenn einer der Checks ein false zurückliefert ( also version schon vorhanden bzw. ungültiges Zeichen gefunden ) ich Version = "" eingefügt habe.
        Ist zwar nicht die feine Art aber es geht. ( Fürs erste )

        Von derartiges Flickschustereien kann ich Dir nur *DRINGENDSTST111!!!!EINSELF* abraten ... die holen Dich garantiert irgendwann wieder ein - und meistens genau dann, wenn Du dafür überhaupt gar keine Zeit hast (und vermutlich auch überhaupt nicht mehr weißt, "warum diese depperte Variable jetzt auf einmal schon wieder einen anderen Wert hat"). :-)

        MfG,
        EKKi

        --
        sh:( fo:| ch:? rl:( br:> n4:~ ie:% mo:} va:) de:] zu:) fl:{ ss:) ls:& js:|
        1. Hallo EKKi,

          Was hat Dein Debugging an anderer Stelle (sinnvollerweise jeweils *vor* UND *nach* jeder Verwendung der Variablen "sVersion") ergeben?

          Vor
          sVersion = replace(replace(Request.form("version"), ",", ""), " ", "")
            Wie zu erwarten nix
            Danach den letzten eigegebenen Wert
          Die beiden Replace mache ich weil, auch das hat sich mir noch nicht erschlossen, ohne diese in der Variablen sVersion ein "," steht

          Wieso nicht? Wenn Du kein entsprechend benanntes verstecktes Eingabeelement in Dein Formular integrierst, kann der Server nach dem Abschicken des Formulars auch keinen entsprechend benannten Wert auswerten und die Variable "sVersion" ist dann selbstverständlich leer.

          Danke, wieder was gelernt.

          Ich behaupte nein.
          Hast Du Deine Behauptung verifiziert? Sinnvollerweise z.B. durch entsprechende

          Ja habe ich. Ausgabe vor, in und auch nach den Aufrufen. Da wird nichts an der Variablen verändert. Die erste änderung passiert beim eingeben eines neuen Wertes. Und danach ist sie schon falsch

          Von derartiges Flickschustereien kann ich Dir nur *DRINGENDSTST111!!!!EINSELF* abraten ... die holen Dich garantiert irgendwann wieder ein - und meistens genau dann, wenn Du dafür überhaupt gar keine Zeit hast (und vermutlich auch überhaupt nicht mehr weißt, "warum diese depperte Variable jetzt auf einmal schon wieder einen anderen Wert hat"). :-)

          Ich weiß, dass man das nicht machen sollte, aber ich hab halt derzeit keine andere Lösung( ich kann halt nur PL / SQL ).

          Ich habe mir sVersion jetzt an allen erdenklichen Stellen im Qeullcode ausgeben lassen und verändere sie definitiv nur beim beim Request.Form und im Eingabefeld.

          MfG,
          emetiel

          1. Mahlzeit emetiel,

            Vor
            sVersion = replace(replace(Request.form("version"), ",", ""), " ", "")
              Wie zu erwarten nix
              Danach den letzten eigegebenen Wert
            Die beiden Replace mache ich weil, auch das hat sich mir noch nicht erschlossen, ohne diese in der Variablen sVersion ein "," steht

            Und schon haben wir des Rätsels Lösung:

            Irgendwie scheinst Du es geschafft zu haben, mehrere Formularelemente mit dem gleichen Namen (nämlich "version") zu haben. Beim Auswerten der Postback-Daten macht ASP aus mehreren gleichen Parametern ein entsprechendes Array (bzw. eine Wertliste/Collection, die beim direkten Zugriff als Komma-separierte Liste ausgegeben wird) - anders als z.B. PHP, das nur den letzten übergebenen Parameter als Variable zur Verfügung stellt, wenn man die Namen nicht explizit um "[]" ergänzt.

            Du solltest also (noch einmal) den von ASP erzeugten HTML-Quelltext *gründlich* darufhin untersuchen, wo überall Formularelemente namens "version" vorhanden sind ... und dann ggf. relevante Ausschnitte hier zeigen (oder alternativ online zur Verfügung stellen).

            Ja habe ich. Ausgabe vor, in und auch nach den Aufrufen. Da wird nichts an der Variablen verändert. Die erste änderung passiert beim eingeben eines neuen Wertes. Und danach ist sie schon falsch

            Wo und wie genau findet dieses "Eingeben eines neuen Wertes" statt? Das ist aus dem bisher von Dir gezeigten Code nicht ersichtlich. Vermutlich steht das im Zusammenhang mit dem o.g. Problem.

            Ich habe mir sVersion jetzt an allen erdenklichen Stellen im Qeullcode ausgeben lassen und verändere sie definitiv nur beim beim Request.Form und im Eingabefeld.

            Welches Eingabefeld (s.o.)?

            MfG,
            EKKi

            --
            sh:( fo:| ch:? rl:( br:> n4:~ ie:% mo:} va:) de:] zu:) fl:{ ss:) ls:& js:|
            1. Hi EKKi,

              Und schon haben wir des Rätsels Lösung:
              Irgendwie scheinst Du es geschafft zu haben, mehrere Formularelemente mit »» dem gleichen Namen (nämlich "version") zu haben. Beim Auswerten der
              Postback-Daten macht ASP aus mehreren gleichen Parametern ein

              Wenn das alles ist :)
              Ok ich werde mal sehen ob ich dass finde

              "version" vorhanden sind ... und dann ggf. relevante Ausschnitte hier zeigen (oder alternativ online zur Verfügung stellen).

              Mache ich

              Wo und wie genau findet dieses "Eingeben eines neuen Wertes" statt? Das ist aus dem bisher von Dir gezeigten Code nicht ersichtlich. Vermutlich steht das im Zusammenhang mit dem o.g. Problem.

              Werde ich prüfen und dann ggf hier posten

              MfG,
              emetiel

            2. Hallo EKKi

              Und schon haben wir des Rätsels Lösung:

              Zur Info hier einmal den Sourcecode, natürlich erheblich gekürzt, aber alle relevanten Stellen vorhanden.

              sVersion wird einmal deklariert. Kann es sein, dass ASP durch den zweimaligen aufruf von request.form() aus dieser dann ein array macht?
              Und wenn ja, ist es überhaupt von nöten, zwei response zu machen wo doch die zweite .asp nur in die erste mit eingebettet wird? Würde da nicht einmal genügen und zwar im ersten asp? Oder kennt dann das zweite asp die Werte nicht mehr?

              <%@ Language = VBScript%>
              <%Option Explicit%>
              <%On Error Resume Next%>
              <!-- #include file="includes.asp" -->

              <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
              <html>
                <head>
                  <%
                    'Server Cache der Seite deaktivieren
                    Response.CacheControl = "Private"

              dim iStep
                    dim sVersion
                    sVersion = replace(replace(Request.form("version"), ",", ""), " ", "")
                    iStep    = replace(replace(Request.form("Step"), ",", ""), " ", "")
                  %>

              </head>

              <body class=nav>
                  <a name=CheckIn></a>
                  <form method="post" action="infos.asp#Infos">
                    <% if iStep < 3 then %>
                      <!-- #include file="Anfragen.asp" -->
                    <% else %>
                      <!-- #include file="Mails.asp" -->
                    <% end if %>
                  </form>
                </body>
              </html>

              Anfragen.asp sieht dann in etwa so aus ( wieder kurzform )
              <%
                sVersion = replace(replace(Request.form("version"), ",", ""), " ", "")
                iStep    = replace(replace(Request.form("Step"), ",", ""), " ", "")
              %>
              <table border=0 cellPadding=0 cellSpacing=0 width="100%">
                <thead class=nav>
                  <tr>
                    <td width=100%><font size=1>
                      <%
                        if sVersion = "" or VersionExist then
                          response.write( "<i>Version</i>" )
                        else
                          call CheckVersionNumber( sVersion )
                          if VersionOk then
                            call DbConnection("open")
                            call checkVersion( TvnId, sVersion )
                            call DbConnection("close")

              if not VersionExist then
                              response.write( sVersion )
                              iStep = 2
                            end if
                          end if
                        end if
                      %></font>
                  </tr>
                </thead>
              </table>

              <table border=0 cellPadding=0 cellSpacing=2 width=600>
                <tbody class=info>
                  <tr>
                    <td width=400>
                      <% call DbConnection("open") %>
                      <% if    Projekt     <> ""
                           and Teilprojekt <> ""
                           and ( iStep     =  ""
                            or iStep       =   0
                            or iStep       =   1 ) then %>
                        <font color="#dc5132"><b>ACHTUNG:</b><br>
                        <%
                          call getVersion( iTvnId )
                          if not VersionFound then
                            response.write("noch keine Version übergeben<br><br>")
                            iStep = 0
                          else
                        %>
                          <% if sVersion = "" or VersionExist then %>
                            <script language="JavaScript">
                              <!--
                                parent.nav.nav2.location = "../navleiste.asp";
                              // -->
                            </script>
                          <% end if %>
                          <%
                            call checkVersion( iTvnId, sVersion )
                            if VersionExist then
                              response.write("Version existiert, neue Version melden!")
                              iStep = 0
                            else
                              call CheckVersionNumber( sVersion )
                              if not VersionOk and sVersion <> "" then
                                response.write( "Versionsnummer nur aus Ziffern<br>" _
                                                 mit einer Ziffer beginnen und enden!" )
                                iStep = 0
                              else
                                response.write( sVersion )
                              end if
                            end if
                          end if
                        %>
                        <br>
                        <input name="version" size="10">
                        <input type="image" src="../Images/ValueOK.gif" name="OKPrjInfo">
                      <% else %>
                        <%= sVers %>
                      <% end if %>
                      <% call DbConnection("close") %>
                    </td></font>
                  </tr>
                </tbody>
              </table>

              <!-- Formularelemente speichern -->
              <input type="hidden" name="version" value="<%= sVersion %>">
              <input type="hidden" name="Step" value="<%= iStep %>">

              mfg
              emetiel

              1. Mahlzeit emetiel,

                sVersion wird einmal deklariert. Kann es sein, dass ASP durch den zweimaligen aufruf von request.form() aus dieser dann ein array macht?

                Nein - wieso sollte? Du weist der Variablen "sVersion" schließlich zweimal einen Wert zu. Bei der zweiten Zuweisung wird der alte enthaltene Wert schlicht und ergreifend überschrieben:

                sVersion = replace(replace(Request.form("version"), ",", ""), " ",

                sVersion = replace(replace(Request.form("version"), ",", ""), " ", "")

                Was ich meinte - und worauf ich Dich auch bereits hingewiesen habe - ist das zwei- bzw. mehrmalige Vorkommen von Formularelementen mit dem selben Namen:

                <input name="version" size="10">

                <input type="hidden" name="version" value="<%= sVersion %>">

                Dadurch wird beim Auswerten des Postbacks von ASP ein entsprechendes Array angelegt und in der Form-Collection zur Verfügung gestellt. Du könntest darauf mittels Request.Form("version")(1) bzw. Request.Form("version")(2) zugreifen. Beim direkten Zugriff auf Request.Form("version") werden Dir dann einfach alle Werte des Arrays als Komma-separatierte Liste zur Verfügung gestellt.

                Wozu integrierst Du überhaupt ein verstecktes Formularfeld, wenn doch ein entsprechend benanntes Texteingabefeld vorhanden ist?

                Der Code ist jetzt klar - es fehlen noch der fachliche Hintergrund und das "Warum" ...

                Und wenn ja, ist es überhaupt von nöten, zwei response zu machen wo doch die zweite .asp nur in die erste mit eingebettet wird?

                Nein.

                Würde da nicht einmal genügen und zwar im ersten asp?

                Ja.

                Oder kennt dann das zweite asp die Werte nicht mehr?

                Doch.

                Generell ist Dein Code-Aufbau IMHO stark überarbeitungswürdig. Grundsätzlich ist die strikte Verwendung des EVA-Prinzips empfehlenswert. Sammle also erst alle von extern kommenden Parameter ein und validiere sie.

                Sind keine Fehler aufgetreten, verarbeite die Daten und bereite die Ausgabe vor ... das bedeutet, dass Du das, was angezeigt werden soll, in entsprechenden Variablen zusammenstellst. Ein Response.Write() hat jedoch innerhalb der Verarbeitung *ABSOLUT GAR NICHTS* verloren.

                Am Schluss nimmst Du die Ausgabe vor - sinnvollerweise durch Templates, in die die variablen Teile lediglich noch eingefügt werden, oder durch Funktionen, die ein valides und stabiles HTML-Gerüst erzeugen.

                MfG,
                EKKi

                --
                sh:( fo:| ch:? rl:( br:> n4:~ ie:% mo:} va:) de:] zu:) fl:{ ss:) ls:& js:|
                1. Hallo EKKi,

                  Nein - wieso sollte? Du weist der Variablen "sVersion" schließlich ...

                  Ok

                  Was ich meinte - und worauf ich Dich auch bereits hingewiesen habe - ist »» »»           <input name="version" size="10">

                  <input type="hidden" name="version" value="<%= sVersion %>">
                  Dadurch wird beim Auswerten des Postbacks von ASP ein entsprechendes Array angelegt und in der Form-Collection zur Verfügung gestellt

                  Wozu integrierst Du überhaupt ein verstecktes Formularfeld, wenn doch ein entsprechend benanntes Texteingabefeld vorhanden ist?

                  Weil ich wie erwähnt kein Profi diesbezüglich bin übernehme was vorhanden ist und versuche das ganze ein wenig anzupassen. Da es schon einige Hidden Felder gab, dachte ich ich benötige für meine Versionsnummer auch eines

                  Und wenn ja, ist es überhaupt von nöten, zwei response zu machen wo »» Nein.
                  Würde da nicht einmal genügen und zwar im ersten asp?
                  Ja.
                  Oder kennt dann das zweite asp die Werte nicht mehr?
                  Doch.

                  Ok dann passe ich das schon mal an

                  Der Code ist jetzt klar - es fehlen noch der fachliche Hintergrund und das "Warum" ...
                  Generell ist Dein Code-Aufbau IMHO stark überarbeitungswürdig. Grundsätzlich ist die strikte Verwendung des EVA-Prinzips empfehlenswert. Sammle also erst alle von extern kommenden Parameter ein und validiere sie.

                  Hier darf ich leider nichts verändern. Also alt optik = neu optik. Nur das beschaffen der Daten soll angepasst werden, Cookies und pearl entfernt werden.
                  Das heißt ich zeige ein Pulldown an in welchem alle Projekte stehen und nach der auswahl eines solchen wird dieses als Text angezeigt.
                  Jetzt zeige ich in einem Pulldown alle Teilprojekte an und nach auswahl wieder anzeige als Text.
                  Nun darfst Du eine Version eingeben. Dies ist die erste Eingabe, die validiert werden muss. Da alles andere ja aus der Datenbank kommt.
                  Ist die Versionsnummer OK wieder als Text anzeigen. Und immer schön die Auswahlfelder durch Textfelder ersetzen. Daher die response.write auch innerhalb den Eingaben.

                  Sind keine Fehler aufgetreten, verarbeite die Daten und bereite die Ausgabe vor ... das bedeutet, dass Du das, was angezeigt werden soll, in entsprechenden Variablen zusammenstellst. Ein Response.Write() hat jedoch innerhalb der Verarbeitung *ABSOLUT GAR NICHTS* verloren.

                  Am Schluss nimmst Du die Ausgabe vor - sinnvollerweise durch Templates, in die die variablen Teile lediglich noch eingefügt werden, oder durch Funktionen, die ein valides und stabiles HTML-Gerüst erzeugen.

                  Das ganze soll eben nur "mal eben schnell" angepasst werden. Für eine Neuentwicklung, wenn wir sie denn machen dürfen dann acuh mit optischen Änderungen, werde ich Deine Tipp berücksichtigen und hoffentlich auch umsetzen dürfen. Wir haben hier nämlich ein paar Regeln zuviel :((

                  MfG und besten Dank,
                  emetiel

                  1. Mahlzeit emetiel,

                    Das heißt ich zeige ein Pulldown an in welchem alle Projekte stehen und nach der auswahl eines solchen wird dieses als Text angezeigt.
                    Jetzt zeige ich in einem Pulldown alle Teilprojekte an und nach auswahl wieder anzeige als Text.
                    Nun darfst Du eine Version eingeben. Dies ist die erste Eingabe, die validiert werden muss. Da alles andere ja aus der Datenbank kommt.

                    An dieser Stelle bist Du leider dem am weitesten verbreiteten Irrtum im Bereich Web-Entwicklung unterlegen - wie eigentlich alle Anfänger bzw. "Noch-nicht-so-weit-Fortgeschrittenen": nur weil Du in *irgendeinem* "vorherigen" Formular Werte aus einer Datenbank ausgelesen und damit Optionen einer Auswahlliste dargestellt hast, aus denen der Benutzer dann eine auswählen soll, bedeutet das noch lange nicht, dass in einem "späteren" Formular auch *nur* einer dieser Werte als GET- oder POST-Parameter auftaucht ... es gibt im Bereich HTTP kein "vorher" und "nachher". Jedes Server-seitige Skript kann mit beliebigen Parametern angesprochen werden. Du kannst nicht kontrollieren, woher diese Anfragen stammen - ob sie durch das von Dir zur Verfügung gestellte Formular generiert wurden, ob sich jemand dieses Formular z.B. lokal als HTML-Datei gespeichert, den Quelltext manipuliert und "einfach mal probiert" hat oder ob irgendein automagisiertes SPAM-Skript einfach mal alle möglichen URLs abklappert.

                    Merke: "ALL INPUT IS EVIL!"

                    Immer.

                    Du kommst *NIEMALS* daran vorbei, *ALLE* aus externen und damit per se unsicheren Quellen stammende Informationen (und dazu gehören insbesondere GET- und POST-Parameter) auf Gültigkeit zu überprüfen.

                    Das ganze soll eben nur "mal eben schnell" angepasst werden.

                    Ja - derartige Anforderungen kenne ich ...

                    Für eine Neuentwicklung, wenn wir sie denn machen dürfen dann acuh mit optischen Änderungen, werde ich Deine Tipp berücksichtigen und hoffentlich auch umsetzen dürfen.

                    Wenn nicht, solltest Du Deine(n) Vorgesetzten über die entsprechenden Risiken informieren.

                    Wir haben hier nämlich ein paar Regeln zuviel :((

                    Auch das kenne ich ... ;-/

                    MfG,
                    EKKi

                    --
                    sh:( fo:| ch:? rl:( br:> n4:~ ie:% mo:} va:) de:] zu:) fl:{ ss:) ls:& js:|
                    1. Hi EKKi,

                      An dieser Stelle bist Du leider dem am weitesten verbreiteten Irrtum ...
                      Merke: "ALL INPUT IS EVIL!"

                      Immer.

                      Du kommst *NIEMALS* daran vorbei, *ALLE* aus externen und damit per se unsicheren Quellen stammende Informationen (und dazu gehören insbesondere GET- und POST-Parameter) auf Gültigkeit zu überprüfen.

                      Ok dann validiere ich alle Daten. Und zwar immer. Sollte einfach sein, dass zu beherzigen.

                      Jedoch verstehe ich nicht ganz, wie man die Daten noch manipulieren kann. Aber das führt hier wohl zu weit und soll auch nicht Bestandteil dieser Hilfe werden.

                      Hast Du evtl. noch einen Tipp, wo ich mir ansehen kann, wie man Navigation über Tabs ansehen kann?

                      mfg
                      emetiel

                      1. Mahlzeit emetiel,

                        Jedoch verstehe ich nicht ganz, wie man die Daten noch manipulieren kann. Aber das führt hier wohl zu weit und soll auch nicht Bestandteil dieser Hilfe werden.

                        Oooch, wir schaffen's schon, den Thread noch ein wenig in die Länge zu ziehen. ;-)

                        Nimm z.B. mal folgendes Formular ...

                        <html>
                        <head>
                        <title>Total fieses Hack-Formular</title>
                        </head>

                        <body>
                          <form action="...">
                          <ul>
                            <li><input type="text" name="version" value="Voll krass böse Daten ..."></li>
                            <li><input type="text" name="Step" value="Noch mehr fiese Daten!"></li>
                          </ul>
                          <input type="submit" name="hacken" value="Hacken!">
                          </form>
                        </body>
                        </html>

                        ... passe das Formularziel so an, dass die Daten an das ASP-Skript, das Du hier gezeigt hast, geschickt werden, und schau Dir an, was passiert.

                        Nochmal (weil man es nicht oft genug sagen kann): Du kannst *NIEMALS* davon ausgehen, dass von extern Daten kommen, auf die Du Dich verlassen kannst (in bezug auf ihren Datentyp und ihren Inhalt)!

                        Hast Du evtl. noch einen Tipp, wo ich mir ansehen kann, wie man Navigation über Tabs ansehen kann?

                        Was genau meinst Du damit?

                        MfG,
                        EKKi

                        --
                        sh:( fo:| ch:? rl:( br:> n4:~ ie:% mo:} va:) de:] zu:) fl:{ ss:) ls:& js:|
  2. Hiho!

    call checkVersion( myTprjktId, sVersion )
    call CheckVersionNumber( sVersion )

    Da kommt sVersion vor ohne das ich weiss, was damit passiert. Pruefe also checkVersion() und CheckVersionNumber().

    --
    "Die Diebesgilde beklagte sich darueber, dass Mumm in aller Oeffentlichkeit behauptet hatte, hinter den meisten Diebstaehlen steckten Diebe."
          - T. Pratchett