Ir para conteúdo
Fórum Script Brasil

Frank K Hosaka

Membros
  • Total de itens

    1.207
  • Registro em

  • Última visita

Tudo que Frank K Hosaka postou

  1. A sua listagem está incompleta ou tem uma sintaxe que eu ainda não conheço. A seguir uma lista de como obter os dez primeiros itens da tbprod. <?php $mysqli = new mysqli("localhost","root","hacker","diario"); $produtos = $mysqli->query("select * from tbprod where codprod < 10"); while ($carpro = $produtos->fetch_assoc()) { echo $carpro['codprod']." - ".$carpro['prod']."<br>";} Claro que você não quer ver os dez primeiros itens do tbprod. Estou presumindo que você tem uma nota fiscal e você quer armazenar no seu banco de dados, só não sei como você conseguiu botar os dados da nota fiscal num vetor. Supondo que você conseguiu o CFOP, o codforn, NF, codprodforn, qt, desc, unitario, total de uma tbNF, eu faria assim: <?php $mysqli = new mysqli("localhost","root","hacker","diario"); $itemNF = $mysqli->query("select * from tbNF") While ($item = $itemNF->fetch_assoc()) { $sql = "insert into tbhistprod (CFOP,codforn,NF,codprodforn, qt, desc, unitarioi, total) values ("; $sql .= ".$item['CFOP'], $item['codforn'], $item['NF'], $item['codprodforn'],$item['qt'],$item['desc'],"; $sql .= "$item['unitario'], $item['total']"; $inserir = $mysqli->query($sql); } Não sei se esse código funciona, mas é mais ou menos por aí que faria a inclusão de novos itens. No caso de você não ter uma tbNF e quer colocar a NF na unha, o jeito é ter duas páginas PHP: página1.php <?php echo <form action='pagina2.php'> echo "<input name='CFOP'> etc... etc... echo "<input name='total'> echo "<input type='submit' value='Confirmar'> echo "</form> página2.php <?php $CFOP = $_GET['CFOP']; etc... etc... $total = $_GET['total']; $mysqli = new $mysqli("localhost","root","hacker","diario"); $itemNF = $mysqli->query("Insert into tbhistprod (CFOP, etc, etc) values ($CFOP, etc etc)"; header("location:pagina1.php"); Nesse caso, cada item da NF terá que entrar um de cada vez.
  2. Supondo que o código está numa página php chamada _teste.php, eu faria assim: <form action="_teste.php"> <input type="text" name="nome"><br><br> <select name="sexo" multiple> <option value="feminino">feminino</option> <option value="masculino">masculino</option> <option value="na">na</option> </select> <br><br><input type="submit" value="Confirmar"> </form> <?php $nome=$_GET['nome'] ?? null; $sexo=$_GET['sexo'] ?? null; If (empty($nome)) {;} else { echo "$nome, sexo: $sexo";} ?> Ou seja, os marcadores <input> e <select> mandam para a página _teste.php os valores introduzidos pelo usuário, mas eles precisam ser delimitados pelo marcador <form>. Na página _teste.php, o PHP pega os valores através do comando $_GET. Espero que isso ajude.
  3. Eu usei o seu código e chamei de _teste.php, fiz pequenas modificações, e ele ficou assim <?php echo "<form action='_teste.php'>"; echo "<input type='time' name='hour'><br><br>"; echo "<input type='number' name='mult'>"; echo "<input type='submit' value='Confirmar'>"; echo "</form>"; $hour = $_GET['hour'] ?? null; $mult = $_GET['mult'] ?? null; if (empty($hour)) {;} else { $minutodecimal = date('i',strtotime($hour))/60 * $mult; $hours = date('H',strtotime($hour)) * $mult; $soma = $hours + $minutodecimal; $minutopadrao = round(($soma - intval($soma))*60,0); echo "Total de horas $hour x $mult = ".intval($soma).":".sprintf('%02s',$minutopadrao); }
  4. Essa não é uma tarefa fácil, mas fiquei curioso com o comando explode, não sei como ele funciona. Assim, eu montei o seguinte código <meta name="viewport" content="width=device-width, initial-scale=1"> <?php //$produtos = explode(";", $prod['descricaoProduto']); //foreach ($produtos as $key => $value) {$artigos = find_all('cadastroartigos', $key); // foreach ($artigos as $akey => $avalue) { // if ($avalue['descricaoProduto'] == $key) { // $avalue['precoCusto']= $prod['preço']; // update('cadastroartigos',$key, $cavalue); $mysqli=new mysqli("localhost","root","hacker","diario"); $query = $mysqli->query("select * from tbprod"); $row = $query->fetch_assoc(); $produtos=explode(";", $row['prod']); echo "<pre>"; print_r($produtos); echo "</pre>"; ?> mas o máximo que eu consegui fazer é criar o vetor $produtos com apenas o primeiro registro da tbprod. Ou seja, a primeira coisa a fazer é esquecer o comando explode, ele não serve para nada no contexto. O certo é pegar uma caneta e um papel e montar o esquema na mão, assim: 1. Pegar a tbcompra 2. Pegar a tbprod 3. Mostrar na tela do PHP a tbcompra junto com o preço da tbprod, e botar o preço em vermelho se for diferente 4. Ao invés de atualização automática, o certo é deixar para o usuário decidir se vai atualizar o preço (por exemplo, a Petrobras baixou o preço da gasolina, não há porque você baixar também, uma vez que o estoque anterior ainda está lá no tanque). 5. Estudar o PHP (ele é apenas um montador de HTML) e ver como é possível o usuário escolher o código do produto e atualizar o preço assim que o usuário selecionar o código.
  5. Até onde eu sei o include só preserva as variáveis que foram utilizadas no script anterior para o atual. Por exemplo: pagina1.php $mysqli=new mysqli("localhost","root","hacker","diario"); $query = $mysqli->query("select * from tbsupervariavel"); $linha = $query->fetch_assoc(); pagina2.php include 'pagina1.php' $mes=$linha['mesapurado']; $ano=$linha['anoapurado']; Nesse caso o vetor $linha foi criado na primeira página, mas está sendo usado na segunda. Não sei se é possível trazer a função de um MySQL dentro do PHP, mas já ouvi falar de incluir procedure do MySQL no PHP nesse link: https://smallbusiness.chron.com/call-stored-procedure-php-mysql-28881.html
  6. Eu trabalho com o MySQL, mas ainda não montei nenhuma procedure, o máximo que eu fiz foi criar um view para não ter o trabalho de formatar valores, mas depois eu vi que é mais negócio trabalhar com uma function do php. O meu trabalho com o MySQL dentro do PHP é mais ou menos assim: $mysqli=new mysqli("localhost","root","hacker","diario"); $query = $mysqli->query("select * from tbsupervariavel"); $linha = $query->fetch_assoc(); $mes=$linha['mesapurado']; $ano=$linha['anoapurado']; Resumindo, eu conecto, escolho uma tabela e eu vou trabalhando com o primeiro registro que aparecer na consulta. Esse é um exemplo bem simples. O chato são aquele monte de tabelas que são conectados entre si, nesse caso eu peço ajuda para o MS Access para escrever em SQL o que vem depois da palavra select para usar no PHP. Ou seja, o PHP é o meu ambiente para procedure. Se isso não ajudou você, encontrei a seguinte página que fala sobre o assunto (em MySQL): https://smallbusiness.chron.com/call-stored-procedure-php-mysql-28881.html
  7. Boa noite, wash, Usei o comando, <meta name="viewport" content="width=device-width, initial-scale=1"> <?php echo "<pre>"; print_r($_SERVER); echo "</pre>"; ?> Esses são os vetores que achei mais interessante [HTTP_SEC_CH_UA_MOBILE] => ?0 (não tenho isso no celular) [SERVER_ADDR] => ::1 (é igual nos dois) [SERVER_NAME] => localhost (esse é o nome do servidor no notebook, já no celular aparece o endereço no formato ipv6 fornecido pelo ngrok. Eu não vejo como diferenciar o notebook do celular pelo vetor $_SERVER, já o mobile_detect já me ajuda a identificar o notebook e o celular. O mobile_detect também é capaz de identificar o modelo do celular, isso ajuda se houver celulares de modelos diferentes.
  8. A minha primeira tentativa falhou, mas hoje eu consegui criar um novo usuário com a ajuda do editor SQL do Workbench, assim create user 'note'@'localhost'; grant all privileges on diario . * to 'note'@'localhost'; flush privileges Tudo indica que a minha primeira tentativa não deu certo porque eu esqueci de colocar ponto e vírgula, mesmo nos comandos que eu já havia executado. Mas ainda não sei como usar a nova conta para entrar no MySQL Workbench. Para saber se a nova conta funciona, eu usei o PHP. <?php $mysqli = new mysqli("localhost","note","","diario"); $query = $mysqli->query("select * from tbdiario"); $teste = $query->fetch_assoc(); echo $teste['hist']; ?> E o teste funcionou usando o notebook bem como o celular na rede 4G. O meu desafio é saber se o PHP é capaz de saber quem é o notebook (usuário 'root') e quem é o celular (usuário 'note'), e assim criar novos registros na tabela de pedidos com os campos usuário, número do pedido, total do pedido e data do pedido, sem eu precisar usar a rotina do login. Note que não há nenhuma senha nessa história, a minha prioridade é fazer os códigos funcionarem. O problema da segurança vou deixar para depois. ------------------------- Achei a solução em Mobile Detect - lightweight PHP class for detecting mobile devices (including tablets), ele resolve o meu problema. Ele sabe quem é o computador e quem é o phone. No phone, ele conseguiu identificar o aparelho. Se acrescentar mais um computador ou um o mesmo tipo de aparelho, aí a única solução é usar a rotina do login.
  9. Recentemente eu criei um programa chamado orçamento com o PHP e o MySQL. O programa é uma simples tabuada, onde z = x * y. Ou seja, a minha tabela de dados é só assim: dados [ produto, preço ] Ele funciona se eu usar o celular OU o notebook, mas não os dois ao mesmo tempo. Para evitar o conflito entre o celular e o notebook, estou pensando em trabalhar com conta de usuário, um para o celular e outro para o notebook. Eu nunca mexi com conta de usuário. A minha dúvida é quanto a base dados, eu devo modificar a tabela de dados assim [usuário, produto, preço] ou não devo mexer em nada, e deixo banco de dados se virar sozinho?
  10. Eu faria assim: pegaremail.php <? echo "<form action='pegarprefixo.php'>Digite email<input name='email'></form>"; pegarprefixo.php <? $email = $_GET['email'] ?? null; if (empty($email) {echo "você não digitou nada!";} else { $pos=strripos("@",$email); if ($pos==0) {echo "$email - email inválido!";} else {$prefixo = substr($email, 1, $pos-1); echo "Olá Sr $prefixo!";}}
  11. Isso é um tremendo erro de lógica. Testei várias vezes até o código funcionar. Mas esqueci de testar quando o usuário entra pela primeira vez, aonde esqueci de definir a variável $pec que é o motor de todo o programa. Que mancada! Eu peço sinceras desculpas. Para contornar o problema paliativamente, digite orcamento.php?ped=1 na barra de endereços. Agradeço por testar o meu programa. Quanto à criação das tabelas, nunca passou na cabeça fazer tal tarefa dentro do orçamento.php. Isso é um outro erro de lógica, eu jamais iria imaginar que alguém teria coragem de testar o meu código, mas isso vai além da minha capacidade. O MySQL ainda é novo para mim. O meu maior problema hoje é saber como conectar as chaves das tabelas e criar a integridade referencial e impedir que as subtabelas fiquem órfãs da tabelas principais. O máximo que posso fazer é consertar o erro de lógica, e publicar o orçamento.php 3.0 assim que ficar pronto, por enquanto, obrigado por tudo e por prestigiar o meu código com o seu tempo. ----------------------------- A seguir a listagem do orcamento.php 3.0, corrigindo o erro da definição do $ped. <meta name="viewport" content="width=device-width, initial-scale=1"> <?php 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"); //rotina para um novo pedido (regra: não abrir novo pedido se o anterior não foi utilizado) if (empty($com)) {;} else {if ($com=='novo') { $query=$mysqli->query("select * from tbpedido order by codped desc"); $row = $query->fetch_assoc(); $ultped = $row['codped']; $totalped = $row['totalped']; if ($totalped>0){ $dia=date('Y-m-d'); $ultped = $ultped + 1; $query=$mysqli->query("insert into tbpedido (codped,dia) values ($ultped,'$dia')");} header('location:orcamento.php?ped='.$ultped);}} //rotina para um pedido anterior if (empty($com)){;} else {if ($com=='anterior') { if ($ped>1) {$ped=$ped-1;header('location:orcamento.php?ped='.$ped);}}} //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); $query=$mysqli->query("update tbpedido set totalped = $total, dia = '".date('Y-m-d')."' where codped = $ped"); header('location:orcamento.php?ped='.$ped);}} //rotina para selecionar um produto if (empty($com)) {;} else {if ($com=='slc') { $sql="select * from tbprod order by prod"; $proc = $_GET['proc'] ?? null; if (empty($proc)) {;} else { if (strlen($proc) > 1) {$sql="select * from tbprod where prod like '%$proc%' order by prod"; if ($proc[0]=="@"){$proc=substr($proc,1); $sql="select * from tbprod where codforn like '%$proc%' order by prod";}} else {$sql="select * from tbprod where prod like '$proc%' order by prod";}} echo "<form action='orcamento.php'><br>Procurar: "; echo "<input name='proc' autocomplete='off' value=$proc ><input type='hidden' name='com' value='slc'></form>"; echo "<table><tr><th>Código</th><th>Descrição</th></tr>"; $query=$mysqli->query($sql); while($linha = $query->fetch_assoc()) { $codprod = $linha['codprod']; $codprod = "<a href=orcamento.php?codprod=$codprod&ped=$ped>".$linha['codprod']."</a>"; echo "<tr><td align='right'>$codprod</td><td>".$linha['prod']."</td></tr>";} echo "</table>"; exit;}} // definir a variável $pec onde ele é igual a 1 se a tbpedido estiver vazia, caso contrário assume o último pedido. if (empty($ped)) { $query = $mysqli->query("select * from tbpedido"); $num_rows = $query->num_rows; if ($num_rows==0) {$query=$mysqli->query("insert into tbpedido (codped,dia) values (1,date(now()))");$ped=1;} else {$query = $mysqli->query("select * from tbpedido order by codped desc");$ped=$query->fetch_assoc()['codped'];}} $query = $mysqli->query("select * from tbpedido where codped=$ped"); $row = $query->fetch_assoc(); $dia = df($row['dia']); $totalped = $row['totalped']; if (empty($totalped)) {$totalped=0;} echo "<table><tr><font color=red>Pedido $ped de $dia, Total R$ ".dec($totalped)."</tr>"; echo "<tr></font><br>Para excluir item do pedido, selecione a unidade do item </tr>"; echo "<tr><td><form action='orcamento.php'><input type='submit' name='com' value='novo'><input type='hidden' name='com' value='novo'></form></td>"; echo "<td><form action='orcamento.php'><input type='submit' name='com' value='anterior'><input type='hidden' name=ped value=$ped></form></td></tr></table>"; echo "<table><tr><th>Produto</th><th>Qt</th><th>Un</th><th>Preço</th><th>Total</th></tr>"; $sql="SELECT tbhistped.id,tbhistped.codped, tbhistped.codprod, tbhistped.qt as qt, tbhistped.unitario as unitario, tbhistped.subtotal,"; $sql.="tbprod.prod as prod, tbprod.un as un "; $sql.="FROM tbhistped INNER JOIN tbprod ON tbhistped.codprod = tbprod.codprod and tbhistped.codped = $ped ORDER BY tbhistped.id"; $query = $mysqli->query($sql); 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='orcamento.php?com=slc&ped=$ped'>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' autocomplete=off 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>";} ?>
  12. Inclui a rotina de novo orçamento, e a versão 2.0 ficou assim: <meta name="viewport" content="width=device-width, initial-scale=1"> <?php 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"); //rotina para um novo pedido (regra: não abrir novo pedido se o anterior não foi utilizado) if (empty($com)) {;} else {if ($com=='novo') { $query=$mysqli->query("select * from tbpedido order by codped desc"); $row = $query->fetch_assoc(); $ultped = $row['codped']; $totalped = $row['totalped']; if ($totalped>0){ $dia=date('Y-m-d'); $ultped = $ultped + 1; $query=$mysqli->query("insert into tbpedido (codped,dia) values ($ultped,'$dia')");} header('location:orcamento.php?ped='.$ultped);}} //rotina para um pedido anterior if (empty($com)){;} else {if ($com=='anterior') { if ($ped>1) {$ped=$ped-1;header('location:orcamento.php?ped='.$ped);}}} //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); $query=$mysqli->query("update tbpedido set totalped = $total, dia = '".date('Y-m-d')."' where codped = $ped"); header('location:orcamento.php?ped='.$ped);}} //rotina para selecionar um produto if (empty($com)) {;} else {if ($com=='slc') { $sql="select * from tbprod order by prod"; $proc = $_GET['proc'] ?? null; if (empty($proc)) {;} else { if (strlen($proc) > 1) {$sql="select * from tbprod where prod like '%$proc%' order by prod"; if ($proc[0]=="@"){$proc=substr($proc,1); $sql="select * from tbprod where codforn like '%$proc%' order by prod";}} else {$sql="select * from tbprod where prod like '$proc%' order by prod";}} echo "<form action='orcamento.php'><br>Procurar: "; echo "<input name='proc' autocomplete='off' value=$proc ><input type='hidden' name='com' value='slc'></form>"; echo "<table><tr><th>Código</th><th>Descrição</th></tr>"; $query=$mysqli->query($sql); while($linha = $query->fetch_assoc()) { $codprod = $linha['codprod']; $codprod = "<a href=orcamento.php?codprod=$codprod&ped=$ped>".$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,dia) values (1,date(now()))");$ped=1;} $query = $mysqli->query("select * from tbpedido where codped=$ped"); $row = $query->fetch_assoc(); if (empty($ped)) {$ped = $row['codped'];} $dia = df($row['dia']); $totalped = $row['totalped']; if (empty($totalped)) {$totalped=0;} echo "<table><tr><font color=red>Pedido $ped de $dia, Total R$ ".dec($totalped)."</tr>"; echo "<tr></font><br>Para excluir item do pedido, selecione a unidade do item </tr>"; echo "<tr><td><form action='orcamento.php'><input type='submit' name='com' value='novo'><input type='hidden' name='com' value='novo'></form></td>"; echo "<td><form action='orcamento.php'><input type='submit' name='com' value='anterior'><input type='hidden' name=ped value=$ped></form></td></tr></table>"; echo "<table><tr><th>Produto</th><th>Qt</th><th>Un</th><th>Preço</th><th>Total</th></tr>"; $sql="SELECT tbhistped.id,tbhistped.codped, tbhistped.codprod, tbhistped.qt as qt, tbhistped.unitario as unitario, tbhistped.subtotal,"; $sql.="tbprod.prod as prod, tbprod.un as un "; $sql.="FROM tbhistped INNER JOIN tbprod ON tbhistped.codprod = tbprod.codprod and tbhistped.codped = $ped ORDER BY tbhistped.id"; $query = $mysqli->query($sql); 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='orcamento.php?com=slc&ped=$ped'>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' autocomplete=off 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>";} ?>
  13. 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.
  14. 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>";}
  15. 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.
  16. 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";
  17. 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.
  18. 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.
  19. <?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>"; ?>
  20. 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.
  21. 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); ?>
  22. 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.
  23. <?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. ?>
  24. <?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.
  25. 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...