
Frank K Hosaka
Membros-
Total de itens
1.583 -
Registro em
-
Última visita
Tudo que Frank K Hosaka postou
-
XML não é a minha praia, mas encontrei um XML nesse fórum com um monte de prefixos e o membro desse forum perguntou como alterá-lo. A solução que segue é baseado em improvisação, muitas orientações que eu vi no Google não deram certo, assim eu precisei fazer algumas marteladas. É possível que não funcione com você: O arquivo 1.xml é esse: <?xml version="1.0" encoding="UTF-8"?><pt:document xmlns:pt="http://schemas.brother.info/ptouch/2007/lbx/main" xmlns:style="http://schemas.brother.info/ptouch/2007/lbx/style" xmlns:text="http://schemas.brother.info/ptouch/2007/lbx/text" xmlns:draw="http://schemas.brother.info/ptouch/2007/lbx/draw" xmlns:image="http://schemas.brother.info/ptouch/2007/lbx/image" xmlns:barcode="http://schemas.brother.info/ptouch/2007/lbx/barcode" xmlns:database="http://schemas.brother.info/ptouch/2007/lbx/database" xmlns:table="http://schemas.brother.info/ptouch/2007/lbx/table" xmlns:cable="http://schemas.brother.info/ptouch/2007/lbx/cable" version="1.7" generator="P-touch Editor 5.4.007 Windows"><pt:body currentSheet="Folha 1" direction="LTR"><style:sheet name="Folha 1"><style:paper media="0" width="68pt" height="2834.6pt" marginLeft="2pt" marginTop="2.8pt" marginRight="2pt" marginBottom="2.8pt" orientation="portrait" autoLength="true" monochromeDisplay="true" printColorDisplay="false" printColorsID="0" paperColor="#FFFFFF" paperInk="#000000" split="1" format="261" backgroundTheme="0" printerID="28464" printerName="Brother PT-P900W"/><style:cutLine regularCut="0pt" freeCut=""/><style:backGround x="2pt" y="2.8pt" width="64pt" height="66.4pt" brushStyle="NULL" brushId="0" userPattern="NONE" userPatternId="0" color="#000000" printColorNumber="1" backColor="#FFFFFF" backPrintColorNumber="0"/><pt:objects><barcode:barcode><pt:objectStyle x="10pt" y="20.8pt" width="46.4pt" height="46.4pt" backColor="#FFFFFF" backPrintColorNumber="0" ropMode="COPYPEN" angle="0" anchor="TOPLEFT" flip="NONE"><pt:pen style="INSIDEFRAME" widthX="0.5pt" widthY="0.5pt" color="#000000" printColorNumber="1"/><pt:brush style="NULL" color="#000000" printColorNumber="1" id="0"/><pt:expanded objectName="barras" ID="0" lock="0" templateMergeTarget="LABELLIST" templateMergeType="NONE" templateMergeID="0" linkStatus="NONE" linkID="0"/></pt:objectStyle><barcode:barcodeStyle protocol="QRCODE" lengths="48" zeroFill="false" barWidth="1.2pt" barRatio="1:3" humanReadable="true" humanReadableAlignment="LEFT" checkDigit="false" autoLengths="true" margin="true" sameLengthBar="false" bearerBar="false"/><barcode:qrcodeStyle model="2" eccLevel="15%" cellSize="1.6pt" mbcs="auto" joint="1" version="auto"/><pt:data>qrcode de teste</pt:data></barcode:barcode><text:text><pt:objectStyle x="14pt" y="4.8pt" width="38.1pt" height="8.7pt" backColor="#FFFFFF" backPrintColorNumber="0" ropMode="COPYPEN" angle="0" anchor="TOPLEFT" flip="NONE"><pt:pen style="NULL" widthX="0.5pt" widthY="0.5pt" color="#000000" printColorNumber="1"/><pt:brush style="NULL" color="#000000" printColorNumber="1" id="0"/><pt:expanded objectName="modelo" ID="0" lock="0" templateMergeTarget="LABELLIST" templateMergeType="NONE" templateMergeID="0" linkStatus="NONE" linkID="0"/></pt:objectStyle><text:ptFontInfo><text:logFont name="Arial" width="3.4pt" italic="false" weight="400" charSet="0" pitchAndFamily="34"/><text:fontExt effect="NOEFFECT" underline="0" strikeout="0" size="7.8pt" orgSize="28.8pt" textColor="#000000" textPrintColorNumber="1"/></text:ptFontInfo><text:textControl control="FREE" clipFrame="false" aspectNormal="false" shrink="false" autoLF="false" avoidImage="false"/><text:textAlign horizontalAlignment="JUSTIFY" verticalAlignment="CENTER" inLineAlignment="BASELINE"/><text:textStyle vertical="false" nullBlock="false" charSpace="0" lineSpace="0" orgPoint="8pt" combinedChars="false"/><pt:data>ABCDEFG</pt:data><text:stringItem charLen="7"><text:ptFontInfo><text:logFont name="Arial" width="3.4pt" italic="false" weight="400" charSet="0" pitchAndFamily="34"/><text:fontExt effect="NOEFFECT" underline="0" strikeout="0" size="7.8pt" orgSize="28.8pt" textColor="#000000" textPrintColorNumber="1"/></text:ptFontInfo></text:stringItem></text:text><text:text><pt:objectStyle x="14pt" y="12.8pt" width="38.3pt" height="8.7pt" backColor="#FFFFFF" backPrintColorNumber="0" ropMode="COPYPEN" angle="0" anchor="TOPLEFT" flip="NONE"><pt:pen style="NULL" widthX="0.5pt" widthY="0.5pt" color="#000000" printColorNumber="1"/><pt:brush style="NULL" color="#000000" printColorNumber="1" id="0"/><pt:expanded objectName="serie" ID="0" lock="0" templateMergeTarget="LABELLIST" templateMergeType="NONE" templateMergeID="0" linkStatus="NONE" linkID="0"/></pt:objectStyle><text:ptFontInfo><text:logFont name="Arial" width="3.4pt" italic="false" weight="400" charSet="0" pitchAndFamily="34"/><text:fontExt effect="NOEFFECT" underline="0" strikeout="0" size="7.7pt" orgSize="28.8pt" textColor="#000000" textPrintColorNumber="1"/></text:ptFontInfo><text:textControl control="FREE" clipFrame="false" aspectNormal="false" shrink="false" autoLF="false" avoidImage="false"/><text:textAlign horizontalAlignment="JUSTIFY" verticalAlignment="CENTER" inLineAlignment="BASELINE"/><text:textStyle vertical="false" nullBlock="false" charSpace="0" lineSpace="0" orgPoint="8pt" combinedChars="false"/><pt:data>123456789</pt:data><text:stringItem charLen="9"><text:ptFontInfo><text:logFont name="Arial" width="3.4pt" italic="false" weight="400" charSet="0" pitchAndFamily="34"/><text:fontExt effect="NOEFFECT" underline="0" strikeout="0" size="7.7pt" orgSize="28.8pt" textColor="#000000" textPrintColorNumber="1"/></text:ptFontInfo></text:stringItem></text:text></pt:objects></style:sheet></pt:body></pt:document> A solução que improvisei é esse: <?php $dom=new DOMDocument(); $dom->load('1.xml'); $xpath=new DOMXPath($dom); $elements=$xpath->query("//pt:data"); foreach($elements as $element){echo $element->textContent."<br>";} foreach($elements as $element){$element->textContent="Frank";} foreach($elements as $element){echo $element->textContent."<br>";} // resultado: qrcode de teste ABCDEFG 123456789 Frank Frank Frank
-
Eu acho que consegui: <?php $dom=new DOMDocument(); $dom->load('1.xml'); $xpath=new DOMXPath($dom); $elements=$xpath->query("//pt:data"); foreach($elements as $element){echo $element->textContent."<br>";} foreach($elements as $element){$element->textContent="Frank";} foreach($elements as $element){echo $element->textContent."<br>";} // resultado: qrcode de teste ABCDEFG 123456789 Frank Frank Frank O problema é que eu devo ter alterado coisa que não devia como o "qrcode de teste", mas acho que o mais difícil eu consegui.
-
Aplicação PHP MVC/Composer Apache/Nginx
pergunta respondeu ao Thyago Dantas de Frank K Hosaka em Tutoriais & Dicas - PHP
Eu não uso o servidor VPS, por enquanto. Mesmo assim, eu fiz algumas modificações: index.php <?php require 'Painel/Application.php'; // aqui session_start(); date_default_timezone_set('America/Recife'); require('vendor/autoload.php'); define('INCLUDE_PATH_STATIC', 'http://localhost/Painel/Views/Pages/'); define('INCLUDE_PATH', 'http://localhost/'); $app = new Application(); // aqui echo $app->teste(); // aqui $app->run(); ?> ---------------------- Application.php <?php /* namespace Painel; <--- Aqui */ class Application { private $controller; private function setApp() { $loadName = 'Painel\Controllers\\'; $url = explode('/', @$_GET['url']); if ($url[0] == '') {$loadName .= 'Home';} else { $loadName .= ucfirst(strtolower($url[0]));} $loadName .= 'Controller'; if (file_exists($loadName . '.php')) { $this->controller = new $loadName();} else { include('Views/Pages/404.php'); die();} } public function teste(){return "olá mundo!";} // aqui public function run(){ $this->setApp(); $this->controller->index();} } ?> -
Ao invés de usar o <form> para consultar o banco de dados, eu usei um código JavaScript, eu tirei o <form> do código e, por tabela, o <button> deixou de funcionar porque ele não tinha mais nenhum <form> para submeter. Para dar vida ao <button>, usei esse código: <button onclick="location.replace('entrada.php')">Cancelar</button> Só que na hora de testar, ele não funcionou. Pensei no Google, e encontrei esse tópico: html - JavaScript button onclick not working - Stack Overflow Lá tem várias soluções, uma mais estranha que a outra. Tentei adaptar algumas, mas não consegui ressuscitar o <botton>. Até que por acidente eu atualizei o navegador, e assim o <button> conseguiu executar a tarefa. O meu erro é acreditar que as alterações no editor de texto VS Code fossem automáticas. E são. Mas ele não atualiza o que está lá no navegador. O navegador precisa ser atualizado para receber a nova versão do código. Isso me lembra o professor de Informática, ele disse que o maior problema de todo o programa é aquela pecinha que fica na frente do monitor.
-
O meu conhecimento em JavaScript é precário, eu sei que é possível o JS consultar o MySQL diretamente, bem como existem facilitadores para usar o JS como o Ajax e o JQuery, mas eu não uso nada disso. Geralmente eu uso o <form> para evitar de usar o JS. Mas nem sempre o <form> é conveniente, ele simplesmente apaga tudo o que tem na tela do navegador para dar lugar a uma nova página solicitada. No meu caso, eu só precisava saber se o colaborador está autorizado a passar pela portaria. Como eu não sei usar o Node.js, a minha única saída é usar um código PHP, onde eu sei como consultar o MySQL. O código JS que eu uso é esse daqui: <script> async function pesquisar(value){ form = new FormData(); form.append("matricula",value) response = await fetch('cadastro_pesquisa.php',{method:"POST",body:form}) body=await response.json() funcao.value=body.funcao nome.value=body.nome identidade.value=body.identidade placa.value=body.placa veiculo.value=body.veiculo empresa.value=body.empresa situacao=body.situacao if(situacao==2){ divPainel.innerHTML="Colaborador não está autorizado a entrar"}} </script> Nesse caso, o JS vai pedir para o cadastro_pesquisa.php ver no MySQL a autorização. O código cadastro_pesquisa.php só vai ser executado no servidor, e ele é assim: <?php $matricula=$_POST['matricula']; require 'config.php'; $sql = "select * from colaborador where matricula = :matricula"; $stm = $pdo->prepare( $sql ); $stm->execute([':matricula'=>$matricula]); $colaborador=$stm->fetchObject(); if($colaborador){ $arr['funcao'] = $colaborador->funcao; $arr['identidade'] = $colaborador->identidade; $arr['situacao'] = $colaborador->situacao; $arr['nome'] = $colaborador->nome; $arr['placa'] = $colaborador->placa; $arr['veiculo'] = $colaborador->veiculo; $arr['empresa'] = $colaborador->empresa;} else { $arr['matricula'] = 'Não encontrada.';} echo json_encode( $arr );
-
como baixar dados do banco em formato utf8
pergunta respondeu ao adrsublimacao de Frank K Hosaka em Tutoriais & Dicas - PHP
Espero que este artigo ajude você: Como corrigir acentuação no PHP MySQL - Ajuda Locaweb -
Usei o editor de texto e pedi para ele eliminar todos os prefixos text: , pt: , barcode: , style:, e o novo arquivo ficou assim: <?xml version="1.0" encoding="UTF-8"?> <body currentSheet="Folha 1" direction="LTR"> <sheet name="Folha 1"> <objects> <barcode> <data>text1</data> </barcode> <text> <textControl control="FREE" clipFrame="false" aspectNormal="false" shrink="false" autoLF="false" avoidImage="false"/> <textAlign horizontalAlignment="JUSTIFY" verticalAlignment="CENTER" inLineAlignment="BASELINE"/> <textStyle vertical="false" nullBlock="false" charSpace="0" lineSpace="0" orgPoint="6pt" combinedChars="false"/> <data>text2</data> <stringItem charLen="1"></stringItem> </text> <text><data>text3</data></text> </objects></sheet> </body> Eu acredito que depois dessa modificação, você consegue trabalhar com as ferramentas do PHP voltado para o XML. Ou você precisa definir os prefixos assim: XML Namespaces (w3schools.com)
-
Carregando imagem no <img> com o <input type=file>
uma questão postou Frank K Hosaka HTML, XHTML, CSS
Levei um tempão até encontrar a dica no Google: javascript - Loading an image to a <img> from <input file> - Stack Overflow Adaptando no meu código, ele ficou assim: <script> function onselec(event){ selectedFile=event.target.files[0] reader=new FileReader() imgtag=document.getElementById("cliente") imgtag.title=selectedFile.name reader.onload=function(event){imgtag.src=event.target.result} reader.readAsDataURL(selectedFile)} </script> <img src="fotos/padrão.jpg" height="190" width="150" id="cliente"> <p>Selecionar Foto <p><input type="file" name="foto" id=foto onchange=onselec(event)> -
Eu criei o projeto PHP em 2020, antes disso ele se chamava projeto MS Access 1990. O MS Access já tem uma rotina pronta para autenticar a senha, esse não é o caso do PHP. No caso do PHP, eu fiz essa gambiarra: if(!$row){$_SESSION['mensagem']="email incorreto";header("location:index.php"); Ele nunca funcionou! Lá em 2022 eu comecei a estudar o Laravel e eu conheci um facilitador chamado middleware. Ele é bacana, bastante funcional, mas não me ajudou a consertar o projeto PHP, o middleware é tão obscuro quanto a rotina de autenticação do MS Access. Finalmente, em 2023, eu tomei coragem e usei o poderoso "var_dump(!$variavel);exit;" aqui e ali até achar o erro, até eu chegar nessa linha: if(!$row){$_SESSION['mensagem']="email incorreto"; header("location:index.php");var_dump($row);exit; Para a minha surpresa, a rotina funcionou, depois de três longos anos! É óbvio que não foi o var_dump que consertou o erro, mas sim o comando exit. Ou seja, o comando header não funciona, se você não fizer o programa parar. Que coisa!
-
O projeto portaria - Google Drive contém vírus. Sem ele não dá apresentar o meu projeto alternativo, onde tentei achar uma solução para o problema do relatório da portaria. É uma pena.
-
O meu irmão mandou um WhatsApp reclamando que não conseguia entrar no projeto PHP pelo tablet e nem pelo celular, disse que recebeu a mensagem 403. Entrei no portal da Hostinger, e fui até a pasta public_HTML, e a única coisa que eu achei de estranho é o arquivo .htacess, fiz uma cópia de segurança no meu notebook, e deletei. O projeto PHP voltou no ar. Eu fui testar o projeto em Laravel, um se chama laravel e outro teste, ambos estavam acessíveis. Ainda não sei o que é esse .htacess, o que encontrei dentro dele foi isso: RewriteEngine On RewriteRule ^$ http://127.0.0.1:80/ [P,L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^(.*)$ http://127.0.0.1:80/$1 [P,L]
-
Finalmente, eu consegui terminar a tradução do meu projeto em PHP para Laravel. Tudo o que eu precisava era criar uma classe no Laravel. O Laravel não permite criar uma classe dentro de outra classe. Eu tentei colocar num arquivo chamado Helpers.php, mas o Laravel não aceitou. O único jeito foi criar um controller, assim: php artisan make:controller vr Eu queria chamar a minha classe de var, mas o Laravel também não deixa. A seguir a listagem da classe vr, o controller do orçamento e seu respectivo blade: vr.php <?php namespace App\Http\Controllers; use Illuminate\Http\Request; class vr extends Controller { public $ped; public $diaped; public $totalped; public $codp; public $pessoa; public $end; public $cnpj; public $tel; public $nota; public $codprod; public $prod; public $un; public $preço; public function getPed(){return $this->ped;} public function getDiaped(){return $this->diaped;} public function getTotalPed(){return $this->totalped;} public function getCodp(){return $this->codp;} public function getPessoa(){return $this->pessoa;} public function getEnd(){return $this->end;} public function getCNPJ(){return $this->cnpj;} public function getTel(){return $this->tel;} public function getNota(){return $this->nota;} public function getCodprod(){return $this->codprod;} public function getProd(){return $this->prod;} public function getUn(){return $this->un;} public function getPreco(){return $this->preço;} } ------------------------------------------------------------------ OrcamentoController.php <?php namespace App\Http\Controllers; use Illuminate\Http\Request; use App\Models\tbsupervariavel; use App\Models\tbpedido; use App\Models\tbpessoa; use App\Models\vw_histped; use App\Models\tbprod; use App\Models\tbhistped; use Auth; class OrcamentoController extends Controller { public function orcamento(request $request){ $vr=new vr(); if($request->input('qt')){ $qt=$request->input('qt'); if($qt!=0){ $qt=fmt($qt); $texto=$request->input('texto'); $vetor=explode(",",$texto); $preço=$vetor[0]; $codprod=tbsupervariavel::where('codsuper',Auth::id())->value('codprod'); $ped=$vetor[1]; $un=$vetor[2]; $subtotal=$qt*$preço; tbhistped::create(['ped'=>$ped,'codprod'=>$codprod,'un'=>$un,'unitario'=>$preço,'subtotal'=>$subtotal,'qt'=>$qt]); $total=tbhistped::where('ped',$ped)->sum('subtotal'); tbpedido::where('ped',$ped)->update(['total'=>$total]);}} if($request->input('excluir')){ $id=$request->input('excluir'); $ped=$request->input('pedido'); tbhistped::destroy($id); $total=tbhistped::where('ped',$ped)->sum('subtotal'); tbpedido::where('ped',$ped)->update(['total'=>$total]);} if($request->input('produto')){ $produto=$request->input('produto'); $tamanho=strlen($produto); $posicao=strpos($produto,":"); $vr->codprod=substr($produto,$posicao+1,$tamanho-$posicao); tbsupervariavel::where('codsuper',Auth::id())->update(['codprod'=>$vr->codprod]); $produto=tbprod::where('codprod',$vr->codprod)->first(); $vr->prod=$produto->prod; $vr->un=$produto->un; $vr->preço=pvenda($produto->custo,$produto->marg);} if($request->input('anterior')){ $ped=$request->input('anterior'); if($ped>0){$ped--;} tbsupervariavel::where('codsuper',Auth::id())->update(['ped'=>$ped]);} if($request->input('novo')){ $pedido=tbpedido::orderBy('ped','desc')->first(); if($pedido->total!=0){ $pedido->ped++; tbpedido::create(['ped'=>$pedido->ped,'dia'=>now()]);} tbsupervariavel::where('codsuper',Auth::id())->update(['ped'=>$pedido->ped]);} tbsupervariavel::where('codsuper',Auth::id())->update(['end'=>'orcamento']); $vr->ped=tbsupervariavel::where('codsuper',Auth::id())->value('ped'); $vr->diaped=tbpedido::where('ped',$vr->ped)->value('dia'); $vr->totalped=tbpedido::where('ped',$vr->ped)->value('total'); $vr->codp=tbpedido::where('ped',$vr->ped)->value('codp'); if($vr->codp){ $pessoa=tbpessoa::where('codp',$vr->codp)->first(); $vr->pessoa=$pessoa->pessoa; $vr->end=$pessoa->end; $vr->cnpj=$pessoa->cnpj; $vr->tel=$pessoa->tel; $vr->nota=$pessoa->nota;} $histped=vw_histped::where('ped',$vr->ped)->get(); $prod=tbprod::orderBy('prod')->get(); return view('orcamento',compact('vr','histped','prod'));} } --------------------------------------------------------------------------------- orcamento.blade.php @include('menu') <script>document.title="Orçamento" btmenu.innerHTML='Barraca do Frank<br>Esquina da Magazine Luiza' </script> <div><table class='table table-striped'> <td><form><input type='submit' value='anterior'><input type='hidden' name='anterior' value={{$vr->ped}}></form> <td style=color:red>Pedido {{$vr->ped}} de {{dbr($vr->diaped)}} <td><form><input type='submit' value='novo'><input type='hidden' name='novo' value='novo'></form></table> <div><table class='table table-striped linha2'><th>Produto<th style=text-align:right>Qt<th>Un<th>Preço<th>Total @foreach($histped as $item) <tr> <td nowrap>{{$item->prod}} <td align=right> @if($item->qt==intval($item->qt)) {{$item->qt}} @else {{dec($item->qt)}} @endif <td><a href=?excluir={{$item->id}}&pedido={{$item->ped}}>{{$item->un}}</a> <td align=right>{{dec($item->unitario)}} <td align=right>{{dec($item->subtotal)}} @endforeach <tr> @if(!isset($_GET['produto'])) <td> <form> <input list=lsproduto name=produto placeholder=produto onchange=submit() size=40> <datalist id='lsproduto'> @foreach($prod as $pr) <option value='{{$pr->prod}} :{{$pr->codprod}}'> @endforeach </datalist> </form> @else <td>{{$vr->prod}} @endif @if(!isset($_GET['qt'])) <td align=right> <form> <input id=qt name=qt onchange=submit() size=1 placeholder=qt autofocus> <input type=hidden name=texto value="{{fmt($vr->preço)}},{{$vr->ped}},{{$vr->un}}"> </form> <td>{{$vr->un}}<td>{{$vr->preço}} @endif <tr><td> @if(empty($vr->codp)) <a href=pessoa>Selecione um cliente</a> @else <details> <summary><b>{{$vr->pessoa}}</b></summary> Endereço <b>{{$vr->end}}</b> <br> CNPJ <b>{{$vr->cnpj}}</b> <br> Telefone <b>{{$vr->tel}}</b> <br> Nota <b>{{$vr->nota}}</b> <br> <a href=pessoa>Mudar cliente</a> <br> <a href="pessoa?busca={{$vr->pessoa}}">Atualizar cliente</a> </details> @endif <td><td><td><td><b>{{dec($vr->totalped)}} </table> </div> O único problema desse código é que ele usa o método GET, o que deixa um monte de comandos na barra de navegação. Ou seja, se você atualizar o navegador, ele vai incluir o mesmo produto tantas vezes quanto você atualizar a tela do navegador. Para contornar isso, o pessoal recomenda usar o método POST, mas aí você não consegue enxergar coisa alguma na barra de navegação. Isso é um dilema difícil de resolver.
-
Hoje eu encontrei uma dica nessa página php - Laravel filter a value in all columns - Stack Overflow, e eu criei esse método na classe PessoaController: <?php namespace App\Http\Controllers; use Illuminate\Http\Request; use App\Models\tbpessoa; use Schema; class PessoaController extends Controller{ public function pessoa(Request $request){ if($request->input('busca')){ if(($request->input('busca'))[0]=="@"){ $busca=$request->input('busca'); $tamanho=strlen($busca); $busca=substr($busca,1,$tamanho-1); $query=tbpessoa::query(); $columns=Schema::getColumnListing('tbpessoa'); foreach($columns as $column){ $query->orWhere($column,'like','%'.$busca.'%');} $pessoas=$query->get(); return view('pessoa',compact('pessoas'));}} }
-
Eu gosto bastante do Hostinger, ele me cobra R$ 23,00 por mês e assim consigo hospedar nele o meu banco de dados e 14 códigos em PHP. A conexão é estável, bem melhor que o meu notebook, que não é um servidor e usa o ngrok e a Claro, e só funciona quando não preciso. Mas ontem eu queria me aventurar mais, eu queria ver se era possível instalar o Laravel 10. O projeto inicial do Laravel vem com 9.000 arquivos e para arrumar tudo isso são necessários dois programas: o Composer e npm. Não é fácil usar esses programas no notebook, e muito menos na hospedagem. Apanhei muito para instalar o Composer no Hostinger. Já o npm foi bem mais difícil, mas no final do dia eu encontrei um tutorial: How to host a Node.js app on shared host | by Mayomi Ayandiran | Medium. Tentei ver os vídeos do YouTube bem como eu vi o manual do Laravel, mas eu não consegui aprender nada. Assim, usei o famoso método da tentativa e erro. Primeiro, eu zipei um Laravel 10 que tinha no meu notebook, e mandei o zip para o Hostinger, e lá descompactei. Na hora de entrar no projeto, eu recebi a mensagem 403, ou seja, eu não tenho autorização para entrar. Para resolver esse problema, eu fiquei imaginando se o PHP e o Laravel não é a mesma coisa. Então eu criei um arquivo chamado index.php com o comando echo "olá mundo!", e assim consegui entrar na pasta onde estava o Laravel, mas essa gambiarra não funcionou para entrar no Laravel. Então, eu decidi jogar o projeto fora, como eu faço no meu notebook. Mas no Hostinger, as coisas são diferentes. O Hostinger perguntou se eu tinha certeza que eu queria jogar o projeto fora, eu respondi sim, mas para a minha surpresa o Hostinger também jogou fora o banco de dados que estava vinculado no projeto. Esse é o grande problema do método da tentativa e erro, a gente só aprende depois de muita surra.
-
Ah, consegui achar o erro. Esqueci de fazer a prova dos nove! <?php for($i=1000;$i<=9999;$i++){ $j=intval($i/100); $k=intval(($i/100-$j)*100); $l=($j+$k)**2; if($l==$i){echo "$i => $j $k => ( $j + $k)**2= $l <br>";} if($l>$i){$i=(intval($i/100)+1)*100;if($i>9999){exit;}} } // resultado: 2025 => 20 25 => ( 20 + 25)**2= 2025 3025 => 30 25 => ( 30 + 25)**2= 3025 9801 => 98 1 => ( 98 + 1)**2= 9801
-
No fórum do DevMedia surgiu uma questão que queria todos os números dentro do intervalo 1000 a 9999 que pudesse satisfazer essa equação: AABB = (AA + BB)**2 O meu conhecimento em matemática é precário, o máximo que consegui resolver foi equação do 2o. grau com uma incógnita e mesmo assim quase repeti de ano. Então, usei o PHP e achei três soluções: <?php for($i=1000;$i<=9999;$i++){ $i=intval($i); $j=intval($i/100); $k=intval(($i/100-$j)*100); $l=($j+$k)**2; if($l==$i){echo "$i => $j $k => ( $j + $k)**2= $l <br>";} } // resultado: 2025 => 20 25 => ( 20 + 25)**2= 2025 3025 => 30 25 => ( 30 + 25)**2= 3025 9801 => 98 1 => ( 98 + 1)**2= 9801 Mas o rapaz disse que existe um outro método chamado tuning. Pesquisei no Google, e eu vi que tem algo a ver com a lentidão no banco de dados. Ou seja, eu preciso otimizar o programa para evitar o superaquecimento do processador. Então, fiz uma pequena alteração no programa, mas, para o meu azar, o novo programa encontrou 9 resultados. <?php for($i=1000;$i<=9999;$i++){ $j=intval($i/100); $k=intval(($i/100-$j)*100); $l=($j+$k)**2; if($l>$i){$i=(intval($i/100)+1)*100;if($i>9999){exit;}} if($l==$i){echo "$i => $j $k => ( $j + $k)**2= $l <br>";} } // resultado: 1600 => 15 25 => ( 15 + 25)**2= 1600 2025 => 20 25 => ( 20 + 25)**2= 2025 2500 => 24 26 => ( 24 + 26)**2= 2500 3025 => 30 25 => ( 30 + 25)**2= 3025 3600 => 35 25 => ( 35 + 25)**2= 3600 4900 => 48 22 => ( 48 + 22)**2= 4900 6400 => 63 17 => ( 63 + 17)**2= 6400 8100 => 80 10 => ( 80 + 10)**2= 8100 9801 => 98 1 => ( 98 + 1)**2= 9801 O algorítimo é o mesmo, a única diferença é que no segundo programa o processador trabalha menos, e isso não faz o menor sentido. Ou eu fiz uma tremenda besteira que não estou conseguindo enxergar?
-
Encontrei o Biehl no fórum iMasters, e ele queria saber como salvar a ordem dos menus. Eu não sabia que era possível alterar a posição dos menus, mas o Biehl deixou o código JavaScript que faz essa mágica. Como eu tenho mais conhecimento na área de banco de dados, eu decidi ajudá-lo: <?php // tab_menu (menu_id, menu_nome, menu_order) $ggCon=new mysqli("localhost","root","","astudy"); if(!isset($_POST['recordsArray'])){goto inicio;} else { $VGT_posicoes=$_POST['recordsArray']; foreach ($VGT_posicoes as $menu_order => $menu_nome) { mysqli_query($ggCon, "update tab_menu set menu_order=$menu_order where menu_nome='$menu_nome'");}} inicio:?> <form method=post> <table id=table style=border:1> <?php $sqlVF = mysqli_query($ggCon, "SELECT * FROM tab_menu ORDER BY menu_order ASC"); while($linha = mysqli_fetch_array($sqlVF)){ $menu_id= $linha['menu_id']; $menu_nome= $linha['menu_nome']; $menu_order= $linha['menu_order']; echo "<tr><td><input id='recordsArray_$menu_id' name=recordsArray[] value='$menu_nome' onclick=getSelectedRow()>";} ?> </table> <input type=submit value=Salvar> </form> <button onclick="upNdown('up');">↑</button> <script> function getSelectedRow(){ for(var i = 1; i < table.rows.length; i++){ table.rows[i].onclick = function(){ if(typeof index !== "undefined"){ table.rows[index].classList.toggle("selected");} index = this.rowIndex; this.classList.toggle("selected");};}} function upNdown(direction){ rows = table.rows parent = rows[index].parentNode if(direction === "up"){ if(index!=0){parent.insertBefore(rows[index],rows[index - 1]);index--;}}} </script>
-
Problemas com tabela quando passa codigo CSS para exibir imagem na escrita quebra a mesma!!!
pergunta respondeu ao ssj4bq de Frank K Hosaka em PHP
CSS ainda é coisa nova para mim, eu estou no nível básico, ou seja, vou usando na base da tentativa e erro. -
Depois de três anos, finalmente consegui fazer um orçamento em JavaScript. O programa está incompleto, ele busca o produto pelo código, quando o correto é pela descrição. Ele não calcula o total do item e nem o total do orçamento. É um programa bem incompleto, mas pelo menos eu consegui fazer a metade do programa. A minha estimativa é que vou ter 100% do programa em 2026. <?php // tbprod (codprod,un,prod,custo,marg,codbar,loc,emb,cf,codforn,updated_at,created_at) $mysqli=new mysqli("localhost","root","","astudy"); $query=$mysqli->query("select * from tbprod"); $rows=$query->fetch_all(MYSQLI_ASSOC); $jrows=json_encode($rows); ?> <script> produtos=<?=$jrows?>; function ver(codprod){ prod=produtos.filter(function(produtos){return produtos.codprod == codprod}); inptcod.value=prod[0].prod preço.value=prod[0].custo qt.focus()} function fim(){ texto="<tr><td>"+inptcod.value+"<td>"+qt.value+"<td>"+preço.value linha.insertAdjacentHTML('beforebegin',texto) inptcod.value="" qt.value="" preço.value="" inptcod.focus()} </script> <table><th>Produto<th>Qt<th>Preço <tr id=linha><td><input id=inptcod onchange=ver(inptcod.value) placeholder="codigo do produto"> <td><input id=qt onchange=fim()> <td><input id=preço>
-
Problemas com tabela quando passa codigo CSS para exibir imagem na escrita quebra a mesma!!!
pergunta respondeu ao ssj4bq de Frank K Hosaka em PHP
Obrigado pela sirene. O site é bem grande, lamento por não poder ajudar. O css que trabalha com o webkit afeta muita coisa, e eu não tenho nenhuma ideia de como isolar, só posso desejar sorte e persevarança. -
<?php // no diretório /wamp64/www/astudy, usei o comando composer require mpdf/mpdf require_once __DIR__.'/vendor/autoload.php'; $mpdf=new \Mpdf\Mpdf(); $mysqli=new mysqli("localhost","root","","astudy"); $query=$mysqli->query("select * from tbprod limit 5"); $mpdf->WriteHTML('<table>'); while($row=$query->fetch_assoc()){ $mpdf->WriteHTML('<tr><td>'.$row['prod']); $mpdf->WriteHTML('<td align=right>'.$row['custo']);} $mpdf->WriteHTML('</table>'); $mpdf->Output(); Tentei usar o Bootstrap, mas não consegui.
-
Foi por puro acidente que descobri que é possível usar a tela de consulta como a tela de atualização. Tudo que é preciso é de um formulário com um input. O problema é que a tela de consulta sempre apresentava os primeiros cinco itens da tabela de produtos. Eu precisava dar um jeito de manter o mesmo critério da consulta. Por exemplo, se eu estou atualizando o endereço do bacalhau na Geladeira n. 12 (abreviado em g12), eu gostaria que a consulta apresentasse o bacalhau novamente, agora com o endereço correto. Para resolver esse problema, eu usei a variável global $_SESSION, assim: <style> form{margin:0} .camufla {border:0;background:transparent} </style> <?php session_start(); $mysqli=new mysqli("localhost","root","","astudy"); if(isset($_GET['procurar'])){ $filtro="where prod like '%".$_GET['procurar']."%'"; $_SESSION['filtro']=$filtro;} else {$filtro="limit 5";} if(isset($_GET['local'])){ $local=$_GET['local']; $codprod=$_GET['codprod']; $query2=$mysqli->query("update tbprod set loc='$local' where codprod=$codprod"); $filtro=$_SESSION['filtro'];} $query=$mysqli->query("select * from tbprod $filtro"); echo "<form><input name=procurar></form>"; echo "<table><th>Produto<th>Local"; while($row=$query->fetch_assoc()){ echo "<form>"; echo "<tr><td>".$row['prod']."<td>"; echo "<input type=hidden name=codprod value=".$row['codprod'].">"; echo "<input size=2 name=local class=camufla value='".$row['loc']."'>"; echo "</form>";}
-
Falei besteira no final da mensagem anterior. Eu disse que o route do tutorial estava mais legível, mas não está não. Eu tentei colocar o view('theme') depois do Auth::routes( ); mas isso não mudou em nada. Não sei exatamente para que serve a instrução Auth::routes( ). Para bloquear o acesso ao view('theme') eu tive que mudar o route e criar um controller para essa função, assim: routes/web.php <?php use Illuminate\Support\Facades\Route; Auth::routes(); Route::get('/', [App\Http\Controllers\TesteController::class,'theme']); Route::get('/home', [App\Http\Controllers\HomeController::class, 'index'])->name('home'); app/Http/Controllers/TesteController.php <?php namespace App\Http\Controllers; use Illuminate\Http\Request; class TesteController extends Controller { public function __construct(){$this->middleware('auth');} public function theme(){return view('theme');}} Hoje, eu aprendi como barrar o usuário. Tudo indica que a function __construct( ) tem prioridade maior do que a função que foi originalmente chamada, se ele estiver dentro da mesma classe.
-
Usando str_replace na base da tentativa e erro
pergunta respondeu ao Frank K Hosaka de Frank K Hosaka em PHP
Hoje, encontrei uma dica no Google, que me ensinou a usar o MySQL. É possível editar a descrição diretamente no MySQL através do comando: update tabela set descricao=replace(descricao,"stringvelha","stringnova"); Isso é bem mais fácil que apelar para o PHP ou o Laravel.