Aplicação for WEB

Aqui você poderá oferecer suas Contribuições, Dicas e Tutoriais (Texto ou Vídeo) que sejam de interesse de todos.

Moderador: Moderadores

Avatar do usuário
Itamar M. Lins Jr.
Administrador
Administrador
Mensagens: 7928
Registrado em: 30 Mai 2007 11:31
Localização: Ilheus Bahia
Curtiu: 1 vez

Aplicação for WEB

Mensagem por Itamar M. Lins Jr. »

Ola!
Algumas colocações.
Não existe linguagens for web. Existe HTML que é a única coisa que os navegadores entendem. O resto que os navegadores entendem está dentro do HTML.
Os servidores mais usados no mundo é o Apache e o IIS da Microsoft.
O Apache ou IIS, só sabem conversar com arquivos .HTML e ou uma extensão qualquer que usamos e chamamos de CGI que são pequenos programas para buscar dados em um SGBD/DBF/URL. URL é em em outro lugar na internet. Neste caso o SERVIDOR transfere a tarefa para o programa em questão e apenas espera o RETORNO, que deverá ser em HTML! Porque o retorno vai para o BROWSE (IE/Chrome...) e como já disse eles só sabem ler HTML.
Peguei esse.
http://www.apachelounge.com/download/VC ... 2-VC15.zip
Descompactar na pasta RAIZ \apache24
Para instalar o apache como serviço no windows:
abrir a pasta \apache24\bin
httpd.exe -k install
tela1
tela1

Código: Selecionar todos

23 October 2017
4 November 2017 www.apachelounge.com/Changelog-2.4.html

                                                   Apache Lounge Distribution

                                                    Apache 2.4.29 win32 VC15

Original Home: httpd.apache.org
Binary by: Steffen
Mail: info@apachelounge.com
Home: www.apachelounge.com

Build with:
-----------
nghttp2 1.27.0
apr 1.6.3 
apr-util 1.6.1 with Crypto OpenSSL enabled
apr-iconv 1.2.2
openssl 1.1.0g
zlib 1.2.11 
brotli lib 1.0.1 
pcre 8.41 with JIT, SUPPORT_UTF8 and REBUILD_CHARTABLES enabled
httpd.exe with OPENSSL_Applink and SupportedOS Manifest
libxml2 2.9.7
lua 5.2.4
expat 2.2.5

Build with Visual Studio® 2017 (VC15) x86
--------------------------------------------
Be sure you have installed the Visual C++ Redistributable for Visual Studio 2017.
Download and install, if you not have it already, see:

 http://www.apachelounge.com/download/vc15/


Minimum system required
-----------------------

Windows 7 SP1
Windows 8 / 8.1
Windows 10
Windows Server 2016
Windows Server 2008 R2 SP1 
Windows Server 2012 / R2
Windows Vista SP2

Install
-------


- Unzip the Apache24 folder to c:/Apache24 (that is the ServerRoot in the config).
  Default folder for your your webpages is DocumentRoot "c:/Apache24/htdocs"

  When you unzip to an other location, change ServerRoot in the httpd.conf,
  and change in httpd.conf the Documenroot, Directories, ScriptAlias,
  also when you use the extra folder config file(s) change to your location there. 

Start apache in a DOS box:

>httpd.exe

Install as a service:

>httpd.exe -k install

ApacheMonitor:

Double click ApacheMonitor.exe, or put it in your Startup folder.
Dica:
O ApacheMonitor é um programinha que fica ali no canto vc pode ligar e desligar o apache, isso serve quando estamos fuçando no apache pois toda vez que mexemos no httpd.conf é preciso reiniciar o apache.
Ativando o CGI do apache 2.4, pois o 2.2 tem diferença!
Este já vem ok, não precisa mexer no httpd.conf

SHEBANG
Shebang é primeira linha do arquivo texto .prg .cgi .perl etc... que diz ao Apache que de agora em diante quem vai executar a tarefa é outro programa.
Dentro da pasta \apache\cgi-bin\ crie um arquivo para teste.

