Avatar billede mysitesolution Nybegynder
11. marts 2003 - 16:18 Der er 13 kommentarer og
1 løsning

send form oplysninger

Hvordan sender man nogen form oplysninger til en php side?

altså fx 'noget'´s value er 'hej'

php siden
<?
echo $noget;
?>
Avatar billede gizp Nybegynder
11. marts 2003 - 16:22 #1
<form action="side.php" method="post">
<input type="text" name="navn">
<input type="submit" value="Send">
</form>
<?
if ($navn) {
echo $navn;
?>
Avatar billede gizp Nybegynder
11. marts 2003 - 16:22 #2
mener du noget ala det?
Avatar billede mysitesolution Nybegynder
11. marts 2003 - 16:29 #3
det er i delphi kategorien... ;)

det er delphi programmet der skal sende oplysningerne
Avatar billede gizp Nybegynder
11. marts 2003 - 16:37 #4
Ja okay, jeg læste kun spg.! Undskyld!
Avatar billede janbb Juniormester
11. marts 2003 - 19:11 #5
Jeg har set at der i delpi 7 (muligvis kun i enterprise) er mulighed for at blande programmeringssprog med browser-target, men jeg skal ikke kunne gøre rede for nærmere detailler da det bare var noget som jeg faldt over og tænkte var flot.Har ikke selv råd til at skaffe mig dette nye tiltag.
Avatar billede mysitesolution Nybegynder
11. marts 2003 - 20:25 #6
man kan jo gøre det med at køre fx hej.php?noget=hej men det ville bare være smartere :)
Avatar billede dkn Nybegynder
12. marts 2003 - 12:38 #7
en metode er at du tager en webbrowser, navigere til din side, i documentcomplete kalder du fill form og til sidst submit.


function SubmitForm(WebBrowser: TWebBrowser; KnapNavn: string): Boolean;
var
  I, J: Integer;
  FormItem: Variant;
begin
  Result := False;
  if WebBrowser.OleObject.Document.all.tags('FORM').length = 0 then
    Exit;
  for I := 0 to WebBrowser.OleObject.Document.forms.Length - 1 do
  begin
    FormItem := WebBrowser.OleObject.Document.forms.Item(I);
    for J := 0 to FormItem.Length - 1 do
    try
      if FormItem.Item(J).Name = KnapNavn then
      begin
        FormItem.Item(j).Click;
        Result := True;
      end;
    except
    end;
  end;
end;

function FillForm(WebBrowser: TWebBrowser; Fieldname: string; Value: string): Boolean;
var
  I, J: Integer;
  FormItem: Variant;
begin
  Result := False;
  if WebBrowser.OleObject.Document.all.tags('FORM').length = 0 then
    Exit;
  for I := 0 to WebBrowser.OleObject.Document.forms.Length - 1 do
  begin
    FormItem := WebBrowser.OleObject.Document.forms.Item(I);
    for J := 0 to FormItem.Length - 1 do
    try
      if FormItem.Item(J).Name = FieldName then
      begin
        FormItem.Item(j).Value := Value;
        Result := True;
      end;
    except
    end;
  end;
end;
Avatar billede mysitesolution Nybegynder
12. marts 2003 - 18:01 #8
lidt ustabil løsning, vil ikke bruge webbrowser
Avatar billede dkn Nybegynder
12. marts 2003 - 19:48 #9
ok. Man kan også gøre det ved hjælp af en tclientsocket, og så poste headeren direkte. Har koden, men 25p :p
Avatar billede mysitesolution Nybegynder
12. marts 2003 - 20:00 #10
så nu er den 55 points
Avatar billede mysitesolution Nybegynder
12. marts 2003 - 20:02 #11
nok..:)
Avatar billede mysitesolution Nybegynder
12. marts 2003 - 20:19 #12
80 det må da være nok
Avatar billede dkn Nybegynder
12. marts 2003 - 21:00 #13
Ok iorden.

Tilføj clientsocket, og opret følgende events:
procedure T...Form.ClientSocket1Write;
procedure T...Form.ClientSocket1Read;
procedure T...Form.ClientSocket1Disconnect;
procedure T...Form.ClientSocket1Error;

Const
  WebServer = '127.0.0.1';
  WebPort  = 80;
  PostAddr  = 'test.asp';

  HTTP_Data =
    'Content-Type: application/x-www-form-urlencoded'#10+
    'User-Agent: Delphi ()'#10+
    'Host: none.com'#10+
    'Connection: Keep-Alive'#10;

type
  T...Form = class(TForm)
    ...
  private
    { Private declarations }
    HTTP_POST  : String;
    FContent    : String;
    FResult    : String;
  public
    { Public declarations }
  end;


// string encoder
function HTTPTran(St : String) : String;
var i : Integer;
begin
  Result:='';
  for i:=1 to length(St) do
    if St[i] in ['a'..'z','A'..'Z','0','1'..'9'] then
      Result:=Result+St[i]
    else if St[i]=' ' then
      Result:=Result+'+'
    else
      Result:=Result+'%'+IntToHex(Byte(St[i]),2);
end;

procedure T...Form.ClientSocket1Write(Sender: TObject;
  Socket: TCustomWinSocket);
begin
  // sender data
  Socket.SendText(HTTP_POST+FContent);
end;

procedure T...Form.ClientSocket1Read(Sender: TObject;
  Socket: TCustomWinSocket);
begin
  // her modtager du resultat
  FResult:=FResult+Socket.ReceiveText;
end;

procedure T...Form.ClientSocket1Disconnect(Sender: TObject;
  Socket: TCustomWinSocket);
begin
  // du ved nu at forbindelsen er lukket, nu kan du se på fresult
end;

procedure T...Form.ClientSocket1Error(Sender: TObject;
  Socket: TCustomWinSocket; ErrorEvent: TErrorEvent;
  var ErrorCode: Integer);
begin
  // undgår socket fejl
  ErrorCode := 0;
end;


procedure T...Form.PostTheForm;
begin
  FResult:='';

  FContent:=
  'Nave='+    HTTPTran('Test person')          +'&'+
  'Address='+ HTTPTran('...')          +'&'+
  'Email='+  HTTPTran('webmaster@none.com') +'&'+
  'B1=Submit'+#10;

  FContent := 'Content-Length: '+IntToStr(Length(FContent))+#10+#10+FContent;

  ClientSocket1.Host := WebServer;
  ClientSocket1.Port := WebPort;
  HTTP_POST := 'POST '+PostAddr+' HTTP/1.0'#10;
  HTTP_Post := HTTP_Post + HTTP_Data;
  ClientSocket1.Open;
end;
Avatar billede mysitesolution Nybegynder
12. marts 2003 - 21:02 #14
plz ligger det ikke op som projekt i zip
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester