Ir para conteúdo
Fórum Script Brasil

Frank K Hosaka

Membros
  • Total de itens

    1.578
  • Registro em

  • Última visita

Tudo que Frank K Hosaka postou

  1. Não testei, mas acho que a solução está aqui: Conexão do MS Access e PHP - Stack Overflow em Português
  2. Com a ajuda do YouTube LARAVEL BÁSICO PARA INICIANTES - PARTE 1 de 3 - YouTube consegui abrir a pasta Usuários>frank>example-app com o Visual Studio Code, e de lá contemplar o código web.app routes>web.app ----------------------------------------------- <?php use Illuminate\Support\Facades\Route Route::get('/', function () { return view('welcome'); }); Também aprendi que não preciso do Ubuntu para ativar o servidor do Laravel, dá para fazer pelo prompt do Windows: C:\Users\frank\example-app>php artisan serv Seguindo o tutorial do YouTube, alterei return view('welcome') para return '<h1>olá mundo!</h1>, fui no navegador e digitei localhost:8000 e eu vi novamente a tela de boas vindas do Laravel. Eu esqueci de salvar o arquivo.
  3. Frank K Hosaka

    Id do Array

    $cadatroUsuarioEmpresa['user_id'] = $inputDadosCadastro['user_id']; Pelo código que você passou, não dá para dizer se a variável $inputDadosCadastro['user_id'] contém o valor que você afirma que foi gerado. Eu precisaria de mais informações para depurar todo o programa, para saber se a variável tem a informação que você precisa. Por outro lado, achei interessante essa parte do código: $cadatroUsuario = array(); $cadatroUsuario['user_email'] = $inputDadosCadastro['user_email']; $cadatroUsuario['user_password'] = md5($inputDadosCadastro['user_password']); $cadatroUsuario['user_level'] = 3; $cadatroUsuario['user_registration'] = date('Y-m-d H:i:s'); $addbanco->ExeCreate("ws_users", $cadatroUsuario); Para mim, você está tentando incluir um array na tabela ws_users, mas não dá para afirmar nada sem ver a classe que está vinculado à variável $addbanco. Eu simulei um teste aqui e consegui isso: <?php $mysqli= new mysqli("localhost","root","","astudy"); $cadastroUsuario = array(); $cadastroUsuario['email'] = 'rogerio@gmail.com'; $cadastroUsuario['nome']='Rogerio Ceni'; $jcadastro=json_encode($cadastroUsuario); $query=$mysqli->query("insert into tbusuario (jcadastro) values ('$jcadastro')"); Ou seja, o PHP e o MySQL não permitem que eu salve um array num campo da tabela, a menos que o array seja convertido num json e o campo da tabela também seja um json.
  4. Eu ainda não sei o que é o Laravel, mas ele é bastante comentado no forum do PHP. Para eu não ficar de fora, tentei instalar no meu PC. Encontrei vários tutoriais no Google, e como sempre o que o Google mostra não é nada do que eu vejo na minha tela. Eu tive que ver o YouTube, e ele disse que o Laravel está instalado quando você digita "localhost:8000" no navegador e vê o logotipo do Laravel. Não era o meu caso. Certamente, eu fiz muita besteira no meio do caminho. Eu vi um tutorial para usar o Ubuntu com o comando sudo php artisan serve e a mensagem que eu recebi é de que o composer estava usando a versão antiga do PHP, quando deveria usar a mais nova. O meu sistema é o Windows, mas no meio da confusão eu consegui instalar o Ubuntu dentro do Windows. Procurei outro tutorial para consertar o erro, encontrei um interessante para alterar a varável do ambiente do Windows. Não deu certo, mesmo reiniciando quinhentas vezes. Apelei para o Google, e encontrei um tutorial muito bacana. Já que não dá para resolver pelo Windows, o negócio é apelar para o Ubuntu. Nesse tutorial, o rapaz ensina a instalar o PHP dentro do Ubuntu: Ways to install Laravel 8.0 on Windows 11 | by Jayden Chua | CodeX | Medium - muita coisa eu já havia feito, só priorizei os comandos que instalam o PHP no Ubuntu. Consegui até alterar a versão a ser usada no Ubuntu. E assim tentei de novo: sudo php artisan serve, e como sempre apareceu outra mensagem, dessa vez assim PHP Fatal error: Uncaught Error: Class 'DOMDocument' not found. Outra vez pedi ajuda para o Google, e ele me deu esse endereço: Class 'DOMDocument' not found | PHP Composer: Dependências, Autoload e Publicação | Solucionado (alura.com.br) Finalmente, o php artisan disse que o servidor estava ativo na porta 8000. Traduzindo em português, isso significa que eu preciso deixar a janela do Ubuntu aberta. Enfim, eu não sei para que serve o Laravel, mas pelo menos eu sei o quanto as pessoas apanharam para instalar no PC. Mas estou contente em rever o Ubuntu, eu usei uma vez em 1993, e acabei perdendo o meu PC, e assim nunca mais eu queria saber de Linux. Eu acho que fiz muita besteira, acho que o Ubuntu não é necessário para usar o Laravel no Windows, mas foi com o Ubuntu que consegui botar o logotipo da Laravel na tela do navegador. Eu ainda não usei, pois eu morro de medo de ver novas mensagens de erro.
  5. Eu também tive esse problema. Eu brinquei com o header("HTTP/1.1 301 Moved Permanently"); e fiquei cinco anos sem poder usar o WampServer, o MySQL, o PHP, o Facebook, o Windows e até o celular. Foi uma época triste, e ninguém sabe como resolver esse problema. Eu tentei de tudo, fui procurar o tal do .htacess do Apache e não achei. Quando o assunto é servidor, quase tudo é voltado para o Linux e nada para o Windows, que é o meu caso. Pensei em até pular da ponte. Mas eu fiz a minha última tentativa desesperada. Pedi para o Microsoft Edge limpar todo o histórico, todos os cokies, tudo o que havia ajuntado nos últimos trinta anos. E deu certo. Consegui acessar o localhost, graças a Deus. O chato é que eu não lembrava mais da senha para acessar o fórum Script Brasil.
  6. <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge" /> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Exemplo de inventário com MySQL, PHP, HTML e Bootstrap 5.2</title> <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.2.0/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-gH2yIJqKdNHPEq0n4Mqa/HGKIhSkIHeL5AyhkYV8i59U5AR6csBvApHHNl/vI1Bx" crossorigin="anonymous"> <style> .direita{text-align:right} .tela{width:500px} </style> <?php function dec($num) {if (empty($num)) {$fmt="";} else {$fmt = number_format($num,2,',','.'); return $fmt;}} $mysqli=new mysqli("localhost","root","","diario"); $query=$mysqli->query("select * from vw_inventario limit 10"); $linha=$query->fetch_all(MYSQLI_ASSOC); print "<div class=tela><table class='table table-sm table-striped'><th>Produto<th>Preço<th>Quantidade<th>Un<th>Estoque"; foreach ($linha as $listar) { $nomeProd = $listar['prod']; $p_venda = dec($listar['custo']*1.3); $quantidade = dec($listar['qtd']); $un=$listar['un']; $subtotal = dec($listar['custo']*1.3*$listar['qtd']); print "<tr><td nowrap>$nomeProd<td class=direita>$p_venda<td class=direita>$quantidade<td>$un<td class=direita>$subtotal";} print "</table></div>";
  7. Frank K Hosaka

    Dúvida no Código

    <?php $array=array( array( "registro" => 5, "data" => "14/10/2020", "horario" => "12:13 - 13:13 - 18:13 - 8:13", "ponto" => array ( "nome" => "ANDERSON LUIZ", "diasTrabalho" => "SEG-SEX", "horarioTrabalho" => "10 AS 18H" )), array ( "registro" => 4, "data" => "13/10/2020", "horario" => "15:29 - 16:11", "ponto" => array ( "registro" => 4, "nome" => "CAIO SANTOS", "diasTrabalho" => "SEG A SEX", "horarioTrabalho" => "9 AS 15H" )), array ( "registro" => 4, "data" => "14/10/2020", "horario" => "20:15", "ponto" => array ( "registro" => 4, "nome" => "CAIO SANTOS", "diasTrabalho" => "SEG A SEX", "horarioTrabalho" => "9 AS 15H")), array ( "registro" => 1, "data" => "13/10/2020", "horario" => "12:43 - 14:55", "ponto" => array ( "registro" => 1, "nome" => "DANIEL SANTOS", "diasTrabalho" => "SEG A SEX", "horarioTrabalho" => "9 AS 13H" ))); // ordenar o array asort($array); // listar horário de entrada por colaborador foreach($array as $key) { $registro=$key['registro']; $nome=$key['ponto']['nome']; $data=$key['data']; $horario=$key['horario']; if(empty($controle)){ $controle=$nome; echo "Registro $registro $nome <br> &nbsp &nbsp $data:$horario <br>"; goto prossegue;} if($controle==$nome){ echo "<br> &nbsp &nbsp $data:$horario<br>";} else {$controle=$nome; echo "Registro $registro $nome <br> &nbsp &nbsp $data:$horario";} prossegue: } Resultado: Registro 1 DANIEL SANTOS 13/10/2020:12:43 - 14:55 Registro 4 CAIO SANTOS 13/10/2020:15:29 - 16:11 14/10/2020:20:15 Registro 5 ANDERSON LUIZ 14/10/2020:12:13 - 13:13 - 18:13 - 8:13
  8. Eu não consegui arranjar uma solução para o registro contábil do cartão de crédito. O regime de competência permite que eu faça o lançamento, desde que eu tenha um documento, do tipo email do Uber. O Uber diz que vai cobrar R$ 15,00 por uma viagem do Jabaquara para Diadema. O lançamento ficaria assim: 1/9/22 D Transporte C Contas a Pagar, R$ 15,00, Visa Uber Jabaquara Olhando o balancete de 09/2022, tenho algo do tipo Contas a Pagar R$ 30,00 - como é que vou saber quanto do cartão de crédito tem nessa conta? Eu ainda não tenho a menor idéia, mas eu fiz a seguinte gambiarra, dessa vez, usando o regime de caixa: 10/10/22 C Contas a Pagar, R$ 15,00, Visa 09-22 10/10/22 D Transporte, R$ 15,00, Visa 01-09 Uber É óbvio que esse valor não vai aparecer no balancete de 09/2022, mas ele já está disponível no balancete de 10/2022. Ou seja, ao invés de usar a Contabilidade como uma maquina do tempo para olhar o passado, o que me impede de fazer lançamentos futuros? Claro que isso é uma péssima solução, mas com essa gambiarra eu posso usar a Contabilidade para acompanhar os lançamentos do cartão de crédito.
  9. Frank K Hosaka

    mysqldump e php

    Encontrei o tutorial de como fazer dump do MySQL pelo PHP nesse endereço: Backup do banco de dados MySQL com PHP – Rafael Couto - eu ainda prefiro fazer pelo Workbench.
  10. Comigo deu tudo certo, só precisei colocar aspas na consulta $criancas = "SELECT * FROM tbpessoa WHERE DtNasc BETWEEN '$menos9anos' AND '$dataatual'"; Veja também o MySQL e confira se DtNasc foi configurado como DATETIME.
  11. Com os campos id, senha, ip e vip não há como usar o relógio do sistema para definir o vip para 1 depois de 30 dias. Mas já que o programa consegue alterar o vip de 1 para 5, por que não altera para 1, quando o jogador tiver chegado no 5?
  12. A minha sugestão é colocar isso no começo do index2.php session_start(); if(!isset($_SESSION["usuario"])){ header("location:index.php");exit;} Mas é preciso definir o $_SESSION["usuario"] no código valida_user.php, senão quem está devidamente cadastrado não vai conseguir entrar na página index2.php.
  13. Frank K Hosaka

    mysqldump e php

    O correto é usar o comando exportar do PHPMyAdmin ou do MySQL Workbench, e não o PHP.
  14. Consegui consertar: <?php $username = "Frank"; $password = "1234"; if (!isset($_SERVER['PHP_AUTH_USER'])) { header('WWW-Authenticate: Basic realm="My Realm"'); header('HTTP/1.0 401 Unauthorized'); echo 'Usuário não autenticou a conta e senha'; exit;} else { if($_SERVER['PHP_AUTH_USER'] != $username || $_SERVER['PHP_AUTH_PW'] != $password){echo "senha incorreta!";exit;}} echo "você está no estágio 2";
  15. Esse é um problema que enfrento há dois anos e não sei como resolver. O json_decode está retornando nulo para a $pagina porque ele entende que a $pagina não é um json válido. A pergunta que eu faço há dois anos é como tornar um texto no formato json se tornar válido no mundo do PHP. Como eu não entendo nada de programação, eu usei o famigerado método da tentativa e erro. Copiei a página http://transparencia.se.sesc.com.br/transparencia/api/licitacoes dentro do Notepad+. O Notepad+ ajuda bastante, pois ele avermelha as chaves { } e assim fica fácil separar as informações por parte e criar o arquivo astudy.php, assim astudy.php ------------------------------------ <?php $p001='{"pagina_total":3,"pagina_atual":1,"pagina_anterior":null,"pagina_proxima":2,"registro_total":21,"registro_atual":10}'; $teste=json_decode($p001);var_dump($teste); $p002='{"id":54,"identificacao":"Edital de Concorr\u00eancia N\u00b0 22\/000017","objeto":"Contrata\u00e7\u00e3o de empresa especializada para execu\u00e7\u00e3o das obras de revitaliza\u00e7\u00e3o da \u00e1rea de entorno das piscinas e recupera\u00e7\u00e3o do parque aqu\u00e1tico das unidades Sesc Praia e Sesc Beira Rio.","data_publicacao":"2022-08-19","data_abertura":"2022-09-06","local":"Sesc Caixeral Parna\u00edba-PI","telefone":"86 3217-2852","email":"licitasescpi@pi.sesc.com.br","processo":"N\u00b0 22\/000017","vencedores":[],"responsavel":"Supervis\u00e3o de Licita\u00e7\u00e3o","valor":"","modalidade":"Concorr\u00eancia","documentos":[{"descricao":"Edital de Concorr\u00eancia","arquivo":"http:\/\/transparencia.se.sesc.com.br\/uploads\/licitacao\/18\/54\/54-edital-de-concorrencia-1661169326.pdf","tipo":null,"data":"2022-08-19 00:00:00"},{"descricao":"Anexo IV","arquivo":"http:\/\/transparencia.se.sesc.com.br\/uploads\/licitacao\/18\/54\/54-anexo-iv-1660909754.pdf","tipo":null,"data":"2022-08-19 00:00:00"},{"descricao":"Anexo III","arquivo":"http:\/\/transparencia.se.sesc.com.br\/uploads\/licitacao\/18\/54\/54-anexo-iii-1660909732.pdf","tipo":null,"data":"2022-08-19 00:00:00"},{"descricao":"ANEXO II ","arquivo":"http:\/\/transparencia.se.sesc.com.br\/uploads\/licitacao\/18\/54\/54-anexo-ii-1660909699.pdf","tipo":null,"data":"2022-08-19 00:00:00"},{"descricao":"Anexo I","arquivo":"http:\/\/transparencia.se.sesc.com.br\/uploads\/licitacao\/18\/54\/54-anexo-i-1660909679.pdf","tipo":null,"data":"2022-08-19 00:00:00"},{"descricao":"Aviso de Licita\u00e7\u00e3o","arquivo":"http:\/\/transparencia.se.sesc.com.br\/uploads\/licitacao\/18\/54\/54-aviso-de-licitacao-1660909627.pdf","tipo":null,"data":"2022-08-19 00:00:00"}],"classificados":[],"desclassificados":[]}'; $teste=json_decode($p002);var_dump($teste); $p003=`{"id":53,"identificacao":" Edital de Concorr\u00eancia RP N\u00b0 22\/000015","objeto":"Aquisi\u00e7\u00e3o de Materiais de Consumo Odontol\u00f3gico EPI'S para atender as demandas das clinicas odontol\u00f3gicas do Sesc\/PI.","data_publicacao":"2022-07-12","data_abertura":"2022-07-27","local":"Sesc AR\/PI","telefone":"86 3217-2852","email":"licitasescpi@pi.sesc.com.br","processo":"RP N\u00b0 22\/000015","vencedores":[],"responsavel":"Supervis\u00e3o de Licita\u00e7\u00e3o","valor":"","modalidade":"Concorr\u00eancia","documentos":[{"descricao":"Aviso de Resultado de Classifica\u00e7\u00e3o das Propostas","arquivo":"http:\/\/transparencia.se.sesc.com.br\/uploads\/licitacao\/18\/53\/53-aviso-de-resultado-de-classificacao-das-propostas-1659095595.pdf","tipo":null,"data":"2022-07-28 00:00:00"},{"descricao":"Ata de Sess\u00e3o 01","arquivo":"http:\/\/transparencia.se.sesc.com.br\/uploads\/licitacao\/18\/53\/53-ata-de-sessao-01-1658939463.pdf","tipo":null,"data":"2022-07-27 00:00:00"},{"descricao":"Edital de Concorr\u00eancia","arquivo":"http:\/\/transparencia.se.sesc.com.br\/uploads\/licitacao\/18\/53\/53-edital-de-concorrencia-1657812850.pdf","tipo":null,"data":"2022-07-27 00:00:00"},{"descricao":"Aviso de Licita\u00e7\u00e3o","arquivo":"http:\/\/transparencia.se.sesc.com.br\/uploads\/licitacao\/18\/53\/53-aviso-de-licitacao-1657797988.pdf","tipo":null,"data":"2022-07-12 00:00:00"},{"descricao":"MINUTA DO CONTRATO","arquivo":"http:\/\/transparencia.se.sesc.com.br\/uploads\/licitacao\/18\/53\/53-minuta-do-contrato-1658160342.docx","tipo":null,"data":"2022-02-27 00:00:00"}],"classificados":[],"desclassificados":[]}`; $teste=json_decode($p003);var_dump($teste); Para montar a variável $p003 eu tive que improvisar. O texto tem aspas simples e duplas ao mesmo tempo, e desconfio que é isso é que faz o PHP entender que o json não é válido. Para colocar o texto na variável eu usei as aspas inclinadas (é o acento agudo), e isso NÃO deu certo, o PHP insiste em reclamar que o $p003 é nulo, ou seja, não é um json válido. O resultado ficou assim: C:\wamp64\www\astudy\astudy.php:3: object(stdClass)[1] public 'pagina_total' => int 3 public 'pagina_atual' => int 1 public 'pagina_anterior' => null public 'pagina_proxima' => int 2 public 'registro_total' => int 21 public 'registro_atual' => int 10 C:\wamp64\www\astudy\astudy.php:6: object(stdClass)[2] public 'id' => int 54 public 'identificacao' => string 'Edital de Concorrência N° 22/000017' (length=37) public 'objeto' => string 'Contratação de empresa especializada para execução das obras de revitalização da área de entorno das piscinas e recuperação do parque aquático das unidades Sesc Praia e Sesc Beira Rio.' (length=194) public 'data_publicacao' => string '2022-08-19' (length=10) public 'data_abertura' => string '2022-09-06' (length=10) public 'local' => string 'Sesc Caixeral Parnaíba-PI' (length=27) public 'telefone' => string '86 3217-2852' (length=12) public 'email' => string 'licitasescpi@pi.sesc.com.br' (length=27) public 'processo' => string 'N° 22/000017' (length=13) public 'vencedores' => array (size=0) empty public 'responsavel' => string 'Supervisão de Licitação' (length=26) public 'valor' => string '' (length=0) public 'modalidade' => string 'Concorrência' (length=13) public 'documentos' => array (size=6) 0 => object(stdClass)[3] public 'descricao' => string 'Edital de Concorrência' (length=23) public 'arquivo' => string 'http://transparencia.se.sesc.com.br/uploads/licitacao/18/54/54-edital-de-concorrencia-1661169326.pdf' (length=100) public 'tipo' => null public 'data' => string '2022-08-19 00:00:00' (length=19) 1 => object(stdClass)[4] public 'descricao' => string 'Anexo IV' (length=8) public 'arquivo' => string 'http://transparencia.se.sesc.com.br/uploads/licitacao/18/54/54-anexo-iv-1660909754.pdf' (length=86) public 'tipo' => null public 'data' => string '2022-08-19 00:00:00' (length=19) 2 => object(stdClass)[5] public 'descricao' => string 'Anexo III' (length=9) public 'arquivo' => string 'http://transparencia.se.sesc.com.br/uploads/licitacao/18/54/54-anexo-iii-1660909732.pdf' (length=87) public 'tipo' => null public 'data' => string '2022-08-19 00:00:00' (length=19) 3 => object(stdClass)[6] public 'descricao' => string 'ANEXO II ' (length=9) public 'arquivo' => string 'http://transparencia.se.sesc.com.br/uploads/licitacao/18/54/54-anexo-ii-1660909699.pdf' (length=86) public 'tipo' => null public 'data' => string '2022-08-19 00:00:00' (length=19) 4 => object(stdClass)[7] public 'descricao' => string 'Anexo I' (length=7) public 'arquivo' => string 'http://transparencia.se.sesc.com.br/uploads/licitacao/18/54/54-anexo-i-1660909679.pdf' (length=85) public 'tipo' => null public 'data' => string '2022-08-19 00:00:00' (length=19) 5 => object(stdClass)[8] public 'descricao' => string 'Aviso de Licitação' (length=20) public 'arquivo' => string 'http://transparencia.se.sesc.com.br/uploads/licitacao/18/54/54-aviso-de-licitacao-1660909627.pdf' (length=96) public 'tipo' => null public 'data' => string '2022-08-19 00:00:00' (length=19) public 'classificados' => array (size=0) empty public 'desclassificados' => array (size=0) empty C:\wamp64\www\astudy\astudy.php:9:null Fiz mais uma tentativa, tentei substituir todas as aspas simples por duplas. O Notepad+ não fez! Então, pedi para substituir todas as aspas simples por @, e depois o @ por aspas duplas. Também não deu certo. Estudando mais um pouco a variável $p003, eu percebi que o problema não é as aspas, mas é que havia um aspas que não deveria estar lá, assim EPI'S para atender. Eu arranquei na unha, e agora sim eu consegui converter o $p003 em json. O PHP é o melhor programa do mundo, quando funciona.
  16. Eu faria assim: <input type=checkbox name=aceito onclick=btncadastrar.disabled=false>Li e estou de Acordo.<br><br> <input type=submit id=btncadastrar name=btnCadUsuario value=Cadastrar disabled><br><br>
  17. Eu acredito que o problema está nessa linha: <script type="text/javascript" src="https://www.google.com/jsapi"></script> Para montar o gráfico, você precisa ter uma conexão com a internet, chegar até o Google e de lá usar o API jsapi. Desconfio que o sistema do seu trabalho não permite a conexão com a internet.
  18. astudy.php -------------------------------- <?php $participantes = array("1 - Rafael", "2 - João", "3 - Maria", "4 - Pedro", "5 - Patricia", "6 - Camila", "7 - Roberto", "8 - Rafael",); $numParticipantes = sizeof($participantes); $chances = round((1 / $numParticipantes) * 100); echo "- Temos no total <b>".$numParticipantes."</b> participantes;<br>"; echo "- Cada participante teve <b>".$chances."%</b> de chance de ganhar;<br><br>"; $sorteado[1] = $participantes[rand(0,$numParticipantes - 1)]; for ($i = 1; $i < 2; $i++) { $sorteado[2] = $participantes[rand(0,$numParticipantes - 1)]; if ($sorteado[2] == $sorteado[1]) {--$i;}} //for ($i = 1; $i < 2; $i++) { // $sorteado[3] = $participantes[rand(0,$numParticipantes - 1)]; // if ($sorteado[3] == $sorteado[1] || $sorteado[3] == $sorteado[2]) {--$i;}} echo "<b>Ganhadores:</b> <br>"; echo $sorteado[1] . "<br>"; echo $sorteado[2] . "<br>"; $mensagem="os sorteados foram $sorteado[1] e $sorteado[2]"; // <------------------ file_put_contents("sorteio.txt",$mensagem); // <------------------ echo "<p><input type=button value='SORTEAR !' onclick=document.location.reload(true)>" ?> astudy2.php -------------------------------------------------- <?php echo file_get_contents("sorteio.txt");
  19. Ontem eu conheci o <datalist> e gostei dele. Ao invés de trabalhar com dois arquivos, um HTML com Jquery e outro PHP, o <datalist> resume tudo numa só página PHP. Eu não tenho certeza, mas o Autocomplete do Jquery dá a impressão que ele executa a consulta no MySQL toda vez que o usuário tecla a caixa de busca. O Autocomplete do Jquery lista "Limao" se você escrever "limão" na caixa, esse não é o caso do <datalist>, mesmo assim o resultado é satisfatório, uma vez que o <datalist> é capaz de listar "banana" quando você digita "nana". No código abaixo eu fiz de tudo para evitar de colocar o botão de confirmação, mas não consegui. Não sei como fazer o <form> submeter assim que você seleciona o item. <?php $mysqli=new mysqli("localhost","root","","diario"); if (isset($_POST['inpproduto'])){ echo "Produto ".$_POST['inpproduto'];echo "<input type=submit onclick=location.replace('astudy.php')>";exit;} $query=$mysqli->query("select * from tbprod order by prod"); ?> <!DOCTYPE html> <html> <meta charset="UTF-8"> <title>Autocomplete Textbox in HTML5 PHP and MySQL</title> <label for="inpproduto">Produto</label> <form method=post> <input type="text" list="produto" id="inpproduto" name="inpproduto" size=45 autofocus onclick=submit()> <datalist id="produto"> <?php while($row=$query->fetch_assoc()) { $prod=$row['prod'];?> <option><?=$prod?></option> <?php } ?> </datalist> </form>
  20. O tutorial que encontrei na internet vem com quatro arquivos e seleciona um país pela letra. Eu reduzi tudo para dois arquivos, e ele busca o produto e também traz o preço de venda. O interessante no código é que ele mostra como usar o código PHP na hora de enfrentar o dilema das aspas simples e aspas duplas. A dica é simplesmente sair fora do código PHP e usar o máximo de HTML. Essa é uma solução engenhosa que eu não consegui compreender nesses dois últimos anos. Faz tempo que ouço falar de Jquery e Ajax, mas só hoje é que consegui fazer eles funcionarem. O meu sonho é mandar um json do PHP para o JavaScript, mas ainda estou apanhando bastante. Esse autocomplementar do Jquery Ajax é fora de série, ele vai ajudar bastante a melhorar o meu projeto. O código que segue é apenas um esboço, falta melhorar muita coisa, ele ainda não é prático. astudy.php ----------------------------------------------- <html> <head> <!-- algoritmo baseado em https://phppot.com/jquery/jquery-ajax-autocomplete-country-example/ --> <head> <style> body{width:610px;} .frmSearch {border: 1px solid #a8d4b1;background-color: #c6f7d0;margin: 2px 0px;padding:40px;border-radius:4px;} #listaproduto{float:left;list-style:none;margin-top:-3px;padding:0;width:390px;position: absolute;} #listaproduto tr{padding: 10px; background: #f0f0f0; border-bottom: #bbb9b9 1px solid;} #listaproduto tr:hover{background:#ece3d2;cursor: pointer;} #search-box{padding: 10px;border: #a8d4b1 1px solid;border-radius:4px;} </style> <script src="https://code.jquery.com/jquery-2.1.1.min.js" type="text/javascript"></script> <script> $(document).ready(function(){ $("#cxbusca").keyup(function(){ $.ajax({ type: "POST", url: "astudy2.php", data:'tecla='+$(this).val(), success: function(data){ $("#cxsugestao").show(); $("#cxsugestao").html(data); $("#cxbusca").css("background","#FFF");}});});}); function selectCountry(prod,venda) { $("#cxbusca").val(prod); avenda.innerHTML=venda; $("#cxsugestao").hide();} </script> </head> <body> <table class=frmSearch><tr><th>Produto<th>Venda <tr><td><input id="cxbusca" placeholder="Produto" size=40><td><a id=avenda></a> </table> <div id="cxsugestao"></div> </div> </body> </html> astudy2.php --------------------------------------------- <?php $mysqli=new mysqli("localhost","root","","diario"); if(!empty($_POST["tecla"])) { $query=$mysqli->query("select * from tbprod where prod like '%".$_POST['tecla']."%' order by prod limit 100"); if(!empty($query)) { echo "<table id='listaproduto'>"; foreach($query as $row) { $prod=$row['prod']; $venda=$row['custo']*1.3 ?> <tr onClick="selectCountry('<?=$prod?>','<?=$venda?>')"> <?php echo "<td>$prod<td>$venda"; } echo "</table>"; } }
  21. Eu criei o seguinte código <?php echo "<h2>Esfiha de carne a R$ 1,69 pelo App Habib's<h2> <p><h2>Esfiha de carne a R$ 2,74 sem o App Habib's<h2> <p><h2>Não cobramos taxa de serviço se for retirar<h2> <p><h2>A taxa de serviço é de 10% se for consumir no estabelecimento<h2>";?> e criei dois arquivos. Um chamei de astudy.html e o outro chamei de astudy.php. O resultado foi um desastre:
  22. Em 2020, eu consegui resolver o problema da conexão do notebook com o celular com a ajuda do WampServer e ngrok. Aqui em 2022, eu consegui hospedar o meu banco de dados na internet, mas ainda está em fase experimental. É uma ferramenta bem melhor que o meu notebook, mas eu recebo muitas mensagens de erro, que ainda não sei como consertar. Faço tudo na base da tentativa e erro, e o resultado é um monte de tempo perdido e um monte de telas horrorosas (estou anexando duas telas, um sem Bootstrap, outro com Booststrap). Nenhuma delas resolve o problema principal: como o usuário vai localizar um produto pelo celular se ele nem sabe ler e escrever? Para resolver esse problema, o WampServer tem duas soluções chamada PHP e MySQL, um é para guardar todos os produtos e o outro é para mostrar os produtos na tela do celular através da linguagem HTML. A linguagem HTML é um conjunto imenso de marcadores, mas eu só sei usar 2% do marcador <input>. Graças ao fórum Script Brasil, eu consegui até arrancar um calendário de um <input>. Com a ajuda do Google e o Script Brasil estou no pré-primário do HTML. O Google me ajudou a usar o marcador <link> e assim consegui trazer a beleza do Bootstrap para as minhas apresentações. Hoje, o Google me ensinou a diminuir o espaço das linhas da classe "table table-striped" do Bootstrap, usando esse outro marcador: <style>tr {line-height: 25px; min-height: 25px;height: 25px;}</style> No entanto, isso é só maquiagem. Desde 1999 eu venho fazendo a pergunta "como colocar os produtos na tela do celular?", e ontem finalmente encontrei a resposta no Google: jQuery AJAX Autocomplete – Country Example - Phppot, fiz o download na pasta wamp64/www/astudy, fiz o teste e ele não funcionou, não consegui ver nenhum país, mas eu fiz uma gambiarra aqui e ali para ver se ele podia mostrar os produtos, e eu consegui! O programa é muito engenhoso! Claro que o usuário precisa saber ler e escrever, mas a beleza desse programa consiste exatamente nisso, ele vai procurar o produto usando como critério o que o usuário digitar no teclado!
  23. Eu só consegui isso: ::1 e usando esse código: astudy.php -------------------------------------------------------- <?php $ip = $_SERVER['REMOTE_ADDR']; echo "REMOTE_ADDR $ip"; echo "<p>Todas as configurações"; var_dump($_SERVER); ?> resultado: --------------------------------------------------------- REMOTE_ADDR ::1 Todas as configurações C:\wamp64\www\astudy\astudy.php:5: array (size=43) 'HTTP_HOST' => string 'localhost' (length=9) 'HTTP_CONNECTION' => string 'keep-alive' (length=10) 'HTTP_CACHE_CONTROL' => string 'max-age=0' (length=9) 'HTTP_SEC_CH_UA' => string '"Chromium";v="104", " Not A;Brand";v="99", "Microsoft Edge";v="104"' (length=67) 'HTTP_SEC_CH_UA_MOBILE' => string '?0' (length=2) 'HTTP_SEC_CH_UA_PLATFORM' => string '"Windows"' (length=9) 'HTTP_UPGRADE_INSECURE_REQUESTS' => string '1' (length=1) 'HTTP_USER_AGENT' => string 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/104.0.5112.102 Safari/537.36 Edg/104.0.1293.70' (length=134) 'HTTP_ACCEPT' => string 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9' (length=124) 'HTTP_SEC_FETCH_SITE' => string 'none' (length=4) 'HTTP_SEC_FETCH_MODE' => string 'navigate' (length=8) 'HTTP_SEC_FETCH_USER' => string '?1' (length=2) 'HTTP_SEC_FETCH_DEST' => string 'document' (length=8) 'HTTP_ACCEPT_ENCODING' => string 'gzip, deflate, br' (length=17) 'HTTP_ACCEPT_LANGUAGE' => string 'pt-BR,pt;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6,it;q=0.5,es;q=0.4,ca;q=0.3' (length=74) 'HTTP_COOKIE' => string 'PHPSESSID=iubscijf21m1ob83ijfgcbu07p' (length=36) 'PATH' => string 'C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem;C:\WINDOWS\System32\WindowsPowerShell\v1.0\;C:\WINDOWS\System32\OpenSSH\;C:\Program Files\SafeNet\Authentication\SAC\x64;C:\Program Files\SafeNet\Authentication\SAC\x32;C:\WINDOWS\system32\config\systemprofile\AppData\Local\Microsoft\WindowsApps' (length=301) 'SystemRoot' => string 'C:\WINDOWS' (length=10) 'COMSPEC' => string 'C:\WINDOWS\system32\cmd.exe' (length=27) 'PATHEXT' => string '.COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH;.MSC' (length=53) 'WINDIR' => string 'C:\WINDOWS' (length=10) 'SERVER_SIGNATURE' => string '<address>Apache/2.4.51 (Win64) PHP/8.0.13 Server at localhost Port 80</address> ' (length=80) 'SERVER_SOFTWARE' => string 'Apache/2.4.51 (Win64) PHP/8.0.13' (length=32) 'SERVER_NAME' => string 'localhost' (length=9) 'SERVER_ADDR' => string '::1' (length=3) 'SERVER_PORT' => string '80' (length=2) 'REMOTE_ADDR' => string '::1' (length=3) 'DOCUMENT_ROOT' => string 'C:/wamp64/www' (length=13) 'REQUEST_SCHEME' => string 'http' (length=4) 'CONTEXT_PREFIX' => string '' (length=0) 'CONTEXT_DOCUMENT_ROOT' => string 'C:/wamp64/www' (length=13) 'SERVER_ADMIN' => string 'wampserver@wampserver.invalid' (length=29) 'SCRIPT_FILENAME' => string 'C:/wamp64/www/astudy/astudy.php' (length=31) 'REMOTE_PORT' => string '52375' (length=5) 'GATEWAY_INTERFACE' => string 'CGI/1.1' (length=7) 'SERVER_PROTOCOL' => string 'HTTP/1.1' (length=8) 'REQUEST_METHOD' => string 'GET' (length=3) 'QUERY_STRING' => string '' (length=0) 'REQUEST_URI' => string '/astudy/astudy.php' (length=18) 'SCRIPT_NAME' => string '/astudy/astudy.php' (length=18) 'PHP_SELF' => string '/astudy/astudy.php' (length=18) 'REQUEST_TIME_FLOAT' => float 1661620861.0145 'REQUEST_TIME' => int 1661620861
  24. Já faz um ano que tento resolver esse problema, mas ainda não consegui. Encontrei uma solução quebra galho, ele é meio lento. Encontrei um exemplo bonito e rápido, ele funciona só dando um espaço na caixa de busca, mas não consegui repetir a mesma experiência no notebook. O exemplo que segue tem duas referências a CSS (tem um style.css, eu copiei de algum canto da internet e coloquei no meu diretório principal). Eu acho estranho esses dois arquivos, mas o programa não funciona se eles não estiverem por lá. astudy.php ------------------------------------------------------------ <?php $tagi=[["maçã","www.apple.com"],["televisão","www.nhk.jp"],["diversão","www.netfix.com"]]; ?> <!doctype html> <html lang="en"> <head> <meta charset="utf-8"> <meta name="viewport" content="width=device-width, initial-scale=1"> <title>jQuery UI Autocomplete - Default functionality</title> <link rel="stylesheet" href="//code.jquery.com/ui/1.13.2/themes/base/jquery-ui.css"> <link rel="stylesheet" href="style.css"> <script src="https://code.jquery.com/jquery-3.6.0.js"></script> <script src="https://code.jquery.com/ui/1.13.2/jquery-ui.js"></script> <script> $(function () { function setSiteByProduct(prod, values) { for (var i = 0, len = values.length; i < len; i++) { if (values[i][0] == prod) { $('#site').val(values[i][1]); break;}}} tagi=<?=json_encode($tagi)?>; $("#produto, #site").autocomplete({ source: tagi.map(function(val){return val[0]}), select: function (event, ui) { setSiteByProduct(ui.item.value, tagi);}});}); </script> </head> <body> <input id=produto> <p> <input id=site> </body> </html>
  25. Faz dois anos que estou tentando entender o JavaScript, e só hoje é que eu tive uma faísca de esperança. Esse código não funciona já faz dois anos: <?php $problema=["php"=>"javascript"]; ?> <script> jteste={"php":"javascript"} console.log(jteste.php) $teste=<?=json_encode($problema)?> console.log($teste.php) </script> Depois de 2 anos, eu fiz a minha milésima tentativa e consegui fazer o código funcionar: <?php $problema=["php"=>"javascript"]; ?> <script> jteste={"php":"javascript"} console.log(jteste.php) $teste=<?=json_encode($problema)?>; console.log($teste.php) </script> A única diferença entre os dois códigos é um ponto e vírgula. Ao contrário do PHP, você pode escrever o JavaScript sem o ponto e vírgula. Mas quando você mistura PHP com JavaScript, aí você é obrigado a usar o ponto e vírgula, senão o JavaScript não funciona. Dois anos é muito tempo, mas é só apanhando é que a gente aprende alguma coisa, não é mesmo?
×
×
  • Criar Novo...