Código: Selecionar todos

#!"c:\hb34\bin\hbrun.exe" //O Hb3.4 ignora essa linha. A tal SHEBANG
function main(...)

 
   OutStd("Content-type: text/html" + hb_eol() + hb_eol())
   OutStd("<html><body><h1>Harbour CGI funcionando! </h1>" + hb_eol()+ hb_eol())
   OutStd("</body></html>" + hb_eol())
  
Return nil
Neste caso eu estou criando um arquivo de nome ola.prg
E o harbour é o 3.4 na pasta c:\hb34\bin fácil de entender isso né!? pode ser qualquer harbour/clipper/bat etc... no caso do clipper tem que está compilado como .exe
No Harbour 3.2 ou 3.4 para gerar o .EXE use assim:

Código: Selecionar todos

c:\Apache24\cgi-bin>\hb34\bin\hbmk2 ola.prg -gtcgi
Harbour 3.4.0dev (8d2490f) (2017-11-09 23:13)
Copyright (c) 1999-2017, https://github.com/vszakats/harbour-core/
Compiling 'ola.prg'...
Lines 9, Functions/Procedures 1
Generating C source output to 'C:\Users\ITAMAR~1\AppData\Local\Temp\hbmk_jm0fwh.dir\ola.c'... Done.
tela2
tela2
Pronto agora vc pode criar suas aplicações universais! Só introdução para aprender os conceitos básicos... tem mais coisas, mas não é bicho de 7 cabeças.

Saudações,
Itamar M. Lins Jr.
Saudações,
Itamar M. Lins Jr.
Avatar do usuário
Itamar M. Lins Jr.
Administrador
Administrador
Mensagens: 7928
Registrado em: 30 Mai 2007 11:31
Localização: Ilheus Bahia
Curtiu: 1 vez

Aplicação for WEB

Mensagem por Itamar M. Lins Jr. »

Ola!
Pequenas modificações no ola.prg!

Código: Selecionar todos

#!"c:\hb34\bin\hbrun.exe"
function main(...)

 
   OutStd("Content-type: text/html" + hb_eol() + hb_eol())
   OutStd("<html><body><h1>Harbour CGI funcionando! </h1>" + hb_eol()+ hb_eol())
   OutStd("<form action='/cgi-bin/cadastro.prg' method='get'> ")
   OutStd("<button type='submit' value='enviar'>Botao Enviar</button>" + hb_eol())
   OutStd("</form>")
   OutStd("</body></html>" + hb_eol())
  
Return nil
Mais um arquivo mostrando a maneira de como interagir com o usuário.

Código: Selecionar todos

#!"c:\hb34\bin\hbrun.exe"
function main(...)
Local aStruct 
If !file("agenda.dbf")
   aStruct := {{"nome","c",60,0},;
               {"nasceu","d",8,0}}

   dbCreate( "agenda.dbf", aStruct)

   OutStd("Content-type: text/html" + hb_eol() + hb_eol())
   OutStd("<html><body><h1>Arquivo agenda.dbf criado ! </h1>" + hb_eol()+ hb_eol())
   OutStd("</body></html>" + hb_eol())
Else
   OutStd("Content-type: text/html" + hb_eol() + hb_eol())
   OutStd("<html><body><h1>Arquivo agenda.dbf já existe ! </h1>" + hb_eol()+ hb_eol())
   OutStd("</body></html>" + hb_eol())
EndIf

return nil
Podemos desenhar qualquer coisa e pegar os dados do lado do servidor.
O segredo o Pulo do gato é este aqui!

Código: Selecionar todos

  OutStd("<form action='/cgi-bin/cadastro.prg' method='get'> ")
Em um FORM só existem dois métodos, POST e GET O mais usado é o POST por questões de segurança, pois esconde os dados eles não aparecem na linha do navegador.


