
Frank K Hosaka
Membros-
Total de itens
1.623 -
Registro em
-
Última visita
Tudo que Frank K Hosaka postou
-
O Lary do Laracasts respondeu: Yes, there are several elegant solutions to control user access in Laravel. One of the most common ways is to use middleware. Middleware is a way to filter HTTP requests entering your application. You can create a middleware that checks if the user is authorized to access a particular route or function. Here's an example: Create a middleware using the following command: php artisan make:middleware CheckUserRole Open the app/Http/Middleware/CheckUserRole.php file and add the following code: <?php namespace App\Http\Middleware; use Closure; use Illuminate\Support\Facades\Auth; class CheckUserRole { public function handle($request, Closure $next, $role){ if (!Auth::check()) {return redirect('/login');} $user = Auth::user(); if ($user->role != $role) { return redirect('/menu');} return $next($request);} } Register the middleware in the app/Http/Kernel.php file: protected $routeMiddleware = [ // ... 'role' => \App\Http\Middleware\CheckUserRole::class, ]; Use the middleware in your routes: Route::get('/admin', function () { // Only users with the 'admin' role can access this route })->middleware('role:admin'); In this example, the middleware checks if the user is authenticated and has the required role to access the route. If the user is not authenticated, they are redirected to the login page. If the user is authenticated but does not have the required role, they are redirected to the menu page. This is just one example of how you can control user access in Laravel. There are many other ways to achieve this, depending on your specific requirements.
-
Eu tenho uma função chamada pagar, mas eu gostaria que só o usuário com o id=1 tivesse acesso a essa função. Hoje eu encontrei uma solução, não sei se é correto, mas ele funcionou para mim. No PHP eu coloquei a seguinte instrução: if($_SESSION['id']!==1){header('location:menu.php');} No Laravel, eu usei essa instrução: if(auth::id()!==1){return redirect('menu');}
-
Eu tentei subtrair dois <input>, mas o JavaScript me devolveu NaN como resposta. Depois de cinco horas no Google, achei essa solução: <?php echo "<input id=total size=7> Total<br>"; $js="t=parseFloat(total.value.replace(',','.'));"; $js.="d=parseFloat(dinheiro.value.replace(',','.'));"; $js.="tr=(d-t).toString();"; $js.="troco.value=tr.replace('.',',')"; echo "<input id=dinheiro size=7 onchange=$js> --> troco <input id=troco size=7>"; O JavaScript é muito bacana, mas tem hora que ele me tira do sério.
-
Desde 2020 é que venho escrevendo a mesma coisa no PHP, assim, $mysqli=new mysqli("localhost","root","","astudy"), só hoje é que aprendi um pouco mais sobre classe. A classe geralmente tem essa gramática: class mysqli { }, ou seja, uma classe não é a mesma coisa que uma função. Se a classe não é a mesma coisa que a função, como é que vou passar o host, o usuário, a senha e o banco de dados ao criar uma nova instância da classe? Eu nunca vi a classe mysqli do PHP, mas desconfio que ele seja mais ou menos assim: class mysqli { public $host; public $user; public $password; public $dbname; public function __construct($host=null,$user=null,$password=null,$dbname=null){ $this->host=$host; $this->user=$user; $this->password=$password; $this->dbname=$dbname;} } Desde 2020 é que vejo algumas classes com essa função __construct, mas eu não tinha a menor ideia para que ele servia. Hoje eu aprendi que o __construct é que vai criar uma nova classe mas com alguns parametros já pre definidos ou não. Para ter essa opção de usar uma classe com ou sem parâmetros, você precisa definir as variáveis dentro da função __construct, tipo "$host=null".
-
Ainda não achei a solução, mas encontrei um vídeo no YouTube que fala do JavaScript. No meu caso, o JavaScript usa o Windows para chegar na impressora. Essa é uma boa solução, se não for possível conectar o PHP na impressora. <script> w=window.open() w.document.write("olá mundo") w.print() w.close() </script>
-
Na minha opinião, o Neverstop é a melhor impressora doméstica que existe no mundo. Eu lembro da HP 500, todo santo mês eu precisava comprar um cartucho de tinta, até que um belo dia eu comprei um cartucho pirata e acabou melando toda a impressora. O meu Neverstop não é colorido, e só compro o toner a cada seis meses, e eu só troco quando não consigo enxergar mais nada. O mais bacana é que ele tem um adaptador WiFi, e assim ele não precisa ficar preso no notebook. Eu consigo imprimir tanto pelo notebook quanto pelo celular. O meu problema é o PHP. Na internet, eu consegui esse código: <?php $imprimir="Olá mundo!"; try { $fp=pfsockopen("192.168.0.18", 9100); fputs($fp, $imprimir); fclose($fp); echo 'Sucesso!!';} catch (Exception $e) { echo 'Problema: ', $e->getMessage(), "\n";} Esse programa escreve "sucesso" na tela, mas o máximo que ele faz é ativar a impressora, fazer o motor roncar um pouco e parar. Imprimir que é bom, nada. Alguém aqui já conseguiu imprimir pela rede local do WiFi, usando o PHP?
-
<?php $mateus5="1 Jesus, vendo a multidão, subiu a um monte, e, assentando-se, aproximaram-se dele os seus discípulos; 2 e, abrindo a boca, os ensinava, dizendo: 3 Bem-aventurados os pobres de espírito, porque deles é o Reino dos céus; 4 bem-aventurados os que choram, porque eles serão consolados; 5 bem-aventurados os mansos, porque eles herdarão a terra; 6 bem-aventurados os que têm fome e sede de justiça, porque eles serão fartos; 7 bem-aventurados os misericordiosos, porque eles alcançarão misericórdia; 8 bem-aventurados os limpos de coração, porque eles verão a Deus; 9 bem-aventurados os pacificadores, porque eles serão chamados filhos de Deus; 10 bem-aventurados os que sofrem perseguição por causa da justiça, porque deles é o Reino dos céus; 11 bem-aventurados sois vós quando vos injuriarem, e perseguirem, e, mentindo, disserem todo o mal contra vós, por minha causa. 12 Exultai e alegrai-vos, porque é grande o vosso galardão nos céus; porque assim perseguiram os profetas que foram antes de vós."; for($i=10;$i<=12;$i++){$mateus5=str_replace($i,"@",$mateus5);} for($i=1;$i<=9;$i++){$mateus5=str_replace($i,"@",$mateus5);} $mateus5=explode('@',$mateus5); $versiculos=count($mateus5); for($i=0;$i<$versiculos-1;$i++){$mateus5[$i]=trim($mateus5[$i+1]);} $descartar=array_pop($mateus5); var_dump($mateus5); //resultado: C:\wamp64\www\astudy\astudy.php:22: array (size=12) 0 => string 'Jesus, vendo a multidão, subiu a um monte, e, assentando-se, aproximaram-se dele os seus discípulos;' (length=104) 1 => string 'e, abrindo a boca, os ensinava, dizendo:' (length=40) 2 => string 'Bem-aventurados os pobres de espírito, porque deles é o Reino dos céus;' (length=74) 3 => string 'bem-aventurados os que choram, porque eles serão consolados;' (length=61) 4 => string 'bem-aventurados os mansos, porque eles herdarão a terra;' (length=57) 5 => string 'bem-aventurados os que têm fome e sede de justiça, porque eles serão fartos;' (length=81) 6 => string 'bem-aventurados os misericordiosos, porque eles alcançarão misericórdia;' (length=77) 7 => string 'bem-aventurados os limpos de coração, porque eles verão a Deus;' (length=68) 8 => string 'bem-aventurados os pacificadores, porque eles serão chamados filhos de Deus;' (length=79) 9 => string 'bem-aventurados os que sofrem perseguição por causa da justiça, porque deles é o Reino dos céus;' (length=103) 10 => string 'bem-aventurados sois vós quando vos injuriarem, e perseguirem, e, mentindo, disserem todo o mal contra vós, por minha causa.' (length=128) 11 => string 'Exultai e alegrai-vos, porque é grande o vosso galardão nos céus; porque assim perseguiram os profetas que foram antes de vós.' (length=134)
-
Já faz dois meses que estou enrolado para reescrever o projeto Polo ou Portaria, o meu problema é que o meu vocabulário em PHP, HTML e JavaScript é muito pobre, eu só sei usar $mysqli, <table> e alert( ). No projeto Polo tem dois checkbox. Para mandar o valor para uma outra página em PHP basta usar o elemento <form> e submeter. Mas eu mudei o escopo do código, ao invés de apagar tudo e prosseguir para a próxima página, vou manter o formulário do cadastro e pedir para o JavaScript conversar com o servidor e verificar se o cadastro foi aceito (ou não). Para saber como o JavaScript lê um checkbox, eu criei o seguinte código: <input type=checkbox id=checkbox onclick=alert(value)> A minha primeira tentativa não deu certo, o JS devolveu "on" e "off". A minha segunda tentativa foi assim: <input type=checkbox id=checkbox onclick=alert(checkbox.checked)> Não deu certo, o JS devolveu "true" ou "false". Finalmente, eu não tive escolha senão fazer gambiarra, que ficou assim: <input type=checkbox id=checkbox onclick=alert(checkbox.checked*1)> Agora sim, o JS devolve 1 ou 0. Esse é o problema de um programador com vocabulário pobre. Enquanto um programador profissional leva meia hora para reescrever um projeto, um programador meia boca vai levar bem mais de dois meses.
-
Nem tudo que parece json no PHP é considerado como válido. Depois de dois anos finalmente consegui fazer um json que parece inválido se tornar válido: <?php $fator="{'cod':520,'conv':0.1}"; var_dump($fator); $obj=json_decode(str_replace("'",'"',$fator)); var_dump($obj);
-
Eu vejo essa mensagem no painel de inspeção do navegador, quando executo esse código: teste.blade.php: <form method=post> @csrf <input name=email><input type=submit> </form> controller: public function teste(Request $request){ if($request->input("email")){ $email=$request->input("email"); dd($email);} return view('teste');} O código funciona, o problema é que eu não sei se posso simplesmente negligenciar a mensagem. De acordo com o Lary Laracasts, o problema é lá no servidor, no meu caso, seria o Hostinger. Como eu só pago R$ 23,00 por mês para hospedar as minhas coisas, não sei se tenho direito a reclamar alguma coisa. The error message "POST https://sample.net/teste/ 500 /teste/:1" indicates that there was a server-side error when attempting to make a POST request to the specified URL. This error is not related to the code provided in the question. To troubleshoot this error, you should check the server logs to see if there are any error messages that can provide more information about the cause of the error. Additionally, you can try making the same POST request using a tool like Postman to see if the error is specific to the code or if it is a server-side issue. As for the code provided, it appears to be functioning correctly. The form is submitting a POST request to the "teste" method in the controller, which is then retrieving the "email" input value and displaying it using the dd() function. If you want to display the email value on the page instead of using dd(), you can modify the controller code as follows: public function teste(Request $request){ $email = $request->input("email"); return view('teste', ['email' => $email]); } Then, in the teste.blade.php file, you can display the email value using: @if(isset($email)) <p>Email: {{ $email }}</p> @endif
-
Tem um monte de produtos que eu esqueci de cadastrar o NCM, fiz um código provisório para entrar com o NCM do produto. O máximo que eu consegui é fazer o código ir até o final da lista. O idel era se eu soubesse como pegar o penúltimo <input>. <?php include 'menu.php'; if(isset($_GET['codprod'])){ $codprod=$_GET['codprod']; $cf=$_GET['cf']; $query=$mysqli->query("update tbprod set cf=$cf where codprod=$codprod");} $lcto=4651; echo "<table>"; $query=$mysqli->query("select * from tbhistprod join tbprod on tbhistprod.codprod=tbprod.codprod where tbhistprod.lcto=$lcto"); while($row=$query->fetch_assoc()){ $codprod=$row['codprod'];$prod=$row['prod'];$cf=$row['cf']; echo " <tr><td>$codprod<td>$prod<td> <form> <input name=cf value='$cf' onchange=submit()> <input type=hidden name=codprod value=$codprod> </form>"; if($cf==""){echo "<tr><td><td><td><input autofocus>";exit;}} echo "</table>";
-
Como fazer o método GET funcionar no Laravel?
pergunta respondeu ao Frank K Hosaka de Frank K Hosaka em PHP
Snapey do Laracasts encontrou centenas de erros no meu código: put quotes around your field name and value <form> <input name="up" value="{{$texto}}"> <input type="submit"> </form> if you want to get the value from the database $texto=teste::where('id',1)->first()->value('texto'); Class names (eg model name) should be capitalised, eg Teste If you are changing the data at the server, your method should be POST or PATCH and not GET -
Esse é o método GET no PHP: <?php $mysqli=new mysqli("localhost","root","","astudy"); if(isset($_GET['up'])){ $novotexto=$_GET['up']; $query=$mysqli->query("update teste set texto='$novotexto' where id=1");} $query=$mysqli->query("select texto from teste where id=1"); $texto=$query->fetch_assoc()['texto']; echo " <form> <input name=up value=$texto> <input type=submit> </form>"; Para fazer um código equivalente no Laravel, você precisa definir o Route, o Model, o Controller e o Blade, aqui só vou listar os dois últimos: teste.blade.php <form> <input name=up value={{$texto}}> <input type=submit> </form> testeController <?php namespace App\Http\Controllers; use App\Models\teste; use Illuminate\Http\Request; class testeController extends Controller { public function teste (Request $request){ if($request->input('up')){ $up=$request->input('up'); teste::where('id',1)->update(['texto'=>$up]);} $texto=teste::where('id',1)->value('texto'); return view('teste',['texto'=>$texto]); } } Os dois códigos funcionam somente se você colocar qualquer coisa na caixa do <input>, mas se você não colocar nada, só o código do PHP é que funciona. Para fazer o GET funcionar no Laravel eu fiz uma tremenda gambiarra e já fiz ele funcionar. O problema é o PHP, como ele consegue definir o valor da variável $_GET['up'], se o indexador só tem um lado da equação assim "up=". O PHP é fascinante!
-
Eu sempre tive problema na hora de usar a interpolação $ { } no JavaScript, eu não sei se isso é recurso nativo do Java, ou se faz parte do JQuery, ou se faz parte do Ajax, enfim, eu nunca consegui fazer funcionar. Assim, eu uso o seguinte método para usar o JavaScript: <script> objectDate=new Date() day=objectDate.getDate() if(day<10){day='0'+day} month=objectDate.getMonth()+1 if(month<10){month='0'+month} year=objectDate.getFullYear() TODAY=day+month+year filename="/home/imar/backup/imar_syscapturas"+TODAY+".backup" alert(filename) </script>
-
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)> -
Azulando a barra de navegação do Bootstrap 5.3 (Sidebars)
pergunta respondeu ao Frank K Hosaka de Frank K Hosaka em HTML, XHTML, CSS
-
O Bootstrap é bacana, mas na hora de baixar o exemplo e testar por aqui, é puro desespero. Tudo parece estático, nada se mexe. Para dar movimento, eu preciso consultar o Google. Hoje, por exemplo, eu queria azular as opções de barra de navegação, ao passar o mouse por cima deles. Eu tive a sorte de encontrar essa dica: css bootstrap use active in a list <li> - Stack Overflow E com ele, eu consegui fazer um sidebar básico com o Bootstrap 5.3: <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0-alpha3/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-KK94CHFLLe+nY2dmCWGMq91rCGa5gtU4mk92HdvYe+M/SXH301p5ILy+dN9+nJOZ" crossorigin="anonymous"> <style> ul.nav a:hover{background:blue} .bd-placeholder-img {font-size: 1.125rem;text-anchor: middle;-webkit-user-select: none; -moz-user-select: none;user-select: none;} @media (min-width: 768px) {.bd-placeholder-img-lg {font-size: 3.5rem;}} .b-example-divider {width: 100%;height: 3rem;background-color: rgba(0, 0, 0, .1); border: solid rgba(0, 0, 0, .15);border-width: 1px 0; box-shadow: inset 0 .5em 1.5em rgba(0, 0, 0, .1), inset 0 .125em .5em rgba(0, 0, 0, .15);} .b-example-vr {flex-shrink: 0;width: 1.5rem;height: 100vh;} .bi {vertical-align: -.125em;fill: currentColor;} .nav-scroller {position: relative;z-index: 2;height: 2.75rem;overflow-y: hidden;} .nav-scroller .nav {display: flex;flex-wrap: nowrap;padding-bottom: 1rem; margin-top: -1px;overflow-x: auto;text-align: center; white-space: nowrap;-webkit-overflow-scrolling: touch;} .btn-bd-primary {--bd-violet-bg: #712cf9; --bd-violet-rgb: 112.520718, 44.062154, 249.437846; --bs-btn-font-weight: 600;--bs-btn-color: var(--bs-white); --bs-btn-bg: var(--bd-violet-bg); --bs-btn-border-color: var(--bd-violet-bg); --bs-btn-hover-color: var(--bs-white); --bs-btn-hover-bg: #6528e0;--bs-btn-hover-border-color: #6528e0; --bs-btn-focus-shadow-rgb: var(--bd-violet-rgb); --bs-btn-active-color: var(--bs-btn-hover-color); --bs-btn-active-bg: #5a23c8;--bs-btn-active-border-color: #5a23c8;} .bd-mode-toggle {z-index: 1500;} </style> <svg xmlns="http://www.w3.org/2000/svg" style="display: none;"> <symbol id="bootstrap" viewBox="0 0 118 94"><title>Bootstrap</title> <path fill-rule="evenodd" clip-rule="evenodd" d="M24.509 0c-6.733 0-11.715 5.893-11.492 12.284.214 6.14-.064 14.092-2.066 20.577C8.943 39.365 5.547 43.485 0 44.014v5.972c5.547.529 8.943 4.649 10.951 11.153 2.002 6.485 2.28 14.437 2.066 20.577C12.794 88.106 17.776 94 24.51 94H93.5c6.733 0 11.714-5.893 11.491-12.284-.214-6.14.064-14.092 2.066-20.577 2.009-6.504 5.396-10.624 10.943-11.153v-5.972c-5.547-.529-8.934-4.649-10.943-11.153-2.002-6.484-2.28-14.437-2.066-20.577C105.214 5.894 100.233 0 93.5 0H24.508zM80 57.863C80 66.663 73.436 72 62.543 72H44a2 2 0 01-2-2V24a2 2 0 012-2h18.437c9.083 0 15.044 4.92 15.044 12.474 0 5.302-4.01 10.049-9.119 10.88v.277C75.317 46.394 80 51.21 80 57.863zM60.521 28.34H49.948v14.934h8.905c6.884 0 10.68-2.772 10.68-7.727 0-4.643-3.264-7.207-9.012-7.207zM49.948 49.2v16.458H60.91c7.167 0 10.964-2.876 10.964-8.281 0-5.406-3.903-8.178-11.425-8.178H49.948z"> </path></symbol> <symbol id="home" viewBox="0 0 16 16"> <path d="M8.354 1.146a.5.5 0 0 0-.708 0l-6 6A.5.5 0 0 0 1.5 7.5v7a.5.5 0 0 0 .5.5h4.5a.5.5 0 0 0 .5-.5v-4h2v4a.5.5 0 0 0 .5.5H14a.5.5 0 0 0 .5-.5v-7a.5.5 0 0 0-.146-.354L13 5.793V2.5a.5.5 0 0 0-.5-.5h-1a.5.5 0 0 0-.5.5v1.293L8.354 1.146zM2.5 14V7.707l5.5-5.5 5.5 5.5V14H10v-4a.5.5 0 0 0-.5-.5h-3a.5.5 0 0 0-.5.5v4H2.5z" /> </symbol> <symbol id="speedometer2" viewBox="0 0 16 16"> <path d="M8 4a.5.5 0 0 1 .5.5V6a.5.5 0 0 1-1 0V4.5A.5.5 0 0 1 8 4zM3.732 5.732a.5.5 0 0 1 .707 0l.915.914a.5.5 0 1 1-.708.708l-.914-.915a.5.5 0 0 1 0-.707zM2 10a.5.5 0 0 1 .5-.5h1.586a.5.5 0 0 1 0 1H2.5A.5.5 0 0 1 2 10zm9.5 0a.5.5 0 0 1 .5-.5h1.5a.5.5 0 0 1 0 1H12a.5.5 0 0 1-.5-.5zm.754-4.246a.389.389 0 0 0-.527-.02L7.547 9.31a.91.91 0 1 0 1.302 1.258l3.434-4.297a.389.389 0 0 0-.029-.518z" /> <path fill-rule="evenodd" d="M0 10a8 8 0 1 1 15.547 2.661c-.442 1.253-1.845 1.602-2.932 1.25C11.309 13.488 9.475 13 8 13c-1.474 0-3.31.488-4.615.911-1.087.352-2.49.003-2.932-1.25A7.988 7.988 0 0 1 0 10zm8-7a7 7 0 0 0-6.603 9.329c.203.575.923.876 1.68.63C4.397 12.533 6.358 12 8 12s3.604.532 4.923.96c.757.245 1.477-.056 1.68-.631A7 7 0 0 0 8 3z" /> </symbol> <symbol id="table" viewBox="0 0 16 16"> <path d="M0 2a2 2 0 0 1 2-2h12a2 2 0 0 1 2 2v12a2 2 0 0 1-2 2H2a2 2 0 0 1-2-2V2zm15 2h-4v3h4V4zm0 4h-4v3h4V8zm0 4h-4v3h3a1 1 0 0 0 1-1v-2zm-5 3v-3H6v3h4zm-5 0v-3H1v2a1 1 0 0 0 1 1h3zm-4-4h4V8H1v3zm0-4h4V4H1v3zm5-3v3h4V4H6zm4 4H6v3h4V8z" /> </symbol> <symbol id="people-circle" viewBox="0 0 16 16"> <path d="M11 6a3 3 0 1 1-6 0 3 3 0 0 1 6 0z" /> <path fill-rule="evenodd" d="M0 8a8 8 0 1 1 16 0A8 8 0 0 1 0 8zm8-7a7 7 0 0 0-5.468 11.37C3.242 11.226 4.805 10 8 10s4.757 1.225 5.468 2.37A7 7 0 0 0 8 1z" /> </symbol> <symbol id="grid" viewBox="0 0 16 16"> <path d="M1 2.5A1.5 1.5 0 0 1 2.5 1h3A1.5 1.5 0 0 1 7 2.5v3A1.5 1.5 0 0 1 5.5 7h-3A1.5 1.5 0 0 1 1 5.5v-3zM2.5 2a.5.5 0 0 0-.5.5v3a.5.5 0 0 0 .5.5h3a.5.5 0 0 0 .5-.5v-3a.5.5 0 0 0-.5-.5h-3zm6.5.5A1.5 1.5 0 0 1 10.5 1h3A1.5 1.5 0 0 1 15 2.5v3A1.5 1.5 0 0 1 13.5 7h-3A1.5 1.5 0 0 1 9 5.5v-3zm1.5-.5a.5.5 0 0 0-.5.5v3a.5.5 0 0 0 .5.5h3a.5.5 0 0 0 .5-.5v-3a.5.5 0 0 0-.5-.5h-3zM1 10.5A1.5 1.5 0 0 1 2.5 9h3A1.5 1.5 0 0 1 7 10.5v3A1.5 1.5 0 0 1 5.5 15h-3A1.5 1.5 0 0 1 1 13.5v-3zm1.5-.5a.5.5 0 0 0-.5.5v3a.5.5 0 0 0 .5.5h3a.5.5 0 0 0 .5-.5v-3a.5.5 0 0 0-.5-.5h-3zm6.5.5A1.5 1.5 0 0 1 10.5 9h3a1.5 1.5 0 0 1 1.5 1.5v3a1.5 1.5 0 0 1-1.5 1.5h-3A1.5 1.5 0 0 1 9 13.5v-3zm1.5-.5a.5.5 0 0 0-.5.5v3a.5.5 0 0 0 .5.5h3a.5.5 0 0 0 .5-.5v-3a.5.5 0 0 0-.5-.5h-3z" /> </symbol> </svg> <div class="d-flex flex-column flex-shrink-0 p-3 text-bg-dark" style="width: 280px;"> <a href="#" class="d-flex align-items-center mb-3 mb-md-0 me-md-auto text-white text-decoration-none"> <svg class="bi pe-none me-2" width="40" height="32"><use xlink:href="#bootstrap"/></svg> <span class="fs-4">Sidebar</span></a> <ul class="nav nav-pills flex-column mb-auto"> <li class="nav-item"> <a href="#" class="nav-link text-white" aria-current="page"> <svg class="bi pe-none me-2" width="16" height="16"><use xlink:href="#home"/></svg> Home</a></li> <li> <a href="#" class="nav-link text-white"> <svg class="bi pe-none me-2" width="16" height="16" role="link"><use xlink:href="#speedometer2"/></svg> Dashboard</a></li><li> <a href="#" class="nav-link text-white"> <svg class="bi pe-none me-2" width="16" height="16" role="link"><use xlink:href="#table"/></svg> Orders</a></li><li> <a href="#" class="nav-link text-white"> <svg class="bi pe-none me-2" width="16" height="16" role="tabpanel"><use xlink:href="#grid"/></svg> Products</a></li> <li> <a href="#" class="nav-link text-white"> <svg class="bi pe-none me-2" width="16" height="16" role="tabpanel"><use xlink:href="#people-circle"/></svg> Customers</a></li></ul>