2010-07-30 19 views
1

J'ai cette requête d'insertion à faire, mais elle ne fonctionne pas. Peu importe le nombre de variations et les variations de variations que j'essaie, il y a toujours un problème avec mon code.Requête sur la chaîne SQL

Set rstSimple = cnnSimple.Execute("insert into SALT (Email, Username, FirstName, LastName, ActivationCode, TransactionID, ClientID) VALUES (<%=Request.QueryString(payer_email)%>, <%=Request.QueryString(payer_email)%>, <%=Request.QueryString(first_name)%>, <%=Request.QueryString(last_name)%>, <%=Request.QueryString(hash)%>, <%=Request.QueryString(txn_id)%>, <%=Request.QueryString(client_id)%>)") 

Je ne comprends pas ce que son problème est le suivant: il ne cesse de dire:

Microsoft VBScript compilation error '800a0409' 

Unterminated string constant 

/thanks.asp, line 62 

Set rstSimple = cnnSimple.Execute("insert into SALT (Email, Username, FirstName, LastName, ActivationCode, TransactionID, ClientID) VALUES (<%=Request.QueryString(payer_email) 
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------^ 

Note: VBScript & ASP.

Quelqu'un peut-il m'aider à comprendre cela? Je vous remercie.

Répondre

0

Je suppose que les paramètres vous passez à Request.QueryString() devrait être entre guillemets:

Request.QueryString("payer_email") 

MISE À JOUR: Oui, et comme @PHPology suggested, vous devez supprimer les <% %> et simplement utiliser la concaténation de chaîne avec &.

Essayez comme ceci:

Set rstSimple = cnnSimple.Execute("insert into SALT (Email, Username, FirstName, LastName, ActivationCode, TransactionID, ClientID) VALUES ('" & Request.QueryString("payer_email") & "', '" & Request.QueryString("payer_email") & "', '" & Request.QueryString("first_name") & "', '" & Request.QueryString("last_name") & "', '" & Request.QueryString("hash") & "', '" & Request.QueryString("txn_id") & "', '" & Request.QueryString("client_id") & "')") 

Bien que rien à voir avec le problème, votre requête semble aussi être vulnérable aux SQL Injection.

+0

C'est ce que j'ai supposé au début. Mais non, cela me donne une erreur différente. Si je me souviens bien, c'était: "Caractère de fin de ligne attendu". Mais comme je l'ai dit, il y a un problème avec tout. –

+0

Merci. Votre mise à jour a fonctionné, surtout. Maintenant, je continue d'obtenir cette erreur: Nom de colonne "Email" incorrect. Ce qui me fait penser qu'il n'y a pas de colonne E-mail dans la table, mais même après en avoir ajouté une, elle renvoie toujours la même erreur. –

0

Au lieu de faire ...

"foo <%=bar%> foo" 

... essayez ceci:

"foo" & bar & "foo" 
0

Retirez votre <% %> que vous êtes déjà en mode de script ASP. il devrait être quelque chose comme ça pour vos valeurs

'"& Request.QueryString("payer_email")&"', '"& Request.QueryString("first_name")&"', etc, etc 
+0

Merci. Mais maintenant il dit: Erreur de compilation Microsoft VBScript '800a03ee' Attendu ')' /thanks.asp, ligne 62 –

1

Vous devez placer des guillemets autour de vos <% = Request.QueryString (xyz)%> expressions et noms de vos paramètres, et que vous êtes dans le script, vous ne le faites pas <% =%>. par exemple. comme ci-dessous:

insert into ... VALUES ('" & Request.QueryString("payer_email") & "', ...) 

EDIT:

Voici la déclaration complète:

Set rstSimple = cnnSimple.Execute("insert into SALT (Email, Username, FirstName, LastName, ActivationCode, TransactionID, ClientID) VALUES ('" & Request.QueryString("payer_email") & "','" & Request.QueryString("payer_email") & "','" & Request.QueryString("first_name") & "','" & Request.QueryString("last_name") & "','" & Request.QueryString("hash") & "','" & Request.QueryString("txn_id") & "','" & Request.QueryString("client_id") & "')") 

Cela vient avec l'habitude des mises en garde au sujet de l'injection BEWARE SQL.

0

Ce ne répond pas à votre question, mais notez que pour les champs de chaîne vous devrez également citer les chaînes, à savoir

VALUES ('<%=Request.QueryString(payer_email)%>', 

Votre code est également très vulnérable aux attaques par injection SQL - ce sera un problème si votre système est sur Internet.

0

Il y a plusieurs problèmes avec le code:

  • Vous utilisez des balises de serveur (<%= %>) dans le code du serveur.
  • Vous n'avez pas de guillemets autour des noms de clé de chaîne de requête.
  • Vous n'avez pas d'apostrophes autour des valeurs de chaîne dans la requête.
  • Les valeurs de chaîne n'étant pas codées, la requête est largement ouverte pour les attaques par injection SQL.

Vous avez besoin d'une fonction pour coder les chaînes, cela fonctionne pour MS Access et MS SQL Server:

Function SqlEncode(str) 
    SqlEncode = Replace(str, "'", "''") 
End Function 

Ensuite, vous utiliser sur les valeurs de chaîne dans la requête:

Set rstSimple = cnnSimple.Execute(_ 
    "insert into SALT " & _ 
    "(Email, Username, FirstName, LastName, ActivationCode, TransactionID, ClientID) VALUES (" & _ 
    "'" & SqlEncode(Request.QueryString("payer_email")) & "', " & _ 
    "'" & SqlEncode(Request.QueryString("payer_email")) & "', " & _ 
    "'" & SqlEncode(Request.QueryString("first_name")) & "', " & _ 
    "'" & SqlEncode(Request.QueryString("last_name")) & "', " & _ 
    "'" & SqlEncode(Request.QueryString("hash")) & "', " & _ 
    "'" & SqlEncode(Request.QueryString("txn_id")) & "', " & _ 
    "'" & SqlEncode(Request.QueryString("client_id")) & "'" & _ 
    ")")