Saudações,
Itamar M. Lins Jr.
Saudações,
Itamar M. Lins Jr.
Avatar do usuário
Itamar M. Lins Jr.
Administrador
Administrador
Mensagens: 7928
Registrado em: 30 Mai 2007 11:31
Localização: Ilheus Bahia
Curtiu: 1 vez

Aplicação for WEB

Mensagem por Itamar M. Lins Jr. »

Ola!
Dentro da pasta htdocs mude o arquivo index.html para este ai de baixo.

Código: Selecionar todos

<html>
<body><h1>Harbour CGI em ação</h1>
   <form action='/cgi-bin/gravar.prg' method='post'> 
   Nome: <input type="text" name="cNome"><br>
   Nascido: <input type="date" name="dNascido"><br>
   <button type='submit' value='enviar'>Botao Enviar</button>
   </form>
</body>
</html>
E dentro da pasta \cgi-bin\criar este arquivo: gravar.prg

Código: Selecionar todos

#!"c:\hb34\bin\hbrun.exe"
proc main(...)
Local nLen, cTemp, nRead

OutStd("Content-type: text/html" + hb_eol() + hb_eol())
OutStd("<html><body><h1>Recebido</h1>" + hb_eol()+ hb_eol())
OutStd("<p>Tamanho da string: " , hb_getenv("CONTENT_LENGTH") + hb_eol()) 

IF "POST" $ Upper( hb_GetEnv( "REQUEST_METHOD" ) )
     nLen := val(hb_getenv("CONTENT_LENGTH"))
     cTemp := Space( nLen )
     IF ( nRead := FRead( hb_GetStdIn(), @cTemp, nLen ) ) != nLen
        OutStd("<p>Falha lendo metodo POST  " + hb_ntos( nRead ) + " instead of " + hb_ntos( nLen )  + hb_eol() )    
     ELSE
        OutStd("<p>Post string é: " + cTemp + hb_eol())      
     ENDIF
EndIf

OutStd("</body></html>" + hb_eol())
To be continued!!

Saudações,
Itamar M. Lins Jr.
Saudações,
Itamar M. Lins Jr.
Avatar do usuário
Itamar M. Lins Jr.
Administrador
Administrador
Mensagens: 7928
Registrado em: 30 Mai 2007 11:31
Localização: Ilheus Bahia
Curtiu: 1 vez

Aplicação for WEB

Mensagem por Itamar M. Lins Jr. »

Ola!
No arquivo index.html que está dentro da pasta htdocs tem esta linha:

Código: Selecionar todos

 <form action='/cgi-bin/gravar.prg' method='post'> 
Vai chamar gravar.prg ao clicar no botão "Botao Enviar"
Tela3
Tela3
apache3.png (10.21 KiB) Exibido 5530 vezes
E o servidor apache vai colocar todos os "GET's" vamos dizer assim para vc poderem compreender melhor. Vai enviar para o gravar.prg, esse por sua vez vai ler a variável de ambiente CONTENT_LENGTH que irá informar o tamanho da string, usamos a função do harbour -> hb_getenv("CONTENT_LENGTH").

Código: Selecionar todos

IF "POST" $ Upper( hb_GetEnv( "REQUEST_METHOD" ) )
Nesta linha ai de cima, vamos saber qual é o método, post ou get, se for get usamos outra técnica pois os dados estão na "linha de comando" do navegador.
A função do harbour hb_GetStdIn() pega todos os dados que estão escondidos no método post e grava em uma variável cTemp neste caso.

Código: Selecionar todos

<form action="/cgi-bin/gravar.prg" method="post">
  <label for="Macho">Macho</label>
  <input type="radio" name="cGenero" id="cMacho" value="macho"><br>
  <label for="femea">Femea</label>
  <input type="radio" name="cGenero" id="cFemea" value="femea"><br>
  <label for="outros">Outros</label>
  <input type="radio" name="cGenero" id="cOutros" value="outros"><br><br>
  <label for="nome">Nome</label>
  <input type="text" name="nome" maxlength="60"><br>
  <label for="endereço">Endereço</label>
  <input type="text" name="Endereco" maxlength="40"><br>
  <label for="telefone">Telefone</label>
  <input type="text" name="Telefone" maxlength="60"><br>

  <input type="submit" value="Enviar">
