DMXzone reCAPTCHA Support Product Page

Solved

ASP integration - initial newCaptcha variable blank

Reported 13 Dec 2011 06:08:24
1
has this problem
13 Dec 2011 06:08:24 Kent Angel posted:
I'm trying to integrate reCaptcha into an ASP form using your extension.

I have followed the Google instructions for Classic ASP here:
code.google.com/apis/recaptcha/docs/asp.html

Using the Google example returns the initial form and validation check works correctly.
eg. 210.247.239.227/captcha2.asp

Replacing the Google ASP script with the DMX code does not bring up the initial form.
eg. 210.247.239.227/captcha1.asp

The "newCaptcha" variable appears to be blank initially, whereas the Google script sets the newCaptcha to "True" by default.

How can the example from Google (code.google.com/apis/recaptcha/docs/asp.html) be modified to work with the DMX code?

Official Solution

Replied 23 Jan 2012 14:55:06
Hi Kent,

First please do not use the the Google ReCAPTCHA samples - they won't work. Stick to the code that our extensions generates.

Second to retain a form field value after the form is submitted is something generic that can be done like this:

add a value to the input field in ASP like this:

<input type="text" name="Email" size="40" value="<%= Response.Form("Email") %>" class="textbox"/>


for PHP it will be something like:

<input type="text" name="Email" size="40" value="<?php echo isset($_POST["Email"]) ? $_POST["Email"] : '' ?>" class="textbox"/>


Greetings,
George

Replies

Replied 13 Dec 2011 09:32:36
13 Dec 2011 09:32:36 Teodor Kuduschiev replied:
Hello Kent,

can you please tell me what do you mean by: "Replacing the Google ASP script with the DMX code" and if you followed the video tutorial about using the extension?
Replied 13 Dec 2011 13:16:32
13 Dec 2011 13:16:32 Kent Angel replied:
captcha2.asp (Google API example) has the following code:

<%@LANGUAGE="VBSCRIPT" CODEPAGE="1252"%>
<
%  recaptcha_challenge_field  = Request("recaptcha_challenge_field")
  recaptcha_response_field   = Request("recaptcha_response_field")
  recaptcha_public_key       = "{hidden}" ' your public key
  recaptcha_private_key      = "{hidden}" ' your private key

  function recaptcha_challenge_writer()

  recaptcha_challenge_writer = _
  "<script type=""text/javascript"">" & _
  "var RecaptchaOptions = {" & _
  "   theme : 'white'," & _
  "   tabindex : 0" & _
  "};" & _
  "</script>" & _
  "<script type=""text/javascript"" src=""http://www.google.com/recaptcha/api/challenge?k=" & recaptcha_public_key & """></script>" & _
  "<noscript>" & _
    "<iframe src=""http://www.google.com/recaptcha/api/noscript?k=" & recaptcha_public_key & """ frameborder=""1""></iframe><>" & _
      "<textarea name=""recaptcha_challenge_field"" rows=""3"" cols=""40""></textarea>" & _
      "<input type=""hidden"" name=""recaptcha_response_field""value=""manual_challenge"">" & _
  "</noscript>"

  end function

  function recaptcha_confirm(rechallenge,reresponse)

  Dim VarString
  VarString = _
          "privatekey=" & recaptcha_private_key & _
          "&remoteip=" & Request.ServerVariables("REMOTE_ADDR") & _
          "&challenge=" & rechallenge & _
          "&response=" & reresponse

  Dim objXmlHttp
  Set objXmlHttp = Server.CreateObject("Msxml2.ServerXMLHTTP")
  objXmlHttp.open "POST", "http://www.google.com/recaptcha/api/verify", False
  objXmlHttp.setRequestHeader "Content-Type", "application/x-www-form-urlencoded"
  objXmlHttp.send VarString

  Dim ResponseString
  ResponseString = split(objXmlHttp.responseText, vblf)
  Set objXmlHttp = Nothing

  if ResponseString(0) = "true" then
     recaptcha_confirm = ""
  else
     recaptcha_confirm = ResponseString(1)
  end if

  end function

  server_response = ""
  newCaptcha = True
  if (recaptcha_challenge_field <> "" or recaptcha_response_field <> "") then
    server_response = recaptcha_confirm(recaptcha_challenge_field, recaptcha_response_field)
    newCaptcha = False
  end if

  %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>Untitled Document</title>
