Codage de données de formulaire pour SQL Server d’entrée et de sortie au format HTML

Exclusion de responsabilité du contenu obsolète de la base de connaissances

Cet article a été rédigé sur les produits pour lesquels Microsoft n’offre plus aucune prise en charge. Par conséquent, cet article est proposé « en l’état » et ne sera plus mis à jour.

Résumé

Lorsque vous travaillez avec des enregistrements dans une base de données à l’aide de Microsoft Active Server Pages (ASP) pour Internet Information Services (IIS), des erreurs peuvent se produire lorsque le texte n’a pas été formaté correctement pour la création d’une clause de SQL Server.

Par exemple, lorsque vous créez une page ASP pour stocker des informations validées à partir d’un formulaire HTML dans une base de données, vous pouvez voir un message d’erreur semblable au suivant :
Fournisseur Microsoft OLE DB pour les pilotes ODBC (0x80040E14)
[Microsoft] [ODBC Microsoft Access Driver] Erreur de syntaxe (opérateur manquant) dans une expression de requête « < texte SQL > ».
/ < chemin > / < nomfichier.asp >, ligne < nnn >

Plus d'informations

Le message d’erreur se produit lorsque vous essayez d’envoyer un nom avec une apostrophe, (par exemple « o ' Malley ») et insérez ce nom dans une clause SQL Server sans le premier « échappement » il. Cela peut entraîner une clause SQL Server semblable à la suivante :
INSERT INTO Table (txtName VALUES ('O'Malley')
Étant donné que SQL Server utilise l’apostrophe comme un délimiteur de texte, l’apostrophe dans le nom signifie par inadvertance une fin pour les données, ce qui provoque le message d’erreur se produit. Ce texte peut être « ignoré » par deux apostrophes, par exemple :
INSERT INTO Table (txtName VALUES ('O''Malley')
Bien évidemment, il n’est pas idéal imposer l’obligation que tous les utilisateurs sur un site Web entrent deux apostrophes pour chaque apostrophe de votre choix. En outre, lorsque le texte est ensuite extraite à partir d’une base de données, certains caractères de mise en forme sont ignorés pendant HTML lors de l’analyse sur un client (par exemple CR-LF ONGLET et ainsi de suite.)


Une solution ASP

Le code ASP suivant définit deux fonctions qui sont conçues pour gérer certains simple lors de l’analyse des informations d’entrée/sortie de données de SQL Server et peuvent facilement être étendues pour intégrer davantage de fonctionnalités :
  • FixForSQL() analyse une chaîne d’entrée à SQL Server
      Function FixForSQL(tmpText1)    ' define a working variable
    Dim tmpText2
    ' populate our working variable
    tmpText2 = tmpText1
    ' compact a CR-LF sequence as CR to save space
    tmpText2 = Replace(tmpText1,vbCrLf,Chr(13))
    ' replace each apostrophe with two apostrophes
    tmpText2 = Replace(tmpText2,Chr(39),String(2,39))
    ' return the fixed string
    FixForSQL = tmpText2
    End Function

  • FixForHTML() analyse une chaîne de sortie au format HTML
      Function FixForHTML(tmpText1)    ' define a working variable
    Dim tmpText2
    ' populate our working variable
    tmpText2 = tmpText1
    ' replace each CR with a line break tag and CR-LF
    tmpText2 = Replace(tmpText2,Chr(13),"<br>" & vbCrLf)
    ' replace each TAB character with four non-breaking space tags
    tmpText2 = Replace(tmpText2,Chr(9),"&#xa0;&#xa0;&#xa0;&#xa0;")
    ' return the fixed string
    FixForHTML = tmpText2
    End Function

Exemple pratique - application de livre d’or

Les étapes suivantes expliquent comment utiliser les fonctions ci-dessus pour créer une application simple livre d’or à l’aide d’ASP et une base de données Microsoft Access :

  1. Copiez le code ASP suivant et enregistrez-le dans un dossier de votre site Web avec au moins IIS l’accès de script et copiez le code ASP suivant et enregistrez-le dans un dossier de votre site Web avec au moins IIS » script « tout le monde - modifier les autorisations NTFS et l’accès :
    <% @Language="VBScript" %><%
    Option Explicit

    ' define our variables
    Dim strMethod
    Dim strURL
    Dim strTitle
    Dim strSQL
    Dim objCN
    Dim objRS

    ' get some environment variables
    With Request
    strMethod = UCase(.ServerVariables("REQUEST_METHOD"))
    strTitle = UCase(.ServerVariables("SERVER_NAME")) & " Guestbook"
    strURL = LCase(.ServerVariables("URL"))
    End With

    ' open our database connection
    Set objCN = Server.CreateObject("ADODB.Connection")
    objCN.Open "driver={Microsoft Access Driver (*.mdb)};uid=admin;pwd=;" & _
    "dbq=" & Server.MapPath(".\guestbook.mdb")

    ' if the request was a POST then a guest submitted
    If strMethod = "POST" Then
    Dim strName, strComments
    ' get the form data and format it
    strName = FixForSQL(Request.Form("txtName"))
    strComments = FixForSQL(Request.Form("txtComments"))
    ' build the SQL string
    strSQL = "INSERT INTO tblGuestbook (txtName, txtComments)"
    strSQL = strSQL & " VALUES ('" & strName & "','" & strComments & "')"
    ' execute the SQL
    objCN.Execute(strSQL)
    End If

    ' create a SQL string to read all guest entries
    strSQL = "SELECT * FROM tblGuestbook"
    Set objRS = objCN.Execute(strSQL)

    %>
    <html>
    <head><title><%=strTitle%></title></head>
    <body>

    <h1><%=strTitle%></h1>

    <%
    ' only show the guestbook when there are entries
    If Not objRS.EOF Then
    %>

    <table border="1">
    <tr>
    <th>Name</th>
    <th>Comments</th>
    </tr>
    <%
    ' loop through the database
    While Not objRS.EOF
    With Response
    .Write "<tr>" & vbCrLf
    .Write "<td>" & FixForHTML(objRS("txtName")) & "</td>" & vbCrLf
    .Write "<td>" & FixForHTML(objRS("txtComments")) & "</td>" & vbCrLf
    .Write "</tr>" & vbCrLf
    End With
    objRS.MoveNext
    Wend
    %>
    </table>

    <% End If %>

    <form action="<%=strURL%>" method="POST">
    <table>
    <tr>
    <td>Name</td>
    <td><input type="text" name="txtName"><br>
    </tr>
    <tr>
    <td>Comments</td>
    <td><textarea name="txtComments"></textarea><br>
    </tr>
    <tr>
    <td colspan="2"><input type="submit" value="Submit Comments">
    </tr>
    </form>

    </body>
    </html>
    <%
    Function FixForSQL(tmpText1)
    Dim tmpText2
    tmpText2 = tmpText1
    tmpText2 = Replace(tmpText1,vbCrLf,Chr(13))
    tmpText2 = Replace(tmpText2,Chr(39),String(2,39))
    FixForSQL = tmpText2
    End Function

    Function FixForHTML(tmpText1)
    Dim tmpText2
    tmpText2 = tmpText1
    tmpText2 = Replace(tmpText2,Chr(13),"<br>" & vbCrLf)
    tmpText2 = Replace(tmpText2,Chr(9),"&#xa0;&#xa0;&#xa0;&#xa0;")
    FixForHTML = tmpText2
    End Function
    %>

  2. Ouvrez Microsoft Access, créez une nouvelle base de données et puis l’enregistrer en tant que Guestbook.mdb dans le même dossier que la page ASP ci-dessus. Créer une nouvelle table dans la base de données nommé tblGuestbook avec les champs suivants :
    Nom de champType de donnéesTaille du champ
    txtNameTexte50
    txtCommentsMémoN/A
    Enregistrer la table de la base de données et fermez Microsoft Access.
Test de l’Application de livre d’or
  1. Lorsque vous parcourez la page pour la première fois, aucune donnée n’est affichée. Lorsque des informations ont été soumises, toutes les entrées de livre d’or seront affiche. Saisie d’apostrophes dans les noms (par exemple, o ' Brien, O'Sullivan, etc.) ou de contractions (tels que ne pas, ne peut pas et ainsi de suite) sont correctement mis en forme et stockées dans la base de données.
  2. Lorsque des informations ont été soumises, toutes les entrées de livre d’or seront affiche. Saisie d’apostrophes dans les noms (par exemple, o ' Brien, O'Sullivan, etc.) ou de contractions (tels que ne pas, ne peut pas et ainsi de suite) sont correctement mis en forme et stockées dans la base de données.
  3. Saisie d’apostrophes dans les noms (par exemple, o ' Brien, O'Sullivan, etc.) ou de contractions (tels que ne pas, ne peut pas et ainsi de suite) sont correctement mis en forme et stockées dans la base de données.

Références

Microsoft fournit des exemples de programmation à titre d'illustration uniquement, sans garantie expresse ou implicite. Ceci inclut, mais n'est pas limité à, les garanties implicites de qualité marchande ou d'adéquation à un usage particulier. Cet article suppose que vous êtes familiarisé avec le langage de programmation présenté et les outils utilisés pour créer et déboguer des procédures. Les ingénieurs du support technique Microsoft peuvent vous expliquer les fonctionnalités d'une procédure particulière, mais ils ne modifieront pas ces exemples pour fournir des fonctionnalités supplémentaires ou créer des procédures répondant à vos besoins spécifiques.

Pour plus d’informations sur les technologies de script Microsoft, visitez le site web de Microsoft Developer Network :
Propriétés

ID d'article : 246069 - Dernière mise à jour : 9 janv. 2017 - Révision : 1

Commentaires