</form> 
Grave este arquivo na pasta htdocs, com o nome teste.html
http://localhost/teste.html
tela4
tela4
apache4.png (8.48 KiB) Exibido 5530 vezes
HTML tem tudo e mais um pouco para desenhar qualquer tipo de tela de qualquer forma com infinitos recursos essa é parte do Designer e é outro assunto.
To be continued...

Saudações,
Itamar M. Lins Jr.
Saudações,
Itamar M. Lins Jr.
Avatar do usuário
Itamar M. Lins Jr.
Administrador
Administrador
Mensagens: 7928
Registrado em: 30 Mai 2007 11:31
Localização: Ilheus Bahia
Curtiu: 1 vez

Aplicação for WEB

Mensagem por Itamar M. Lins Jr. »

Ola!
Aqui mais um interessante ensinamento, para abrir mais as nossas mentes de como desenvolver aplicações, para WEB.
http://wbruno.com.br/opiniao/nao-jquery ... -antes-de/
Da mesma forma sou contra, os caras que começam a aprender linguagens server-side, sem antes terem algum contato com HTML! Isso é básico. Programando web, precisamos de HTML, é a linguagem padrão que vai possibilitar todo o resto. O teu php, asp, java.. vai gerar HTML mais cedo ou mais tarde.

Daí, começam a surgir dúvidas ridículas. O cara vai fazer uma listagem de produtos para uma loja virtual, e não sabe como colocar um produto do lado do outro. Isso é porque ele não sabe HTML, quem dirá CSS! Sem entrar no mérito da divisão de trabalho, FrontEnd, BackEnd.. ao menos um pouco da linguagem do outro, era bacana.
Isso é o que eu estava tentando explicar para os amigos que querem desenvolver aplicações para SmartPhones e ou Web.
Por isso o HARBOUR ou qualquer linguagem, não vai se meter com HTML, cada qual faz aquilo para o qual foi designada.
SmartPhone é HTML + CSS não tem jeito, pode vim mascarado em qualquer ferramenta CASE ou FrameWork. Então é bom saber os conceitos para saber procurar para aprender e não perder tempo.

Saudações,
Itamar M. Lins Jr.
Saudações,
Itamar M. Lins Jr.
MSDN
Usuário Nível 4
Usuário Nível 4
Mensagens: 741
Registrado em: 28 Nov 2003 15:55
Localização: CWB
Contato:

Aplicação for WEB

Mensagem por MSDN »

Além de acessar o link mencionado, quem quiser aprender o que não sabe, entender o que acha que entende, ou se reciclar, deve entrar no site do cara e ver as postagens sobre programação e dicas de livros, muito bom mesmo, fazia muito tempo que não via na internet alguém tão lúcido nesse meio.
Avatar do usuário
ANDRIL
Usuário Nível 5
Usuário Nível 5
Mensagens: 1297
Registrado em: 06 Jul 2004 00:44
Contato:

Aplicação for WEB

Mensagem por ANDRIL »

Itamar, parabéns pelo seu post! Mostrou como se faz, isso é o mais importante, agora cada um desenvolve conforme sua curiosidade e necessidade!
Abraços.
Clipper 5.2e / Blinker 5.1 / Harbour 3.2 / GTwvg
Avatar do usuário
Itamar M. Lins Jr.
Administrador
Administrador
Mensagens: 7928
Registrado em: 30 Mai 2007 11:31
Localização: Ilheus Bahia
Curtiu: 1 vez

Aplicação for WEB

Mensagem por Itamar M. Lins Jr. »

Ola!
Mostrou como se faz, isso é o mais importante,
Tem mais coisas que vou postar, mas agora estou muito ocupado... Mais informações, de como usar o Harbour como CGI e rodar em qualquer coisa.