</head>
<body>
<
%response.Write("<p>(server_response: "&server_response&")  (newCaptcha: "&newCaptcha&")</p>")
if server_response <> "" or newCaptcha then %>
	<% if newCaptcha = False then %>
		[h4]CAPTCHA code verification was incorrect![/h4]
	<% end if %>
	<form action="captcha2.asp" method="post">
		<fieldset>
			<label><font color="#FF6600">*</font>Name:</label><br/>
				<input type="text" name="Name" size="40" class="textbox"/><br/>

			<label><font color="#FF6600">*</font>E-Mail:</label><br/>
				<input type="text" name="Email" size="40" class="textbox"/>
		</fieldset>

		<fieldset>
			<%=recaptcha_challenge_writer()%>

			<p><input type="submit" value="Submit" /></p>
		</fieldset>

	</form>
<% else %>
	[h4]CAPTCHA IS CORRECT![/h4]
<%end if%>
</body>
</html>


captcha1.asp (the DMX version) has the same form and conditional if statement in the body, but instead had the DMX ASP script functions/includes inserted as per the "Using DMXzone reCAPTCHA" instructional video.
Here is the code for the DMX version of the form:

<%@LANGUAGE="VBSCRIPT" CODEPAGE="1252"%>
<!--#include virtual="/ScriptLibrary/dmxReCAPTCHA.asp" -->
<
%Dim MM_editAction
MM_editAction = CStr(Request.ServerVariables("SCRIPT_NAME"))
If (Request.QueryString <> "") Then
  MM_editAction = MM_editAction & "?" & Server.HTMLEncode(Request.QueryString)
End If

' boolean to abort record edit
Dim MM_abortEdit
MM_abortEdit = false
%>
<
%' DMXzone reCAPTCHA 1.0.1
Dim theCAPTCHA
Set theCAPTCHA = new dmxReCAPTCHA
theCAPTCHA.PrivateKey = "{hidden}"
theCAPTCHA.PublicKey = "{hidden}"
theCAPTCHA.Construct
%>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>Untitled Document</title>
</head>

<body>

<
%response.Write("<p>(server_response: "&server_response&")  (newCaptcha: "&newCaptcha&")</p>")

if server_response <> "" or newCaptcha then %>

	<% if newCaptcha = False then %>
		[h4]CAPTCHA code verification was incorrect![/h4]
	<% end if %>

	<form action="captcha1.asp" method="post">
		<fieldset>
			<label><font color="#FF6600">*</font>Name:</label><br/>
				<input type="text" name="Name" size="40" class="textbox"/><br/>

			<label><font color="#FF6600">*</font>E-Mail:</label><br/>
				<input type="text" name="Email" size="40" class="textbox"/>
		</fieldset>

		<fieldset>

			<p>&nbsp;</p>
			<%= theCAPTCHA.getControl("white","en") %>
			<p>
				<input type="submit" value="Submit" />
			</p>
		</fieldset>

	</form>

<% else %>

	[h4]CAPTCHA IS CORRECT![/h4]

<%end if%>
	
</body>
</html>


Please note: I have hidden the private/public keys in the code above, but they are both set the same in the actual examples.
Also, some of the code formatting/ASP script block delimeters above are not showing correctly in the forum "code" blocks.

Edited by - Kent Angel on 13 Dec 2011  13:20:21
Replied 23 Jan 2012 14:55:06
23 Jan 2012 14:55:06 George Petrov replied:
Hi Kent,

First please do not use the the Google ReCAPTCHA samples - they won't work. Stick to the code that our extensions generates.

Second to retain a form field value after the form is submitted is something generic that can be done like this:

add a value to the input field in ASP like this:

<input type="text" name="Email" size="40" value="<%= Response.Form("Email") %>" class="textbox"/>


for PHP it will be something like:

<input type="text" name="Email" size="40" value="<?php echo isset($_POST["Email"]) ? $_POST["Email"] : '' ?>" class="textbox"/>


Greetings,
George

Reply to this topic