Ir para conteúdo
Fórum Script Brasil

Frank K Hosaka

Membros
  • Total de itens

    1.674
  • Registro em

  • Última visita

Tudo que Frank K Hosaka postou

  1. 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>
  2. 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>.
  3. Acredito que a solução é $json=file_get_contents('salvar/teste.php'); eu não uso o angular.js
  4. 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>
  5. 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')>";
  6. 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;
  7. 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>
  8. 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.
  9. 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'
  10. <?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.
  11. 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>";
  12. 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?
  13. 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"}';
  14. 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>
  15. 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>";}
  16. 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>";}
  17. 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.
  18. Tem jeito de você publicar todos os códigos inclusive a estrutura das tabelas? Qualquer coisa estou a disposição no frankhosaka@gmail.com.
  19. 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;
  20. 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>";
  21. 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.
  22. 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.
  23. 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%'";
  24. <?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"; }
  25. Eu tenho uma tabela de produtos onde eu tenho o código do fornecedor. Por exemplo, eu tenho o alface que compro na quitanda A e ele usa o código 123, eu também compro o mesmo alface na quitanda B e ele usa o código 456. Eu queria fazer um pedido de compra, usando a descrição do produto, no caso o alface, e também o código do fornecedor. Como todos os códigos de fornecedores estão num só campo eu queria saber como separar. Ao invés de procurar na internet, eu fui direto no Bard, e eu gostei da resposta dele, mas eu fiz a minha adaptação: <?php $texto="a123 b456 c789"; $numeros=explode(" ",$texto); var_dump($numeros); // resposta (adaptada) : ["a123","b456","c789"] Eu gostei do Bard. Pedi para ele fazer um código para fazer orçamento no PHP e eu fiquei decepcionado. O Bard é bacana, mas ainda está bem longe de acabar com os fóruns de informática.
×
×
  • Criar Novo...