Código: Selecionar todos

 * TIPCgi Class oriented cgi protocol
 *
 * Copyright 2006 Lorenzo Fiorini <lorenzo.fiorini@gmail.com>
 * Copyright 2003-2006 Francesco Saverio Giudice <info / at / fsgiudice / dot / com>
Desde essa época ai o Harbour tem funções para CGI, então o pessoal não sabe, porque não estuda HTML. Até com clipper podemos fazer "coisas" para Android.

Saudações,
Itamar M. Lins Jr.
Saudações,
Itamar M. Lins Jr.
Fernando queiroz
Usuário Nível 4
Usuário Nível 4
Mensagens: 779
Registrado em: 13 Nov 2014 00:41
Localização: Porto Alegre/RS

Aplicação for WEB

Mensagem por Fernando queiroz »

ligado no assunto, depois que terminar de converter o sistema e desenvolver as rotinas de NF-e e NFC-e a proxima tarefa é partir para algo assim :)) :)) :))
HARBOUR 3.2, HWGUI 2.23 B3, SEFAZCLASS, PDFClass, ADO + MariaDB/MySQL, RMChart
Claudio Soto
Colaborador
Colaborador
Mensagens: 566
Registrado em: 27 Ago 2012 12:31
Localização: Uruguay
Contato:

Aplicação for WEB

Mensagem por Claudio Soto »

Solo a modo de comentario sobre los CGI:

Un CGI es cualquier programa ejecutable (.exe, .bat, .xx, etc) que corra en el servidor y sea capaz de comunicarse con el navegador mediante el protocolo http utilizando la puerta de I/O estándar del sistema operativo.

En el método GET el contenido de la petición es una cadena de caracteres simple que viene en la variable de ambiente QUERY_STRING, en el siguiente formato:
Var1=Valor1&Var2=Valor2&Var3=Valor3
donde & es el separador entre los diferentes campos.

En el metodo POST el tipo de datos de la petición está en la variable de ambiente CONTENT_TYPE (ej. image/jpeg) y la longitud en bytes de los datos está en la variable de ambiente CONTENT_LENGTH. Todas las variables de ambiente están en forma de cadena de caracteres. La lectura de los datos se hace a través de la entrada estándar STDIN.

Tanto en el método GET como en el método POST la salida (envío) de datos al navegador se hace a través de la salida estándar STDOUT de la siguiente manera:

Content-type: image/jpeg
Content-length: 13450
CRLF
Bytes de los datos

O cuando es una página html:

Content-type: text/html
CRLF
Contenido html
CRLF

Acá les dejo unos links para más información:
http://www.jmarshall.com/easy/cgi/
http://www6.uniovi.es/cscene/topics/web/cs2-12.xml.html
http://jkorpela.fi/forms/cgic.html
https://tools.ietf.org/html/rfc3875
Saludos.
Dr. Claudio Soto
(Uruguay)
http://srvet.blogspot.com
Avatar do usuário
Itamar M. Lins Jr.
Administrador
Administrador
Mensagens: 7928
Registrado em: 30 Mai 2007 11:31
Localização: Ilheus Bahia
Curtiu: 1 vez

Aplicação for WEB

Mensagem por Itamar M. Lins Jr. »

Ola!
Detalhe que o icone da primeira URL, é o mesmo que uso aqui no forum...kkkkk só que verde "favicon"

Saudações,
Itamar M. Lins Jr.
Saudações,
Itamar M. Lins Jr.
Avatar do usuário
Itamar M. Lins Jr.
Administrador
Administrador
Mensagens: 7928
Registrado em: 30 Mai 2007 11:31
Localização: Ilheus Bahia
Curtiu: 1 vez

Aplicação for WEB

Mensagem por Itamar M. Lins Jr. »

Ola!
Pequena aplicação, tipo agenda.

Código: Selecionar todos

