PDA

Ver la Versión Completa : Html,cgi


Io
28-01-2007, 21:58:03
Saludos al Foro.

Soy nuevo en la creación de páginas web. Quiero enfocar el tema en la creación de formularios y el tratamiento de la información obtenida.
He leido que para el tratamiento de la información recogida por los
formularios se utilizarían los cgi's y/o PHP. He sacado en claro que los
scripts de cgi se puede hacer en Perl,c,etc.

He estado mirando por la red el cómo se enlaza un formulario con un script
cgi, pero no veo como pasan los datos ni como el script actua y devuelve resultados. En fin totalmente perdido.

Alguien me puede aconsejar cómo y por dónde empezar?

Gracias.:D

seoane
28-01-2007, 22:56:14
Un cgi no es mas que un programa que recibe los datos por la entrada estándar y tiene que escribir la respuesta por la salida estándar. Además el servidor puede pasar al cgi otras variables como Variables de Entorno al ejecutar el cgi.

Aunque delphi creo que cuenta con librerías especificas para hacer cgis, un cgi simple se puede hacer con unas pocas lineas de código.

Por ejemplo:

program Prueba;

uses Windows, SysUtils;

procedure StdWrite(Str: String);
var
StdOutput: THandle;
begin
StdOutput:= GetStdHandle(STD_OUTPUT_HANDLE);
if (StdOutput <> INVALID_HANDLE_VALUE) and (StdOutput <> 0) then
FileWrite(StdOutput,PChar(Str)^,Length(Str));
end;

procedure StdWriteln(Str: String);
begin
StdWrite(Str + #13#10);
end;

begin
// Escribimos las cabeceras
StdWriteln('Content-type: text/html');
// Linea en blanco para separar las cabeceras del contenido
StdWriteln(EmptyStr);
// Escribimos el contenido
Writeln('< html >< h1 >Hola mundo< /h1 >< /html >'); // Quita los espacios en blanco
end.


O en este otro ejemplo, que muestra todas las variables de entorno que el servidor le pasa al cgi.

program Prueba2;

uses Windows, SysUtils;

procedure StdWrite(Str: String);
var
StdOutput: THandle;
begin
StdOutput:= GetStdHandle(STD_OUTPUT_HANDLE);
if (StdOutput <> INVALID_HANDLE_VALUE) and (StdOutput <> 0) then
FileWrite(StdOutput,PChar(Str)^,Length(Str));
end;

procedure StdWriteln(Str: String);
begin
StdWrite(Str + #13#10);
end;

function GetEnvironmentStr(Sep: String): String;
var
P: PChar;
Str: String;
begin
Result:= EmptyStr;
P:= GetEnvironmentStrings;
if P <> nil then
begin
Str:= String(P);
while Str <> EmptyStr do
begin
Result:= Result + Str + Sep;
inc(P,Length(Str)+1);
Str:= String(P);
end;
FreeEnvironmentStrings(P);
end;
end;

begin
// Escribimos las cabeceras
StdWriteln('Content-type: text/html');
// Linea en blanco para separar las cabeceras del contenido
StdWriteln(EmptyStr);
// Escribimos el contenido
Writeln(Format('< html >%s< /html >',[GetEnvironmentStr('< br >' + #13#10)])); // Quita los espacios en blanco
end.


También preguntas como envía el navegador los datos al cgi, normalmente se usan formularios para eso. Hay dos métodos GET y POST, el primero manda los diferentes campos codificados en un mismo string. Para obtener ese texto puedes usar la variable de entorno QUERY_STRING, haciendo algo como esto:

function GetEnvVar(Nombre: string): string;
var
Str: PChar;
Len: Integer;
begin
Len:= GetEnvironmentVariable(PChar(Nombre),nil,0);
if Len > 0 then
begin
GetMem(Str,Len+1);
try
GetEnvironmentVariable(PChar(Nombre),Str,Len);
Result:= String(Str);
finally
FreeMem(Str);
end;
end else Result:= EmptyStr;
end;

// Por ejemplo
Writeln(Format('< html >%s< /html >',[GetEnvVar('QUERY_STRING')])); // Quita los espacios en blanco


El método POST, sin embargo puede mandar cualquier tipo de información, texto, imágenes, archivos, etc. y el cgi lo recibe a través de su entrada estándar, pero eso ya es otra historia :) , para empezar creo que esto es suficiente.

roman
29-01-2007, 01:01:56
Yo más bien comenzaría por definir si quiere usar delphi para sus páginas web y tener en cuenta que eso lo restringe a servidores windows. De no ser así pues le recomendaría instalarse apache+php y conseguirse un tutorial de php para empezar. A menos que tenga alguna razón muy específica no le recomendaría irse por el lado de perl.

// Saludos

Io
29-01-2007, 21:15:39
Hola.

Efectivamente, debía haber especificado si voy a utilizar delphi.

No tenía previsto utilizar delphi.
Estoy creando un servidor linux, con debian,apache,firebird y despues de seguir buscando por la red, instalaré el soporte php, y a seguir por este camino.


Muchas Gracias por el interés mostrado.:)