Clipper On Line • Ver Tópico - Aplicação for WEB

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

 

Aplicação for WEB

Mensagempor Itamar M. Lins Jr. » 18 Fev 2018 17:26

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/VC15/binaries/httpd-2.4.29-Win32-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
apache1.png
tela1

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:\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:\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.

apache2.png
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.
Avatar de usuário

Itamar M. Lins Jr.
Colaborador

Colaborador
 
Mensagens: 6927
Data de registro: 30 Mai 2007 11:31
Cidade/Estado: Ilheus Bahia
Curtiu: 309 vezes
Mens.Curtidas: 503 vezes

Aplicação for WEB

Mensagempor Itamar M. Lins Jr. » 18 Fev 2018 18:07

Ola!
Pequenas modificações no ola.prg!
#!"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:\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!

  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.
Avatar de usuário

Itamar M. Lins Jr.
Colaborador

Colaborador
 
Mensagens: 6927
Data de registro: 30 Mai 2007 11:31
Cidade/Estado: Ilheus Bahia
Curtiu: 309 vezes
Mens.Curtidas: 503 vezes

Aplicação for WEB

Mensagempor Itamar M. Lins Jr. » 18 Fev 2018 19:20

Ola!
Dentro da pasta htdocs mude o arquivo index.html para este ai de baixo.
<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:\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.
Avatar de usuário

Itamar M. Lins Jr.
Colaborador

Colaborador
 
Mensagens: 6927
Data de registro: 30 Mai 2007 11:31
Cidade/Estado: Ilheus Bahia
Curtiu: 309 vezes
Mens.Curtidas: 503 vezes

Aplicação for WEB

Mensagempor Itamar M. Lins Jr. » 18 Fev 2018 21:59

Ola!
No arquivo index.html que está dentro da pasta htdocs tem esta linha:
 <form action='/cgi-bin/gravar.prg' method='post'> 

Vai chamar gravar.prg ao clicar no botão "Botao Enviar"
apache3.png
Tela3
apache3.png (10.21 KiB) Visualizado 4347 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").
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.

<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
apache4.png
tela4
apache4.png (8.48 KiB) Visualizado 4347 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.
Avatar de usuário

Itamar M. Lins Jr.
Colaborador

Colaborador
 
Mensagens: 6927
Data de registro: 30 Mai 2007 11:31
Cidade/Estado: Ilheus Bahia
Curtiu: 309 vezes
Mens.Curtidas: 503 vezes

Aplicação for WEB

Mensagempor Itamar M. Lins Jr. » 22 Fev 2018 12:40

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-nao-aprenda-qualquer-framework-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.
Avatar de usuário

Itamar M. Lins Jr.
Colaborador

Colaborador
 
Mensagens: 6927
Data de registro: 30 Mai 2007 11:31
Cidade/Estado: Ilheus Bahia
Curtiu: 309 vezes
Mens.Curtidas: 503 vezes

Aplicação for WEB

Mensagempor MSDN » 22 Fev 2018 17:49

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.
MSDN
Usuário Nível 4

Usuário Nível 4
 
Mensagens: 741
Data de registro: 28 Nov 2003 14:55
Cidade/Estado: CWB
Curtiu: 178 vezes
Mens.Curtidas: 123 vezes

Aplicação for WEB

Mensagempor ANDRIL » 05 Mar 2018 07:23

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 de usuário

ANDRIL
Usuário Nível 5

Usuário Nível 5
 
Mensagens: 1270
Data de registro: 06 Jul 2004 00:44
Curtiu: 12 vezes
Mens.Curtidas: 46 vezes

Aplicação for WEB

Mensagempor Itamar M. Lins Jr. » 05 Mar 2018 11:09

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.
 * 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.
Avatar de usuário

Itamar M. Lins Jr.
Colaborador

Colaborador
 
Mensagens: 6927
Data de registro: 30 Mai 2007 11:31
Cidade/Estado: Ilheus Bahia
Curtiu: 309 vezes
Mens.Curtidas: 503 vezes

Aplicação for WEB

Mensagempor Fernando queiroz » 05 Mar 2018 22:07

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
Fernando queiroz
Usuário Nível 4

Usuário Nível 4
 
Mensagens: 737
Data de registro: 12 Nov 2014 23:41
Cidade/Estado: Porto Alegre/RS
Curtiu: 12 vezes
Mens.Curtidas: 58 vezes

Aplicação for WEB

Mensagempor Claudio Soto » 06 Mar 2018 01:13

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 de usuário

Claudio Soto
Colaborador

Colaborador
 
Mensagens: 555
Data de registro: 27 Ago 2012 12:31
Cidade/Estado: Uruguay
Curtiu: 35 vezes
Mens.Curtidas: 166 vezes

Aplicação for WEB

Mensagempor Itamar M. Lins Jr. » 06 Mar 2018 09:50

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.
Avatar de usuário

Itamar M. Lins Jr.
Colaborador

Colaborador
 
Mensagens: 6927
Data de registro: 30 Mai 2007 11:31
Cidade/Estado: Ilheus Bahia
Curtiu: 309 vezes
Mens.Curtidas: 503 vezes

Aplicação for WEB

Mensagempor Itamar M. Lins Jr. » 20 Set 2018 16:19

Ola!
Pequena aplicação, tipo agenda.
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

#!/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.
Avatar de usuário

Itamar M. Lins Jr.
Colaborador

Colaborador
 
Mensagens: 6927
Data de registro: 30 Mai 2007 11:31
Cidade/Estado: Ilheus Bahia
Curtiu: 309 vezes
Mens.Curtidas: 503 vezes

Aplicação for WEB

Mensagempor Itamar M. Lins Jr. » 20 Set 2018 16:25

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.

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.
Avatar de usuário

Itamar M. Lins Jr.
Colaborador

Colaborador
 
Mensagens: 6927
Data de registro: 30 Mai 2007 11:31
Cidade/Estado: Ilheus Bahia
Curtiu: 309 vezes
Mens.Curtidas: 503 vezes

Aplicação for WEB

Mensagempor Itamar M. Lins Jr. » 20 Set 2018 16:31

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.

<!DOCTYPE html>
<html>

Corrigido o index.html
<!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.
Avatar de usuário

Itamar M. Lins Jr.
Colaborador

Colaborador
 
Mensagens: 6927
Data de registro: 30 Mai 2007 11:31
Cidade/Estado: Ilheus Bahia
Curtiu: 309 vezes
Mens.Curtidas: 503 vezes

Aplicação for WEB

Mensagempor Itamar M. Lins Jr. » 20 Set 2018 16:40

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

Saudações,
Itamar M. Lins Jr.
Avatar de usuário

Itamar M. Lins Jr.
Colaborador

Colaborador
 
Mensagens: 6927
Data de registro: 30 Mai 2007 11:31
Cidade/Estado: Ilheus Bahia
Curtiu: 309 vezes
Mens.Curtidas: 503 vezes




Retornar para Contribuições, Dicas e Tutoriais

Quem está online

Usuários vendo este fórum: Nenhum usuário registrado online e 21 visitantes


Ola Amigo, espero que meu site e forum tem lhe beneficiado, com exemplos e dicas de programacao.
Entao divulgue o link da Doacao abaixo para seus amigos e redes sociais ou faça uma doacao para o site forum...
MUITO OBRIGADO PELA SUA DOACAO!
Faça uma doação para o forum
cron
v
Olá visitante, seja bem-vindo ao Fórum Clipper On Line!
Efetue o seu login ou faça o seu Registro