head> <meta charset="UTF-8"/> </head>
<body>
<form action="cgi-bin/login.prg" method="POST">
<fieldset>
<legend>Identifique-se:</legend>
  <div class="container">
    <label for="cUsuario"><b>Usuário</b></label><br>
    <input type="text" size="20" placeholder="Digite seu nome" name="cUsuario" required>
    <br><br>
    <label for="cSenha"><b>Senha</b></label><br>
    <input type="password" size="10" placeholder="Digite sua senha" name="cSenha" required>
    <br><br>
    <button type="submit">Login</button>
  </div>
</fieldset>
</form></body></html>
Html básico com o login.
<form action="cgi-bin/login.prg" method="POST"><fieldset>
Essa linha chama o programa login.prg que esta na pasta /cgi-bin

Código: Selecionar todos

#!/usr/local/bin/hbrun
REQUEST HB_CODEPAGE_UTF8 
REQUEST DBFCDX, DBFFPT
MemVar cUsuario,cSenha

#command TEXT TO VAR <var> => ;
           #pragma __cstream|%s||<var>:=
           
#xcommand TEXT TO VAR <var> => #pragma __stream|<var>:=%s
           
#xcommand ENDTEXT => #pragma __endtext

Function main(...)
LOCAL cEOL := + hb_eol() + hb_eol(), cHtml, lShared := .F., lIncluir := .T.
LOCAL cTxt := "", cOrd, cUs
PRIVATE cUsuario, cSenha

RddSetDefault("DBFCDX")
Set autopen On
hb_cdpSelect( "UTF8" )

cHtml := 'Content-type: text/html' + cEOL 
cHtml += '<!DOCTYPE html>' + hb_eol() 
cHtml += '<html>' + hb_eol() 
cHtml += '<head>' + hb_eol() 
cHtml += '<meta charset="UTF-8"/></head><body>' + hb_eol()

/*Pegar variaveis*/
PegaVar()

IF empty(cUsuario)
   Return ErrorHTML( "Informe o nome do usuário. - "  )  //retorna empty para "U" também
ENDIF
IF empty(cSenha)
   Return ErrorHTML( "Informe a senha." ) 
ENDIF

IF !AbreDb('usuarios.dbf','us',lShared)
   Return ErrorHTML( "Erro abrindo arquivo: clientes.dbf" ) 
ENDIF

cOrd := us->(OrdSetFocus(1)) //nome
IF us->(DbSeeK(cUsuario))
   IF alltrim(cSenha) == alltrim(us->senha)
       Return opcoes()
       //cTxt := [ <meta http-equiv="refresh" content="0;URL=/opcoes.html"> ]
   ELSE
      Return ErrorHTML( "Senha incorreta." ) 
   ENDIF
ELSE

   cUs := ""
   us->(DbGotop())
   Do while us->(!eof())
    cUs += us->nome + "<br>"
    us->(DbSkip())
   EndDo
   
   Return ErrorHTML( "Usuário não cadastrado: " + cUsuario + " --- " + str(len(cUsuario)) + "<br>" + cUS )
   
ENDIF

cHtml += cTxt + '</body></html>'

FechaDb('us')

Return OutStd(cHtml)

Function Opcoes
LOCAL cHtml, cEOL := hb_eol() + hb_eol()

OutStd("Content-type: text/html" + cEOL )

TEXT TO VAR cHtml

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8"/>
    <title>Sistema SCADV</title>
    <link rel="stylesheet" type="text/css"  href="estilo.css" />  
</head>
<body>
<ul id="nav"> 
    <li><a href="cliente.html">Clientes</a></li> 
    <li><a href="#">Procurar Clientes</a></li> 
    <li><a href="#">Listar Clientes</a> 
      <ul> 
        <li><a href="usuario.html">Cadastrar Usuários</a></li> 
        <li><a href="cgi-bin/CriaEstruturaDBF.prg">Criar Base de Dados</a></li> 
      </ul> 
    </li>
 
    <li><a href="#">Contato</a></li> 
