
Frank K Hosaka
Membros-
Total de itens
1.622 -
Registro em
-
Última visita
Tudo que Frank K Hosaka postou
-
** problema essa solução funciona no Laravel 10.48.2 (versão do Hostinger) mas não no Laravel 11.10 (versão do meu desktop) Mudar o nome de um campo no MySQL é a coisa mais fácil do mundo, mas quando se trata da tabela tbusuarios, a coisa complica. No Laravel, tenho um arquivo login.blade, assim <input type="password" class="form-control" name=password required ondblclick="this.type='text'"> Também no Laravel tenho CustomAuthController, assim public function customLogin(Request $request) { $teste=$request->validate(['email' => 'required','password' => 'required', ]); $credentials = $request->only('email', 'password'); if (Auth::attempt($credentials)) { return redirect()->intended('dashboard')->withSuccess('Signed in'); } return redirect()->back()->with('mensagem','Dados inválidos!'); } Pedi ajuda para a Gemini, e ela recomendou mudar tudo que é password para senha no arquivo blade e controller, e assim eu perdi essa sexta feira. Desesperado, procurei ajuda no velho motor de busca do Google, e encontrei essa resposta: NÃO MEXA EM NADA, apenas no Model da tabela dos usuários, no meu caso, ele recebeu o nome de User. Tudo o que você precisa é acrescentar uma função no model assim: arquivo app > Models > User.php <?php namespace App\Models; use Illuminate\Contracts\Auth\MustVerifyEmail; use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Foundation\Auth\User as Authenticatable; use Illuminate\Notifications\Notifiable; use Laravel\Sanctum\HasApiTokens; class User extends Authenticatable { use HasApiTokens, HasFactory, Notifiable; protected $table="tbusuarios"; protected $fillable = ['nome','email','senha',]; protected $hidden = ['senha', ]; public function getAuthPassword() { return $this->senha; } }
-
Encontrei na internet uma dica de como fazer o celular se conectar no Laravel, sem precisar mexer no modem. No terminal o comando é php artisan serve --host 0.0.0.0 Supondo que o IP do notebook é 192.168.0.10, então você digita 192.168.0.10:8000 no celular conectado na rede local. Essa é uma boa dica para quem está estudando a apresentação do Laravel no celular, antes de mandar tudo para o servidor. A Gemini me deu uma boa dica de como apresentar o Laravel no notebook e no celular ao mesmo tempo, usando o CSS @media: arquivo resources > views > app.blade.php <!DOCTYPE html> <html lang="en"> <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/css/bootstrap.min.css" rel="stylesheet"> <script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/js/bootstrap.bundle.min.js"></script> <meta charset="utf-8"> <meta name="viewport" content="width=device-width, initial-scale=1"> <title>Projeto Laravel</title> <body class="bg-body-tertiary"> arquivo resources > views > auth > login.blade.php <style> /* Estilos para telas maiores que 768px (desktops) */ @media (min-width: 768px) { main { width: 25%; /* Largura de 25% para desktops */ } } /* Estilos para telas menores que 768px (celulares) */ @media (max-width: 767px) { main { width: 75%; /* Largura de 75% para celulares */ } } </style> @extends('app') <div style="height:150px"></div> <main class="m-auto"> @if(session()->has('mensagem')) <div class="alert alert-success"> {{ session()->get('mensagem') }} </div> @endif <form method="POST" action="{{ route('login.custom') }}"> <h1 class="h3 mb-3 fw-normal">Projeto Laravel</h1> @csrf <div class="form-floating"> <input type="email" class="form-control" name=email autofocus> <label>Email</label> @if ($errors->has('email')) <span class="text-danger">{{ $errors->first('email') }}</span> @endif </div> <div class="my-1"></div> <div class="form-floating"> <input type="password" class="form-control" name=password required ondblclick="this.type='text'"> <label>Duplo clique para ver a Senha</label> @if ($errors->has('password')) <span class="text-danger">{{ $errors->first('password') }}</span> @endif </div> <div class="my-3"></div> <button class="w-100 btn btn-lg btn-primary" type="submit">Entrar</button> </form> </main>
-
Eu ainda não consegui resolver o problema, mas consegui tirar o CSS z-index:2 do código, separei o <input type-email> do <input type=password> com um <div class="my-1"></div> entre eles, e assim a borda que aparece na hora de digitar não se sobrepõe à borda do outro. Não é uma solução elegante, mas a solução é bem simples. O Bootstrap oferece vários recursos, no meu caso, eu só tentei copiar o layout o máximo que eu pude. O código final ficou assim: <!doctype html> <html lang="en"> <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/css/bootstrap.min.css" rel="stylesheet"> <script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/js/bootstrap.bundle.min.js"></script> <meta charset="utf-8"> <meta name="viewport" content="width=device-width, initial-scale=1"> <title>Projeto Laravel</title> <body class="bg-body-tertiary"> <div style="height:150px"></div> <main class="w-25 m-auto"> <form method="post" action="teste.php"> <h1 class="h3 mb-3 fw-normal">Projeto Laravel</h1> <div class="form-floating"> <input type="email" class=form-control autofocus> <label>Email</label> </div> <div class="form-floating"> <div class="my-1"></div> <input type="password" class="form-control"> <label>Senha</label> </div> <div class="my-3"></div> <button class="btn btn-primary w-100 py-2" type="submit">Entrar</button> </form> </main> Note que na figura abaixo que as caixas do <input> estão com o fundo branco, o problema é na hora de digitar, o PHP pinta de azul.
-
O portal do Bootstrap tem um exemplo para o login e utilizei no meu código: arquivo bootstrap.php <!doctype html> <html lang="en"> <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/css/bootstrap.min.css" rel="stylesheet"> <script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/js/bootstrap.bundle.min.js"></script> <meta charset="utf-8"> <meta name="viewport" content="width=device-width, initial-scale=1"> <title>Projeto Laravel</title> <style> .form:focus-within { z-index: 2; } </style> <body class="bg-body-tertiary"> <div style="height:150px"></div> <main class="w-25 m-auto"> <form method="post" action="teste.php"> <h1 class="h3 mb-3 fw-normal">Projeto Laravel</h1> <div class="form form-floating"> <input type="email" class="form-control" style="background-color:white" autofocus> <label>Email</label> </div> <div class="form form-floating"> <input type="password" class="form-control"> <label>Senha</label> </div> <div class="my-3"></div> <button class="btn btn-primary w-100 py-2" type="submit">Entrar</button> </form> </main> O problema é que o resultado sai bem diferente do exemplo do portal, a caixa do <input type=email> sai com o fundo azul. Eu imaginei que fosse erro de digitação, mas hoje descobri que o problema é a extensão do arquivo. O exemplo do portal do Bootstratp usa o arquivo .html, mas eu uso a extensão .php, e olha só o desastre:
-
Como evitar registros duplicados no php
pergunta respondeu ao Edivan santos de Frank K Hosaka em PHP
<?php $conn=new mysqli("localhost","root","","teste"); If(!isset($_POST['nome'])) { goto Formulario; } $nome=$_POST['nome']; $tel=$_POST['tel']; $consulta = mysqli_query($conn,"select * from clientes where tel='$tel'"); // mysqli_query trabalha com 2 argumentos, o codigo original só forneceu um if(mysqli_num_rows($consulta)>0) { echo "Cliente já cadastrado"; exit; // código tentou controlar fluxo do PHP com JavaScript, isso não dá certo; } else { $inserir = mysqli_query($conn, "insert into clientes (nome,tel) values ('$nome','$tel')") or die(mysqli_error($mysqli)); if($inserir) { echo "Cliente cadastrado"; exit; } else { echo "Erro ao cadastrar"; exit; } } Formulario: ?> Cadastrar contato <form method=post> <table> <tr><td>Nome<td><input name=nome value="Frank"> <tr><td>Telefone<td><input name=tel value="9-9999-99999"> <tr><td><td><input type=submit> </table> </form> -
Estamos em 2024 e até agora ninguém respondeu a sua pergunta de 2020, eu desconfio que não existem desenvolvedores que frequentam esse fórum. Espero que você tenha conseguido encontrar um desenvolvedor que tenha implantado o seu projeto do escritório virtual.
-
Como agrupar e somar registros repetidos no banco de dados?
pergunta respondeu ao jeandelima de Frank K Hosaka em PHP
Eu sou péssimo em MySQL. Apelando para a Gemini eu consegui isso: CREATE VIEW `vwpropaganda` AS SELECT `tbpropaganda`.`data` AS `data`, SUM((CASE WHEN (`tbpropaganda`.`tipoPropaganda` = 'jornal') THEN 1 ELSE 0 END)) AS `jornal`, SUM((CASE WHEN (`tbpropaganda`.`tipoPropaganda` = 'facebook') THEN 1 ELSE 0 END)) AS `facebook` FROM `tbpropaganda` GROUP BY `tbpropaganda`.`data` Eu jamais iria conseguir um negócio desses. Ao invés de montar uma consulta MySQL eu iria montar um código PHP para tentar chegar no resultado esperado. -
Não consigo fazer alteração de um registro
pergunta respondeu ao fbohnstedt de Frank K Hosaka em PHP
O PHP não é o único que deixa qualquer um desolado: arquivo index.php <?php // tbaluno (id,nome,curso) (1,"Frank","PHP") if(!isset($_POST['id'])) { goto Formulario; } $id=$_POST['id']; $mysqli=new mysqli("localhost","root","","teste"); if(!isset($_POST['nome'])) { $query=$mysqli->query("select * from tbaluno where id=$id"); $aluno=$query->fetch_assoc(); goto Formulario2; } $nome=$_POST['nome']; $curso=$_POST['curso']; $mysqli->query("update tbaluno set nome='$nome', curso='$curso' where id=$id"); if(mysqli_affected_rows($mysqli)) { echo "registro atualizado com sucesso"; } else { echo "problema, problema, problema"; } exit; Formulario: ?> <hr> Localizar o aluno <form method=post> <table> <tr><td>Matrícula<td><input name=id value=1> <tr><td><td><input type=submit> </table> </form> <?php exit; Formulario2: ?> <hr> Atualizar cadastro do aluno <form method=post> <table> <tr><td>Matrícula<td><?=$aluno['id']?><input type=hidden name=id value=<?=$aluno['id']?>> <tr><td>Nome<td><input name=nome value=<?=$aluno['nome']?>> <tr><td>Curso<td><input name=curso value=<?=$aluno['curso']?>> <tr><td><td><input type=submit> </table> </form> -
Aqui em 2024, o CSS é bem complicado, mesmo com a ajuda da Gemini. O meu conselho é desistir de vez do CSS e usar a função alert( ), prompt( ) e confirm( ) do JavaScript. <style> .container { background-color:lightgray; width:25%; height:25%; margin:auto; margin-top:200px; } .input { position:relative; left:290px; } .spam { position:relative; top:50%; left:25%; } </style> <div id=popup class=container> <input type=submit value=X class=input onclick="popup.style.display='none'"> <spam class=spam>Olá mundo!</spam> </div>
-
(AJUDA) Criar um checkbox deletar os selecionados
pergunta respondeu ao manogaucho de Frank K Hosaka em PHP
arquivo index.php <?php $mysqli=new mysqli("localhost","root","","teste"); if(!isset($_POST['idVendedor'])) { goto Formulario; } else { $idVendedor=$_POST['idVendedor']; } if(isset($_POST['eliminar'])) { $varios=$_POST['eliminar']; foreach($varios as $eliminar) { $mysqli->query("delete from produtosvendedores where id=$eliminar"); } } // produtosvendedores (id,idvendedor,descricao,valor) (1,1,"maçã",15) (2,1,"pera",20) (3,1,"goiaba",50) // (4,1,"limao",7)(5,1,"giló",0.5) $query=$mysqli->query("select * from produtosvendedores where idvendedor=$idVendedor order by descricao"); $produtos=$query->fetch_all(MYSQLI_ASSOC); ?> <form method=post> <table><th>id<th>idVendedor<th>Descrição<th>Valor<th>Eliminar <?php foreach($produtos as $produto): ?> <tr> <td><?=$produto['id']?> <td><?=$produto['idvendedor']?> <td><?=$produto['descricao']?> <td><?=$produto['valor']?> <td><input type=checkbox name=eliminar[] value=<?=$produto['id']?>> <?php endforeach; ?> <tr><td><td><input type=submit value=Confirmar> </table> <input type=hidden name=idVendedor value=<?=$idVendedor?>> </form> <?php Formulario: ?> <hr> Produtos a serem eliminador por Vendedor <form method=post> <table> <tr><td>Código do Vendedor<td><input name=idVendedor value=1> <tr><td><td><input type=submit> </table> </form> -
arquivo index.php <?php if(!isset($_POST['id'])) { goto Formulario; } $mysqli=new mysqli("localhost","root","","teste"); if($_POST['id']) { $id=$_POST['id']; $sql="select * from clientes where id=$id"; $query=$mysqli->query($sql); if($query->num_rows>0) { echo "O cliente com o id $id é: " . $query->fetch_assoc()['nome']; } else { echo "Não existe cliente com id $id"; } } if($_POST['nome']) { $nome=str_replace(" ","%",$_POST['nome']); $sql="select * from clientes where nome like '%$nome%' order by nome limit 50"; $query=$mysqli->query($sql); $clientes=$query->fetch_all(MYSQLI_ASSOC); ?> <table><th>id<th>Nome <?php foreach($clientes as $cliente) { ?> <tr><td><?=$cliente['id']?><td><?=$cliente['nome']?><p> <?php } ?> </table> <?php } Formulario: ?> <hr> <p> Consulta cliente por id e/ou nome <form method=post> <table> <tr><td>Id do Cliente<td><input name=id> <tr><td>Nome do Cliente<td><input name=nome> <tr><td><td><input type=submit> </table> </form>
-
arquivo index.php <?php $conn=mysqli_connect("localhost","root","","teste"); if(isset($_POST['email'])) { $email=$_POST['email']; $sql="insert into usuarios (email) values ('$email')"; mysqli_query($conn,$sql); if(mysqli_insert_id($conn)) { $ultimoId=mysqli_insert_id($conn); echo "o novo cadastro recebeu o id $ultimoId"; } else { echo "Não deu certo"; } } ?> <hr> Formulário para cadastrar novo usuário <form method=post> <table> <tr><td>Email<td><input type=email name=email required> <tr><td><td><input type=submit> </table> </form>
-
arquivo index.php <style> td, th {font-size:20px;border:double;text-align:center} table,div {width:500px;margin:0 auto} div {margin-top:50px;font-size:20px;border:double;color:red;text-align:center} </style> <table><th>Nível 1<th>Nível 2<th>Nível 3 <?php for($i=65;$i<=79;$i += 3) { ?> <tr><td onclick="mensagem.innerHTML='<?=chr($i)?> Nivel <?= $i % 3 - 1?>'"><?=chr($i)?> <td onclick="mensagem.innerHTML='<?=chr($i+1)?> Nível <?= ($i + 1) % 3 + 2?>'"><?=chr($i+1)?> <td onclick="mensagem.innerHTML='<?=chr($i+2)?> Nível <?= ($i + 2) % 3 + 2?> '"><?=chr($i+2)?> <?php } ?> </table> <div id=mensagem></div>
-
<?php if(isset($_POST['email'])) { $email=$_POST['email']; $senhaHash=password_hash($_POST['senha'],PASSWORD_DEFAULT); $mysqli=new mysqli("localhost","root","","teste"); $query=$mysqli->query("select * from usuarios where email='$email'"); if($query->num_rows>0) { ?> O email <?=$email?> já está cadastrado <?php } else { $mysqli->query("insert into usuarios (email,senhahash) values ('$email','$senhaHash')"); } } ?> <hr> Formulário para cadastrar novo usuario <form method=post> <table> <tr><td>Email<td><input type=email name=email required> <tr><td>Senha<td><input type=password name=senha required> <tr><td><td><input type=submit> </table> </form>
-
O MySQL só usa o formato Y-m-d, logo você só pode gravar ou resgatar nesse formato mas na hora de exibir a data você pode usar o PHP para apresentar a data de forma mais nativa. A gramática select sum(*) as caminhoes está errada, o correto é select sum(caminhoes) as caminhoes, a primeira sintaxe vai somar todos os campos numéricos da tabela, quando o que você deseja é somar os caminhões utilizados numa obra num período de tempo: <?php // dosagem_usina (id,data,caminhoes,obra)(1,'2024-06-21',1,"triplex") // (2,'2024-06-22',1,"triplex")(3,'2024-06-23',1,"triplex") $con=new mysqli("localhost","root","","teste"); if(isset($_POST['dataInicio'])) { $dataInicio = $_POST['dataInicio']; $dataFim = $_POST['dataFim']; $obra = $_POST['obra']; $procura = mysqli_query($con,"select * from dosagem_usina where data between '$dataInicio' and '$dataFim' and obra = '$obra' group by id order by id desc "); $caminhoes=$procura->fetch_all(MYSQLI_ASSOC); ?> <table><th>Id<th>Data<th>Caminhões<th>Obra <?php foreach($caminhoes as $caminhao): ?> <tr><td><?=$caminhao['id']?> <td><?=date('d/m/Y',strtotime($caminhao['data']))?> <td style="text-align:center"><?=$caminhao['caminhoes']?> <td><?=$caminhao['obra']?> <?php endforeach; $procura = mysqli_query($con,"select sum(caminhoes) as soma from dosagem_usina where data between '$dataInicio' and '$dataFim' and obra='$obra'"); $totalCaminhoes = ($procura) ? $procura->fetch_assoc()['soma'] : 0; ?> </table> O total de caminhões utilizado nessa obra foram <?=$totalCaminhoes?><hr> <?php } ?> Formulário para pesquisar total de caminhões utilizado numa obra<p> (para esse exemplo utilize apenas as datas entre 21/06/2024 a 23/06/2024)<p> <form method=post> <table> <tr><td>Data Inicio<td><input type=date name=dataInicio> <tr><td>Data Fim<td><input type=date name=dataFim> <tr><td>Obra<td><input name=obra value="triplex"> <tr><td><td><input type=submit> </table> </form>
-
filter_input (INPUT_GET, variable) não funciona
pergunta respondeu ao souzalm de Frank K Hosaka em PHP
O filter_input(INPUT_GET,'valor1') não funciona mesmo. O formulário não mandou nenhum valor com a chave 'valor1', logo o PHP deveria disparar um erro reclamando que não encontrou a chave. Ao invés de usar o filter_input o melhor é usar $_GET: <?php if(filter_input(INPUT_GET,"id")=="") { goto Formulario; } echo filter_input (INPUT_GET, "valor1"); // não dispara mensagem de erro echo $_GET["valor1"]; // dispara mensagem de erro exit; Formulario: $id=1; $descricao="Compra pela internet"; $tipo="Receita"; $data='2020-04-20'; $valor=111.12; $conta=31; ?> <form> <input type="hidden" name="id" value="<?=$id?>"> <table> <tr><td>Descrição: <input name="descricao" value="<?=$descricao?>"> <tr><td>Tipo: <input name="tipo" value="<?=$tipo?>"> <tr><td>Data: <input name="data" value="<?=$data?>"> <tr><td>Valor: <input name="valor2" value="<?=$valor?>"> <tr><td>Conta: <input name="conta" value="<?=$conta?>"> <tr><td><input type=submit> </table> </form> -
Apesar da mensagem ser de 2018, dá para ver porque o código dele não funcionava: há muitos erros na gramática do MySQL. O truque é tentar fazer o código dele funcionar: <?php session_start(); $conexao=new mysqli("localhost","root","","teste"); $_SESSION['usuario']="Frank K Hosaka"; if(!isset($_POST['Questao'])) { goto Formulario; } $questao = mysqli_real_escape_string($conexao, $_POST['Questao']); $alternativa1 = mysqli_real_escape_string($conexao, $_POST['Alternativa1']); $user = $_SESSION['usuario']; if(empty($_POST['Questao'])) { goto Formulario; } $query = "select * from usuario where name = '$user'"; // aonde estava 'where usuario' coloquei 'where name' $result = mysqli_query($conexao, $query); $tester = mysqli_num_rows($result); if ($tester == 0) { echo "Você não está cadastrado"; // isso não faz sentido, como um usuário logado não está cadastrado? exit; } else { $rowi = mysqli_fetch_assoc($result); // $insert = "INSERT INTO '$rowi' (questao, alternativa1) VALUES ('$questao', '$alternativa1')"; // $rowi é um vetor e não o nome de uma tabela $idUsuario=$rowi['id']; $insert="insert into tabela_questoes (idUsuario,questao,alternativa1) "; $insert=$insert." values ($idUsuario,'$questao','$alternativa1')"; if($valida = mysqli_query($conexao, $insert)) { echo "Parabéns, você conseguiu inserir os dados"; exit; } } Formulario: ?> <form method=post> <input name=Questao value="Você é programador?"> <input name=Alternativa1 value="Não"> <input type=submit> </form>
-
Esse é um debate de 2018, nele aprendi um novo conceito chamado interface e um novo método chamado implements, é um conceito de OOP de alto nível. Como o meu conhecimento em OOP é precário, só uso o método extends. As classes são um péssimo lugar para guardar informações, o melhor lugar é o banco de dados. Mas se o projeto não tem banco de dados, aonde guardar as informações? Eu usei o HTML ou seja eu mandei todas as informações no $_POST, e joguei tudo de volta nos <input>: <?php interface Controle { public function arvoresArepor($volume); public function pagar($arvores); } class ControleReflorestamento implements Controle { public function arvoresArepor($volume) { return $volume*6; } public function pagar($arvores) { return $arvores*1.75; } } $ano=(isset($_POST['ano'])) ? $_POST['ano'] : 2024; $estado=(isset($_POST['estado'])) ? $_POST['estado'] : "SP"; $arvoreCortada=(isset($_POST['arvoreCortada'])) ? $_POST['arvoreCortada'] : 10; $volume=(isset($_POST['volume'])) ? $_POST['volume'] : 1; ?> <table style="width:500px;margin:0 auto;border: 2px double" > <tr> <td colspan=6 style="text-align:center"> Calculadora Ambiental <tr> <td style="border:2px double">Ano <td style="border:2px double">Estado <td style="border:2px double">No. Árvores Cortadas <td style="border:2px double">Volume m3 <td style="border:2px double">Árvores a Repor <td style="border:2px double">Pagar <tr> <td style="border:2px double"><?=$ano?> <td style="border:2px double;text-align:center"><?=$estado?> <td style="border:2px double;text-align:center"><?=$arvoreCortada?> <td style="border:2px double;text-align:center"><?=$volume?> <td style="border:2px double;text-align:center"><?=(new ControleReflorestamento)->arvoresArepor($volume)?> <td style="border:2px double;text-align:center;color:red"><?=(new ControleReflorestamento)->pagar($volume)?> </table> <p> <form method=post style="width:500px;margin:0 auto"> Formulário para alterar dados <table> <tr><td>Ano<td><input name=ano value=<?=$ano?>> <tr><td>Estado<td><input name=estado value=<?=$estado?>> <tr><td>No. Árvores Cortadas<td><input name=arvoreCortada value=<?=$arvoreCortada?>> <tr><td>Volume<td><input name=volume value=<?=$volume?>> <tr><td><td><input type=submit> </table> </form>
-
Lá em 2008 o Serra tinha um monte de campos e sobrava pouco espaço para exibir os comandos alterar e excluir, assim ele teve a ideia de usar uma caixa de seleção. O problema da caixa de seleção é que ele não diz quem deve ser alterado ou excluído Eu consegui colocar o id da empresa dentro da caixa de seleção: <form style="width:500px;margin:0 auto"> <?php if (isset($_GET["ListBox"])) { $comando=explode(" ",$_GET["ListBox"]); $id=$comando[1]; switch ($comando[0]) { case "Alterar" : echo "alterar a empresa com o id $id"; exit; case "Excluir" : echo "excluir a empresa com o id $id"; exit; } } // CREATE TABLE `empresas` (`id` int NOT NULL AUTO_INCREMENT, // `nome` varchar(45) DEFAULT NULL, PRIMARY KEY (`id`) // ) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci ?> <table><tr><th>Empresa<th>Comando <?php $mysqli=new mysqli("localhost","root","","teste"); $query=$mysqli->query("select * from empresas order by nome"); $empresas=$query->fetch_all(MYSQLI_ASSOC); foreach($empresas as $empresa): ?> <tr><td><?=$empresa["nome"]?> <td><select name=ListBox onchange=submit()> <option value="">Escolha uma opção <option value="Alterar <?=$empresa['id']?>">Alterar <option value="Excluir <?=$empresa['id']?>">Excluir </select> <?php endforeach; ?> </table> </form>
-
Em 2008, acredito que o comando mysql_query trabalhava com dois argumentos, e só foi fornecido a consulta sql, precisava incluir a conexão no comando. Aqui em 2024, o PHP não trabalha mais com o motor mysql, agora é PDO ou mysqli. O mysqli não permite usar palavras reservadas como table ou desc como nome de tabela e nome de campo. Atualizando o código para a gramática do mysqli, ele ficaria assim: <?php $nome = "Frank"; $assunto = "PHP"; $desc = "O motor mysqli"; $mysqli = new mysqli("localhost","root","","teste"); $sql = $mysqli->query("INSERT INTO tabela (nome, assunto, descricao) VALUES ('$nome','$assunto','$desc')"); if ($sql) { echo "ok"; } else { echo mysqli_error($mysqli); } ?>
-
<table style="width:500px;margin:0 auto"> <?php // CREATE TABLE `cadastro` (`id` int NOT NULL AUTO_INCREMENT, // `nome` varchar(45) DEFAULT NULL,`idade` int DEFAULT NULL, // `cidade` varchar(45) DEFAULT NULL, PRIMARY KEY (`id`) // ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci $mysqli=new mysqli("localhost","root","","teste"); if(isset($_GET['excluir'])) { $id=$_GET['excluir']; $mysqli->query("delete from cadastro where id=$id"); } $query=$mysqli->query("select * from cadastro order by nome"); $todos=$query->fetch_all(MYSQLI_ASSOC); foreach($todos as $cadaum): ?> <tr><td><?=$cadaum['nome']?><td><a href=?excluir=<?=$cadaum['id']?>>Excluir</a> <?php endforeach; ?> </table>
-
O Durub tem razão, o PHP não tem como fazer mais nada quando você usa o comando head(), nem adianta fazer o comando echo antes dele usar esses comandos. O PHP também não tem uma instrução direta para ver se o arquivo chegou no destino. Mas dá para jogar o serviço na costa do usuário: <form style="width:500px;margin:0 auto"> <?php if(isset($_GET['download'])) { $fname="index.php"; header('Content-type: application/octet-stream'); header('Content-Disposition: attachment; filename='.$fname); header("Cache-Control: no-store, no-cache, must-revalidate"); header("Cache-Control: post-check=0, pre-check=0",false); header("Pragma: no-cache"); header("Content-Transfer-Encoding: binary\n"); readfile($fname); } ?> <input type=submit value="Fazer download" onclick="mensagem.innerHTML='Por favor, verifique se o arquivo chegou na pasta Downloads'"> <input type=hidden name=download value=download> <div id=mensagem></div> </form>
-
<form style="width:500px;margin:0 auto;margin-top:100px"> <?php // CREATE TABLE `cadastro` (`id` int NOT NULL AUTO_INCREMENT, `nome` varchar(45) DEFAULT NULL, // `idade` int DEFAULT NULL, `cidade` varchar(45) DEFAULT NULL, PRIMARY KEY (`id`) // ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci $mysqli=new mysqli("localhost","root","","teste"); if(isset($_GET['nome'])) { $nome=$_GET['nome']; $idade=$_GET['idade']; $cidade=$_GET['cidade']; $mysqli->query("insert into cadastro (nome,idade,cidade) values ('$nome',$idade,'$cidade')"); $query=$mysqli->query("select * from cadastro order by id desc"); $ultimoRegistro=$query->fetch_assoc(); var_dump($ultimoRegistro); } ?> Cadastro Teste <table> <tr><td>Nome:<td><input name=nome required> <tr><td>Idade:<td><input name=idade required> <tr><td>Cidade:<td> <select name=cidade> <option>Londrina <option selected>Curitiba </select> <tr><td><td><input type=submit> </table> </form>
-
A minha sugestão é atualizar a tela, depois de enviar a nova mensagem, assim: <?php // CREATE TABLE `chat` (`id` int NOT NULL AUTO_INCREMENT, `msg` varchar(40) DEFAULT NULL, // PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci $mysqli=new mysqli("localhost","root","","teste"); if(isset($_GET['novaMsg'])) { $novaMsg=$_GET['novaMsg']; $mysqli->query("insert into chat (msg) values ('$novaMsg')"); } $query=$mysqli->query("select * from (select * from chat order by id desc limit 3) as t1 order by t1.id"); ?> <div style="border:1px solid"> <?php while($row=$query->fetch_assoc()) { echo $row['msg']."<p>"; } ?> </div> <p> <form> <textarea name="novaMsg" rows="5" cols="100" autofocus></textarea> <input type=submit> </form> Apesar da questão ser de 2008, nesse código apresento a sugestão de exibir as três últimas mensagens do chat mas em ordem crescente.
-
Monitorar usuário conectados
pergunta respondeu ao Douglas Tomachevski de Frank K Hosaka em Tutoriais & Dicas - PHP
A minha experiência com projeto multiusuário é precária. O meu projeto só suporta dois usuários. Eu não sei se o meu irmão está conectado, mas olhando o histórico do orçamento, eu sei que ele estava conectado às 10:02 hs de hoje. No meu caso, eu não preciso de um gerenciador de usuário, quando o meu irmão não consegue conectar, ele liga no meu WhatsApp e eu tenho que correr para saber onde está o problema. A minha sugestão é buscar outras alternativas além do LDAP ou fazer uma rotina para gerenciar o usuário através da rotina de login, contar as janelas que eles abrem e pedir para o JavaScript fazer a rotina de logout na tabela de usuários assim que todas as janelas do navegador forem fechadas, ou seja, pesquisar nas tabelas existentes o que os usuários andaram registrando. No meu caso, a tabela orçamento não tem o id do usuário, mas eu sei quando aconteceu o último registro.