Ir para conteúdo
Fórum Script Brasil

Frank K Hosaka

Membros
  • Total de itens

    1.623
  • Registro em

  • Última visita

Tudo que Frank K Hosaka postou

  1. Fiz várias modificações para o código do login funcionar: 1) verifique no MySQL se o campo senha foi definido como VARCHAR(255), se não estiver, aconselho a eliminar todos os registros, para cadastrar as novas contas pela tela de cadastro (outra vez eu repito, eu recebi a mensagem de erro ao usar a função password_hash dentro da instrução bindParam, você tem que definir antes assim $hash=password_hash(etc), e depois $cad_usuario->bindParam(':senha',$hash); bem como usar o parametro ['cost'=>12] na função. Do seu jeito funciona, mas isso não quer dizer que está certo. 2) você não pode usar a função password_hash na rotina do login 3) você só pode usar a função password_verify na rotina do login 4) o formulário <form> tem que vir antes e não depois da rotina de validação. Segue o código (nele eu precisei criar a variável $conn para testar e tirar a instrução include) <!DOCTYPE html> <html lang="pt-br"> <head> <meta charset="UTF-8"> <meta name="viewport" content-"width=device-width, initial-scale=1.0"> <meta http-equiv="X-UA-Compatible" content="ie=edge"> <title>Login</title> <style> body{font-family: Arial, Helvetica, sans-serif} .content{display:flex;justify-content: center} .contato{width:100%; max-width: 500px;} .form{display: flex; flex-direction: column} .field{padding:10px; margin-bottom:15px; border:1px solid #DDD; border-radius: 5px; font-family: Arial, Helvetica, sans-serif; font-size: 16px} .field2{padding:10px; margin-bottom:15px; border:1px solid #ADD8E6; background-color:#ADD8E6; border-radius: 5px; font-family: Arial, Helvetica, sans-serif; font-size: 16px} .field2:hover{padding:10px; margin-bottom:15px; border:1px solid #87CEFA; background-color:#87CEFA; border-radius: 5px; font-family: Arial, Helvetica, sans-serif; font-size: 16px; font-weight:bold;} </style> </head> <body> <section class="content"> <div class="contato"> <h2>Login</h2> Por favor, entre com o e-mail e a senha cadastrados.<br><br> <form name="cad_usu" class="form" method=post> <input class="field" type="email" name="email" placeholder="E-mail" required> <input class="field" type="current-password" name="senha" placeholder="Senha" required> <input class="field2" type="submit" name="SendLogin" value="Entrar no Sistema"> <input class="field2" type="reset" value="Limpar Formulário"> </form> </div> </section> <?php if(!isset($_POST['SendLogin'])){exit;} $conn=new PDO("mysql:host=localhost;dbname=astudy","root",""); $dados = filter_input_array(INPUT_POST,FILTER_DEFAULT); $query_usuario = "SELECT email, senha FROM usuario WHERE email =:email LIMIT 1"; $result_usuario = $conn->prepare($query_usuario); $result_usuario->bindParam(':email', $dados['email']); $result_usuario->execute(); $row_usuario=$result_usuario->fetch(PDO::FETCH_ASSOC); if($row_usuario && password_verify($dados['senha'],$row_usuario['senha'])) { $_SESSION['id'] = $row_usuario['id']; $_SESSION['nome'] = $row_usuario['nome']; header("Location: painel.php");} else { echo "<div class=content><p style='color: red'> Erro: Usuário e/ou senha inválidos!</p>";} ?> </body> </html>
  2. Sem acesso à estrutura de dados, eu não sei como resolver. Uma estrutura de dados seria assim: CREATE TABLE `tbprod` ( `codprod` mediumint NOT NULL AUTO_INCREMENT, `un` varchar(30) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT 'un', `prod` varchar(80) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL, `custo` decimal(13,2) DEFAULT NULL, `marg` decimal(5,2) DEFAULT '30.00', `codbar` varchar(14) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL, `loc` varchar(14) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL, `emb` varchar(10) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL, `cf` varchar(10) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL, `codforn` varchar(40) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL, PRIMARY KEY (`codprod`) ) ENGINE=InnoDB AUTO_INCREMENT=1737 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci Para saber quantos produtos que tem o codprod <=800, eu faria a seguinte consulta select count(codprod) from tbprod where codprod<=800 Para saber os produtos cujo código que tem o codprod >=800, eu faria assim select count(codprod) from tbprod where codprod>800 Para ter os dois ao mesmo tempo, eu faria assim: <?php $mysqli=new mysqli("localhost","root","","astudy"); $query=$mysqli->query(" select count(codprod) from tbprod where codprod<=800 union select count(codprod) from tbprod where codprod>800"); $total=$query->fetch_all(MYSQLI_ASSOC); var_dump($total); Com a estrutura dos dados em mãos, fica mais fácil testar por aqui. Sem nada aqui, fica difícil responder qualquer pergunta.
  3. Pretendo criar um código para login e autenticação nessa mensagem, espero terminar o serviço em 28/02/2023. A primeira parte do código é esse: <?php for($i=1;$i<=5;$i++){ echo password_hash($password="1234",$algo=PASSWORD_BCRYPT, $options=['cost'=>12])."<br>";} E o resutado foi esse: $2y$12$oGdLEGF5UD8EERLYnRwib.1wIh6F2r5NsaeZ4eRXWSv80HxUBk/bW $2y$12$AFZgBxf1d8Er6A4otuQcAeFXUgmTYqDfKj7asXxhXOJ5A0n.xl65e $2y$12$hdTZz8GM6Mn.4S5Uqz7AKuMkbq7QHyOewwHn4w9qhvhD3NN2NXRYa $2y$12$XNuacQ9GNnZI0aC7BEMi0.EAIwe3UKCSqt9wZrROSvGmWgIywGyOe $2y$12$tmlC.q4lVDzHgXOzSAIbJe779UOSa6LQuwhGDhjJtAsXdP03v854O Mas, se você for rodar na sua máquina, certamente vai ter 5 hash diferentes. Nesse ambiente, como é possível autenticar? Eu não sei, assim vou usar o método da tentativa & erro, até conseguir "entrar no sistema". Desejem sorte para mim. Tentei definir o campo email como único, mas o MySQL não pemitiu, o máximo permitido para ser campo único é 767 bytes. Então, eu pedi para o PHP não cadastrar ninguém que já tivesse um email já cadastrado. Encontrei um tutorial de autenticação na página Authenticating a user using PDO and password_verify() - Treating PHP Delusions, mas ele também não funcionou. Acredito que o problema é o algorítimo PASSWORD_BCRYPT. Se eu não conseguir nada com ele, vou apelar para o md5. Apesar do meu código não ter funcionado, eu gostei dele, ao invés de ter uma tela de cadastro e outra de autenticação, eu fiz uma tela só para os dois! Veja só: astudy.php <?php $pdo=new PDO("mysql:host=localhost;dbname=astudy","root",""); $username="frank"; $email="frankhosaka@gmail.com"; $pass=password_hash($password="1234",$algo=PASSWORD_BCRYPT, $options=['cost'=>12])."<br>"; $stmt=$pdo->prepare("select * from users where email=?"); $stmt->execute([$email]); $user=$stmt->fetch(); if(!$user){ $stmt=$pdo->prepare("insert into users (username,email,password)values (?,?,?)"); $stmt->execute([$username,$email,$pass]);header('location:astudy.php');} if ($user && password_verify($pass, $user['password'])){ echo "valid!";} else {echo "invalid"; } Depois de estudar o PASSWORD_BCRYPT, eu vi que ele funciona, o que não funciona é o código acima. A variável $pass foi criptografada fora da lógica, quem tem que ser criptografado é a senha que vai ser armazenado no banco de dados. Outra coisa legal é que o PASSWORD_BCRYPT não é coisa do objeto PDO mas do PHP, assim pude montar o código com o mysqli: astudy.php <body style="width:500;margin:0 auto"><div style=height:10%></div> <form method=post> <p><input type=email name=email placeholder=email required> <p><input name=senha placeholder=senha required> <p><input type=submit> </form> <?php if(!isset($_POST['email'])){exit;} $mysqli=new mysqli("localhost","root","","astudy"); $email=$_POST['email']; $senha=$_POST['senha']; $query=$mysqli->query("select * from users where email='$email'"); $user=$query->fetch_assoc(); if(!$user){ $pass=password_hash($password=$senha,$algo=PASSWORD_BCRYPT, $options=['cost'=>12]); $mysqli->query("insert into users (email,password)values ('$email','$pass')"); header("location:astudy.php");} if ($user && password_verify($senha, $user['password'])){ echo "valid!";} else {echo "invalid"; }
  4. Eu mudei o código do login, linhas 43 e 46, mas não deu certo. if(($result_usuario) AND ($result_usuario->rowCount() !=0)){ $row_usuario = $result_usuario->fetch(PDO::FETCH_ASSOC); $senha=password_hash($dados['senha'], PASSWORD_BCRYPT,['cost=>12']); if($senha == $row_usuario['senha']) { Eu fiz uma bateria de teste e percebi que esse password_hash sempre gera uma senha diferente, logo nenhum usuário poderá entrar no sistema. Vou estudar essa função. Aconselho a fazer o mesmo, boa sorte.
  5. Eu tiraria a útima intrução do código <META http-equiv="refresh" content="1;URL=resposta.html"> Em seguida, começaria com o código: <form method=post> <select name="enviar" required> <option value="">Selecione a Unidade</option> <option value="itatiba@carrantos.com.br">Itatiba</option> <option value="site@carrantos.com.br">Campinas</option> <option value="braganca@carrantos.com.br">Bragança Paulista</option> <option value="criacao@affarebrasil.com.br">Jundiaí</option> </select> <p><input type=submit> </form> <?php if (!isset($_POST['enviar'])){exit;} $email=$_POST['enviar']; echo "email selecionado $email"; $assunto="Fale conosco."; $_POST['mensagem']="Feliz Carnaval!"; Mas o problema é configurar o email do servidor para que o PHPMailer consiga trabalhar. Eu não consegui.
  6. Eu não sou especialista no PDO, mas acredito que você não pode usar função dentro do bindParam. Eu fiz o meu teste assim: <?php $conn=new PDO("mysql:host=localhost;dbname=astudy","root",""); $query_usuario = "INSERT INTO usuario (nome,email,senha) VALUES (:nome,:email,:senha)"; $cad_usuario = $conn->prepare($query_usuario); $dados['nome']="frank"; $dados['email']="frankhosaka@gmail.com"; $dados['senha']="1234"; $senha=password_hash($dados['senha'],PASSWORD_BCRYPT,['cost=>12']); $cad_usuario->bindParam(':nome',$dados['nome'],PDO::PARAM_STR); $cad_usuario->bindParam(':email',$dados['email'],PDO::PARAM_STR); $cad_usuario->bindParam(':senha',$senha); $cad_usuario->execute(); if($cad_usuario->rowCount()){ echo "<p style='color: green;'>Usuário cadastrado com sucesso!</p>";}else{ echo "não deu!";} Apesar do teste dar certo, acredito que o terceiro parâmetro do password_hash está em desacordo com o que vi no Google, o pessoal escreve assim: ['cost'=>12]
  7. Eu acho que termei o meu código. A minha sugestão é criar quatro tabelas no MySQL, tbalunos, tbquestoes, tbprovas, tbrespostas. A tbprovas vai ser composto de várias provas, cada uma terá suas questões, bem como a resposta. As questões serão armazenadas num campo tipo json. A tbresposta vai pegar cada aluno e para cada prova que ele fizer, o PHP vai guardar as respostas num campo json. Finalmente, o PHP compara a resposta com o gabarito e avalia o aluno. Falar é fácil, mas levei três dias para montar, e elá está disponível na primeira mensagem que publiquei nesse tema.
  8. O meu projeto Testes Múltiplos está enroscado pelo terceiro dia, agora o meu problema é o HTML, não consigo capitalizar uma letra. No Google, encontrei o atributo autocapitalize, mas encontrei a orientação para não usar por ser um atributo descontinuado. Encontrei uma solução no CSS, ele é fantástico, você digita "a" e ele escreve "A", mas na hora de mandar para frente, o <input> manda o "a" e não o "A". No código a seguir, é fácil consertar o problema, mas eu precisava resolver dentro do módulo <input>. <form> <input name=teste style=text-transform:uppercase> <input type=submit> </form> <?php if(isset($_GET['teste'])){echo $_GET['teste'];} Eu acho que a única solução é pedindo ajuda para o JavaScript: <form> <input id=inpletra name=teste onchange=inpletra.value=(inpletra.value).toUpperCase()> <input type=submit> </form> <?php if(isset($_GET['teste'])){echo $_GET['teste'];} No meu caso, eu tenho vários inputs para capitalizar uma única letra: <?php echo "<form>"; $i=0;$id="inpletra".$i; echo "<input id=$id name=teste[] onchange=$id.value=($id.value).toUpperCase()>"; $i++;$id="inpletra".$i; echo "<input id=$id name=teste[] onchange=$id.value=($id.value).toUpperCase()>"; echo "<input type=submit>"; echo "</form>"; if(isset($_GET['teste'])){var_dump($_GET['teste']);}
  9. Sim, deu certo. No meu caso, foi erro de digitação. Quando você coloca coisa do tipo <input value=$teste>, ele vai colocar o conteúdo da variável até encontrar o primeiro espaço dentro dela. Para colocar todo o conteúdo, tem que escrever assim: <input value='$teste'>. Ou seja, 99% dos códigos têm esse problema das aspas.
  10. Já faz três anos que eu tento trabalhar com o Json no PHP, mas eu não consigo. Eu tenho um projeto chamado Testes e está parado já faz dois dias. Deixei o meu orgulho de lado, e admito que não sei mexer no PHP. Agora vou compartilhar o meu problema. O código é esse daqui: <?php $mysqli=new mysqli("localhost","root","","astudy"); $query=$mysqli->query("select * from tbalunos where id=1"); $row=$query->fetch_assoc(); echo '$row["id"]='.$row['id']; echo '<br>$row["nome"]='.$row['nome']; echo '<br>$row["curso"]='.$row['curso']; $json=json_encode([$row['id'],$row['nome'],$row['curso']]); echo '<br>$json='.$json; echo "<br><form><input name=teste value=$json><input type=submit></form>"; Eu só consigo mandar 70% do que eu preciso na caixa do input. Alguém sabe se é possível conseguir 100%? Eu fiz mais uma tentativa, acho que é a centésima vez: botei uma aspas simples em torno da variável $json no input, e assim consegui 100%.
  11. Eu ainda não tenho nada pronto, estou usando a minha primeira mensagem como rascunho. Acho que a resposta final vai sair lá em 28/02/2023.
  12. Teste de múltipla escolha Eu acho que consegui terminar o esqueleto básico do programa. Cadastrei dois alunos: João e Maria do curso Básico. Cadastrei duas questões e inclui numa prova. João fez a prova, mas a Maria não. A imagem está no final da mensagem. MySQL: CREATE DEFINER=`root`@`localhost` PROCEDURE `procedimento`() begin drop tables if exists tbprovas, tbalunos, tbrespostas, tbquestoes; CREATE TABLE tbprovas ( `id` int NOT NULL AUTO_INCREMENT, `data` date DEFAULT NULL, `materia` varchar(45) COLLATE utf8mb4_general_ci DEFAULT NULL, `questoes` json, PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci; CREATE TABLE `tbalunos` ( `id` int NOT NULL AUTO_INCREMENT, `nome` varchar(45) COLLATE utf8mb4_general_ci NOT NULL, `curso` varchar(45) COLLATE utf8mb4_general_ci NOT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci; CREATE TABLE `tbrespostas` ( `id` int NOT NULL AUTO_INCREMENT, `idalunos` int DEFAULT NULL, `idprovas` int DEFAULT NULL, `respostas` json DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci; CREATE TABLE `tbquestoes` ( `id` int NOT NULL AUTO_INCREMENT, `questao` varchar(100) CHARACTER SET utf8mb4 DEFAULT NULL, `alternativas` json DEFAULT NULL, `gabarito` varchar(1) CHARACTER SET utf8mb4 DEFAULT NULL, PRIMARY KEY (`id`), UNIQUE KEY `id` (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci; end astudy.php <body style="width:50%;margin:0 auto"><div style="height:2%"></div> <Menu> <a href="?opcao=1">Cadastrar Alunos</a> | <a href="?opcao=2">Questões</a> | <a href="?opcao=3">Provas</a> | <a href="?opcao=4">Resposta do Aluno</a> | <a href="?opcao=5">Apurar resultado</a> </Menu> <?php $mysqli=new mysqli("localhost","root","","astudy"); if(isset($_GET['opcao'])){ if($_GET['opcao']==1){ echo "Cadastrar alunos<p>"; echo "<form>"; echo "Nome do aluno <input name=nomealuno required><p>"; echo "Curso <input name=curso required><p>"; echo "<input type=submit>"; echo "</form>";} if($_GET['opcao']==2){ echo "Criar uma nova questão<p>"; echo "<form>"; echo "<table>"; echo "<tr><td>Questão:<td><input name=questao size=60>"; echo "<tr><td>Alternativa A:<td><input name=alternativa[]>"; echo "<tr><td>Alternativa B:<td><input name=alternativa[]>"; echo "<tr><td>Alternativa C:<td><input name=alternativa[]>"; echo "<tr><td>Alternativa D:<td><input name=alternativa[]>"; echo "<tr><td>Alternativa E:<td><input name=alternativa[]>"; echo "<tr><td>Resposta<td><input name=gabarito required size=1 maxlength=1>"; echo "</table>"; echo "<input type=submit>"; echo "</form>";} if($_GET['opcao']==3){ echo "<form>"; echo "Data da Prova <input type=date name=dataprova required><p>"; echo "Materia <input name=materia required><p>"; echo "Escolha as questões que farão parte da prova<p>"; $query=$mysqli->query("select * from tbquestoes"); while($row=$query->fetch_assoc()){ echo "<input type=checkbox name=questoes[] value=".$row['id'].">".$row['questao']."</input><br>";} echo "<input type=submit>"; echo "</form>";} if($_GET['opcao']==4){ echo "Inclusão das respostas do aluno<p>"; echo "<form>"; echo "<select name=aluno required>"; echo "<option value=''>Selecione o aluno</option>"; $query=$mysqli->query("select * from tbalunos order by nome"); while($row=$query->fetch_assoc()){ $json=json_encode([$row['id'],$row['nome'],$row['curso']]); echo "<option value='$json'>".$row['nome']." - ".$row['curso']."</option>";} echo "</select>"; echo "<p>"; echo "<select name=provaid required>"; echo "<option value=''>Selecione a prova</option>"; $query=$mysqli->query("select * from tbprovas order by data"); while($row=$query->fetch_assoc()){ $data=date('d/m/Y',strtotime($row['data'])); $json=json_encode([$row['id'],$row['data'],$row['materia']]); echo "<option value='$json'>$data - ".$row['materia']."</option>";} echo "</select>"; echo "<p>"; echo "<input type=submit>"; echo "</form>";} if($_GET['opcao']==5){ echo "Resultado das correções das provas:<p>"; $query=$mysqli->query("select * from tbalunos order by curso, nome"); while($rows=$query->fetch_assoc()){ echo $rows['nome']." do curso ".$rows['curso']." "; $idaluno=$rows['id']; $query2=$mysqli->query("select count(idalunos) as provas from tbrespostas where idalunos=$idaluno"); $provas=$query2->fetch_assoc()['provas']; if($provas==0){echo "não fez nenhuma prova.<br>";} if($provas==1){echo "fez uma prova.<br>";} if($provas>1){echo "fez $provas provas.<br>";} if($provas>0){ for($idprova=1;$idprova<=$provas;$idprova++){ $query3=$mysqli->query("select * from tbquestoes,tbrespostas,tbprovas where idalunos=$idaluno and idprovas=$idprova"); while($rows3=$query3->fetch_array(MYSQLI_ASSOC)){ $gabarito[]=$rows3['gabarito'];$prova=$rows3['materia'];$data=$rows3['data'];$resposta=$rows3['respostas'];} $jresposta=json_decode($resposta); echo "=> prova de $prova de ".date('d/m/Y',strtotime($data)).": acertou "; $acertos=0;$questoes=0; foreach($gabarito as $gabarito){ if($gabarito[0]==$resposta[0]){$acertos++;} $questoes++;} echo "$acertos em $questoes questões.";} echo "<p>"; }}} } if(isset($_GET['nomealuno'])){ $nomealuno=$_GET['nomealuno']; $curso=$_GET['curso']; $query=$mysqli->query("insert into tbalunos (nome,curso) values ('$nomealuno','$curso')"); if(mysqli_insert_id($mysqli)){ echo "Aluno cadastrado com sucesso.";} else {echo "Problema: aluno não cadastrado.";} } if(isset($_GET['dataprova'])){ $dataprova=$_GET['dataprova']; $materia=$_GET['materia']; $questoes=json_encode($_GET['questoes']); $query=$mysqli->query("insert into tbprovas (data,materia,questoes) values ('$dataprova','$materia','$questoes')"); if(mysqli_insert_id($mysqli)){ echo "Prova cadastrada com sucesso.";} else {echo "Problema: prova não cadastrada.";} } if(isset($_GET['questao'])){ $questao=$_GET['questao']; $alternativas=json_encode($_GET['alternativa']); $gabarito=strtoupper($_GET['gabarito']); $query=$mysqli->query("insert into tbquestoes (questao,alternativas,gabarito) value ('$questao','$alternativas','$gabarito')"); if(mysqli_insert_id($mysqli)){ echo "Questão cadastrada com sucesso.";} else {echo "Problema: questão não cadastrada.";} } if(isset($_GET['aluno'])){ $idAluno=json_decode($_GET['aluno']); $idProva=json_decode($_GET['provaid']); $id_aluno=$idAluno[0];$id_prova=$idProva[0]; $query=$mysqli->query("select * from tbrespostas where idalunos=$id_aluno and idprovas=$id_prova"); if($query->num_rows){echo "A resposta desse aluno já foi cadastrado.";exit;} echo "Inclusão das respostas do aluno <b>$idAluno[1]</b>"; echo " do curso <b>$idAluno[2]</b><p>"; echo "na prova de <b>$idProva[2]</b> de <b>".date('d/m/Y',strtotime($idProva[1]))."</b><p>"; $query=$mysqli->query("select * from tbprovas where id=$idProva[0]"); $questoes=json_decode($query->fetch_assoc()['questoes']); echo "<form>"; $i=0; foreach($questoes as $questao){ $query=$mysqli->query("select * from tbquestoes where id=$questao"); $id="inp".$i;$java="$id.value=($id.value).toUpperCase()"; echo "<input id=$id name=respostas[] maxlength=1 size=1 required onchange='$java'> ";$i++; echo $row=$query->fetch_assoc()['questao']."<p>";} echo "<input type=submit>"; $Aluno=$idAluno[0]; $Prova=$idProva[0]; echo "<input type=hidden name=idAluno value='$Aluno'>"; echo "<input type=hidden name=idProva value='$Prova'>"; echo "</form>"; } if(isset($_GET['respostas'])){ $respostas=json_encode($_GET['respostas']); $idAluno=$_GET['idAluno']; $idProva=$_GET['idProva']; $query=$mysqli->query("insert into tbrespostas (idalunos,idprovas,respostas) values ($idAluno,$idProva,'$respostas')"); if(mysqli_insert_id($mysqli)){echo "Resposta cadastrada com sucesso.";} else {echo "Problema: a resposta não foi cadastrada.";} }
  13. Há muitos pontos e vírgulas fora do lugar ou ausentes. Grande parte dos erros é por digitação. Mesmo assim, eu vi duas novidades. Eu já vi várias vezes o INPUT_POST, e só hoje que eu experimentei. O recurso FILTER_SANITIZE é bem difícil de entender, e eu não consegui encontrar um exemplo prático. Por outro lado, o mysqli_insert_id eu não conhecia e eu gostei dele. Ele funciona, mesmo que a chave primária não seja exatamente um id. Fiz algumas modificações para tornar o código mais funcional: <!-- código modificado de acordo com o PHP 8.0.13--> <body style="width:500px;margin:0 auto"><div style="height:5%"></div> <form method=post> Cadastre a sua nova conta no <p>Portal dos Depravados<p> <input name=login placeholder=Login required><p> <input name=email placeholder=Email required><p> <input name=senha placeholder=Senha required><p> <input type=submit> </form> <?php $mysqli=new mysqli("localhost","root","","astudy"); if(!isset($_POST['login'])){exit;} $login=filter_input(INPUT_POST,'login',FILTER_SANITIZE_SPECIAL_CHARS); $email=filter_input(INPUT_POST,'email', FILTER_SANITIZE_EMAIL); $senha=md5(filter_input(INPUT_POST,'senha')); $query=$mysqli->query("insert into tbusuarios (email,senha,login,created) VALUES ('$email','$senha','$login',NOW())"); if(mysqli_insert_id($mysqli)){ echo "<p style=color:green>Usuário cadastrado com sucesso</p>";}else{ echo "<p style=color:red>Usuário não foi cadastrado com sucesso</p>";}
  14. Eu uso o PHP versão 8.0.13 e ele não reclamou da função na linha 16.
  15. Em 2020 é que eu comecei a estudar o PHP, eu apanhei uns três anos para entender como o PHP funciona. O primeiro problema é o banco de dados. Eu uso MySQL Workbench. Eu não sei como definir a senha no banco de dados, logo ele não tem senha nenhuma. Se eu precisar localizar alguém com o CPF 999.999.999-99, eu abro a guia query, e escrevo Select * from pessoas where cpf='999.999.999-99', aperto o botão executar, e aí o MySQL retorna a resposta, se houver algum ou nenhum. Já o PHP é outra história. O código PHP sempre começa com <?php. Para eu conectar o PHP no MySQL eu faço assim: $mysqli=new mysqli("localhost","root","","astudy"); O terceiro parametro é a senha, aqui não tem nenhum, pois eu não sei como colocar a senha no banco de dados. Para o PHP pesquisar, eu faço assim: $query=$mysqli->query("select * from pessoas where cpf='999.999.999-99'"); $row=$query->fetch_assoc( ); echo $row['nome']." ".$row['endereco']." ".$row['telefone']; O problema desse código é que você precisa modificar o código toda vez que aparecer um cpf novo, e assim chegamos no famoso método $_POST, eu prefiro o $_GET, outros preferem $_REQUEST. Olha só a cara do código: <?php if(!isset($_POST['cpf'])){ echo "<form method=post>"; echo "Qual CPF você quer consultar?"; echo "<br><input name=cpf>"; echo "<br><input type=submit>"; echo "</form>"; exit; } $cpf=$_POST['cpf']; $mysqli=new mysqli("localhost","root","","astudy"); $query=$mysqli->query("select * from pessoas where cpf=$cpf"); $row=$query->fetch_assoc(); var_dump($row); Esse já é um código mais esperto, você não precisa mudar o código para consultar cpfs diferentes. Você só muda o cpf. Ele é muito mais simpático do que a tela do MySQL. Mas ele é programa limitado, ele só faz consulta. Ele não permite corrigir, excluir ou criar um novo. Nesse caso, você tem duas opções. Faz diretamente no MySQL ou consulta o Manual do PHP ou o Google.
  16. Frank K Hosaka

    ARRAY PHP

    Gostei desse código, ele é muito bom. Testei o código, mas fiz um monte de gambiarra para funcionar. O primeiro problema é a caixa de combinação que você chama de txtproduto. Eu tive que mexer justamente nele! O PHP não é capaz de saber qual o produto que o usuário selecionou. Por causa dessa limitação, eu pedi para o PHP jogar tudo o que tinha para dentro do txtproduto. Usei o meu banco de dados, onde a minha tabela de produtos não tem quantidade e nem preço de venda. Ele tem id, mas deixei de lado para diminuir o tamanho do código. O problema é que isso acabou comprometendo a função Java CadEstoque, ele pegava o valor do txtproduto para colocar na sua tabela de orçamento. Então, eu fui forçado a criar a função Java Teste( ), e pedi para essa função esconder o nome do produto na propriedade placeholder do txtproduto. Assim, quando o usuário apertar aquele botão verde, o botão verde não vai passar o valor do txtproduto, mas sim o placeholder. É uma das telas mais bonitas que eu já vi. Essa é a primeira vez que uso a minha habilidade de fazer gambiarra dentro da floresta do Bootstrap. Mais importante: eu tive um problemão com o cadEstoque, não consegui achar a solução no Google. Usei o velho método da tentativa e erro, e tirei a tabela que estava fora da função para dentro da função. Agora ele funciona, só não sei explicar porque. A minha intuição me diz que o código Java não conseguia enxergar a tabela porque eu joguei o código no topo (ele estava na base), mas quando coloquei ele dentro da função (que foi chamado dentro do documento, ele conseguiu ver a famosa tabela). <script> fields = ['produto','custouni'] function cadEstoque(produto, custouni) { tabela = document.getElementById('registroTabela'); qtdLinha = tabela.rows.length; linha = tabela.insertRow(qtdLinha), cells = []; // para cada field da variável fields for (let field of fields) { // adiciona uma célula à linha cells[field] = linha.insertCell(); // cria um elemento de texto let textElement = document.createTextNode(eval(field)); // adiciona o texto à célula cells[field].appendChild(textElement);}} function teste(){ select = document.getElementById("txtproduto"); opcaoTexto = select.options[select.selectedIndex].text opcaoValor = select.options[select.selectedIndex].value opcaoJvalor=JSON.parse(opcaoValor) txtproduto.placeholder=opcaoTexto txtcustouni.value=opcaoJvalor['custo'] } </script> <body style="width:70%;margin:0 auto"> <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.2.0/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-gH2yIJqKdNHPEq0n4Mqa/HGKIhSkIHeL5AyhkYV8i59U5AR6csBvApHHNl/vI1Bx" crossorigin="anonymous"> <div class="row mt-5"> <div class="col-xl-2 col-lg-2 col-md-2 col-sm-6"> <div class="form-group "> <label for="produto">Nome do Produto</label> <select class="form-control " id="txtproduto" onchange=teste()> <?php $conexao=new mysqli("localhost","root","","astudy"); $query = "select * from tbprod order by prod limit 10"; $result = mysqli_query($conexao, $query); if($result->num_rows){ while($res = mysqli_fetch_array($result)){ $id=$res['codprod']; $custo=$res['custo']; $prod=$res['prod']; echo '<option value={"id":'.$id.',"custo":'.$custo.'}>'.$prod; }} ?> </select> </div></div> <div class="col-xl-2 col-lg-2 col-md-2 col-sm-6"> <div class="form-group" style="margin-left: 9px;"> <label for="custouni"> Custo Unitário </label> <input type="text" class="form-control mr-2 money" id="txtcustouni" placeholder="Custo Unitário" required > </div></div> <div class="col-xl-1 col-lg-2 col-md-2 col-sm-6"> <div class="form-group "> <a type= "button" class="editar btn btn-success mt-4 ml-3" onclick= "cadEstoque(txtproduto.placeholder, txtcustouni.value)"><i class="fas fa-plus-circle"></i></a> </div></div> </div> <div class="table-responsive-sm"> <table class="table" id="registroTabela"> <thead><tr> <th scope="col">Nome do Produto</th> <th scope="col">Custo Unitário</th> </tr> <tbody id="listaRegistro"></tbody></thead></table></div>
  17. <body style="width:30%;margin:0 auto"><div style="height:5%"></div> <?php $mysqli=new mysqli("localhost","root","","astudy"); $data_final='2023-01-29'; $data_inicial='1500-04-22'; $estado_operacao='não resolvido'; $query = $mysqli->query("select * from tb_operacao WHERE data_operacao between '$data_inicial' and '$data_final' and estado_operacao='$estado_operacao' order by id ASC"); echo "<Select><option>Casos não resolvidos"; while($row=$query->fetch_assoc()){ $data_operacao=date('d/m/Y',strtotime($row['data_operacao'])); echo "<option>$data_operacao=>".$row['nome_operacao'];}
  18. <body style="width:30%;margin:0 auto"><div style=height:5%></div> <?php if(isset($_REQUEST['cep'])){ $cep = $_REQUEST['cep']; switch($cep) { case ($cep>="22000-000" && $cep<="22999-999"):$url = "http://dominio.com.br/cep22"; break; case "23010-010":$url = "http://dominio.com.br/cep22"; break; case "32000-000":$url = "http://dominio.com.br/cep32"; break; default:$url = "http://dominio.com.br/localidade-não-atentida";} echo "a encomenda com cep $cep irá para $url <p>";}// header("Location: $url"); ?> <br><a href='?cep=22000-000'>Teste 22000-000</a> <br><a href='?cep=22090-123'>Teste 22090-123</a> <br><a href='?cep=23010-010'>Teste 23010-010</a> <br><a href='?cep=32000-000'>Teste 32000-000</a>
  19. Eu tentei testar o código por aqui, mas não consegui entender a linha 13 $sql_custo_homologacao_cs = mysqli_query($config, "SELECT percentual FROM tb_erp_custo_homologacao WHERE '$investimento_total' BETWEEN vlr_1 AND vlr_2") or die(mysqli_error($config)); Geralmente, eu encontro código desse tipo: select percentual from tb_homologacao where investimento between vr_1 and vr_2 Depois da cláusula Where sempre vem o nome do campo da tabela, mas nunca uma variável do tipo utilizado no PHP. Eu preciso de todos os códigos para ver como esse programa funciona, principalmente todo o banco de dados com a estrutura e todos os dados. Tem jeito de arranjar para mim?
  20. O jeito mais fácil de zebrar uma tabela que eu vi foi pelo Bootstrap, usando <table class='table table-striped'>. O correto é usar o PHP, mas ontem fiquei imaginando como usar o JavaScript para gerar uma tabela. O código a seguir tem erro de lógica, ele pressupõe que o usuário vá preencher o formulário na sequência. Mas se o usuário querer voltar um pouco para trás, o programa não funciona! Eu não sei como consertar isso. Ou seja, daqui posso concluir que o melhor jeito é usar o PHP, enquanto o usuário fica pensando na vida, o PHP guarda o que já foi feito em um banco de dados. astudy.html <script> controle=0 function inserirLinha(table,var1,var2){ row=table.insertRow() cell=row.insertCell() text=document.createTextNode(var1) cell.appendChild(text) cell.setAttribute("width","20%") cell.setAttribute("style","border:1px solid") cell=row.insertCell() text=document.createTextNode(var2) cell.appendChild(text) cell.setAttribute("style","border:1px solid")} function ver(){ es=document.getElementsByName('txt[]') divTitulo.innerHTML=es[0].value divDescricao.innerHTML=es[1].value table=document.querySelector("table") if((es[2].value && es[3].value && controle==0)){ inserirLinha(table,es[2].value,es[3].value) controle++} if((es[4].value && es[5].value && controle==1)){ inserirLinha(table,es[4].value,es[5].value) controle++} if((es[6].value && es[7].value && controle==2)){ inserirLinha(table,es[6].value,es[7].value)}} </script> <style> .table-striped>tbody>tr:nth-child(2n+1){background-color:lightgray} .table-striped>tbody>tr:nth-child(2n){background-color:whitesmoke} </style> <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.2.0/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-gH2yIJqKdNHPEq0n4Mqa/HGKIhSkIHeL5AyhkYV8i59U5AR6csBvApHHNl/vI1Bx" crossorigin="anonymous"> <body style="width:70%;margin:0 auto"> <div style="height:5%"></div> <input name=txt[] placeholder='titulo do artigo' required> <input name=txt[] placeholder='descricao'required onchange=ver()><br> <input name=txt[] placeholder='linha1' onchange=ver()> <input name=txt[] placeholder='linha1' onchange=ver()><br> <input name=txt[] placeholder='linha2' onchange=ver()> <input name=txt[] placeholder='linha2' onchange=ver()><br> <input name=txt[] placeholder='descricao' onchange=ver()> <input name=txt[] placeholder='extra' onchange=ver()> <div id=divTitulo style=font-size:16pt;font-weight:bold;padding:10px;font-family:Roboto></div> <div id=divDescricao style=font-size:12pt;padding:10px;font-family:Roboto></div> <div id=divTabela> <table class='table table-striped' width=100% border=1 cellspacing=0 cellpadding=0 style=font-family:Roboto,sans-serif> <tbody> </div>
  21. O problema está na linha 41. Onde está <?, o correto é <?php, acredito que o <? dá a possibilidade de você executar apenas um comando em PHP, e como você usou mais de um comando, o PHP ficou procurando o fim do arquivo do comando anterior. Não consegui testar o seu código, pois eu não tenho a extensão MySQL no PHP, e nem o arquivo mysql.php, onde suponho que tem mais informações sobre a classe $db.
  22. Não consegui testar esse código, pois ele precisa do módulo phpMQTT.php. O módulo eu achei em phpMQTT/phpMQTT.php at master · bluerhinos/phpMQTT · GitHub, o problema é que ele conecta máquinas, e aqui eu só tenho uma máquina.
  23. Eu tive que fazer várias modificações para testar esse código. O mais problemático foi esse daqui: function abreLink($descricao) { $query = mysqli_query($link, "SELECT * FROM links WHERE descricao='$descricao'"); while ($row = mysqli_fetch_array($query, MYSQLI_ASSOC)) {$url = $row['link'];} return $url;} a variável $url da última linha não tem nenhum valor a variável $url da penúltima linha pode receber vários valores, vai prevalecer a última. a variável $link não tem nenhum valor Esse é o famoso capítulo da visibilidade da variável, eu levei 20 anos para entender o problema. O fato da variável estar definida dentro de um mesmo módulo não quer dizer que todo mundo consegue enxergá-la. Outro problema que eu não consegui resolver foi o mysqli_fetch_array( ), eu não consegui usar. O conceito de visibilidade é importante para administrar qualquer tipo de linguagem (HTML, JavaScript, CSS, PHP, Laravel) e mais ainda no Detran (eles não vão liberar o seu CNH se você não dominar a visibilidade). A seguir o código que eu usei para testar: <?php class Funcoes { public $servidor = 'localhost'; public $usuario ='root'; //'meu_user'; public $senha = ''; // 'minha_senha'; public $bd = 'astudy'; //'meu_bd'; public function cnx() { $link = mysqli_connect($this->servidor, $this->usuario, $this->senha, $this->bd); return $link;}} // echo $_SERVER['DOCUMENT_ROOT']."/wamp64/www/astudy/menu.php"; $obj = new Funcoes(); $link = $obj->cnx(); function abreLink($link,$descricao){ $query = mysqli_query($link, "select * from tblinks where descricao='$descricao'"); $urls = $query->fetch_array(MYSQLI_ASSOC); return var_dump($urls);} $teste=abreLink($link,"beterraba");
  24. Eu fiz algumas modificações no código original para testar aqui. Acrescentei o campo acess_level na tbusuarios como integer, mas na hora do código resgatar a informação na variável $acesso, ele acabou se transformando numa string. E assim, o código if($nivel==1){echo "você vai para dashboard";} não funcionou. Tive que corrigir assim: if($nivel=='1'). astudy.php <?php session_start(); $conexao=new mysqli("localhost","root","","astudy"); //include('conexao.php'); $_POST['usuario']="teste"; $_POST['senha']="1234"; if(empty($_POST['usuario']) || empty($_POST['senha'])) { header('Location: login.php'); exit();} $usuario = mysqli_real_escape_string($conexao, $_POST['usuario']); $senha = mysqli_real_escape_string($conexao, $_POST['senha']); $query = "select usuario, acess_level from tbusuarios where usuario='$usuario' and senha=md5($senha)"; $result = mysqli_query($conexao, $query); $row = mysqli_num_rows($result); if($row == 0) { $_SESSION['nao_autenticado'] = true; header('Location: ERROR.php');exit;} $nivel=$result->fetch_assoc()['acess_level']; if($nivel=="1"){echo "você vai para dashboard";exit;} //{header('location:dashboard.php');} echo "você vai para index"; //header("location:index.php");
×
×
  • Criar Novo...