</ul>
</body>
</html>

EndText

Return OutStd(cHtml)

SET PROCEDURE TO "funcoes.prg"
Programa login.prg que libera as opções de menus.

Saudações,
Itamar M. Lins Jr.
Saudações,
Itamar M. Lins Jr.
Avatar do usuário
Itamar M. Lins Jr.
Administrador
Administrador
Mensagens: 7928
Registrado em: 30 Mai 2007 11:31
Localização: Ilheus Bahia
Curtiu: 1 vez

Aplicação for WEB

Mensagem por Itamar M. Lins Jr. »

Ola!
Funções genéricas usadas pelo sistema WEB.
Uma rotina foi criada com ajuda do José Quintas, pegar o conteúdo do método POST e transformar em variável.
Outra eu peguei no fonte do hb34, que estava incompleta a de conversão UTF8 e na internet.

Código: Selecionar todos

Function ErrorHtml(cErro)
LOCAL cEOL := + hb_eol() + hb_eol(), cHtmlErro
hb_default(@cErro, "Erro: " + PROCNAME(1) )
cHtmlErro := "Content-type: text/html" + cEOL 
cHtmlErro += "<!DOCTYPE html>" + hb_eol() 
cHtmlErro += "<html><head>" + hb_eol() 
cHtmlErro += '<meta charset="UTF-8"/>' + hb_eol() 
cHtmlErro += "</head><body><h1>" + cErro + " --- " + ProcName(1) + "</h1>" + hb_eol() 
cHtmlErro += "</body></html>" 
Return OutStd( cHtmlErro )

Function FechaDb(cAlias)
Local lRet := .T.
(cAlias)->(dbCloseArea())
If neterr() 
   lRet := .F.
EndIf
Return lRet

Function AbreDb(cDbf,cAlias,lShared)
Local lRet := .T.
hb_default(@lShared,.T.)

lRet := DbUseArea(.T.,"DBFCDX",cDbf,cAlias,lShared,.F.,'PTISO')

Return lRet

Function Incluir(cAlias)
LOCAL lRet := .T.
hb_default(@cAlias,Alias())
IF (cAlias)->(DbAppend())
   IF neterr()
      lRet := .F.
   ENDIF
ENDIF
Return lRet

Function TravaRegistro(cAlias)
LOCAL lRet := .T.
hb_default(@cAlias,alias())
IF (cAlias)->(rlock())
   IF neterr()
      lRet := .F.
   ENDIF
ENDIF
Return lRet

FUNCTION HtmlDecodeUrl( cString )
LOCAL cRet := hb_StrReplace( cString, { ;
      "%26" => "&", ;
      "%2B" => "+", ;
      "%20" => " ", ;
      "%27" => "'", ;
      "+"   => " ", ;
      "%2C" => ",", ;
      "%21" => "!", ;
      "%7E" => "~", ;
      "%23" => "#", ;
      "%24" => "!", ;
      "%25" => "%", ;
      "%5E" => "^", ;
      "%28" => "(", ;
      "%29" => ")", ;
      "%40" => "@", ;
      "%60" => "`", ;
      "%2F" => "/", ;
      "%C3%A0" => "à",;
      "%C3%A1" => "á",;
      "%C3%A2" => "â",;      
      "%C3%A3" => "ã",;
      "%C3%80" => "À",;
      "%C3%81" => "Á",;
      "%C3%82" => "Â",;
      "%C3%83" => "Ã",;
      "%C3%A8" => "è",;
      "%C3%A9" => "é",;
      "%C3%AA" => "ê",;
      "%E1%BA%BD" => "ẽ",;
      "%C3%89" => "É",;
      "%C3%88" => "È",;
      "%C3%A7" => "ç",;
      "%C3%87" => "Ç",;
      "%C3%8A" => "Ê",;
      "%E1%BA%BC" => "Ẽ",;
      "%C3%8C" => "Ì",;
      "%C3%8D" => "Í",;
      "%C3%8E" => "Î",;
      "%C4%A8" => "Ĩ",;
      "%C3%B2" => "ò",;
      "%C3%B3" => "ó",;
      "%C3%B4" => "ô",;
      "%C3%B5" => "õ",;
      "%C3%92" => "Ò",;
      "%C3%93" => "Ó",;
      "%C3%94" => "Ô",;
      "%C3%95" => "Õ",;
      "%C3%BA" => "ú",;
      "%C3%B9" => "ù",;
      "%C5%A9" => "ũ",;
      "%C3%BB" => "û",;
      "%C3%9A" => "Ú",;
      "%C3%99" => "Ù",;
      "%C5%A8" => "Ũ",;
      "%C3%9B" => "Û"})
