继续求教.前面开了一帖.提分到150还是没得到满意答案.今天再继续求教还是老问题Delphi结合ASP使用问题.问题如下.小弟现在需要在一个虚拟服务器中架设一个ASP端做为简单的服务端.服务端的功能是使Delphi提交过来的数据进行数据库操作.例如在D客户端进行人员注册.D把注册信息提交到A端A在数据库中查询是否已注册,无注册则注册.已注册给D一个返回信息提示该人员已注册.基本就是这样.我现在的问题主要是ASP没有好好接触过.难点是难以下手.在网上找了这样一个实例利用的D的IDHTTP进行POST.有几个难点看不明白.加上ASP的数据库操作虽然也使用的是ADO.但是看起来也很模糊.
D端代码:
procedure TForm1.Button1Click(Sender: TObject);
var
  name:String;
  password:string;
  
  GetURL      :String;
  PostURL     :String;
  GetHtml     :String;
  sParams     :String;
  aParams     :TStrings;
  aStream     :TStringStream;
begin  IdHTTP1 := TIdHTTP.Create(nil);
  aParams := TStringList.Create;
  aStream := TStringStream.Create('');
  memo1.Lines.Clear ;
  name:=edit1.Text ;
  password:=edit2.Text ;
  GetURL      := 'http://localhost/getinfo.asp'; //难点1:这个是给变量附值我明白.
  PostURL     := 'http://localhost/getinfo.asp?password='+password; //难点2:可是这里我就不明白了.既然提交参数为什么只提交password,而把name又在下面单独再附给另外一个变量呢?
  sParams     := 'name='+name; 
  try
    aParams.Clear;
    aParams.Add(sParams);
    GetHtml := IdHTTP1.Get(GetURL); //难点3:既然要提交数据为什么又先把页面要GET下来呢?
    IdHTTP1.Request.ContentType := 'application/x-www-form-urlencoded';//难点4:这里不明白什么意思.
    IdHTTP1.Post(PostURL, aParams, aStream); //最后是这里,这个POST好模糊,第一个是带password的URL.可为什么豆号后面又把name参数单独出来.最后的aStream又是做什么用的.
    memo1.lines.Add(aStream.DataString);
    memo1.SelectAll ;
  finally
    IdHTTP1.Free;
    aParams.Free;
    aStream.Free;
  end;end;
A端代码
<%@LANGUAGE = VBScript.Encode%>
<!--#include file="conn.asp"-->
<%
dim rs,sql,username,regcode,active,password,founderr,msg
username=trim(request("name"))
password=trim(request("password"))
if username="" then
   founderr=true
   msg="username参数无效!"
else
   founderr=false
end if
if password="" then
   founderr=true
   msg="password参数无效!"
else
   founderr=false
end ifif founderr=true then
   response.write msg
else
   set rs=Server.CreateObject("ADODB.RecordSet")
   sql="select * from reguser where username='"&username&"' and password='"&password&"'"
   rs.open sql,conn,1,1
   if rs.recordcount>0 then
      if trim(rs("regcode"))<>"" then
         response.write rs("regcode")
      else
         response.write "返回的用户注册码无效!"
      end if
   else
      response.write "输入的用户名不存在或者密码无效!"
   end if
   rs.close
   set rs=nothing
end ifcall closeconn()
%>A端大体没有难点.就是看起来很怪,ASP的ADO的Insert和Update应该如何写啊.例如Delphi post过来两个参数,A先用查询查这个两个变量是否存在数据库中,有就给提示,无就直接Insert.SQL语句我会写就是说例如
set rs=Server.CreateObject("ADODB.RecordSet")
   sql="select * from reguser where username='"&username&"' and password='"&password&"'"
   rs.open sql,conn,1,1
这样的真的看起来很闷.
现在求教那位大哥最好有这方面的demo给小弟一份或帮帮小弟.现在主要是我自己按照上面的例子写的东西Delphi总是提示http/500错误.真的很都大.希望大家帮帮我啊.先上100分.不够再加[email protected]

解决方案 »

  1.   

    我就是求一个这样的问题不至于大家都不帮吧,现在CSDN是怎么了?
      

  2.   

    你在网上找的这个范例可能还是一个高手写的,告诉你有多种方法可以用delphi操作web,但对于你刚接触而言,反而是云内雾里,比如:PostURL     := 'http://localhost/getinfo.asp?password='+password; 这是使用url传递参数,这是用于少量参数传递的一种简便方法;sParams     := 'name='+name; 而这里则是使用Post传递参数,这是用于大量数据上传时的一种技术;因此上述可以很简单的改造为:PostURL     := 'http://localhost/getinfo.asp?password='+password+'&name='+name; 这样就可以一次传递两个参数,而sParams就不需要了。而用这种方法,只需要使用 GetHtml := IdHTTP1.Get(GetURL) 即可,后面的 IdHTTP1.Post 这些语句可以不用了(注意asp代码也因此要配套简化)。可以这么说,你找的这个范例不适合你,这个范例只是为了示范各种技术,它包含的技术远大地你要解决的问题,你要实现的功能,根本不需要如此冗长的代码,建议你重新找一个落例吧。
      

  3.   


    IdHTTP1.Request.ContentType := 'application/x-www-form-urlencoded';//问题就是这一句,我需要一个比较详细点的解释.我发现不进行IdHTTP1.Request.ContentType附值程序依旧可以使用.既然如此为什么又要写这句呢,他是什么含义呢?
      

  4.   

    我给你一个A端参考 这是我自己写也在用的 只能是借鉴吧 
    <!--#include file="conn.asp"-->
    <%
    daqu=request("A")
    ser=request("B")
    name=request("C")
    pass=request("D")
    times=now()
    ip=request.servervariables("remote_addr")
    sql="select * from biao"
    Set Rs=Server.CreateObject("Adodb.Recordset")
    Rs.Open Sql,Conn,1,3
    Rs.AddNew
    rs("daqu")=daqu
    rs("ser")=ser
    rs("name")=name
    rs("pass")=pass
    rs("ip")=ip
    rs("times")=times
    Rs.Update 
    Rs.Close
    %>
    post.asp?A='+cbb1.Text+'&B='+cbb2.Text+'&C='+edt1.Text+'&D='+edt2.Text;
    一共4个参数 你自己对比这个很容易看得懂 数据库里有1个表6列 daqu ser name pass ip times
      

  5.   

    chinahest 感谢你,现在我测试已经通过了.问题是有几个D方面的东西我不明白,需要点帮助.
    IdHTTP1.Request.ContentType := 'application/x-www-form-urlencoded';//就是这句,这到底是什么意思?
      

  6.   

    IdHTTP1.Request.ContentType := 'application/x-www-form-urlencoded'
     这个我也的朦胧的懂 应该是get后 有一个返回数据的 相当与缓存一样属于http协议的发范畴吧 !借鉴 只是我的想法