ASP.NET Zone

Die ASP.NET Community. Alle Antworten rund um Microsoft® Webtechnologien
Willkommen bei ASP.NET Zone. Anmelden | Registrieren | Hilfe | Impressum | ASP.NET Zone Suchplugin

in
Home Blogs Foren FAQ Communities Fotos Downloads

ASP, SQL, Eingabefeld, Abfrage: Leeres Ergebnis

Letzter Beitrag 09-03-2015, 12:17 von Stefan Falz. 3 Antworten.
Beiträge sortieren: Zurück Weiter
  •  09-01-2015, 15:24 225924

    ASP, SQL, Eingabefeld, Abfrage: Leeres Ergebnis


    Liebe Mitglieder,


    ich habe ein Problem mit einer ASP(Classic)-Seite und einer SQL-Abfrage darin.

    Ich möchte aus einem Web-Formular den Wert eines Eingabefelds (username) auslesen und diesen Wert mit einem Eintrag in einer Datenbank (Feld:usernamedb)vergleichen.
    Zum testen soll das Ergebnis (Bei Gleichheit das Feld usernamedb) der SQL-Abfrage ausgegeben werden.


    Name des Eingabefeldes: usrname
    Name des Datenfeldes in der DB: usrnamedb


    Leider funktioniert bei mir die SQL-Anweisung nicht, wenn ich hier den Wert des Eingabefeldes verwenden möchte.
    Dann erhalte ich eine leere Ausgabe; keine Fehlermeldung; sondern nichts. Es scheint alsob die Abfrage funktionieren würde, jedoch keine Übereinstimmung findet.
    Funktioniert NICHT: SQL="SELECT Userrechte.usrnamedb FROM Userrechte WHERE (Userrechte.usrnamedb="&Request.Form("usrname")&""


    Der Name existiert in der Datenbank jedoch.
    Zum testen: Ich erhalte ein Ergebnis, wenn ich statt der Variablen den normalen Fließtext einfüge.
    Sobald ich aber mit dem Eingabefeld arbeite, ist es vorbei.
    Funktioniert: SQL="SELECT Userrechte.usrnamedb FROM Userrechte WHERE (Userrechte.usrnamedb='mustermann')"


    Funktioniert NICHT: SQL="SELECT Userrechte.usrnamedb FROM Userrechte WHERE (Userrechte.usrnamedb="&Request.Form("usrname")&""

    Wo ist mein Fehler?
    Es wird kein Leerzeichen etc. in das Eingabefeld eingegeben; kein Großbuchstaben etc; Die Eingabe ist identisch mit dem Namen in der Datenbank.
    Ausgabe des Wertes des Eingabefeldes direkt funktioniert: Response.Write Request.Form("usrname")


    Code:
    Set db = Server.CreateObject("ADODB.Connection") 'Objektvariable vom Typ ADODB.Connection zum Verbindungsaufbau

    db.Open = "Userrechte" 'Verbindungsaufbau zur DB Userrechte




    'Generierung SQL-Anweisung:

    SQL="SELECT Userrechte.usrnamedb FROM Userrechte WHERE (Userrechte.usrnamedb="&Request.Form("usrname")&""



    'Ausführung der SQL-Anweisung und Speicherung in Recordsetobjektvariablen:

    Set rs = db.Execute(SQL)




    Response.Write rs.Fields("usrname") 'Ansprechen des Datenfeldes usrname der Recordsetobjektvariablen und Ausgabe


    Vielen Danke für Eure Mühe! :-)


  •  09-01-2015, 17:09 225925 Antwort zu 225924

    AW: ASP, SQL, Eingabefeld, Abfrage: Leeres Ergebnis

    Probier es mal damit:

    SQL="SELECT Userrechte.usrnamedb FROM Userrechte WHERE (Userrechte.usrnamedb='"&Request.Form("usrname")&"'"

    Du hast wohl die einfachen Anführungszeichen vergessen.

     

    Gruß Ralf


    Gruß Ralf

    Wenn man keine Ahnung hat ...
  •  09-02-2015, 9:07 225927 Antwort zu 225925

    AW: ASP, SQL, Eingabefeld, Abfrage: Leeres Ergebnis

    Hallo Ralf,

    vielen Dank! Das ist wohl der typische Fehlerklassiker.

    Aberes funktionierte dennoch noch nicht.
    Komischerweise - zufällig herausgefunden - hatte ich dann zweimal die gleiche Code-Zeile an SQL-Anweisung stehen, ausgeführt und es funktionierte.
    Das machte mich wahnsinnig, denn die gleiche Anweisung nicht mehr doppelt: Es funktionierte nicht mehr.

    Habe jetzt die Lösung - falls jemand ebenso mal vor dem Problem stehen sollte:
    Die Anführungszeichen fehlten, wie Ralf bemerkt, und es fehlten Klammern hinten!


    Diese Zeile funktioniert (auch nicht doppelt):

    sql="SELECT Userrechte.usrnamedb FROM Userrechte WHERE (((Userrechte.usrnamedb)='"&Request.Form("usrname")&"'))"


    Vielen Dank für die Hilfe.

    Max

  •  09-03-2015, 12:17 225928 Antwort zu 225927

    AW: ASP, SQL, Eingabefeld, Abfrage: Leeres Ergebnis

    Hallo Max,

    Du solltest dich dringend über SQL Injection informieren. Mit deiner Art, die Daten (zudem noch ungefiltert) in SQL Statements zu übernehmen, wirst Du dir über kurz oder lang ziemliche Probleme einhandeln.

    Allen Eingaben von außen sollte immer misstraut werden. Sämtliche Werte sollten auf ihren Datentyp und bei Strings zusätzlich auf gefährliche Zeichen hin überprüft und ggfs. abgewiesen oder umgewandelt werden.


    --
    Gruß, Stefan Falz
    Microsoft MVP - Visual Developer ASP/ASP.NET
    ASP.NET Consulting, Development, Coaching

    ASP.NET Zone - Leitfaden für gute Postings

    Xtopia 2008 - Gewinnspiel / Expression Studio und Xtopia Eintrittskarten zu gewinnen
Als RSS Feed in XML ansehen
Powered by Community Server (Commercial Edition)