Ir para conteúdo
Fórum Script Brasil

Frank K Hosaka

Membros
  • Total de itens

    1.574
  • Registro em

  • Última visita

Tudo que Frank K Hosaka postou

  1. Obrigado Iowys. dec é a função que pega o valor do MySQL e apresenta de forma abrasileirada o número para o usuário. deca faz o contrário, pega o número abrasileirado do usuário e transforma no formato que o MySQL espera. df pega a data do MySQL e abrasileira no padrão "dia/mês/ano". varchar(30) define o campo como alfa numérico com no máximo 30 posições na tabela MySQL. Se o campo tiver 5 caracteres, ele vai ocupar exatamente 5 caracteres. Já o char(30) vai ocupar todas as 30 posições dentro do HD, não importa se você não usou todo o espaço alocado. Fiz o teste no meu celular, e encontrei um tremendo erro logo na primeira linha. O marcador <meta> não pode ser definido dentro do script <?php ?>, ele tem que vir antes do script. Do jeito que está, o usuário vai enxergar pouca coisa no celular. É assim que vou aprendendo HTML, tem coisas que não dá para fazer com o poderoso echo do PHP. Quanto a nomenclatura, você está coberto de razão. Mas eu cansei de brigar com o PHP, quanto mais você escreve mais o PHP encontra erro, assim estou apelando para palavras bem curtas, nada descritivas, impossíveis de reduzir. Eu escrevia CodFornecedor, CodFornec, CodForn, e de tanta advertência que recebi do PHP, decidi escrever tudo em minúsculo e assim decidi por codforn tanto no nome do campo quanto na variável. Mas o PHP é muito chato, ele não aceita eu escrever $_get, ele me obriga a escrever $_GET. Mas eu fui honesto. Eu comecei o título alertando que o meu código é um péssimo exemplo de programação.
  2. A listagem que segue é um péssimo exemplo de programação, na verdade se trata de uma gambiarra, ele viola todas as regras de uma boa programação, mas ele foi criado (mas falta muita coisa, ele não consegue por exemplo abrir um novo pedido), mas resume tudo o que eu aprendi em PHP. Eu comprei o meu primeiro computador de bolso em 1999, desde então vivi sonhando com o banco de dados num computador de bolso. O computador de bolso não existe mais, no lugar surgiram os smartphones, mas não consegui instalar nenhum banco de dados no IoS e nem no Android. Só em 2021 é que descobri que havia uma versão WampServ para o Windows e ainda de graça. Junto com o Apache, veio o MySQL e o PHP. Eu fiquei encantado com o PHP. O PHP exige que você saiba usar o HTML, eu sinceramente não sei como trabalhar com o HTML, estou aprendendendo na base da tentativa e erro. Com o WampServ finalmente consegui conectar o smartphone no banco de dados do MySQL, através da rede local. Claro que não faz o menor sentido você trabalhar com o banco de dados no celular, se o notebook está do lado. Eu pensei em usar o celular fora da rede local, lá no meio da rua. Foi aí que eu descobri o ngrok, ele cria um canal de comunicação bem esperta que conecta qualquer aparelho ao notebook através da internet. Não sei se o ngrok é seguro, mas ele me ajudou a realizar o meu sonho de consultar o banco de dados lá no meio da rua com o celular. A regra do PHP é criar pelo menos uma página HTML para cada código PHP. Na hora que eu criei o orcamento.php eu me perguntei se não é possível criar todas as páginas HTML num só script PHP. Ou seja, ao invés de criar um script para consultar produto, outro para eliminar um item do pedido, outro para acrescentar um item no produto, e assim vai, em vários scripts PHP, o que me impede de fazer tudo num só script? Claro que o código ficou uma bela macarronada, difícil de depurar. Como o PHP não tem uma janela imediata, apenas o navegador, várias vezes tive que usar a instrução echo $variavel; exit; para ver o tamanho do meu erro. Esse é o famoso método científico da tentativa e erro. Nada produtivo, mas muito bom para um aposentado como eu que está cansado de ver Netflix. Se você está cansado do Netflix, o PHP é um ótimo companheiro, toda hora ele pede para você fazer curso de digitação. A gambiarra que utilizei foi o método implicito do PUT, gerado pelo marcador <input> e <a href> ou pelo comando header. Todos eles passam valores para a página orçamento.php e o orçamento.php vai executanto uma tarefa específica para os valores que recebe. A seguir o código do orcamento.php bem como a estrutura das tabelas em MySQL: <?php echo '<meta name="viewport" content="width=device"-width, initial-scale=1">'; function dec($num) {$fmt = number_format($num,2,',','.'); return $fmt;} function deca($num) {$fmt = str_replace(',','.',$num); return $fmt;} function df($data) {$fmt = date('d/m/Y',strtotime($data)); return $fmt;} $codprod=$_GET['codprod'] ?? null; $com=$_GET['com'] ?? null; $id=$_GET['id'] ?? null; $ped=$_GET['ped'] ?? null; $mysqli=new mysqli("localhost","root","","diario"); // não defini senha, tenho pavor de perder a conexão com o MySQL //rotina para excluir item do orçamento if (empty($com)){;} else {if ($com=='dec') { $query=$mysqli->query("delete from tbhistped where id=$id"); $query=$mysqli->query("select sum(subtotal) as total from tbhistped where codped = $ped"); $total = $query->fetch_assoc()['total']; $total=round($total,2); $query=$mysqli->query("update tbpedido set totalped = $total, dia = '".date('Y-m-d')."' where codped = $ped");}} //rotina para incluir item no orçamento if (empty($com)){;} else {if ($com=='adc') { $qt=deca($_GET['qt']); $codprod = $_GET['codprod']; $unitario = $_GET['unitario']; $subtotal = round($qt * $unitario,2); $query=$mysqli->query("insert into tbhistped (codped,qt,codprod,unitario,subtotal) values ($ped,$qt,$codprod,$unitario,$subtotal)"); $query=$mysqli->query("select sum(subtotal) as total from tbhistped where codped = $ped"); $total = $query->fetch_assoc()['total'];$total=round($total,2); //echo "update tbpedido set totalped = $total, dia = '".date('Y-m-d')."' where codped = $ped";exit; $query=$mysqli->query("update tbpedido set totalped = $total, dia = '".date('Y-m-d')."' where codped = $ped"); header('location:orcamento.php');}} //rotina para selecionar um produto if (empty($com)) {;} else {if ($com=='slc') { echo "<table><tr><th>Código</th><th>Descrição</th></tr>"; $query=$mysqli->query("select * from tbprod order by prod"); while($linha = $query->fetch_assoc()) { $codprod = $linha['codprod']; $codprod = "<a href=orcamento.php?codprod=$codprod>".$linha['codprod']."</a>"; echo "<tr><td align='right'>$codprod</td><td>".$linha['prod']."</td></tr>";} echo "</table>"; exit;}} $query = $mysqli->query("select * from tbpedido"); $num_rows = $query->num_rows; if ($num_rows==0) {$query=$mysqli->query("insert into tbpedido (codped) values (1)");} $query = $mysqli->query("select * from tbpedido order by codped desc"); $row = $query->fetch_assoc(); $ped = $row['codped']; $dia = df($row['dia']); $total = $row['totalped']; if (empty($total)) {$total=0;} echo "<font color=red>Pedido $ped de $dia, Total R$ ".dec($total); echo "</font><br>Para excluir item do pedido, selecione a unidade do item"; echo "<table><tr><th>Produto</th><th>Qt</th><th>Un</th><th>Preço</th><th>Total</th></tr>"; $query = $mysqli->query("SELECT tbhistped.id,tbhistped.codped, tbhistped.codprod, tbhistped.qt as qt, tbhistped.unitario as unitario, tbhistped.subtotal, tbprod.prod as prod, tbprod.un as un FROM tbhistped INNER JOIN tbprod ON tbhistped.codprod = tbprod.codprod and tbhistped.codped = $ped ORDER BY tbhistped.id;"); while ($row = $query->fetch_assoc()) { $un = $row['un']; $un = "<a href='orcamento.php?com=dec&ped=$ped&id=".$row['id']."'>$un</a>"; echo "<tr><td>".$row['prod']."</td><td align=right>".dec($row['qt'])."</td><td>$un</td><td align=right >".dec($row['unitario']); echo "</td><td align=right>".dec($row['subtotal'])."</td></tr>"; } if (empty($codprod)) { echo "<tr><td><a href='produto.php?end=orcamento.php'>Selecione o produto</a></td></tr>";} else { $query = $mysqli->query("select * from tbprod where codprod=$codprod"); $row=$query->fetch_assoc(); $custo = $row['custo']; echo "<tr><td>".$row['prod']."</td><td>"; echo "<form action='orcamento.php'><input name='qt' width='5'><input type='hidden' name='codprod' value=$codprod>"; echo "<input type='hidden' name='com' value='adc'><input type='hidden' name='unitario' value=$custo>"; echo "<input type='hidden' name='ped' value=$ped></td><td>".$row['un']."</td><td align=right>".dec($row['custo'])."</td></td>";}
  3. Nessa semana, o Iowys me ensinou a criar um objeto no PHP: $apuracao = strtotime('2022-03-01'); $v = (object)[]; $v->dia = strftime('%d',$apuracao); Levei um tempão para entender esse código, mas eu traduzi assim: crie um objeto chamado v$ e dentro dele crie ("->") uma propriedade chamado dia. Claro que para obter o dia de uma data tem a função $dia=date('d',strtotime('2022-03-01')), mas no caso do Iowys ele queria me ensinar como obter o mês por extenso em português bem como outras informações, nesse caso a abordagem do objeto é bem interessante, mas como colocar isso na prática, isso é outro problema. Mas a aula do Iowys foi muito além, ele me ensinou como ver o objeto com a instrução echo "<pre>"; print_r(v$);echo"</pre>"; O marcador <pre> é importante para mostrar cada propriedade do objeto em cada linha, e não tudo numa só linha. A linguagem do objeto é nova para mim, mas a aula do Iowys foi bastante oportuna. Eu tenho o seguinte código: $mysqli=new mysqli("localhost","root","hacker","base"); $query = $mysqli->query("select * from tbpedido"); echo "<pre>"; print_r ($query);echo "</pre>"; $registro = $query->num_rows; echo "$registro registros"; Estou começando um projeto chamado orçamento, ou seja, a tbpedido não tem nada. E como é que eu sei que a tabela não tem nada? Eu fiz o teste com print_r($query) e eu tive a seguinte resposta: mysqli_result Object ( [current_field] => 0 [field_count] => 3 [lengths] => [num_rows] => 0 [type] => 0 ) ou seja, a informação que eu preciso está dentro do objeto e a partir dele posso criar um novo caminho para resolver o problema.
  4. Executei o código por aqui e a mensagem que recebi é que a variavel $request_body não foi definida, que é executada logo após a definição da função. Eu faria assim: mandarplaca.php <?php echo "<form action='pegarplaca.php'><input name='placa'></form>"; pegarplaca.php <?php $placa = $_get['placa']; $url = "exemplo.com.br/$placa";
  5. Valeu pela aula! Eu sou do tempo do Basic, eu ainda não sei usar a linguagem de objetos. Eu fiquei assustado quando eu vi a flecha -> no PHP na primeira vez. Tive que fazer uma adaptação no seu código assim: <?php setlocale(LC_ALL, 'pt_br.UTF-8'); $apuracao = '2020-09-01'; $apuracao = strtotime($apuracao); $v = (object)[]; $mesextenso = $v->mes = strftime('%B', $apuracao); echo $mesextenso; ?> Mês é substantivo comum, não dá para capitalizar, senão o professor de gramática vai pegar no pé. Mas o que eu procuro mesmo é a tecnologia do objeto para o MySQL, queria saber se é possível colocar o msqli dentro de um (object)[] e, se possível, com alguns exemplos bem didáticos para quem vem do mundo do Basic.
  6. Copiei o seu código e testei por aqui. A primeira coisa que eu senti foi a falta do fechamento do php, ?>. Eu desativei os dois pirmeiros comandos através do comentário //. A mensagem que eu recebi foi na linha $resultado_usuario = mysqli_query($conn, $result_usuario); O PHP reclama que a variável $conn não foi definida. Eu uso um outro tipo de anotação. Para abrir o banco de dados: $mysqli=new mysqli("localhost","root","hacker","base"); Para executar uma consulta: $query = $mysqli->query("select * FROM tbmocas order by maisgostosas"); Para obter o vetor da consulta: $linha = $query -> fetch_assoc(); Para obter o valor do primeiro registro: $primeira = $linha['nome'] Para obter o valor de um campo de todos os registros: While $linha=$query->fetch_assoc(); {echo $linha['nome'];} ---------------------- Ops, agora eu lembrei que desativei a linha include, foi por isso que recebi a mensagem de erro. Enfim, só com o seu código, eu não consigo ver onde está o problema, geralmente eu uso o navegador. Os erros de sintaxe, o PHP ajuda. Já os erros de lógica, isso sim que é de amargar. Eu começo do zero, vou testando uma instrução de cada vez, eu boto o comando "exit;" no código, até eu achar o erro.
  7. <?php $apuracao = '2020-09-01'; $apuracao = strtotime($apuracao); $format = new IntlDateFormatter('pt_BR', IntlDateFormatter::NONE, IntlDateFormatter::NONE, NULL, NULL, "MMMM"); $mes = datefmt_format($format, $apuracao); $ano=date('Y',$apuracao); echo "Ano $ano Mês $mes<br>"; ?>
  8. Eu também sou novato no PHP. Eu uso a seguinte sintaxe para abrir o meu banco de dados: $mysqli = new mysqli("localhost","root","hacker","base"); Não sei como usar o mysqli_connect e também não achei exemplos para ele no Google.
  9. Gostei do seu código. Baseado nele, eu fiz a seguinte gambiarra: <?php // Com desconto: CD = Venda - Porcento * Venda // Sem desconto: SD - Porcento * SD = Venda, logo SD = Venda / (1 - Porcento) function Calc($Venda, $Porcento){ $ComDesconto = $Venda - $Venda * $Porcento / 100; $SemDesconto = $Venda / ( 1 - $Porcento / 100); $ProvaDosNove = $SemDesconto - $SemDesconto * $Porcento / 100; $ComDesconto = number_format($ComDesconto,2,',','.'); $SemDesconto = number_format($SemDesconto, 2, ',','.'); $ProvaDosNove = number_format($ProvaDosNove, 2, ',', '.'); $Final = "Com Desconto $ComDesconto, <br>Sem Desconto $SemDesconto, <br>Prova dos nove $ProvaDosNove"; return $Final; } echo Calc(1000, 7.01); ?>
  10. A minha sugestão é trabalhar na estrutura da tabela de pedidos, onde o campo Número do Pedido é definido como chave primária e com o recurso de auto-incremento. Ao invés do usuário atribuir um número de pedido, o MySQL iria definir o número para o usuário.
  11. <?php $pedido = $_GET['pedido']; $mysqli = new mysqli("localhost","root","hacker","base"); $sql = "SELECT * from vw_histproduto WHERE Pedido=$pedido"; $query = $mysqli->query($sql); echo "Pedido $pedido"; echo "<table><tr><th>Qtd</th><th>CodProd</th><th>Unitario</th><th>Desconto</th><th>Total</th></tr>"; While ($pr = $query->fetch_assoc()) { $Qtd = $pr['Qtd']; $CodProduto = $pr['CodProduto']; $Unitario = $pr['Unitario']; $DescontoFamilia = $pr['DescontoFamilia']; $QtdFamilia = $pr['QtdFamilia']; $Desconto = 0; if ($Qtd > $QtdFamilia) {$Desconto = $Qtd * $Unitario * $DescontoFamilia / 100;} $Total = $Qtd * $Unitario - $Desconto; echo "<tr><td>$Qtd</td><td>$CodProduto</td><td>$Unitario</td><td>$Desconto</td><td>$Total</td>"; } echo "</table>"; // esse código pressupõe que foi criado um view (vw_histproduto) no MySQL, onde são contemplados a tabela de produtos, // a tabela do histórico de produtos e a tabela família de produtos. ?>
  12. <?php $te = array ('name'=> array ( 'Jesus','Maria','José'), 'icon'=> array ('batata','cebola','limão'), 'url'=>'db_dark.php'); foreach ($te as $key=>$value) { if (is_array($value)){foreach ($value as $sub) {echo "$key-$sub<br>";}} else {echo "$key-$value<br>";}} ?> Angelo, não entendi bem a sua pergunta, mas me pareceu um vetor multidimensional. Fiz um pequeno código, espero que ele ajude um pouco.
  13. Eu faria assim na página teste1.php <form action='teste2.php' method='put'><input name='id'></form> E na página teste2.php <?php $id = $_GET['id']; header("Location:google.com.br/$id"); ?> ou header("Location:https://google.com.br/$id");
×
×
  • Criar Novo...