alter Wert in hidden Feld
emetiel
- programmiertechnik
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 :(
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
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.
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
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
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
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
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
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
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
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
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
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
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
Hiho!
call checkVersion( myTprjktId, sVersion )
call CheckVersionNumber( sVersion )
Da kommt sVersion vor ohne das ich weiss, was damit passiert. Pruefe also checkVersion() und CheckVersionNumber().