
Frank K Hosaka
Membros-
Total de itens
1.623 -
Registro em
-
Última visita
Tudo que Frank K Hosaka postou
-
Ontem, o Wash passou o link de um vídeo no YouTube que fala do Git e Github. Eu tenho pavor do YouTube, mas ele é importante. Graças ao YouTube eu consegui instalar o Laravel, mas eu só tenho a versão básica. O Laravel precisa ser turbinado com, no mínimo, o Breezer. Mas isso eu não consegui, eu precisaria aprender a usar o programa npm. Eu consegui ver os primeiros quinze minutos do vídeo do Git e Github, e o rapaz falou do npm. Assim, eu deixei o vídeo de lado. Basicamete essa é a diferença entre um desenvolvedor e um improvisador, o primeiro sabe lidar com o npm e eu tenho pavor dele. De 1990 até 2020, eu improvisava os meus códigos dentro do Visual Basic que vem embutido no Office da Microsoft. Em 2020, graças ao YouTube, eu consegui instalar o WampServe, e com ele é que eu conheci o PHP. O PHP é fantástico! Eu nunca imaginei que eu poderia executar um código dentro do navegador. Estudando o WampServe eu consegui executar o código no navegador do celular, mas só em 2023 é que me aventurei e aluguei uma hospedagem de R$ 23,00 para guardar os meus códigos e o meu banco de dados na Hostinger. Agora, eu tenho o meu projeto Orçamento tanto no PHP bem como no Laravel. O Laravel é muito chato, ele trabalha com o paradigma MVC. Para eu contornar o problema, eu simplesmente copiei todo o código PHP dentro da pasta views onde estão os arquivos blade.php e eu espero que com o tempo eu consiga separar os códigos em model, view e controller. O meu programa é bem simples: <?php $orçamento=$preço*$quantidade; Mas na hora de executar no navegador com o comando localhost/astudy/index.php, o PHP alerta que as variáveis $preço e $quantidade não estão definidas. Para resolver isso, eu fui obrigado a aprender um pouco de HTML, tipo: <?php if(isset($_GET['preço'])){ $preço=$_GET['preço']; $quantidade=$_GET['quantidade']; $orçamento=$preço*$quantidade; echo "$preço x $quantidade = $orçamento"; } ?> <form> <table> <tr><td>preço<td><input name=preço> <tr><td>quantidade<td><input name=quantidade> <tr><td><td><input type=submit> </form> Eu aprendi HTML na base da tentativa e erro. São códigos simples que dá para compartilhar no fórum PHP do Script Brasil. Agora, fazer isso na gramática do Laravel, isso iria exigir um monte de código. Nesse caso, o Git e Github é um bom negócio. Não no meu caso que ainda não tenho coragem de enfrentar o npm. O npm é um programa federal, ele precisa do acesso ao diretório raiz, coisa que não tenho privilégio na minha hospedagem de R$ 23,00 por mês na Hostinger.
-
Filtrar no select do modal pelo campo input
pergunta respondeu ao Carlos Lourenço de Frank K Hosaka em PHP
Pelo que eu entendi, quando você clica no botão do modal 2, você quer que apareça o coteúdo desse botão no modal 1. Eu fiz o teste aqui e funcionou, com algumas modificações: <style> .btn-nwe6 {background-color: blue; color: white; border: 2px solid blue; border-radius: 5px;} .bx.bx-note {font-size: 24px;color: yellow;} </style> <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.7.1/jquery.min.js" integrity="sha512-v2CJ7UaYy4JwqLDIrZUI/4hqeoQieOmAZNXBeQyjo21dadnwR+8ZaIJVT8EE2iyI61OV8e6M8PP2/4hpQINQ/g==" crossorigin="anonymous" referrerpolicy="no-referrer"> </script> <script type="text/javascript"> $(document).ready(function() { $(document).on('click', 'a', function(event) { var composicao = $(this).attr('composicao') $('#idComposicao').val(composicao)})}) </script> Modal_1: <input id=idComposicao> <p> Modal_2: <a href="#modal-composicao" role="button" data-toggle="modal" composicao="'.$Hardware['idHardware'].'" class="btn-nwe6" title="Composição"><i class="bx bx-note">Botão</i></a> -
Despachando um json pelo PHP [Resolvido]
pergunta respondeu ao Frank K Hosaka de Frank K Hosaka em PHP
Valeu ikkinet, eu esqueci de colocar o nome do arquivo da segunda listagem. Às vezes tento fazer duas listagens separadas, mas o fórum acaba ajuntando tudo. Mesmo assim, o fórum Script é o melhor que eu encontrei. Já o DivMedia é um horror, você monta o código de um jeito, e no final é publicado de maneira diferente. Por outro lado, eu ainda tenho essa dificuldade de separar o lado do servidor e o lado do cliente: por exemplo, para mostrar os dados de um produto, você precisa que o usuário selecione um item. Se eu pedir para o servidor jogar todos os produtos no HTML, isso não vai afetar o desempenho do cliente que geralmente tem um notebook de 2 gb de RAM? Sinceramente, eu não sei o que é back-end e front-end. Eu sou péssimo em HTML. Estou aprendendo alguma coisa com a ajuda do PHP. Eu escrevo echo "olá mundo", e o PHP monta <html><body>olá mundo</body></html>. -
Imprimir array por post para php através de angularjs
pergunta respondeu ao Gregory Carmo de Frank K Hosaka em Tutoriais & Dicas - PHP
Acredito que a solução é $json=file_get_contents('salvar/teste.php'); eu não uso o angular.js -
Eu encontrei um código da função captcha no fórum iMasters. Ele precisa do arquivo Open-Sans-Regular.ttf que você encontra nesse link: edx-fonts/open-sans/fonts/Regular/OpenSans-Regular.ttf at master · edx/edx-fonts (github.com) mysql CREATE TABLE `tab_logar` ( `ggid` int(10) unsigned zerofill NOT NULL AUTO_INCREMENT, `ggLogin` varchar(50) DEFAULT NULL, `ggSenha` varchar(45) DEFAULT NULL, PRIMARY KEY (`ggid`) ) ENGINE=InnoDB AUTO_INCREMENT=41 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci (1,"joao","123") ================================================================================= captcha.php <?php function funcCaptcha($text){ $width = 200; $height = 100; $fontfile = "OpenSans-Regular.ttf"; $image = imagecreatetruecolor($width, $height); $white = imagecolorallocate($image, 255, 255, 255); $black = imagecolorallocate($image, 0, 0, 0); imagefill($image, 0, 0, $white); imagettftext($image, 25, rand(-20,20), $width/4, 60, $black, $fontfile, $text); $warped_image = imagecreatetruecolor($width, $height); imagefill($warped_image, 0, 0, imagecolorallocate($warped_image, 255, 255, 255)); for ($x=0; $x < $width; $x++) { # code... for ($y=0; $y < $height; $y++) { # code... $index = imagecolorat($image, $x, $y); $color_comp = imagecolorsforindex($image, $index); $color = imagecolorallocate($warped_image, $color_comp['red'], $color_comp['green'], $color_comp['blue']); $imageX = $x; $imageY = intval($y + sin($x / 10)) ; imagesetpixel($warped_image, $imageX, $imageY, $color); } } $path = "capacha.jpg"; imagejpeg($warped_image,$path); imagedestroy($warped_image); imagedestroy($image); return $path; } ======================================================================= index.php <?php include('captcha.php'); $ggCon = mysqli_connect("localhost","root","","laravel"); $phpSelf = $_SERVER['PHP_SELF']; $mensagem=""; if(isset($_POST['ggLogin'])){ $gg_id = $_POST['gg_id']; $ggLogin = $_POST['ggLogin']; $ggSenha = $_POST['ggSenha']; $ggCaptcha = $_POST['ggCaptcha']; $text88 = $_POST['text88']; if($ggCaptcha!==$text88){ $mensagem="Favor digitar o Captcha corretamente"; goto gambiarra;} $sqlVF = mysqli_query($ggCon, "SELECT * FROM tab_logar WHERE ggLogin = '".$ggLogin."' AND ggSenha = '".$ggSenha."' "); $AcompararDados = mysqli_num_rows($sqlVF); if($AcompararDados == true){ $_SESSION['gg_id'] = $gg_id; print "usuário logado";exit;} else{ print "não logou";exit;}} $text88 = rand(10000,99999); $myimage = funcCaptcha($text88); gambiarra: ?> <form action="<?=$phpSelf?>" method="post" style="width:200px;padding:1em;margin:auto"> <h1>Acessar painel</h1> <table> <tr><td>Id<td><input name=gg_id value=1> <tr><td>Login<td><input name="ggLogin" value='joao'> <tr><td>Senha<td> <input name="ggSenha" value='123'> <tr><td>Digite o código<td><input name="ggCaptcha"> <tr><td><img src="capacha.jpg" style="width:150px;" alt="código captcha"><br> <input type=hidden name=text88 value=<?=$text88?>> <tr><td><input type=submit> </table> <p><h4><?=$mensagem?></h4></p> </form>
-
Avermelhando uma linha ou coluna ou diagonal de uma matriz 6 x 6
uma questão postou Frank K Hosaka PHP
index.php <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.2/dist/css/bootstrap.min.css" rel="stylesheet"> <?php echo "<table class='table w-25 m-auto'>"; $escolha=mt_rand(1,14); $linha=0; if($escolha<=6){ echo "<td colspan=6>Palpite para Mega-Sena: linha $escolha";} if($escolha>=7 and $escolha<=12){ $coluna=$escolha-6; echo "<td colspan=6>Palpite para Mega-Sena: coluna $coluna";} else {$coluna=0;} $diagonal=0; if($escolha>12){ $diagonal=$escolha-12; echo "<td colspan=6>Palpite para Mega-Sena: diagonal $diagonal";} $controle=5; for($j=1;$j<=6;$j++){ $linha++; for ($i = 0, $palpites = []; $i < 1500; $i++) @$palpites[mt_rand(1, 60)]++; arsort($palpites); $i=0; $sorteio=[]; foreach($palpites as $key => $valor){ $sorteio[]=$key; $i++; if($i==6){break;}} sort($sorteio); echo "<tr>"; foreach($sorteio as $key=>$sorte){ if($coluna!==0 and $key==($coluna-1)){ $class="class='text-danger'";} else {$class="";} if($escolha<=6 and $escolha==$linha){ $class="class='text-danger'";} if($diagonal==1 and $linha==($key+1)){ $class="class='text-danger'";} if($diagonal==2 and $key==$controle){ $class="class='text-danger'"; $controle--;} echo "<td $class>$sorte";}} echo "<tr><td colspan=6>"; echo "<input type=submit value='Novo Palpite' onclick=location.replace('index.php')>"; -
Eu estou em 2023, vinte anos depois de publicado a primeira mensagem, e não consegui encontrar nenhum html no portal do UOL ou do jornal o Estado, assim eu tive que improvisar assim: teste.html <html> <head> <title>Exemplo de HTML</title> </head> <body> <h1>Olá, mundo!</h1> </body> </html> === index.php <?php $handle=fopen("teste.html","r"); $conteudo=fread($handle,filesize("teste.html")); var_dump($conteudo); echo $conteudo;
-
Para mandar o valor de várias variáveis de uma rotina para outra eu usava um monte de <input> dentro de um <form>. Hoje eu fiz um teste, e eu consegui mandar o valor de várias variáveis dentro de uma só variável: <?php if(isset($_GET['zvalor'])){ $zvalor=explode(",",$_GET['zvalor']); $codprod=$zvalor[0]; $estoque=$zvalor[1]; $total=$zvalor[2]; echo "código $codprod estoque $estoque total $total";} $codprod=1; $estoque=2; $total=3; $zvalor=$codprod.",".$estoque.",".$total; ?> <form> <input type=submit value=Teste> <input type=hidden name=zvalor value="<?=$zvalor?>"> </form>
-
Eu não sei mexer no gitHub, consegui criar o frankhosaka/repositorioDoFrank (github.com), mas como fazer o upload do arquivo sql, isso eu não tenho a menor ideia. Mas posso fazer uma lista: INSERT INTO `tbl_lojas` VALUES (0000000001,'Sabor Vida'),(0000000040,'Maria'); INSERT INTO `tbl_pdia` VALUES (2,0,'prato',1,'prato.png',1),(3,0,'sopa',1,'prato.png',2),(4,0,'sobremesa',1,'prato.png',3),(5,1,'prato',1,'prato.png',4),(6,1,'sopa',1,'prato.png',5),(7,1,'sobremesa',1,'prato.png',6); Eu segui mais ou menos o primeiro código no início desse tema. Eu trabalhei com apenas um único arquivo png na pasta tablemenu/img_menu. Para criar o arquivo prato.png eu fiz assim: pedi imagens de prato para o Google, pedi para o Windows 11 capturar a tela, selecionei a figura desejada, e assim criei o arquivo png.
-
Aqui está a minha experiência com grid, só não consegui diminuir o tamanho da imagem. <?php $conectar=new mysqli("localhost","root","","laravel"); $loja=1; $sqloja=mysqli_query($conectar,"select * from tbl_lojas where idloja=$loja"); $lojan=mysqli_fetch_array($sqloja); $diasDaSemana=['segunda-feira','terça-feira']; //,'quarta-feira','quinta-feira','sexta-feira','sábado','domingo'];?> <title>Pratos do dia</title> <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.2/dist/css/bootstrap.min.css" rel="stylesheet"> <div class="w-50 m-auto"><input type=submit value="Top Menu"></div> <h1 class="w-50 m-auto">Pratos do dia - <?=$lojan['loja']?></h1> <div class="container w-50"> <?php foreach($diasDaSemana as $indice=>$dia){ ?> <div class=row> <div class="col text-center fs-1"><?=$dia?></div> </div> <div class=row> <?php $sql=mysqli_query($conectar,"select * from tbl_pdia where pdialoja=$loja and pdiasemana=$indice"); while($row=mysqli_fetch_array($sql)){ $img="tablemenu/img_menu/".$row['pdiaimg']; $descricao=$row['pdianome']; $preço=$row['pdiapreco'];?> <div class=col> <div class=row><img src=<?=$img?>></div> <div class=row><div class=text-center><?=$descricao?></div></div> <div class=row><div class=text-center>€ <?=$preço?></div></div> </div> <?php } ?> </div> <?php } ?> </div> A estrutura das tabelas é a seguinte: CREATE TABLE `tbl_lojas` ( `idloja` int(10) unsigned zerofill NOT NULL AUTO_INCREMENT, `loja` varchar(50) DEFAULT NULL, PRIMARY KEY (`idloja`) ) ENGINE=InnoDB AUTO_INCREMENT=41 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci REATE TABLE `tbl_pdia` ( `id` int NOT NULL AUTO_INCREMENT, `pdiasemana` int NOT NULL, `pdianome` varchar(45) DEFAULT NULL, `pdialoja` int DEFAULT NULL, `pdiaimg` varchar(45) DEFAULT NULL, `pdiapreco` float DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=8 DEFAULT CHARSET=utf8mb3 COMMENT='Teste'
-
<?php $preço=1.00; $café=2.50; echo "$preço $café"; $mysqli=new mysqli("localhost","root","","laravel"); $query=$mysqli->query("select * from tbl_lojabrás"); $row=$query->fetch_assoc(); echo $row['função']; o meu PHP bem como o MySQL aceitam os acentos utilizados na língua portuguesa.
-
Eu sou péssimo para trabalhar com <div>. Se fosse comigo, eu iria apelar para a <table>, assim: <?php // mysql: tbl_pdia(id int,pdiasemana int,pdianome varchar) // (2,0,prato)(3,0,sopa)(4,0,sobremesa) // (5,1,prato)(6,1,sopa)(7,1,sobremesa) 0=segunda,1=terça... $mysqli=new mysqli("localhost","root","","laravel"); $diaDaSemana=['Segunda','Terça']; $caminho="./"; $img=$caminho."prato.png"; echo "<table style='width:500;margin:0 auto'>"; foreach($diaDaSemana as $indice => $dia){ echo "<th><th>$dia<tr>"; $query=$mysqli->query("select * from tbl_pdia where pdiasemana=$indice"); while($row=$query->fetch_assoc()){ echo "<td>".$row['pdianome']."<br><img src=$img width=100 height=100>";} echo "<tr>";} echo "</table>";
-
Como percorro o arquivo json
pergunta respondeu ao adrsublimacao de Frank K Hosaka em Tutoriais & Dicas - PHP
Eu copiei os seus dados, e na hora de colar apareceram sete linhas, e cada um são json válidos. Agora, para percorrer que é complicado. Vou tentar explicar por parte: <?php $a7='{"event":"contacts.update","instance":"ardoprado"}'; var_dump(json_decode($a7)); // verifica na tela se a variável contém um json válido $dados=json_decode($a7); foreach($dados as $key => $value){ echo "$key=>$value<br>";} // event=>contacts.update // instance=>ardoprado Aqui é fácil separar a chave do seu valor. O problema é quando o valor é um vetor com outros json por dentro. Eu uso o método da tentativa e erro até conseguir percorrer todas as chaves e seus valores, assim: <?php $a7='{"event":"contacts.update","instance":"ardoprado","data":[{"id":"554291188455@s.whatsapp.net","profilePictureUrl":"https:\/\/pps.whatsapp.net\/v\/t61.24694-24\/56444315_1487467724717993_7852434805437235200_n.jpg?ccb=11-4&oh=01_AdS8V-nfC2M5dXrK1A-0TdGVVGKX9eHGHMvhxPESA8-tBw&oe=654CC053&_nc_sid=000000&_nc_cat=108","owner":"554299411926@s.whatsapp.net"}]}'; var_dump(json_decode($a7)); $dados=json_decode($a7); foreach($dados as $key => $value){ echo "$key=>"; if (!is_array($value)){ echo $value."<br>";} else { $vetores=$value; foreach($vetores as $indice => $vetor){ echo "<br>vetor $indice <br>"; foreach($vetor as $subkey=>$subvalue){ echo "$subkey=>$subvalue<br>";}}}} /* event=>contacts.update instance=>ardoprado data=> vetor 0 id=>554291188455@s.whatsapp.net profilePictureUrl=>https://pps.whatsapp.net/v/t61.24694-24/56444315_1487467724717993_7852434805437235200_n.jpg?ccb=11-4&oh=01_AdS8V-nfC2M5dXrK1A-0TdGVVGKX9eHGHMvhxPESA8-tBw&oe=654CC053&_nc_sid=000000&_nc_cat=108 owner=>554299411926@s.whatsapp.net */ Veja que o meu programa conseguiu percorrer apenas o último json. Espero que você tenha conseguido entender. É possível que o meu programa não funcione para todos os jsons que você listou, nesse caso, você vai ter que adaptar o código, principalmente se você estiver pensando em ajuntar todos os json numa só variável. Boa sorte. Agora, para o PHP ler o log.txt eu precisaria de uma cópia desse arquivo no meu micro, tem jeito de mandar para frankhosaka@gmail.com? -
Como percorro o arquivo json
pergunta respondeu ao adrsublimacao de Frank K Hosaka em Tutoriais & Dicas - PHP
Você precisa ter um json válido que tem esse formato: <?php $teste='[{"nome":"joão","whatsapp":912341234}]'; $jteste=json_decode($teste); var_dump($jteste); // ['nome' => 'joão', 'whatsapp' => 912341234] No seu exemplo, o json_decode vai retornar null. Ele tem aspas duplas demais, e as informações não seguem a sequência {"identificador" : "identificado"}. Para colocar esse json numa variável PHP, você não pode usar aspas duplas, e sim aspas simples, assim $identificador='{"identificador" : "identificado"}'; -
Erro ao adicionar utilizando Implode
pergunta respondeu ao arielmarques de Frank K Hosaka em Tutoriais & Dicas - PHP
Para fazer o implode( ) funcionar, eu fiz assim: <?php if(isset($_POST['naturalone'])){ $naturalone=implode(", ",$_POST['naturalone']); echo $naturalone;exit;} ?> <form method=post> <select name=naturalone[] onchange=submit()> <option>Jesus, Maria, José</option> <option>Inacio, Jair, Sergio</option> </select> </form> -
A agenda de entrevista de Maxsuel Rodrigues
pergunta respondeu ao Frank K Hosaka de Frank K Hosaka em PHP
Nessa nova listagem, a estrutura da tabela foi alterada, ao invés de 6 campos binários, ele foi reduzido a apenas um campo binário. mysql CREATE TABLE `novo_colaborador_portal` ( `id` int(10) unsigned zerofill NOT NULL AUTO_INCREMENT, `data` date NOT NULL, `nome` varchar(50) DEFAULT NULL, `funcao` varchar(30) DEFAULT NULL, `entrevista` varchar(6) DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=41 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci index.php <?php $conexao = mysqli_connect("localhost", "root","","laravel"); if (isset($_GET['excluir'])) { $id = $_GET['excluir']; $conexao->query("delete from novo_colaborador_portal where id=$id"); header("Location: index.php");} if (isset($_POST['salvar'])) { $data=$_POST['data']; $nome=$_POST['nome']; $funcao=$_POST['funcao']; $conexao->query("insert into novo_colaborador_portal (data, nome, funcao, entrevista) values ('$data', '$nome', '$funcao','000000')"); header('location:index.php');} if (isset($_GET['atualiza'])){ $id=$_GET['atualiza']; $entrevista=$_GET['entrevista']; $posicao=$_GET['posicao']; $valor=$_GET['valor']; $entrevista=substr_replace($entrevista,$valor,$posicao,1); $conexao->query("update novo_colaborador_portal set entrevista='$entrevista' where id=$id"); header("location:index.php");} ?> <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.2/dist/css/bootstrap.min.css" rel="stylesheet"> <div class='w-50 m-auto mt-2'> <h3 class='btn btn-primary' onclick=cadastro.style.display='block'>Novo Colaborador</h3> <div id=cadastro style=display:none> <form method=post> <h5>Preencha as informações abaixo para cadastrar o novo colaborador.</h5> <table class='table table-striped'> <tr><td>Admissão:<td><input type=date name=data required> <tr><td>Nome:<td><input name=nome required> <tr><td>Função:<td><input name=funcao required> <tr><td><button class='btn btn-primary' onclick=cadastro.style.display='none'>Cancelar</button> <td><button class='btn btn-primary' type=submit name=salvar>Salvar</button></table> </form> </div> <table class='table table-striped'> <th>Dias<th>Data<th nowrap>Nome do Colaborador<th>Função <th class=text-center>15<br>Dias<th class=text-center>30<br>Dias <th class=text-center>45<br>Dias<th class=text-center>60<br>Dias <th class=text-center>75<br>Dias<th class=text-center>90<br>Dias<th> <?php $sql = "SELECT * FROM novo_colaborador_portal ORDER BY id ASC"; $result = $conexao->query($sql); while ($user_data = mysqli_fetch_assoc($result)) { $dataAdmissao = strtotime($user_data['data']); $dataHoje = strtotime(date('Y-m-d')); $contaDias = ($dataHoje-$dataAdmissao) / 86400; $id=$user_data['id']; $entrevista=$user_data['entrevista']; ?> <tr><td><?=$contaDias?> <td><?=date('d/m/y', strtotime($user_data['data']))?> <td><?=$user_data['nome']?> <td><?=$user_data['funcao']?> <?php for($dias=15;$dias<=90;$dias=$dias+15){ echo "<td class=text-center>"; if ($contaDias >= $dias) { $entrevista=$user_data['entrevista']; $posicao=$dias/15-1; if($entrevista[$posicao]=="1") { echo "<a class='link-underline-light link-success' href=?atualiza=$id&entrevista=$entrevista&posicao=$posicao&valor=0> ♥</a>";} if($entrevista[$posicao]=="0"){ echo "<a class='link-underline-light link-danger' href=?atualiza=$id&entrevista=$entrevista&posicao=$posicao&valor=1> ♥</a>";}} else {echo "<i>♠</i>";}} echo "<td><a href=?excluir=$id onclick='confirm(`Deseja mesmo excluir este colaborador?`);' title='Clique para excluir o colaborador'>Excluir</a>";} -
O Maxsuel publicou uma agenda de entrevista na forma de ícones, onde vermelho simboliza que venceu o prazo para entrevistar o novo colaborador, e verde significa que o rapaz foi entrevistado. A ideia é bacana, e eu montei um arquivo index.php para executar o trabalho: mysql CREATE TABLE `novo_colaborador_portal` ( `id` int(10) unsigned zerofill NOT NULL AUTO_INCREMENT, `data` date NOT NULL, `nome` varchar(50) DEFAULT NULL, `funcao` varchar(30) DEFAULT NULL, `diaA` int DEFAULT NULL, `diaB` int DEFAULT NULL, `diaC` int DEFAULT NULL, `diaD` int DEFAULT NULL, `diaE` int DEFAULT NULL, `diaF` int DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=39 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci index.php <?php $dbname="laravel"; //"atacadao"; $usuario="root"; //filial148"; $password="";//"senhafilial"; $conexao = mysqli_connect("localhost", $usuario, $password, $dbname); if(!$conexao){ echo "Error: Sem acesso ao MySQL." . PHP_EOL; echo "Debugando o error: " . mysqli_connect_errno() . PHP_EOL; echo "Debugando o error: " . mysqli_connect_error() . PHP_EOL; exit;} function entrevista($agenda,$id,$campo){ if($agenda=="1") { echo "<a href=?desativa=$id&campo=$campo><i style=color:green>♥</i></a>";} if($agenda=="0"){ echo "<a href=?ativa=$id&campo=$campo><i style=color:red>♥</i></a>";}} if (isset($_GET['excluir'])) { $id = $_GET['excluir']; $sql = "delete FROM novo_colaborador_portal WHERE id=$id"; $result = $conexao->query($sql); header("Location: index.php");} if (isset($_POST['salvar'])) { $data=$_POST['data']; $nome=$_POST['nome']; $funcao=$_POST['funcao']; mysqli_query($conexao, "INSERT INTO novo_colaborador_portal (data, nome, funcao, diaA, diaB, diaC, diaD, diaE, diaF) VALUES ('$data', '$nome', '$funcao',0,0,0,0,0,0)"); header('location:index.php');} if (isset($_GET['desativa'])){ $id=$_GET['desativa']; $campo=$_GET['campo']; $sql="UPDATE novo_colaborador_portal SET $campo=0 WHERE id=$id"; mysqli_query($conexao,$sql); header("location:index.php");} if (isset($_GET['ativa'])){ $id=$_GET['ativa']; $campo=$_GET['campo']; $sql="UPDATE novo_colaborador_portal SET $campo=1 WHERE id=$id"; mysqli_query($conexao,$sql); header("Location: index.php");} ?> <title>Teste - Novo Colaborador</title> <!-- INICIO NOVO COLABORADOR --> <div style='width:500px;margin:0 auto'> <div><h3 onclick=cadastro.style.display='block'>Novo Colaborador</h3></div> <div id=cadastro style=display:none> <form method=post> <h3>Preencha as informações abaixo para cadastrar o novo colaborador.</h3> <table> <tr><td>Admissão:<td><input type="date" name="data" id="data" required> <tr><td>Nome:<td><input name="nome" id="nome" required> <tr><td>Função:<td><input name="funcao" id="funcao" required> <tr><td><td><button type=submit name=salvar>Salvar</button></table> </form> </div> <table> <th>Dias<th>Data<th nowrap>Nome do Colaborador<th>Função <th>15<br>Dias<th>30<br>Dias<th>45<br>Dias <th>60<br>Dias<th>75<br>Dias<th>90<br>Dias<th> <?php $sql = "SELECT * FROM novo_colaborador_portal ORDER BY id ASC"; $result = $conexao->query($sql); while ($user_data = mysqli_fetch_assoc($result)) { // pega as datas do banco e data atual e transforma em DIA-MES-ANO $dataInput = date('d/m/Y', strtotime($user_data['data'])); $dataHoje = date('d/m/Y'); // transforma a data do formato BR para o formato americano, ANO-MES-DIA $data1 = implode('-', array_reverse(explode('/', $dataInput))); $data2 = implode('-', array_reverse(explode('/', $dataHoje))); // converte as datas para o formato timestamp $d1 = strtotime($data1); $d2 = strtotime($data2); // verifica a diferença em segundos entre as duas datas e divide pelo número de segundos que um dia possui $dataFinal = ($d2 - $d1) / 86400; $id=$user_data['id']; ?> <tr><td><?=$dataFinal?> <td><?php echo date('d/m/y', strtotime($user_data['data'])) ?> <td><?=$user_data['nome']?> <td><?=$user_data['funcao']?> <?php echo "<td align=center>"; if ($dataFinal >= 15) { $agenda=$user_data['diaA']; entrevista($agenda,$id,"diaA");} else {echo "<i>♠</i>";} echo "<td align=center>"; if ($dataFinal >= 30) { $agenda=$user_data['diaB']; entrevista($agenda,$id,"diaB");} else {echo "<i>♠</i>";} echo "<td align=center>"; if ($dataFinal >= 45) { $agenda=$user_data['diaC']; entrevista($agenda,$id,"diaC");} else {echo "<i>♠</i>";} echo "<td align=center>"; if ($dataFinal >= 60) { $agenda=$user_data['diaD']; entrevista($agenda,$id,"diaD");} else {echo "<i>♠</i>";} echo "<td align=center>"; if ($dataFinal >= 75) { $agenda=$user_data['diaE']; entrevista($agenda,$id,"diaE");} else {echo "<i>♠</i>";} echo "<td align=center>"; if ($dataFinal >= 90) { $agenda=$user_data['diaF']; entrevista($agenda,$id,"diaF");} else {echo "<i>♠</i>";} echo "<td><a href=?excluir=$id onclick='return confirm(`Deseja mesmo excluir este colaborador?`);' title='Clique para excluir o colaborador'>".'Excluir'."</a>";}
-
Problema: eu fiz o teste por aqui e funcionou. Só tive que criar a pasta php_action para hospedar ativa_diaA.php e desativa_diaA.php, os dois funcionam, mas eu tive que mudar a linha include_once("..\conexao.php"); bem como a linha 280 do index.php para $sql_query = mysqli_query($conexao,$sql); e também tive que criar o arquivo conexao.php no mesmo diretório do index.php assim: <?php $conexao=new mysqli("localhost","root","","laravel"); Usei dois registros, (Frank,'2023-10-25') e os ícones vermelho-verde não estavam disponíveis. Usei (João,'2023-09-25') e os dois primeiros ícones estavam vermelhos.
-
Tem jeito de você publicar todos os códigos inclusive a estrutura das tabelas? Qualquer coisa estou a disposição no frankhosaka@gmail.com.
-
Eu concordo, mas eu sou novato, comecei a estudar o PHP só há três anos, e só sei trabalhar com o método GET pelo PHP, o problema é aquele monte de informações que ficam no cabeçalho e se você atualiza a página, ele pode duplicar um registro na tabela, é um problema que sempre enfrento nos meus projetos. Diante do exposto, a função assíncrona do JavaScript é uma ótima solução. Por outro lado, eu fiquei contente com o código teste.php que publiquei hoje; apesar de usar o método GET pelo marcador <a href>, as variáveis envolvidas não aparecem no topo do cabeçalho, e assim consigo evitar o problema da duplicidade de registros, no caso de atualizar a página por engano. Outro problema é o próprio JavaScript, eu preciso de três dias para fazer o código funcionar: teste.html <script> async function atualizar(){ formData=new FormData() formData.append("status",teste.innerHTML) response=await fetch('teste.php',{ method: "POST", body: formData}); if (response.ok){ data=await response.json() teste.innerHTML=data.mensagem}} </script> Usuario: <a id="teste" onclick="atualizar()">Confirmar</a> ------------------------------------- teste.php <?php // mysql user_data (id,diaA)(1,0) $status=$_POST['status']; $mysqli=new mysqli("localhost","root","","laravel"); $user=1; if($status=="Confirmar"){$novo=1;} else {$novo=0;} $mysqli->query("update user_data set diaA=$novo where id=$user"); $query=$mysqli->query("select * from user_data where id=$user"); $user_data=$query->fetch_assoc(); $status=$user_data['diaA']; $id=$user_data['id']; if($status==1){$mensagem="Confirmado";} else {$mensagem="Confirmar";} $json=json_encode(["mensagem"=>$mensagem]); echo $json;
-
O código seguinte muda o status do usuário para confirmar ou confirmado, com a ajuda de um link teste.php <?php // mysql user_data (id,diaA)(1,0) $mysqli=new mysqli("localhost","root","","laravel"); if(isset($_GET['id'])){ $id=$_GET['id']; $status=$_GET['diaA']; if($status==0){$status=1;} else {$status=0;} $mysqli->query("update user_data set diaA=$status where id=$id"); header("location:teste.php");} $user=1; $query=$mysqli->query("select * from user_data where id=$user"); $user_data=$query->fetch_assoc(); $status=$user_data['diaA']; $id=$user_data['id']; if($status==1){$mensagem="Confirmado";} else {$mensagem="Confirmar";} echo "Usuário: <a href=?id=$id&diaA=$status>$mensagem</a>";
-
Erro no calculo de horas trabalhadas horas extras e horas atraso
pergunta respondeu ao Weslley Brum de Frank K Hosaka em Tutoriais & Dicas - PHP
O primeiro problema é a estrutura da tabela, para executar o seu código, eu fiz a tabela registro_pontos assim: CREATE TABLE `registros_ponto` ( `id` int NOT NULL AUTO_INCREMENT, `matricula` int NOT NULL, `data_registro` date DEFAULT NULL, `entrada1` time DEFAULT NULL, `saida1` time DEFAULT NULL, `entrada2` time DEFAULT NULL, `saida2` time DEFAULT NULL, `horas_trabalhadas` time DEFAULT NULL, `horas_atraso` time DEFAULT NULL, `horas_extras` time DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=36 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci O segundo problema é que você não pode usar a matrícula para atualizar a tabela, você tem que usar a chave primária, no meu caso, eu chamei de id. O id é um número único. Vamos a um exemplo: a empresa tem apenas um funcionário, a matricula dele é 1, mas ele trabalhou no dia 1,2,3...30. Para calcular as horas trabalhadas não podemos usar a matrícula do funcionário, mas a chave primária, ou seja, um número especifico que indica o dia 1, 2, 3, etc. Eu não sei se o cálculo das horas trabalhadas está certo, mas modifiquei o seu código para trabalhar com apenas um registro: <?php // mysql registros_ponto (id int pk ai,matricula int,data_registro date,entrada1 time, // saida1 time, entrada2 time, saida2 time, horas_trabalhadas time,horas_atraso time,horas_extras time) // (33,1,'2023-10-21','8:00','12:00','13:00','17:00',null,null,null) $pdo=new PDO("mysql:hostname=localhost;dbname=laravel","root",""); $query = "SELECT * FROM registros_ponto WHERE matricula = 1"; $stm=$pdo->prepare($query); $stm->execute(); $rows=$stm->fetchAll(PDO::FETCH_ASSOC); foreach($rows as $row){ // Calcular horas trabalhadas $id=$row['id']; $entrada1 = strtotime($row['entrada1']); $saida1 = strtotime($row['saida1']); $entrada2 = strtotime($row['entrada2']); $saida2 = strtotime($row['saida2']); // Calcular as durações dos períodos $duracao1 = $saida1 - $entrada1; $duracao2 = $saida2 - $entrada2; // Calcular as horas trabalhadas $horasTrabalhadasSegundos = $duracao1 + $duracao2; $horasTrabalhadas = gmdate("H:i:s", $horasTrabalhadasSegundos); // Calcular horas de atraso $jornadaTrabalhoSegundos = strtotime("09:00:00"); $horasAtrasoSegundos = $jornadaTrabalhoSegundos - $horasTrabalhadasSegundos; // Verificar se há atraso com base na tolerância if ($horasAtrasoSegundos > 0) { $horasAtraso = gmdate("H:i:s", $horasAtrasoSegundos);} else { $horasAtraso = ""; } // "00:00:00" Não há atraso // Calcular horas extras $horasExtrasSegundos = max($horasTrabalhadasSegundos - $jornadaTrabalhoSegundos, 0); $horasExtras = gmdate("H:i:s", $horasExtrasSegundos); // Atualizar o campo horas_trabalhadas, horas_atraso, horas_extras $query = "UPDATE registros_ponto SET horas_trabalhadas = :horasTrabalhadas, horas_atraso = :horasAtraso, horas_extras = :horasExtras WHERE id = :id"; $stm = $pdo->prepare($query); $stm->bindParam(':id', $id); $stm->bindParam(':horasTrabalhadas', $horasTrabalhadas); $stm->bindParam(':horasAtraso', $horasAtraso); $stm->bindParam(':horasExtras', $horasExtras); $stm->execute();} ?> Para calcular as horas trabalhadas de todo mundo, basta mudar a primeira consulta para "select * from registros_ponto". Não importa a matrícula, essa consulta vai calcular as horas para todos os registros. -
No fórum iMasters encontrei a função bcsub( ), ele é bem interessante, ele subtrai dois valores e ao mesmo tempo define o número de casas decimais do resultado, assim: <?php $despesa=2.1; $receita=3; echo $resultado=bcsub($despesa,$receita,2); // -0.90 Eu fiquei imaginando que seria melhor se o PHP tivesse também a mesma ferramenta para as outras operações de aritmética. E ele tem, olha só: <?php $despesa=2.1; $receita=3; echo $resultado=bcsub($despesa,$receita,2)."<br>"; // -0.90 $preço=2.1; $quantidade=3; echo $resultado=bcmul($preço,$quantidade,2)."<br>"; // 6.30 echo $resultado=bcadd($preço,$quantidade,2)."<br>"; // 5.10 echo $resultado=bcdiv($preço,$quantidade,2); // 0.70 Esse recurso é muito bacana, o chato é esse ponto decimal "." que aparece no resultado. Perguntei para o Bard se é possível definir a vírgula como ponto flutuante no MySQL, e ele disse que sim. Aqui estão as dicas: arquivo my.conf [mysqld] decimal_separator = , ou linha de comando: SET GLOBAL decimal_separator = ','; Eu tenho pavor de mexer no ponto flutuante do MySQL, não faço a menor ideia de como o PHP vai pegar os registros. O Bard disse que é possível definir o ponto flutuante do PHP, assim: setlocale(LC_NUMERIC, "pt_BR"); Mas essa dica não funciona. O Bard está em fase beta. Esse é um bom motivo para não mexer no MySQL e se conformar com a função number_format( ) do PHP.
-
Eu usei essa sintaxe para procurar um valor em todas as colunas de uma tabela: $sql="select * from tbprod where concat(codprod,prod,codbar,codforn) like '%$procurar%'"; Mas, ele não funciona se uma das colunas conter o valor nulo. A sintaxe correta é essa: $sql="select * from tbprod where concat_ws(codprod,prod,codbar,codforn) like '%$procurar%'";
-
Separando o texto "a123 b456 c789" no PHP
pergunta respondeu ao Frank K Hosaka de Frank K Hosaka em PHP
<?php //rotina para pegar o código do fornecedor b //$codforn="a123 b456 c789" ou "456" ou "" ou "b456" ou "{"cod":13,"conv":10}" $codforn="a123 b456 c789"; $prod="alface"; if($codforn==""){echo "<h1>O produto $prod não tem código de fornecedor <input type=submit value=Voltar onclick=location.replace('produto.php')></h1>"; exit;} if(strpos($codforn," ")==null){ if($codforn[0]=="{"){echo "<h1>O produto $prod é vinculado <input type=submit value=Voltar onclick=location.replace('produto.php')></h1>"; exit;} if($codforn[0]=="b"){ $tamanho=strlen($codforn); $usar=substr($codforn,1,$tamanho-1);} if(is_numeric($codforn[0])){$usar=$codforn;}} if(strpos($codforn," ")!==null){ $vetores=explode(" ",$codforn); foreach($vetores as $vetor){ if($vetor[0]=="b"){ $tamanho=strlen($vetor); $usar=substr($vetor,1,$tamanho-1);}} echo "o código do fornecedor é $usar"; }