Return cRet

****************
Function PegaVar
****************
*
*
LOCAL cTemp:="", nRead, nLen, aList, xValue

IF "POST" $ Upper( hb_GetEnv( "REQUEST_METHOD" ) )
   nLen := val(hb_getenv("CONTENT_LENGTH"))
   cTemp := Space( nLen )
   IF ( nRead := FRead( hb_GetStdIn(), @cTemp, nLen ) ) != nLen
      //OutStd( "<p>Erro lendo método post " + hb_ntos( nRead ) + " instead of " + hb_ntos( nLen ) )    
   ELSE
      //OutStd("<p>Resultado: " , HtmlDecodeUrl(cTemp) + hb_eol())
   ENDIF
ENDIF

IF empty(cTemp)
   Return ""
ENDIF

aList := hb_RegExSplit( "&", cTemp )
FOR EACH xValue IN aList
    xValue := hb_valtoexp(HtmlDecodeUrl(xValue))
    xValue := StrTran( xValue, "=", ":='" )
    xValue := &xValue + "'" 
    &xValue
NEXT

Return ""
Saudações,
Itamar M. Lins Jr.
Saudações,
Itamar M. Lins Jr.
Avatar do usuário
Itamar M. Lins Jr.
Administrador
Administrador
Mensagens: 7928
Registrado em: 30 Mai 2007 11:31
Localização: Ilheus Bahia
Curtiu: 1 vez

Aplicação for WEB

Mensagem por Itamar M. Lins Jr. »

Ola!
Repare que criamos paginas "On the fly" direto na saída do APACHE e o apache joga para o browse -> "segurança" pois alguns arquivos não existem no HD.
Aqui no Linux/i3 com 4mb, nem pisca.

Falta essas duas linha do index.html.

Código: Selecionar todos

<!DOCTYPE html>
<html>
Corrigido o index.html

Código: Selecionar todos

<!DOCTYPE html>
<html>
<head> <meta charset="UTF-8"/> </head>
<body>
<form action="cgi-bin/login.prg" method="POST">
<fieldset>
<legend>Identifique-se:</legend>
  <div class="container">
    <label for="cUsuario"><b>Usuário</b></label><br>
    <input type="text" size="20" placeholder="Digite seu nome" name="cUsuario" required>
    <br><br>
    <label for="cSenha"><b>Senha</b></label><br>
    <input type="password" size="10" placeholder="Digite sua senha" name="cSenha" required>
    <br><br>
    <button type="submit">Login</button>
  </div>
</fieldset>
</form></body></html>
Saudações,
Itamar M. Lins Jr.
Saudações,
Itamar M. Lins Jr.
Avatar do usuário
Itamar M. Lins Jr.
Administrador
Administrador
Mensagens: 7928
Registrado em: 30 Mai 2007 11:31
Localização: Ilheus Bahia
Curtiu: 1 vez

Aplicação for WEB

Mensagem por Itamar M. Lins Jr. »

Ola!
Alguns comandos em Html o Forum está executando e não estão aparecendo <br> é um deles.

Saudações,
Itamar M. Lins Jr.
Saudações,
Itamar M. Lins Jr.
Responder