Ir para conteúdo
Fórum Script Brasil

Frank K Hosaka

Membros
  • Total de itens

    1.678
  • Registro em

  • Última visita

Tudo que Frank K Hosaka postou

  1. Também estou trabalhando no mesmo projeto, o máximo que eu consegui foi isso: <style> li {list-style-type: none;} .modal {display:none; position:fixed; background-color:orange; border:1px solid;top:10;left: 10;padding: 40px} </style> <script> function modal(id) {divmodal.style.display='block';divjustifique.innerHTML="Justifique porque desativar o produto <br>"+id;} </script> <div id=divmodal class=modal onclick='divmodal.style.display="none"'><input><div id=divjustifique></div></div> <?php $mysqli=new mysqli("localhost","root","","diario"); $query=$mysqli->query("select * from tbprod order by prod limit 10"); while ($row=$query->fetch_assoc()) { $prod=$row['prod']; $codprod=$row['codprod']; $texto="$codprod $prod"; $java='modal("'.$texto.'")'; $modal="<input type=submit value=Desativar onclick='$java'>"; echo "$codprod $prod $modal<br>"; } mysqli_close($mysqli); Ele só funciona se não tiver nenhum produto com aspas. Se um produto tiver aspas, isso vai gerar conflito na hora de o PHP mandar as informações para a função do Javascript. Eu usei o meu próprio banco de dados, e como tem um monte de registros na tbprod, pedi para o PHP limitar a apenas 10 registros. Note que a definição da variável $Java é bem complicada, eu levei dois anos para montar na base da tentativa e erro. Note que o código é incompleto, ele só vai colocar o produto selecionado até o modal, e só fica nisso, não faz mais nada. Para trabalhar com produtos com aspas, o Wash deixou um tutorial aqui no fórum, mas precisa do PHP 8. Eu não consegui adaptar ao meu código, porque eu ainda estou bem longe de dominar a técnica da "promessa" no JavaScript. O link é esse daqui: O tutorial do Wash - Tutoriais & Dicas - PHP - Fórum Script Brasil
  2. Frank K Hosaka

    PHP não EXECUTA

    Testei por aqui, e o PHP reclamou da linha 17 curl_setopt($ch, CURLOPT_POSTFIELDS, Paramêtros da URL "https://mex10.com/api/shortcodev2.aspx?token=aadd8752adfa6462b24bc4cdbf0ee8f54f034b6c5f7b0c2dc5116e163a8b26e7&t=send&n=27995047615&m=VNET TELECOM: TESTE" ); A minha sugestão é tirar "Parâmetros da URL" dessa linha.
  3. No painel de inspeção do Microsoft Edge encontrei dois erros assim A 'cache-control' header is missing or empty. Consegui consertar um deles no arquivo menu.php, acrescentando essa linha: <?php header('Cache-Control: max-age=86400'); ?> O outro erro, ele diz "Solicitar" favion.ico - para mim, isso é o ícone do Wampserver. Acrescentei no arquivo "C:\wamp64\apps\phpsysinfo3.3.4\.htaccess" as seguintes linhas <filesMatch ".(ico|pdf|flv|jpg|jpeg|png|gif|js|css|swf)$"> Header set Cache-Control "max-age=84600, public" </filesMatch> e também no arquivo "C:\wamp64\apps\phpsysinfo3.3.4\data\.htaccess" Mas isso não adiantou. Fiz essas alterações baseado no que eu consegui entender o que estava em Cache-Control - How to Properly Configure It - KeyCDN Support Mesmo que eu tenha "resolvido" o erro que apontava para o menu.php, ainda tenho uma advertência assim The target should not be cached or have a 'cache-control' header with 'max-age=180' or less. Alguém pode me ajudar?
  4. Ontem eu enfrentei um problema bem raro. Encontrei no celular do meu irmão Jorge um documento protegido que não permitia a edição. O arquivo estava no OneDrive, e o meu irmão acessava pelo Gerenciador de Arquivos +, pois eu não tenho a menor ideia de como usar os gerenciadores disponíveis no Motorola. Tentei acessar pelo Office e pelo OneDrive do Android, mas o problema persistia. Não consegui achar a solução no Google. Depois de várias tentativas, o que chamou a minha atenção é que não dá para criar um novo documento do Office pelo Android e proteger com senha, isso só dá para fazer no notebook. A única solução que me sobrou foi salvar o documento com um outro nome. E deu certo, agora o novo documento, além de estar protegido com senha, ele permite a edição. Ou seja, o meu irmão não vai mais precisar do notebook para editar um documento que o Android também pode editar.
  5. // Lista os produtos vinculados if (isset($_GET['lista'])) { echo "<table><tr><th><th><th>"; $query=$mysqli->query("select * from vw_multiplo"); while ($row=$query->fetch_assoc()){ $codprod = $row['codprod']; $prod = $row['prod']; $un = $row['un']; $custo = dec($row['custo']); $json = $row['codforn']; $obj=json_decode($json);$codprod1=$obj->cod;$conv=$obj->conv; $query2=$mysqli->query("select * from tbprod where codprod=$codprod1"); $linha = $query2->fetch_assoc(); $prod1=$linha['prod']; $custo1=dec($linha['custo']); $un1 = $linha['un']; echo "<tr style='color:red'><td align=right>$codprod1<td>$un1<td>$prod1<td align=right>$custo1"; echo "<tr><td align=right>$codprod<td>$un<td>$prod<td align=right>$custo";} echo "</table>"; mysqli_close($mysqli); exit;} Eu fiz uma rotina que lista o produto principal e o produto vinculado. Eu queria avermelhar o produto principal. Eu tentei <font color=red><tr><td>$codprod<td>$un<td>$prod<td>$custo</font>, mas não funcionou. Eu tentei <tr color=red>, mas não funcionou. Mas hoje eu tive muita sorte no Google, encontrei uma dica de como avermelhar o texto sem precisar usar o CSS. A solução é <tr style="color:red">. Isso demorou dois anos, mas consegui achar. O Google é uma questão de perseverança e sorte.
  6. Eu sou péssimo em HTML e também não sei mexer com o PDO do PHP, mesmo assim, ao invés de inserir o PHP no HTML, eu faço o contrário, eu insiro o HTML pelo PHP. Para montar uma caixa de combinação eu faço assim: <?php $mysqli=new mysqli("localhost","root","","diario"); $query=$mysqli->query("select * from tbprod order by prod asc"); echo "<select>"; echo "<option>Selecione</option>"; while ($reg=$query->fetch_assoc()) { echo "<option>".$reg['prod']."</option>"; } echo "</select>"; mysqli_close($mysqli);
  7. <?php // multiplo.php include("menu.php"); function dec($num) {if (empty($num)) {$fmt="";} else {$fmt = number_format($num,2,',','.'); return $fmt;}} $codprod = $_GET['codprod'] ?? null; $mysqli=new mysqli("localhost","root","","diario"); if ($codprod==225) { echo "<a href=multiplo.php?com=atualiza>Atualizar produtos vinculados</a>"; exit;} // Atualiza os produtos vinculados if (isset($_GET['com'])) { echo "<table><tr><th><th>"; $query=$mysqli->query("select * from vw_multiplo"); while ($row=$query->fetch_assoc()){ $codprod = $row['codprod']; $prod = $row['prod']; $json = $row['codforn']; $obj=json_decode($json);$codprod1=$obj->cod;$conv=$obj->conv; $query2=$mysqli->query("select * from tbprod where codprod=$codprod1"); $linha2=$query2->fetch_assoc(); $custo2=$linha2['custo']; $custo2=dec(round($custo2/$conv,2)); $query3=$mysqli->query("update tbprod set custo=$custo2 where codprod=$codprod"); echo "<tr><td>$codprod<td>$prod<td align=right>$custo2";} echo "</table>"; mysqli_close($mysqli); exit;} Eu levei meia hora para fazer o código que calcula o custo de um produto baseado no custo de outro produto, mas aqui eu preciso agradecer ao Forum Script Brasil, em particular o Iowys e o Wash, que me ensinaram como criar um modal, como usar o Json e como atualizar o PHP para a versão 8. Eu gostei do PHP 8, ele não só mostra onde você errou mas também mostra a parte da listagem do código onde ele encontrou o erro. No meu caso, ele reclamou que eu abuso demais das funções que uso de maneira irregular (foi assim que traduzi "deprecated"), mas ao invés de estudar lógica de programação, eu preferi fazer a minha gambiarra - só assim você vai entender a função "dec" (decimal) que aparece no topo da listagem. Vamos ao que interessa. Uma melancia (código 123) custa R$ 4,00. Logo, 1/4 de melancia (codigo 5717) custa R$ 1,00. Ao invés de criar uma tabela para informar ao PHP qual produto está vinculado ao outro, eu pedi para o MySQL criar uma consulta com essa informação, eu chamei de vw_multiplo. No produto do código 123 eu tenho o campo codforn, onde eu tenho o código do produto do fornecedor que pretendo usar no meu pedido de compra. Essa é uma informação valiosa, é o único jeito que eu encontrei para o fornecedor não me mandar chuchu no lugar da melancia. Já o codforn do produto 5717 eu coloquei o Json, assim {"cod":123,"conv":4}. Graças ao Json, o MySQL sabe quem é produto original e quem é o produto vinculado e o PHP sabe como como calcular o custo de 1/4 de melancia. Agora, vamos aos imprevistos. E se eu precisar fazer uma promoção do tipo "melancia em dobro", nesse caso o Json ficaria assim {"cod":123,"conv":0.5}. E se eu precisar fazer uma combo tipo "melancia com chuchu"? Nesse caso, o meu código não tem como resolver isso, ele teria que ser reescrito para ver quantos Jsons tem dentro do campo codforn. É claro que a notação Json é muito chata, mas eu consegui resolver isso lá atrás, na hora de cadastrar o produto vinculado, eu criei um input assim <input name=fator value={"cod":'.$codprod.',"conv":> ou seja, quem for cadastrar só precisa colocar o fator de conversão e fechar o colchete.
  8. Eu vi que o PHP usa dois bytes para representar a letra á. Encontrei no Google comentário sobre o Normalizer do PHP (PHP: Normalizer::normalize - Manual), mas não consegui adequar ao JavaScript. É uma pena. Essa é mais uma tentativa que não deu certo.
  9. Hoje gastei o dia todo vendo matéria sobre código de caracteres UTF-8 e ISO-8859-1, mas não consegui aprender muita coisa. O máximo que eu descobri é que o Notepad++ pode formatar os meus códigos em PHP para esses caracteres. O problema é o velho problema das variáveis com aspas embutidas. Hoje eu pensei em transformar tudo em hexadecimal, mandar do PHP para o JavaScript, e depois o JavaScript decodifica. O problema é que o hexadecimal do PHP é uma coisa, e o hexadecimal do JavaScript é outra coisa. O máximo que eu consegui conferir é que a tabela que o JavaScript usa é a mesma que o Excel usa, desconfio que é o ANSI. Mas na hora que eu peço para o PHP trabalhar com o ANSI tudo fica pior, o JavaScript consegue entender o que eu quero, mas eu não consigo entender o que o PHP escreve na tela. É um horror! Esse é o meu rascunho que não deu certo, e que eu chamei de aStudy.php <meta charset=UTF-8 /> <script charset=UTF-8> function hex_to_ascii(str1) { inpJava.value=2; var hex = str1.toString(); var str = ''; for (var n = 0; n < hex.length; n += 2) { str += String.fromCharCode(parseInt(hex.substr(n, 2), 16));} inpJava.value=str; } </script> <?php $mens ='olá "mundo"'; $hexa = bin2hex($mens); $bina = hex2bin($hexa); echo "mensagem $mens<br>hexadecimal $hexa<br>binário $bina<br> JavaScript: <input id=inpJava>"; echo "<script>hex_to_ascii('$hexa')</script>";
  10. O seguinte código não funciona: $texto="a vaca foi para o brejo"; echo "<input value=$texto>"; Ele vai trazer um retangulo com a palavra "a". A maneira mais fácil de resolver o problema é usando aspas simples, assim: echo "<input value='$texto'>"; O pesadelo começa quando você é obrigado a usar aspas simples depois do comando echo. Eu fiz de tudo para evitar aspas simples, mas eu não consegui, eu precisava mandar um texto com aspas duplas para o banco de dados (é uma variável Json), e aí fui obrigado a usar aspas simples no comando echo. Depois de dois anos na base da tentativa e erro, finalmente eu achei a solução! Olha só: $texto="a vaca foi para o brejo"; $texto=" ' $texto ' "; echo '<input value='. $texto .'>';
  11. Eu tenho um produto chamado Melancia com o código 924, e pretendo criar um "novo" produto baseado na Melancia, vou chamar de Melancia 1/4, vamos supor que o MySQL vai atribuir o código 7517 para o novo produto. O problema da Melancia é que o preço sempre flutua toda vez que o presidente da Petrobas é demitido, toda vez que os jornalistas descobrem um novo esquema de superfaturamento na compra de caminhão de lixo ou porque alguém desistiu de comprar o Twitter, enfim, vamos supor que o preço da melancia caiu de R$ 5,00 para R$ 4,00, como é que vou lembrar que preciso corrigir o custo do produto 7517? A minha primeira opção é criar uma Tabela Múltipla com o código principal, o código vinculante, e o fator de conversão. No nosso caso, seria 924, 7517, 4. E pediria para o PHP olhar a tabela e corrigir o custo dos produtos vinculados. A segunda opção é não criar nenhuma tabela, e usar a própria tabela de produtos e buscar um campo ocioso. No meu caso, eu tenho um campo chamado Código do Produto do Fornecedor que abreviei como codforn, ele nunca vai ser usado quando criar um produto vinculado a outro. Nesse caso, estava pensando em colocar o Json que é mais fácil de digitar que o Array. A ideia é disparar um gatilho quando o custo de um item for alterado, e pedir para o PHP verificar se tem um produto vinculado no meio do caminho. A terceira opção eu usei no MS Access, deu certo, mas não sei se vai funcionar no MySQL. No MS Access, eu cadastrei o custo do produto 7517 como "F(924)", é uma bela gambiarra, mas não tenho coragem de usar no MySQL. Em teoria dá para fazer essa gambiarra, no MS Access eu tinha o VBA para dar vida para a minha gambiarra, no caso do MySQL eu tenho o PHP. Finalmente, eu apresento um código onde mostra a diferença entre o Json e o Array: <meta name="viewport" content="width=device-width, initial-scale=1"> <?php $json = '{"cod":924,"conv":4}'; // $array = array("cod" => 924, "conv" => 4); $obj = json_decode($json); // extract($array); $cod = $obj->cod; // $conv = $obj->conv; // echo "Código $cod Conversão $conv"; ?>
  12. O código que eu comentei deu problema, ele entrou em conflito com o evento duplo clique que havia definido em outro lugar. O código para o divdetalhe ficou assim: echo "<div id=divdetalhe onclick=alternar(id)>Detalhe do documento $docto</div>"; O div id=divcorrige também ficou com o mesmo formato. A função java que exibe/oculta o div selecionado é esse daqui: <script> function alterna(id) {id=id+"2";element=document.getElementById(id); var visor = $(element).css("display"); if (visor=="block") {element.style.display="none";} else {element.style.display="block";}} </script>
  13. Eu tenho um código PHP que dei o nome de detalhediario.php que é executado assim que eu seleciono um documento no extrato contábil. O código é basicamente isso: // rotina para detalhes do documento // rotina para corrigir o documento. A tela é uma barbaridade, no topo da tela você vê um monte de itens que correspondem à despesa com descrição, quantidade e preço, e bem lá em baixo você vê o formulário para consertar o lançamento contábil. É muito confuso, mesmo sabendo que só eu é que uso a rotina no momento. Sinceramente, eu não sei como consertar o problema. Ao invés de consertar, eu decidi esconder o problema. Eu criei um CSS para esconder, assim <style> .esconder {display:none;} </style>, e mudei o código PHP assim: echo "<div id=divdetalhe onclick=divdetalhe2.style.display='block' ondblclick=divdetalhe2.style.display='none'>Detalhe do documento $docto</div>"; echo "<div id=divdetalhe2 class=esconder>"; // rotina para detalhes do documento echo "</div>"; e eu apliquei a mesma gambiarra para a outra rotina. Agora, o usuário só vê duas linhas depois de selecionar o documento na tela do extrato. Para impressionar o usuário, eu transformei o primeiro <div> numa espécie de botão, eu criei o estilo pintar, assim <style> .pintar {background-color: orange; border 1px solid} </style> e acrescentei na <div> de cada grupo, assim <div id=divdetalhe class=pintar... e <div id=divcorrige class=pintar... Essa não é a maneira correta de se fazer um programa, mas ajuda bastante a diminuir a dor, ao invés de ver toda a baderna, agora você vê uma baderna de cada vez.
  14. O código PHP que uso no micro é o mesmo que uso no celular. Para selecionar um item com o mouse é bem fácil, pois o mouse tem uma ponta que é bem fina, já o celular tem um ponteiro que é bem grosso e que seleciona três itens de uma só vez, e acaba indo justamente aonde você não quer ir. Para resolver o problema, decidi separar os itens um pouco mais, quando for usar o celular, e não mexer nada, quando usar o notebook. O código ficou assim: <meta name="viewport" content="width=device-width, initial-scale=1"> <?php $sistema = substr($_SERVER["HTTP_USER_AGENT"],20,7); if ($sistema=="Android") {echo "<style> li {height: 32px;} </style>";} echo "<li>Jesus<li>Maria<li>José";
  15. Quando eu enfrento esse tipo de problema, eu coloco uma linha "echo" assim: $sqlqtd = "insert into LESAO_REL_ESTOQUE_COBERTURAS values(".$idestoque.", ".$i.", ".$qtd.", ".$marca.", ".$idusuario.")"; echo $sqlqtd; Eu copio o que aparecer na tela, vou lá no MySQL Workbench, uso uma linha de uma query, colo o comando, e tento executar o comando para ver o que acontece. Tudo indica que a tabela LESAO_REL_ESTOQUE_COBERTURAS tem o campo definido como alfanumérico mas você está tentando passar como numérico. A minha sugestão é essa daqui (mudei o nome da tabela para facilitar): $sqlqtd = "insert into tblesao values ($idestoque,$i,$qtd,'$marca',$idusuario)"; supondo que o campo marca é o único campo alfanumérico.
  16. Eu também tive esse problema. Para contornar, eu importei o XML no Excel, ajeitava a planilha para destacar as informações que eu precisava, e depois eu pedi para o Access importar do Excel.
  17. Entendi, mas eu reclamo com a turma do rWindows ou rMySQL?
  18. Ele funciona. Eu baixei a sua planilha do OneDrive para o meu PC pois as macros não funcionam na nuvem, com a exceção da Planilha do Google, mas aí você precisa saber como funciona o Java. Para testar a sua macro, eu fui em Desenvolvedor > Macros > Opções, e lá atribui a tecla [CTRL]+[d] para a sua macro. Eu devo muito ao Excel, foi usando o gravador de macro é que eu aprendi um pouco de Visual Basic. Hoje, os meus códigos são mais legíveis, olha só: Sub Teste() Dim A, B, C, D As Range Set A = Sheets("Targets").Range("A1") Set B = Sheets("Targets").Range("B1") Set C = Sheets("Targets").Range("C1") Set D = Sheets("Targets").Range("D1") If A = B Then D = C End Sub
  19. Bom dia, João Cláudio, eu me expressei mal. Eu pensei que extract fosse uma função definida por você, mas o Google me informou que é uma função do PHP. Vou estudar a função, e peço desculpas por ter atrapalhado.
  20. Aonde você fez o var_dump($artigo)? Foi dentro do ciclo foreach? Se foi fora, suponho que você está vendo o último registro, o de número 9. Os outros 8 já foram usados. Eu suponho que a função extract tenha gerado 9 arquivos diferentes. Tem jeito de você colocar a lista da função extract?
  21. Encontrei um exemplo bacana em Using CSS transitions - CSS | MDN (mozilla.org) <style> a {color: #fff; background-color: #333; transition: all 1s ease-out;} a:hover, a:focus {color: #333; background-color: #fff; } </style> <nav> <a href="#">Home</a> <a href="#">About</a> <a href="#">Contact Us</a> <a href="#">Links</a> </nav>
  22. Eu também sou novato no PHP, mas hoje eu aprendi a criar um vetor com o banco de dados com esse código: <?php $mysqli=new mysqli("localhost","root","","diario"); $query=$mysqli->query("select prod from tbprod limit 10"); $dados = $query->fetch_all(MYSQLI_ASSOC); // $dados é um vetor com todos os registros foreach ($dados as $dados) { echo $dados['prod']."<br>"; } mysqli_close($mysqli); ?> Não sei como você usa a variável "this->" no seu código, eu ainda não usei isso no PHP, eu só vi no JavaScript, mas também não tenho a menor ideia de como usar. Para eu conseguir os dez primeiros produtos com o método while, eu faço assim: <?php $mysqli=new mysqli("localhost","root","","diario"); $query=$mysqli->query("select prod from tbprod limit 10"); while ($dados=$query->fetch_assoc()) { // $dados é um vetor com um registro echo $dados['prod']."<br>"; } mysqli_close($mysqli); ?> Ou seja, a diferença entre foreach e while é o conteúdo do vetor, o primeiro presume que todos os registros estão no vetor e outro apenas um registro. Eu sei que não ajudei muito, mas quero agradecer por você compartilhar a sua dúvida, no seu código eu vi echo URL . 'assets/imagens/artigo/' . $imag eu acredito que $imag é uma variável definida pela função "extract" que aparece no seu código. Aconselho a estudar a função "extract" e verificar se ele está criando o arquivo que você deseja.
  23. Usei o ngrok durante dois anos e de repente ele parou de funcionar. Eu vi no Google muita gente na mesma situação. Para saber o que eu fiz de errado, eu decidi ser um cliente "pro" ao invés de "free". O cliente "pro" paga 25 dólares por mês. Quando eles viram o dinheiro, eles decidiram desbloquear a conta, e assim o meu celular passou a enxergar o meu notebook na internet. Eu comentei que mudei o método PUT/GET para POST no PHP, e perguntei se deveria voltar a trabalhar com o método PUT/GET, olha só a resposta deles: No worries on POST, PUT or GET in PHP, but you may want to avoid the file name "1.php" and "login.php" as those names often trigger our automatic abuse flags. Ou seja, o meu erro foi ter usado um nome suspeito no arquivo do PHP, no meu caso, usei bastante 1.php.
  24. Eu gostei da barra de tarefas, só que ele é um pouco mais alto que a barra do Windows 10. A altura da nova barra não atrapalha em nada o meu trabalho, só sinto dificuldade na hora de fazer backup no MySQL Workbench, o botão de confirmação fica escondida atrás da barra. Várias e várias vezes eu fui em configurações e utilizei a opção de ocultar a barra e várias e várias vezes eu fui em configurações para não ocultar a barra. Hoje eu faço diferente. Eu seleciono a opção Include Create Schema do painel Dump, depois eu desmarco a opção, depois dou um {TAB} e finalmente dou um {ENTER} para ativar o botão confirmar do painel do Dump do MySQL. O Windows 11 é ótimo, mas para melhorar a minha sugestão é colocar a opção "Ocultar a barra de tarefas por dois minutos", quando um usuário der um duplo clique na barra. Ou isso é possível, só eu que não sei como fazer?
  25. Eu sou um programador eventual e eu criei um formulário sem o botão de confirmar, e eu embuti a função submit() no último input do formulário, quando ele pede o histórico do lançamento contábil. Hoje eu estou arrependido da besteira que eu fiz, vou ter que tirar o comando que embuti no input do histórico e criar um outro botão para submeter o formulário. O problema do histórico é que eu não tenho todas as informações que eu preciso, e na hora que vou procurar em outra janela do navegador ou outro apicativo do Windows, o input presume que eu já terminei o serviço, faz o lançamento e vai para a tela de extrato. Quando vejo que a tela mudou, eu sou obrigado a abrir o documento no modo edição e completar o histórico. Isso é bastante constrangedor, mas agora eu sei qual a importância do botão confirmar nos formulários.
×
×
  • Criar Novo...