
Frank K Hosaka
Membros-
Total de itens
1.583 -
Registro em
-
Última visita
Tudo que Frank K Hosaka postou
-
Alterar dados com método getUsuario
pergunta respondeu ao Lúcio Flávio da Silva Sales de Frank K Hosaka em Tutoriais & Dicas - PHP
Projeto Senac 2.0, atualizado em 10/08/2023 02:11 hs (ufa, terminei!) O que dá mais trabalho com as classes é que eu sempre esqueço que todas as informações que foram gravadas na classe desaparecem, assim que você aperta o botão submeter. Estava pensando em até criar um $_SESSION['classes'], mas o propósito desse projeto é outro. Ele é para ver como funcionam as classes. Eu acho difícil trabalhar com eles, eu prefiro mais o estilo dissertativo, a gente vai escrevendo o que der na telha. MySQL CREATE TABLE `usuarios` ( `id` int NOT NULL AUTO_INCREMENT, `email` varchar(255) NOT NULL, `senha` varchar(255) NOT NULL, `nome` varchar(45) DEFAULT NULL, `endereco` varchar(45) DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8mb3 --------------------------------------------------------------------------------------- index.php <?php require('classes.php'); $Usuario=new Usuario(); if(isset($_POST['email'])){ $_SESSION['email']=$_POST['email']; $_SESSION['senha']=$_POST['senha'];} if(isset($_SESSION['email'])){ $email=$_SESSION['email']; $senha=$_SESSION['senha'];} else {$email="";$senha="";} ?> <form method=post action=validar.php> <label class="text-primary h4">E-mail:</label> <input class="form-control" type=text name=email placeholder= "Preencha seu e-mail" value='<?=$email?>' required><br> <label class="text-danger h4">Senha:</label> <input class="form-control" type=text name=senha placeholder= "Preencha sua senha" value='<?=$senha?>'><br> <button class="btn btn-primary" name="logar" type="submit"> Entrar</button> <button class="btn btn-primary" name="novo" type="submit"> Novo</button> <button class="btn btn-primary" name="alterar" type="submit"> Alterar</button> <button class="btn btn-primary" name="excluir" type="submit"> Excluir</button> </form> <br><br><font size=4 color=red><i> <div id=mensagem><?=$_SESSION['mensagem']?><div></i> </body> </html> ----------------------------------------------------------------------------- cadastro.php <?php require('classes.php'); $Usuario=new Usuario(); if(isset($_POST['nome'])){ $Usuario->nome = $_POST['nome']; $Usuario->email = $_POST['email']; $Usuario->senha = $_POST['senha']; $Usuario->endereco = $_POST['endereco']; $Usuario->cadastrar(); $_SESSION['mensagem']="Nova conta já cadastrada."; header('location:index.php');} $email=$_SESSION['email']; $senha=$_SESSION['senha']; $teste=$Usuario->validaUsuario($email,$senha); if($teste=="Senha incorreta" || $teste=="Sucesso"){ $_SESSION['mensagem']="Essa conta já está cadastrada"; header('Location:index.php');} ?> <form method=post> <label class="text-primary h4">Nome:</label> <input class="form-control" name=nome required><br> <label class="text-primary h4">E-mail:</label> <input class="form-control btn btn-warning" name=email value=<?=$email?>><br><br> <label class="text-primary h4">Senha:</label> <input class="form-control btn btn-warning" name=senha value=<?=$senha?>><br><br> <label class="text-primary h4">Endereço:</label> <input class="form-control" name=endereco required><br><br> <input class="form-control btn btn-primary" type=submit><br><br> </form> <input class="form-control btn btn-primary" type=submit Value=Cancelar onclick="location.replace('index.php')"> ----------------------------------------------------------------------- classes.php <!DOCTYPE html> <html> <title>Projeto Senac 2.0</title> <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.1/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-4bw+/aepP/YC94hEpVNVgiZdgIC5+VKNBQNGCHeKRQN+PtmoHDEXuppvnDJzQIu9" crossorigin="anonymous"> <body class="w-25 mx-auto mt-5"> <?php session_start(); class Usuario { public $host="localhost"; public $user="root"; public $password=""; public $database="laravel"; public $query, $link, $result, $id, $nome, $email, $senha, $endereco; public function MySQL(){} public function getConexao(){ $this->link=mysqli_connect($this->host,$this->user,$this->password); if(!$this->link){ echo "Falha na conexão com o Banco de Dados! <br>"; echo "Erro:".mysqli_error($this->link); die();} elseif(!mysqli_select_db($this->link,$this->database)){ echo "O Banco de Ddos solicitado não pode ser aberto! <br>"; echo "Erro:".mysqli_error($this->link); die();}} public function excluir($id){ $sql="delete from usuarios where id=$id"; $resposta=$this->query($sql); return $resposta;} public function query($query){ $this->getConexao(); $this->query=$query; if($this->result=mysqli_query($this->link,$this->query)){ mysqli_close($this->link); return $this->result;} else { echo "Ocorreu um erro na execução dda SQL"; echo "Erro:".mysqli_error($this->link); echo "SQL:".$query; die(); return mysqli_close($this->link);}} public function Cadastrar() { $sql = "INSERT INTO Usuarios (nome,email,senha,endereco) VALUES ('$this->nome','$this->email','$this->senha','$this->endereco')"; if ($this->query($sql)) {return "Sucesso";} else { return "Erro na tentativa de cadastrar";}} public function Editar() { $sql="update usuarios set nome='$this->nome',email = '$this->email', senha='$this->senha',endereco='$this->endereco' where id=$this->id"; if ($this->query($sql)) {return "Sucesso";} else { return "Erro na tentativa de editar";exit;}} public function validaUsuario($email,$senha) { $this->email=$email; $this->senha=$senha; if (strlen($this->email) > 100) { echo "E-mail deve ter até 100 caracteres"; return false;} if ($this->senha == null || strlen($this->senha) < 6) { return "Preencha a senha com no mínimo 6 caracteres!"; } $sql = "select * from usuarios where email='$this->email'"; $resposta = $this->query($sql); $usuario = $resposta->fetch_assoc(); if ($usuario==null) { $_SESSION['mensagem']="Email não cadastrado"; header('location:index.php');exit;} if ($usuario['senha'] != $this->senha) { $_SESSION['mensagem']="Senha incorreta"; header('location:index.php');exit;} $_SESSION['usuario']=$usuario['nome']; $this->id=$usuario['id']; $this->nome=$usuario['nome']; $this->email=$usuario['email']; $this->senha=$usuario['senha']; $this->endereco=$usuario['endereco']; return "Sucesso";} } ?> ----------------------------------------------------------------------------- editar.php <?php require('classes.php'); $Usuario=new Usuario(); if(isset($_POST['nome'])){ $Usuario->id=$_POST['id']; $Usuario->nome = $_POST['nome']; $Usuario->email = $_POST['email']; $Usuario->senha = $_POST['senha']; $Usuario->endereco = $_POST['endereco']; $_SESSION['email']=$_POST['email']; $_SESSION['senha']=$_POST['senha']; $Usuario->editar(); $_SESSION['mensagem']="Cadastro atualizado."; header('location:index.php');} $Usuario->email=$_SESSION['email']; $Usuario->senha=$_SESSION['senha']; $Usuario->validaUsuario($Usuario->email,$Usuario->senha); $id=$Usuario->id; $nome=$Usuario->nome; $email=$Usuario->email; $senha=$Usuario->senha; $endereco=$Usuario->endereco; ?> <form method=post> <input type=hidden name=id value=<?=$id?>> <label class="text-primary h5">Nome:</label> <input class="form-control" name=nome value='<?=$nome?>'><br> <label class="text-primary h5">E-mail:</label> <input class="form-control" name=email value='<?=$email?>'><br> <label class="text-primary h5">Senha:</label> <input class="form-control" name=senha value='<?=$senha?>'><br> <label class="text-primary h5">Endereço:</label> <input class="form-control" name=endereco value='<?=$endereco?>'><br> <input class="form-control btn btn-primary" type=submit value=Atualizar><br><br> </form> <input class="form-control btn btn-primary" type=submit Value=Cancelar onclick="location.replace('index.php')"> ------------------------------------------------------------------------------------ excluir.php <?php require('classes.php'); $Usuario=new Usuario(); if(isset($_POST['excluir'])){ $id=$_POST['id']; $Usuario->excluir($id); $_SESSION['mensagem']="Essa conta acabou de ser excluido."; header('location:index.php');} $Usuario->email=$_SESSION['email']; $Usuario->senha=$_SESSION['senha']; $Usuario->validaUsuario($Usuario->email,$Usuario->senha); $id=$Usuario->id; $nome=$Usuario->nome; $email=$Usuario->email; $senha=$Usuario->senha; $endereco=$Usuario->endereco; ?> <form method=post> <input name=id type=hidden value=<?=$id?>> <label class="text-primary h5">Id: <?=$id?> Nome:</label> <input class="form-control btn btn-warning" value='<?=$nome?>'><br><br> <label class="text-primary h5">E-mail:</label> <input class="form-control btn btn-warning" value='<?=$email?>'><br><br> <label class="text-primary h5">Senha:</label> <input class="form-control btn btn-warning" name=senha value='<?=$senha?>'><br><br> <label class="text-primary h5">Endereço:</label> <input class="form-control btn btn-warning" value='<?=$endereco?>'><br><br> <input class="form-control btn btn-primary" type=submit name=excluir value='Confirmar exclusao'><br><br> </form> <input class="form-control btn btn-primary" type=submit Value=Cancelar onclick="location.replace('index.php')"> --------------------------------------------------------------------------- produtos.php <?php include("classes.php"); ?> <pre> O usuário logado é <?=$_SESSION['usuario']?>. A rotina de produtos não foi implantada na versão 2.0 </pre> <button class="btn btn-primary" onclick="location.replace('index.php')">Voltar</button> ---------------------------------------------------------------------------- <?php include('classes.php'); $Usuario=new Usuario(); $_SESSION['mensagem']=""; $_SESSION['email']=$_POST['email']; $_SESSION['senha']=$_POST['senha']; if (isset($_POST['logar'])) { $resposta = $Usuario->validaUsuario($_POST['email'],$_POST['senha']); if($resposta == "Sucesso") {header("Location:produtos.php");} else {$_SESSION['mensagem']=$resposta; header('location:index.php');}} if(isset($_POST['novo'])){header('location:cadastro.php');} if(isset($_POST['alterar'])){header('location:editar.php');} if(isset($_POST['excluir'])){header('location:excluir.php');} -
Alterar dados com método getUsuario
pergunta respondeu ao Lúcio Flávio da Silva Sales de Frank K Hosaka em Tutoriais & Dicas - PHP
O arquivo zipado está com o arquivo PDF corrompido e também está faltando o código do conexao.php, mesmo assim, eu consegui fazer um código tão safado quanto o do Senac. Apesar de safado, ele funciona (pelo menos, até onde eu testei). Ele inclui, altera e exclui a conta do usuário, e só ocupa um arquivo ao invés de quatro arquivos que está no zip. <!DOCTYPE html> <html> <body style="width:500px;margin:0 auto;margin-top:100px"> <?php if(isset($_GET['home'])){ echo "Sinto muito, essa página não está pronta.";exit;} ?> <form> E-mail:<input type=email name=email><p> Senha: <input type=password name=senha><p> <button type=submit>Entrar</button> </form> <?php // esse código precisa de uma tabela no mysql: usuarios(id,email,senha) if(isset($_GET['cadastrar'])){ $Usuario=new Usuario(); $Usuario->cadastrar();} if(isset($_GET['editar'])){ $Usuario=new Usuario(); $velhoEmail=$_GET['velhoEmail']; $novoEmail=$_GET['editar']; $Usuario->editar($novoEmail,$velhoEmail);} if(isset($_GET['excluir'])){ $Usuario=new Usuario(); $excluir=$_GET['excluir']; $Usuario->excluir($excluir);} if(!isset($_GET['email'])){exit;} class Usuario { public $id,$nome,$email,$senha,$endereco,$conexao; public function __construct(){ $this->conexao = new mysqli("localhost","root","","laravel"); return $this->conexao;} public function validaUsuario() { if ($this->validaEmail()) { if ($this->senha== null || strlen($this->senha) < 6) { return "Preencha a senha com no mínimo 6 caracteres!"; } return $this->Login();}} public function validaEmail() { if ($this->email == null) { echo "O e-mail é indispensável"; return false;} elseif(strlen($this->email)>45) { echo "E-mail deve ter até 45 caracteres"; return false;} return true;} public function Login() { $sql = "select * from usuarios where email = '$this->email'"; $resposta = $this->conexao->query($sql); $usuario = $resposta->fetch_assoc(); if (!$usuario) { echo "Email não cadastrado <a href=?cadastrar=$this->email&senha=$this->senha>Cadastrar $this->email</a>";exit;} elseif ($usuario['senha'] != $this->senha) { echo "Senha incorreta";exit;} echo " <table> <tr><td nowrap>Opção 1: <td nowrap>alterar email $this->email para <td><form><input type=email name=editar onchange=submit()> <input type=hidden name=velhoEmail value=$this->email></form> <tr><td>Opção 2: <td>excluir o email $this->email <td><form> <input name=excluir type=submit value=Excluir onchange=submit()> <input type=hidden name=excluir value=$this->email> </form> <tr><td>Opção 3: <td>ir para o Home Page <td><form><input name=home type=submit value='Home Page'></form> </table>";} public function Cadastrar() { $this->email=$_GET['cadastrar']; $this->senha=$_GET['senha']; $sql = "insert into usuarios (email,senha) values ('$this->email','$this->senha')"; if (!mysqli_query($this->conexao, $sql)) {return "Erro na tentativa de cadastrar";exit;}} public function Editar($novoEmail,$velhoEmail) { $sql = "update usuarios set email = '$novoEmail' where email='$velhoEmail'"; if (!mysqli_query($this->conexao, $sql)) { return "Erro na tentativa de editar";exit;}} public function Excluir($email){ $sql = "delete from usuarios where email='$email'"; if (!mysqli_query($this->conexao, $sql)) { return "Erro na tentativa de editar";exit;}} } $Usuario = new Usuario(); $Usuario->email=$_GET['email']; $Usuario->senha=$_GET['senha']; $resposta = $Usuario->validaUsuario($Usuario); ?> -
<!DOCTYPE html> <html> <body style="width:500px;margin:0 auto;margin-top:100px"> <?php if(isset($_GET['home'])){ echo "Sinto muito, essa página não está pronta.";exit;} ?> <form> E-mail:<input type=email name=email><p> Senha: <input type=password name=senha><p> <button type=submit>Entrar</button> </form> <?php // esse código precisa de uma tabela no mysql: usuarios(id,email,senha) if(isset($_GET['cadastrar'])){ $Usuario=new Usuario(); $Usuario->cadastrar();} if(isset($_GET['editar'])){ $Usuario=new Usuario(); $velhoEmail=$_GET['velhoEmail']; $novoEmail=$_GET['editar']; $Usuario->editar($novoEmail,$velhoEmail);} if(isset($_GET['excluir'])){ $Usuario=new Usuario(); $excluir=$_GET['excluir']; $Usuario->excluir($excluir);} if(!isset($_GET['email'])){exit;} class Usuario { public $id,$nome,$email,$senha,$endereco,$conexao; public function __construct(){ $this->conexao = new mysqli("localhost","root","","laravel"); return $this->conexao;} public function validaUsuario() { if ($this->validaEmail()) { if ($this->senha== null || strlen($this->senha) < 6) { return "Preencha a senha com no mínimo 6 caracteres!"; } return $this->Login();}} public function validaEmail() { if ($this->email == null) { echo "O e-mail é indispensável"; return false;} elseif(strlen($this->email)>45) { echo "E-mail deve ter até 45 caracteres"; return false;} return true;} public function Login() { $sql = "select * from usuarios where email = '$this->email'"; $resposta = $this->conexao->query($sql); $usuario = $resposta->fetch_assoc(); if (!$usuario) { echo "Email não cadastrado <a href=?cadastrar=$this->email&senha=$this->senha>Cadastrar $this->email</a>";exit;} elseif ($usuario['senha'] != $this->senha) { echo "Senha incorreta";exit;} echo " <table> <tr><td nowrap>Opção 1: <td nowrap>alterar email $this->email para <td><form><input type=email name=editar onchange=submit()> <input type=hidden name=velhoEmail value=$this->email></form> <tr><td>Opção 2: <td>excluir o email $this->email <td><form> <input name=excluir type=submit value=Excluir onchange=submit()> <input type=hidden name=excluir value=$this->email> </form> <tr><td>Opção 3: <td>ir para o Home Page <td><form><input name=home type=submit value='Home Page'></form> </table>";} public function Cadastrar() { $this->email=$_GET['cadastrar']; $this->senha=$_GET['senha']; $sql = "insert into usuarios (email,senha) values ('$this->email','$this->senha')"; if (!mysqli_query($this->conexao, $sql)) {return "Erro na tentativa de cadastrar";exit;}} public function Editar($novoEmail,$velhoEmail) { $sql = "update usuarios set email = '$novoEmail' where email='$velhoEmail'"; if (!mysqli_query($this->conexao, $sql)) { return "Erro na tentativa de editar";exit;}} public function Excluir($email){ $sql = "delete from usuarios where email='$email'"; if (!mysqli_query($this->conexao, $sql)) { return "Erro na tentativa de editar";exit;}} } $Usuario = new Usuario(); $Usuario->email=$_GET['email']; $Usuario->senha=$_GET['senha']; $resposta = $Usuario->validaUsuario($Usuario); ?>
-
Salvar numeros de forma ordenada no Banco de Dados
pergunta respondeu ao jcvilanova de Frank K Hosaka em PHP
Consegui terminar o meu código, ao invés de usar dez1, dez2, dez3, dez4, dez5 e dez6, eu usei apenas um campo texto chamado sorteio com esse formato '[dez1,dez2,dez3,dez4,dez5,dez6]', isso porque você falou de outras loterias que tem menos números ou mais números serem sorteados. Mesmo assim, o problema é como conferir o palpite aleatório com o que está no banco de dados. Deixei o meu código final logo acima. Espero que ele ajude no seu projeto, apesar de ter mudado a sua estrutura no banco de dados. -
Salvar numeros de forma ordenada no Banco de Dados
pergunta respondeu ao jcvilanova de Frank K Hosaka em PHP
Fiz um código básico para ver como conferir um palpite com o banco de dados: <?php $pdo=new pdo("mysql:host=localhost;dbname=laravel","root",""); $query="drop table if exists sorteio"; $stmt=$pdo->prepare($query); $stmt->execute(); $query="create table sorteio (`id` int NOT NULL AUTO_INCREMENT, `dataDoSorteio` date DEFAULT NULL,`tipoJogo` varchar(10) DEFAULT NULL, `numeroDoSorteio` int DEFAULT NULL, `Sorteio` varchar(45) DEFAULT NULL,PRIMARY KEY (`id`))"; $stmt=$pdo->prepare($query); $stmt->execute(); $query="insert into sorteio (dataDoSorteio,tipoJogo,numeroDoSorteio,Sorteio) values ('2021-12-14','Mega-Sena',2438,'[4,11,19,25,37,55]'), ('2021-12-16','Mega-Sena',2439,'[2,8,34,38,47,51]'), ('2021-12-20','Mega-Sena',2440,'[9,41,42,46,54,18]')"; $stmt=$pdo->prepare($query); $stmt->execute(); $palpite=[4,11,19,25,37,55,57,60]; $query="select Sorteio from sorteio"; $stmt=$pdo->prepare($query); $stmt->execute(); $sorteios=$stmt->fetchAll(PDO::FETCH_COLUMN); echo "Testando palpite ".implode(" ",$palpite); foreach($sorteios as $sorteio){ echo "<br>Testando sorteio $sorteio"; $j=json_decode($sorteio); if($j[0]==$palpite[0] && $j[1]==$palpite[1] && $j[2]==$palpite[2] && $j[3]==$palpite[3] && $j[4]==$palpite[4] && $j[5]==$palpite[5]){goto fim;} else {echo "palpite válido";exit;}} fim: echo "<br>Palpite inválido pois os seis primeiros números já foram sorteados"; O problema todo é como comparar o palpite com os resultados já divulgados. Você impôs a regra de não repetir um resultado que já foi publicado. No meu código, eu usei um único palpite com seis números que já foram publicados, mas foram usados 8 dezenas. É quase improvável que o resultado da Mega-Sena se repita mais de uma vez, mas isso não quer dizer que seja impossível. Mas invalidar um palpite de 8 dezenas só porque tem 6 dezenas que já foram sorteadas não faz o menor sentido. -
Salvar numeros de forma ordenada no Banco de Dados
pergunta respondeu ao jcvilanova de Frank K Hosaka em PHP
Ainda não entendi o propósito do projeto. Preciso de uma ideia mais prática. Gerar número aleatório de acordo com o gosto do freguês é bem difícil de enxergar. Mesmo assim, eu posso sugerir a estrutura do banco de dados aposta (id,palpites), onde id é chave primária e palpites é um string com 45 caracteres, ele teria essa cara: 1 , '[01 02 03 04 05 06]' 2, '[07 08 09 10 11 12]' 3, '[07 08 09 10 11 13]' Como exercício, tente ver se o registro com id=2 é igual ao registro de id=3. -
formatação de data e hora pegando informações do banco de dados
pergunta respondeu ao Ualace de Frank K Hosaka em PHP
Para ter a hora atual, a função seria assim '.date('H:i').' e para não ter o dia em tempo real basta não usar nenhuma função de tempo, basta escrever na unha. -
formatação de data e hora pegando informações do banco de dados
pergunta respondeu ao Ualace de Frank K Hosaka em PHP
<?php $f['time']="08:53"; // isso inventei para testar esse código $data = date('D'); $mes = date('M'); $dia = date('d'); $ano = date('Y'); $semana = ['Sun' => 'Domingo','Mon' => 'Segunda-Feira','Tue' => 'Terca-Feira', 'Wed' => 'Quarta-Feira','Thu' => 'Quinta-Feira', 'Fri' => 'Sexta-Feira', 'Sat' => 'Sábado']; $mes_extenso = ['Jan' => 'Janeiro','Feb' => 'Fevereiro','Mar' => 'Marco', 'Apr' => 'Abril','May' => 'Maio','Jun' => 'Junho','Jul' => 'Julho', 'Aug' => 'Agosto','Nov' => 'Novembro','Sep' => 'Setembro', 'Oct' => 'Outubro','Dec' => 'Dezembro']; $style="font-size: 12px;margin: 10 0 10;border-top: 1.9px solid #fff;padding: 10 0 0;position: relative"; $hoje="Hoje é ".$semana[$data]." dia $dia de ".$mes_extenso[$mes]."de $ano"; echo "<span style=$style>".$hoje." ".$f['time']."</span>"; -
Salvar numeros de forma ordenada no Banco de Dados
pergunta respondeu ao jcvilanova de Frank K Hosaka em PHP
Para ordenar seis números sorteados, o código é esse: <?php $numbers=range(1,60); srand((float)microtime()*1000000); shuffle($numbers); $palpites=[]; for($i=0;$i<=5;$i++){$palpites[]=$numbers[$i];} asort($palpites); foreach($palpites as $palpite){echo "$palpite ";} Para colocar o palpite no banco de dados, eu preciso de mais informação. Eu sei que a aposta mínima de seis números na Mega-Sena custa R$ 5,00 e o maior custa R$ 25.025,00 com quinze números, mas é preciso verificar, eu não tenho certeza. Eu vou criar uma tabela aposta com 6 campos ou 15 campos? Essa tabela vai identificar o cliente? O cliente pode apostar os mesmos números mais de uma vez ou só uma vez? Preciso de um campo para o número e data do sorteio? -
Aleluia! Descobri o enigma do valor nulo no banco de dados.
pergunta respondeu ao Frank K Hosaka de Frank K Hosaka em PHP
Um rapaz no Laracasts comentou que estou usando indevidamente o relacionamento da tabela, ele disse para não jogar todo o banco de dados no visualizador, ele orientou a só mandar o agrupamento de datas no visualizador com a respestiva soma. Se alguém quiser mais detalhes, basta clicar na data que o controlador vai montar os detalhes daquela data e devolver no visualizador. A idéia é bem simples. Não precisa de nenhum relacionamento, o visualizador só vai ter a informação que o usuário precisa, e a tabela pode trabalhar com apenas um campo com a data e a hora da venda. As soluções mais simples são as melhores. -
Aleluia! Descobri o enigma do valor nulo no banco de dados.
pergunta respondeu ao Frank K Hosaka de Frank K Hosaka em PHP
Eu pedi ajuda para a turma do Laracasts sobre a possibilidade de eu trabalhar com apenas um campo, ao invés do Vendido (tipo data) e do HoraVenda (tipo data tempo), mas dessa vez eu não consegui nenhum resultado. No PHP é possível trabalhar com apenas um campo, porque o controlador e o visualizador fica tudo misturado no mesmo código. Já no Laravel, o controlador e o visualizador são peças separadas. Claro que é possível executar várias consultas dentro do visualizador, mas esse não é o propósito do Laravel. Para rodar a consulta somente no controlador, eu precisaria mandar os dados do pedido junto com a relação dos pedidos para cada data, e isso só é possível através de um relacionamento, e o relacionamento só funciona se o campo em referência for do tipo data e não data tempo. -
listagem de diretório com link pra visualização ordenado.
pergunta respondeu ao alexandrefnit de Frank K Hosaka em PHP
Comigo esse código traz tudo em ordem alfábetica. -
Faz quase duas semanas que eu encontrei um valor nulo no banco de dados, onde eu não esperava. No PHP, eu tinha o seguinte código: $vendido=date('Y-m-d'); $horavenda=date('Y-m-d H:i'); $query=$mysqli("update tbpedido set vendido='$vendido', 'horavenda'=$horavenda" where ped=2023); Não há como passar um valor nulo nessas condições. Depois de duas semanas, é que eu lembrei que o meu irmão tem acesso ao meu projeto Laravel, que basicamente é um xerox do projeto PHP. Mas não é. No controller eu encontrei isso: $vendido=date('Y-m-d H:i'); tbpedido::where('ped',2023)->update(['vendido'=>$vendido]); Ou seja, no Laravel eu esqueci de definir o valor da hora da venda, e foi assim que o banco de dados ficou com o valor nulo. Outro erro bastante grave é o princípio da atomicidade. Data da venda e hora da venda é a mesma coisa no mundo do banco de dados, não há porque ter dois campos para mostrar o mesmo valor. Para separar data da hora, isso dá para fazer com o comando: data da venda = date('d/m/Y',strtotime($vendido)) e hora da venda = date('H:i',strtotime($vendido)). Mesmo assim, estou contente por ter encontrado um erro em apenas duas semanas. Geralmente eu gastava vários meses.
-
Ontem, eu recebi uma mensagem de erro nesse código: <?php $pedidos=[["id"=>1,"total"=>2.00,"data"=>"2023-07-27"], ["id"=>2,"total"=>10.00,"data"=>null], ["id"=>3,"total"=>5.00,"data"=>"2023-07-27"]]; echo "relatório de orçamentos <br><table><th>Pedido<th>Total<th>Data"; foreach($pedidos as $pedido){ echo "<tr><td>".$pedido['id']."<td>".$pedido['total']. "<td>".date('d/m/y',strtotime($pedido['data']));} // Deprecated: strtotime(): Passing null to parameter #1 ($datetime) // of type string is deprecated in C:\wamp64\www\astudy\index.php on line 8 Não descobri como apareceu o valor null na variável data. Para contornar o problema, eu tentei usar try {$dia=date('d/m/y',strtotime($pedido['data']));} catch (Exception $e){$dia="problema";} Não deu certo, a tela ficou com outras mensagens de erro. Assim, eu fiz outra gambiarra: <?php $pedidos=[["id"=>1,"total"=>2.00,"data"=>"2023-07-27"], ["id"=>2,"total"=>10.00,"data"=>null], ["id"=>3,"total"=>5.00,"data"=>"2023-07-27"]]; echo "relatório de orçamentos <br><table><th>Pedido<th>Total<th>Data"; foreach($pedidos as $pedido){ if($pedido['data']!==null){ $dia=date('d/m/y',strtotime($pedido['data']));} else { $dia="problema";} echo "<tr><td>".$pedido['id']."<td>".$pedido['total']. "<td>$dia";} e o relatório vai aparecer no final dessa mensagem. Ou seja, eu cai na segunda lei de Murphy, onde "a pressa é a inimiga da programação".
-
<?php $texto='{"parentesco":"mãe","apelido":"moça"}'; $jtexto=json_decode($texto); // só funciona se o json for válido echo $jtexto->parentesco."<br>"; // mãe echo $jtexto->apelido; // moça $novo_texto = preg_replace(array("/(á|à|ã|â|ä)/","/(Á|À|Ã|Â|Ä)/","/(é|è|ê|ë)/", "/(É|È|Ê|Ë)/","/(í|ì|î|ï)/","/(Í|Ì|Î|Ï)/","/(ó|ò|õ|ô|ö)/","/(Ó|Ò|Õ|Ô|Ö)/", "/(ú|ù|û|ü)/","/(Ú|Ù|Û|Ü)/","/(não)/","/(não)/"), explode(" ","a A e E i I o O u U n N"),$texto); echo $novo_texto; // {"parentesco":"mae","apelido":"moça"} Note que não foi tirado o cedilha da moça. Eu fiz isso de propósito, para você entender a função preg_replace do PHP
-
Hahahaha... eu li um pouco sobre API e tudo indica que esse recurso é para quem usa a hospedagem com o WordPress, onde você pode baixar o WP-CLI, e acessar os dados do site Word-Press, sem precisar usar o navegador. O meu plano é de pobre. Não dá para brincar com o Laravel e nem tem API nenhuma. O único jeito é rezar para você encontrar alguém aqui que ganha mais de R$ 1.320,00 por mês e que tenha experiência com Word Press e também tenha disposição para ajudá-lo. Milagre é difícil de acontecer, mas sempre existe uma possibilidade. Enquanto isso, use o seu domínio para compartilhar o PHP, pelo menos é isso que eu faço.
-
Hahahaha... agora, consegui ver onde está o problema. Eu nunca usei uma API no hospedeiro. Eu não tenho nenhuma experiência nessa área. Eu lembro que apanhei muito quando estudei JavaScript, foi quase um ano apanhando, até aprender a montar um código em PHP que devolvesse os dados em json para o JavaScript jogar na tela. Eu desconfio que o raciocínio é o mesmo. O problema é ver quem manda as informações para o API ou ver como ele chega lá, se é que chega.
-
Eu também sou novato na hospedagem. Eu queria usar o Laravel, mas eu não posso usar o comando npm na hospedagem tipo site do Hostinger. Quanto ao PHP, eu nunca tive problema. A minha sugestão agora é mudar o teste.php, assim: <?php $mysqli=new mysqli("localhost","userNameNoDominio","SenhaNoDominio","NomeDoBancoDeDadosNoDominio"); $query=$mysqli->query("select * from users"); $rows=$query->fetch_all(); var_dump($rows); e boa sorte, mas o mais importante é ver se você consegue abrir o banco de dados sem a ajuda do PHP, na rotina do gerenciador de banco de dados do hospedeiro.
-
Esse é o código do teste.blade.php, onde uso o dialeto do Blade (o botão Modal) e o dialeto do Tailwinds (o modal na forma do título do texto): @vite(['resources/css/app.css', 'resources/js/app.js']) <pre class="w-1/2 mx-auto my-20"> O embaixador da União Europeia no Brasil, Ignacio Ybañez, refuta a ideia apresentada pelo presidente Luiz Inácio Lula da Silva de que democracia seja um conceito relativo. Ele faz questão de criticar a ditadura da Venezuela, aliada do governo brasileiro. “Para nós, a democracia não é relativa. Democracia existe ou não existe. Na Venezuela, não existe democracia. No Brasil, existe”, afirma o diplomata em entrevista à Coluna. “Eleições e o respeito aos direitos humanos são elementos essenciais na democracia. E isso não é cumprido na Venezuela”. </pre> <x-primary-button class="absolute left-80 ml-6" onclick="modal.className='absolute top-10 left-80 ml-6 bg-blue-700'"> {{ __('Modal') }} </x-primary-button> <div id=modal class=hidden onclick="modal.className='hidden'"> <h1 class=text-3xl>Democracia relativa</h1> </div> Esse é um código que eu consegui na base da tentativa e erro, eu queria alinhar o título do texto com o texto, mas o máximo que o Tailwind permitia era deslocar o título a 80 pixels a partir da margem esquerda ("left-80"). Para conseguir mais pixels, eu fiz uma gambiarra, eu usei o recurso margem esquerda assim "ml-6". Mas para isso funcionar, eu preciso usar o comando npm run dev ou npm run build, o que eu consigo fazer aqui no meu computador local. Esse não é o caso lá no Hostinger, a hospedagem do site que aluguei por R$ 23,00 por mês não permite usar o comando npm. Logo, o máximo que eu consegui hospedar no Hostinger foi um Laravel bem básico, ou seja, ele não tem o Breeze, o Blade do Breeze e muito menos o projeto Chirp. O meu Laravel no Hostinger é basicamente um xerox do projeto que eu fiz no PHP. Eu coloquei o CDN do Bootstrap no arquivo menu.php e carrego esse arquivo nos outros códigos. Para resolver o meu problema, eu só preciso mudar de plano, mudar para a hospedagem VPS. Eu não tenho a menor ideia de como o VPS funciona. Uma coisa é digitar npm aqui no computador local e outra bem diferente é digitar o comando lá no servidor. Antes de mudar de plano, estou estudando o Tailwind por aqui, até eu me sentir 2% seguro com um novo dialeto do CSS.
-
Vamos por parte. Crie um arquivo chamado teste.php no diretório c:/wamp64/www, e escreva somente "olá mundo", e salve o arquivo se você não usar o VS Code. Vá no navegador, e escreva localhost/teste.php - você ainda vê error 500?
-
Relatório com totais das formas de pagamento
pergunta respondeu ao Nilson Alvarenga de Frank K Hosaka em Repositório de Scripts - PHP
Estudei o Codeigniter e para fazer a sua tarefa, comecei pelo MySQL, mudei ele assim: CREATE TABLE `vendas` ( `id` int NOT NULL AUTO_INCREMENT, `data` date DEFAULT NULL, `venda` float DEFAULT NULL, `forma_de_pagamento` varchar(45) DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=46 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci; INSERT INTO `vendas` VALUES (37,'2023-07-01',15,'Dinheiro'),(38,'2023-07-02',10,'Dinheiro'), (39,'2023-07-03',25,'Dinheiro'),(40,'2023-07-04',25,'Cartão de Débito'), (41,'2023-07-05',20,'Cartão de Débito'),(42,'2023-07-06',40,'Cartão de Débito'), (43,'2023-07-07',20,'Cartão de Crédito'),(44,'2023-07-07',20,'Cartão de Crédito'), (45,'2023-07-08',20,'Cartão de Crédito'); e o Codeigniter ficou assim: app > Config > Routes.php ... use App\Controllers\Vendas; $routes->get('vendas',[Vendas::class,'index']); app > Controllers > Vendas.php <?php namespace App\Controllers; use App\Models\venda_model; class Vendas extends BaseController { public function index(){ $model=model(venda_model::class); $data=['vendas'=>$model->getVendas('2023-07')]; return view('vendas',$data);} } app > Models > venda_model.php <?php namespace App\Models; use CodeIgniter\Model; class venda_model extends Model { protected $table='vendas'; public function getVendas($data_agora){ return $this->select('sum(venda) as somavenda') ->select('forma_de_pagamento') ->where('data >=', "$data_agora-01") ->where('data <=', "$data_agora-31") ->groupBy('forma_de_pagamento')->findAll();} } app > Views > vendas.php <h1>Relatório de Vendas</h1> <table><th>Forma de Pagamento<th>Venda <?php foreach($vendas as $venda){ ?> <tr><td><?=$venda['forma_de_pagamento']?><td><?=$venda['somavenda']?> <?php } ?> E ele ficou assim: -
Alguém aqui tem um celular dobrável com S Pen?
pergunta respondeu ao Frank K Hosaka de Frank K Hosaka em PHP
Eu pedi ajuda no Laracasts, e um rapaz me orientou a ler sobre Join no MySQL. Assim ao invés de fazer três consultas, dá para fazer tudo com apenas uma consulta, assim: select a.dia, a.lcto, a.contad, a.contac, a.valor, a.hist, b.descricao as descd, c.descricao as descc from tbdiario a join tbconta b on a.contad = b.conta join tbconta c on a.contac = c.conta order by docto limit 10 -
Eu estudei um pouco de HTML no w3schools, e lá aprendi que muitos elementos do HTML têm o atributo title, e com ele é possível ver uma notificação, quando você passa o mouse sobre o elemento; pensando nisso, eu criei o seguinte código em PHP: <meta name="viewport" content="width=device-width, initial-scale=1.0"> <?php // tbdiario (docto,lcto,dia,contad,contac,valor,hist) // tbconta (conta,descricao) $mysqli=new mysqli("localhost","root","","laravel"); $query=$mysqli->query("select * from tbdiario limit 10"); $rows=$query->fetch_all(MYSQLI_ASSOC); echo "<table><th>Lcto<th>Débito<th>Crédito<th>Valor"; foreach($rows as $row){ $dia=$row['dia'];$lcto=$row['lcto'];$debito=$row['contad']; $credito=$row['contac'];$valor=$row['valor'];$hist=$row['hist']; $query2=$mysqli->query("select descricao from tbconta where conta=$debito"); $descD=$query2->fetch_assoc()['descricao']; $query3=$mysqli->query("select descricao from tbconta where conta=$credito"); $descC=$query3->fetch_assoc()['descricao']; echo "<tr><td title='$dia'>$lcto <td title='$descD'>$debito <td title='$descC'>$credito <td title='$hist'>$valor";} No notebook o programa funciona. Mas na hora de testar no celular, eu levei um susto, eu recebi a mensagem de que o Apache não permite o meu celular acessar a rede local. Eu fui lá no httpd-vhosts, e alterei a redação de 'Require local' para 'Require all granted'. Mesmo com acesso local, o meu S Pen do Note 10 (ele é um celular bem antigo e não é dobrável) não conseguiu fazer as notificações aparecerem. Eu encontrei um mouse com porta USB-C, mas as notificações não apareceram no celular. A Samsung está vendendo o ZFold4 por R$ 11.000,00 - já imaginou eu comprar um trem desse, e as notificações não aparecerem por lá? Mudando de assunto, note que no meu código tem três consultas no MySQL. Eu gosto do PHP devido a essa versatilidade, você não precisa se preocupar com "chave externa", "relacionamento" e "referência integral", ou seja, você pode fazer o que você quiser com o MySQL dentro do PHP. O problema é quando aparecer uma vaga na turma do MySQL e o examinador pedir para mostrar a conta devedora e a conta credora com as suas respectivas descrições. Eu não tenho a menor ideia de como fazer isso.
-
Que coisa boa! Encontrei um tópico no fórum Laracasts que me ensinou como usar o Collections do Laravel: <?php namespace App\Http\Controllers; use Illuminate\Http\Request; use App\Models\tbdiario; use App\Models\tbsupervariavel; use Auth; class DiarioController extends Controller { public function extrato(Request $request) { if($request->input('dia')){ tbsupervariavel::where('codsuper',Auth::id())->update(['dia'=>$request->input('dia')]);} $dia=tbsupervariavel::where('codsuper',Auth::id())->value('dia'); $extrato=tbdiario::where('dia',$dia)->get(); $somad=$extrato->sum(function($ext){if($ext->contad){return $ext->valor;}}); $somac=$extrato->sum(function($ext){if($ext->contac){return $ext->valor;}}); return view('diario',compact('extrato'),['somad'=>$somad,'somac'=>$somac]);} }
-
Em 2020 comecei a estudar o PHP, e lá eu conheci o mysqli que o PHP usa para trabalhar com o banco de dados do MySQL. Em 2022 comecei a estudar o Laravel, e lá eu conheci o Eloquent, ele faz a mesma coisa que o mysqli do PHP mas usa uma gramática bem mais robusta, uma verdadeira obra de arte. O problema é: quantas vezes eu posso usar o mysqli ou o Eloquent? Como eu apanho muito para trabalhar com vetores, eu pedi para o mysqli ou o Eloquent olhar três vezes o banco de dados, uma vez para consultar os lançamentos do dia, outra vez para somar os débitos daquele dia e mais uma vez para consultar a soma dos créditos daquele dia. Eu acordei de madrugada, e decidi estudar os vetores do PHP, e lá vi array_sum, array_filter, array_column. Foram várias tentativas e erros e nenhuma deu certo, mas finalmente consegui achar uma solução: <?php // tbdiario (docto,lcto,dia,contad,contac,valor,historico) // docto : auto_increment, primary_key $mysqli=new mysqli("localhost","root","","laravel"); $query=$mysqli->query("select * from tbdiario where dia='2023-07-22'"); $extrato=$query->fetch_all(MYSQLI_ASSOC); $debito=[]; $credito=[]; foreach($extrato as $key=>$sub){ if($sub['contad']){$debito[]=$sub['valor'];} if($sub['contac']){$credito[]=$sub['valor'];}} var_dump(array_sum($debito),array_sum($credito)); E no Laravel, ficou assim: <?php namespace App\Http\Controllers; use Illuminate\Http\Request; use App\Models\tbdiario; use App\Models\tbsupervariavel; use Auth; class DiarioController extends Controller { public function extrato(Request $request) { if($request->input('dia')){ tbsupervariavel::where('codsuper',Auth::id())->update(['dia'=>$request->input('dia')]);} $dia=tbsupervariavel::where('codsuper',Auth::id())->value('dia'); $extrato=tbdiario::where('dia',$dia)->get(); $debito=[]; $credito=[]; foreach($extrato->toArray() as $key=>$sub){ if($sub['contad']){$debito[]=$sub['valor'];} if($sub['contac']){$credito[]=$sub['valor'];}} $somad=array_sum($debito); $somac=array_sum($credito); return view('diario',compact('extrato'),['somad'=>$somad,'somac'=>$somac]);} } Se alguém sugerir usar a função soma no Collections do Laravel, eu tentei por dois anos e não consegui.