-
Posts
14.206 -
Cadastrado em
-
Última visita
Tópicos solucionados
-
O post de DiF em Alterar css elemento com jquery foi marcado como solução
@Fertiin Olá. seja primeiramente bem vindo em nosso Clube do Hardware.
Basicamente, você está usando um psudo-elemento que não serve para testar um campo vazio.
Faria desta forma: http://jsfiddle.net/dife/7jkxen2m/12/
$("#cadastrar").on("click", function(){ if( $('#nome').val().length === 0 ) { $("#nome").addClass("borda"); }else{ alert($("#nome").val()); } }); Desconsidera o bloco de ELSE. Só coloquei para exemplo mesmo.
Vai ser um problema se você tiver vários campos.. não é legal fazer um if para cada um... Nesse caso teria que generalizar usando o $(this) quando perde o foco.
-
O post de DiF em Como armazenar um SESSION por limk foi marcado como solução
@Matheus Evandro Rech Mas então, não precisa de session para isso!!!
O lance é que você está fazendo uma busca por ID interno, o usuário comum não tem acesso ao banco de dados, então ele não sabe que o produto id 1 é X ou produto id 2 é Y.
Como você disse anteriormente, tem uma página que mostra os produtos com seus devidos links, outra para o produto em si.
No caso, para saber qual produto foi clicado, basta passar o ID do produto por parâmetro no link.
A sua query pode ser assim:
$query = "SELECT * FROM produtos WHERE produto LIKE '%$produto%' ORDER by ID DESC LIMIT 4"; onde o $produto seria uma variável que recebe o conteúdo de um campo input de pesquisa.
Na linha do link que está dentro do while você deve passar o ID do produto por parâmetro assim:
echo"<a href='produtos.php?produto=$id'>"; A palavra produto depois de php? é a palavra chave, onde na página produtos.php irá receber com
$id = $_GET["produto"] Então, aí sim, fazer a busca dos dados do produto a partir do ID que veio do link passado por parâmetro.
Sugiro muito que você não utilize a session para isso... porque senão, depois você vai ter que destruí-las por logout, e como você já deve imaginar(ou não?!) que a maioria dos usuários não usam o logout, simplesmente fecham o site.. então se não fazem o logout, as variáveis de sessão não serão destruídas...
O melhor jeito de fazer as pesquisas é por parâmetro como indiquei a cima... salvo, que você pode usar a session, somente se você estiver planejando fazer ofertas relacionadas, por exemplo o que o mercado livre faz em qualquer anuncio em sites.
Por exemplo, se você pesquisa por SSD no mercado livre, em qualquer páginas que contenha anuncio do mercado livre, irá mostras somente ofertas de SSD. Isso acontece porque há um sistema de recomendação por produtos relacionados. Aí sim a session é importante, para captar os gostos do usuário e mostrar aquilo que interessa a ele.
Creio que na situação atual do seu código não seja isso.. por isso eu sugeri que não use a session!
-
O post de DiF em Capturar comando de download em site foi marcado como solução
@Jimmy 2 Olá
Então, o dropbox não é um hospedador de imagens. É um espaço para backups e outras coisas. Com ele você, um usuário pode baixar a imagem diretamente para a conta do dropbox dele e/ou baixar para seu pc.
Contudo ele não serve para o propósito que você quer.
Sugiro altamente que use um serviço de hospedagem, como no caso o imgur. Eu recomendo este site do imgur ele é confiável.
Uso ele a anos e inclusive aqui no fórum, para que você ponha uma imagem por URL tem que usar o botão "inserir outra mídia" e depois escolher a opção "inserir imagem a partir de uma URL"
Como nas imagens abaixo:
Se usar o imgur como recomendado, ao enviar a imagem para o site, você pode pegar a URL dele assim:
Passar mouse em cima da imagem, quando aparecer um menuzinho com uma seta, passe o mouse, que vai aparecer umas opções. Lá você escolhe "GET shared links". Clicando nesse, vai abrir 4 opções com links. No caso você só precisa copiar o link do "BBCode (Forums)"
Nesse site, eles já colocam a tag para fóruns... porém aqui no Clube do Hardware, não precisa da tag, basta colar o link da imagem.
Atente-se de que tem que ser o link do BBCode (Forums) que é direto.
-
O post de DiF em Processador pode travar o bf1? foi marcado como solução
Como já falaram, o processador leva na boa o jogo, apesar que óvbio que não no máximo do jogo.
Mas se você é daqueles que não se preocupa tanto com gráfico e só quer jogar, basta configurar para que sua configuração atinja o desempenho máximo que ela suporta. Vai ter que ser na base de testes até achar a ideal.
Infelizmente sua placa de video pode não oferecer tantas opções assim.
Devo lembrar que é proibido a venda de contas. Seja da Origin, Steam ou qualquer outra plataforma. Isso pode implicar no bloqueio permanente da conta e todos os jogos contidos nela.. aí quem vai se dar mal é o comprador e você também, o titular da conta.
Por isso não venda. é proibido.
-
O post de DiF em Criar programas com "interface" foi marcado como solução
@Augusto Megres Olá,
Com a linguagem C, você não vai conseguir criar interface gráfica (GUI) .
É necessário o C++.
Você pode ver um exemplo aqui: https://msdn.microsoft.com/pt-br/library/bb384843.aspx
Não é ultrapassado, é bastante usada ainda, porém para o seu objetivo que é interface gráfica, tem que ser o C++ que usa orientação a objetos.
Se você já programa e tem noções do C, pode ir para o C++
Isso depende da IDE usada. O visual studio acho que oferece isso também( não posso dizer com certeza)
O Netbeans tem suporte, o Eclipse for C++ tem suporte além de outras IDEs.
-
O post de DiF em Como armazenar vários dados do mesmo tipo no banco de dados com PHP? foi marcado como solução
@BlackM00n_ Olá.
O melhor jeito de resolver esse problema é modelar seu banco de dados para que siga as normalizações do banco de dados.
Vai resolver ele usando a terceira norma formal.
Com base nisso, crie uma tabela chamada "especialidade", onde nela irá conter os seguintes campos:
ID auto incrementado, Nome da especialidade.
Com esta tabela, você vai criar uma tabela N:N fazendo a relação com a tabela espacialidade e a tabela de médicos.
Exemplo visual:
Tabela especialidade:
ID nome 1 Cirurgia geral 2 Dermatologia 3 Endoscopia Tabela medico
ID nome registro email 1 Fulano 38274697234 [email protected] 2 Beltrano 38274697234 [email protected] 3 Ciclano 38274697234 [email protected]
Agora a tabela N:N que podemos chamar de medico_especialidade
ID ID_medico ID_especialidade 1 1 1 2 1 2 3 2 3 4 3 1 5 3 3 Vendo a relação das tabelas podemos afirmar que:
O médico Fulano tem as especialidades de Cirurgia Geral e Dematologia
O médico Beltrano tem apenas a especialidade de Endoscopia
O médico Ciclano tem a especialidade de Cirurgia Geral e Endoscopia.
Para fazer a consulta e retornar os dados necessários faz da seguinte forma:
SELECT medico.nome AS medicos, especialidade.nome AS especialidades FROM medico_especialidade INNER JOIN medico ON medico.ID = medico_especialidade.ID_medico INNER JOIN especialidade ON especialidade.ID = medico_especialidade.ID_especialidade
Lembrando que nesta tabela medico_especialidade, precisa criar os índices(index) de referência para os campos ID_medico e ID_especialidade, pois elas são a chave estrangeira, que farão a ligação com a chave primária das outras tabelas respectivas.
O resultado da consulta acima se bem sucedido ficará assim:
ID medicos especialidades 1 Fulano Cirurgia Geral 2 Fulano Dematologia 3 Beltrano Endoscopia 4 Ciclano Cirurgia Geral 5 Ciclano Endoscopia Agora voltando ao PHP, você pode fazer um array de especialidades baseado em checkbox, multiple select..
Então vai percorrer este array com um foreach e fazer um insert into nas tabelas do médico e do medico_especialidade.
No caso você vai fazer primeiro o insert na tabela de médico e resgatar o ultimo ID inserido, para que seja possível armazenar também na tabela medico_especialidade.
Para resgatar o último ID inserido, usa-se a função mysqli_insert_id()
Exemplo:
//Conexao com o banco de dados $conn = mysqli_connect("host", "usuario","senha","nome_do_BD"); //recebe os dados do formulário $nome = $_POST['nome']; $registro = $_POST['registro']; $email = $_POST['email']; //este aqui recebe um array de elementos. seja por checkbox ou multiple select $espec = $_POST['especialidade']; //insere na tabela medico primeiro $mysqli_query($conn, "INSERT INTO medico(nome, registro, email) VALUES('$nome','$registro','$email')"); //recupera o id do médico $id_medico = mysqli_insert_id($conn); //percorre o array de especialidades e cria um insert into para cada especialidade. foreach($espec as $especialidade): $mysqli_query($conn, "INSERT into medico_especialidade(ID_medico, ID_especialidade) VALUES($id_medico, $especialidade)"); endforeach;
Lembrando que o código acima é só um exemplo, por isso use ele somente para estudar e implementar o seu código.
PS: Não testei nenhum dos códigos.
Boa sorte.
-
O post de DiF em Preciso de sugestões para Placa de Vídeo Nova foi marcado como solução
@zMaThEUsGaMeRz A sua escolha de fonte uma corsair CX 450 é uma boa escolha.
Quanto a placa, eu recomendo pegar a GTX 750Ti direto.
Se possível diria para você ir direto para a série 10, como a GTX 1050 Ti
-
O post de DiF em Formulario de solicitação de orçamento foi marcado como solução
@Bruna Siqueira Infelizmente eu não posso ajudar com o funcionamento do tema do wordpress, pois não tenho conhecimento suficiente para ele.
O que eu apontei foi apenas uma sugestão para você implementar!
O action ali não sei se está certo, porque no caso em especifico, você só está passando o valor do campo qtd_pessoas e nada mais.
Veja que você tem 6 campos para serem enviado e não só o qtd_pessoas.
O action precisa ser assim:
action="recebeDados.php" Este arquivo recebeDados.php é o responsável por receber os dados do formulário. Aí sim você pode fazer o teste.
Ainda ali no if, também vejo que você colocou uma frase solta.. dá errado também.
Use o echo:
if($qtdPessoas == "1 a 50"): echo " O valor é R$100,00"; elseif ($qtdPessoas == "51 a 100"): echo " O valor é R$200,00"; else: //se cair nesse bloco é porque o 100 a 200 pessoas foi escolhido endif Mas não é só isso, você precisa enviar o e-mail para a pessoa certo?
Então de alguma forma você precisa usar uma classe de envio e-mails como phpmailer ou usar a função nativa mail()... por recomendação, indico a classe phpmailer.
Não vou entrar no mérito de explicar essa classe aqui porque senão iria ficar extenso demais.
Mas posso dizer que com ele, você pode criar uma função de enviar o e-mail com o orçamento escolhido..
algo como isso:
function enviaOrcamento($email, $assunto, $orcamento){ //aqui dentro você pode colocar o código do phpmailer } Eai para usar faria desta forma:
if($qtdPessoas == "1 a 50"): $orcamento = " O valor é R$100,00"; $assunto = "Envio do orçamento para até 50 pessoas"; enviaOrcamento($email, $assunto, $orcamento); elseif ($qtdPessoas == "51 a 100"): $orcamento = " O valor é R$200,00"; $assunto = "Envio do orçamento de 51 a 100 pessoas"; enviaOrcamento($email, $assunto, $orcamento); else: $orcamento = " O valor é R$400,00"; $assunto = "Envio do orçamento acima de 100 pessoas"; enviaOrcamento($email, $assunto, $orcamento); endif De qualquer forma, o você não pode enviar os dados para o arquivo do tema!!
-
O post de DiF em Como importar dois aquivos CSS em HTML foi marcado como solução
@Lucas.mateus
Seja bem vindo em nosso Clube do Hardware.
Qual é o erro que está acontecendo?
Basicamente quando você chama assim dois arquivos css, eles são incluídos na página.
Pelo que mostra, os arquivos estão na raiz do servidor.
-
O post de DiF em Erro PHP: mysqli_num_rows() expects parameter 1 to be mysqli_result boolean foi marcado como solução
@Oliveira Cristian Primeiro, o que vejo ali é que há muitas coisas desnecessárias. Muitos ifs.
Eu não entendi a sua lógica em fazer um insert e depois um select com vários ifs ali dentro.
Não achas que é melhor você fazer os testes de campo vazio primeiro e depois testar se o cadastro foi bem sucedido?
Assim você reduz o monte de IF e realmente testa se houve um registro.
Por exemplo, eu faria desta forma:
$mysqli = new mysqli("localhost", "id7209847_root", "usbw123", "id7209847_db_login"); if(empty($nome) OR empty($senha) OR empty($avatar)): echo "<script> alert('Por favor preencha todos os campos... (Usuario, senha e Avatar)'); history.back(-1); </script>"; exit; endif; $testaRegistros = $mysqli->query("SELECT * FROM TB_USUARIO WHERE NM_USUARIO LIKE '$nome' AND R_SENHA LIKE '$senha' AND DS_AVATAR LIKE '$avatar'"); $num = $testaRegistros->num_rows; if($num == 0): $inserir = $mysqli->query("INSERT INTO tb_usuario VALUES (null,'$nome', '$senha', '$avatar')"); if($inserir): header("Location: Chatflix_chat.php"); else: //aqui podes colocar um header para uma página de erro endif; else: //aqui indica que já existe um registro com os nome, senha e avatar. //podes colocar uma mensagem de erro. endif; Basicamente Você recebe os dados do formulário e testa se os campos estão vazios. Se sim, força voltar para a tela anterior com o history.go(-1)
Depois você precisa fazer um select trazendo os dados basedos no que o usuário digitou.
Se não achar nenhum registro, faz o insert. Ali dentro você testa se foi executado. Se sim redireciona com o header senão apresenta mensagem de erro.
Se quando, for feito o teste e achou um registro com base no que o usuário digitou, signifique que já tem um usuário registrado, então apresenta mensagem de erro. Este é o bloco de else do IF que testa o num rows.
Creio que seria isso que você queria fazer.
-
O post de DiF em Porque o minha instrução WHERE não está funcionando? foi marcado como solução
@unknn Olá,
não aparece com o where porque parece estar errado.
Não se usa aspas duplas ou simples no nome do campo.
Ao meu ver o correto seria:
$stmtIDrow1 = 'SELECT * FROM bn_publicacao WHERE entry_type = "post"';
-
O post de DiF em Alterar LAbel de plugin wordpress foi marcado como solução
@Bruna Siqueira Ahh perdão... esqueci de mencionar que o código em jquery tem que ser em uma tag script separado.
Primeiro, importa assim:
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script> Abaixo disso coloca assim:
<script type="text/javascript"> $(document).ready(function(){ $("label[for='rtb-time']").text('Horário'); }); </script> O que deixei de dizer que para o código em jquery funcionar, você precisa indicar que só vai ser executado depois que o dom estiver carregado.
Por isso a importância de:
$(document).ready().
Edit:
Não é nada fácil debugar um código que não é próprio. Inicialmente tentei ver o arquivo de tradução contida na pasta languages. Usei um programa chamado "POedit" que serve para criar e editar traduções de plugins no wordpress.
Para minha surpresa, o campo "time" ali consta como "Horário" E não tempo.
O que me levou a crer que ele estava puxando a palavra de outro lugar.
vasculhando os arquivos linha a linha, encontrei no arquivo Settings.class.php as seguintes linhas:
1) 464
onde diz: 'time_label' => _x('Time', 'Label of to select Time...') Vide a imagem abaixo onde está grifado em amarelo
No caso, se for editar, edite apenas a palavra "Time". Já a palavra time_label deixe em inglês
2) 921
onde diz: 'time' => array( 'title' =>__('Time','restaurant-reservations') Vide a imagem abaixo onde está grifado em amarelo
O mesmo vale para este. Mude apenas a palavra "Time".
Este segundo, pode realmente ser o campo que você deseja mudar porque no comentário da linha 910 indica que são relacionados aos campos de um formulário.
Já aquele trecho que você postou no primeiro post do tópico, eu provavelmente achei em um dos arquivos, mas ele está totalmente em php, ou seja, montando o formulário de forma dinâmica, que pelo que vi puxa os dados que mostrei nestas imagens.
Posso estar completamente enganado... mas se não funcionar alterando as palavras que mostrei nas imagens, experimenta ver se aquele código em jQuery que postei mais acima deste mesmo post #08.
O wordpress, usa bastante o jQuery, então creio que aquele código que postei por último poderia funcionar.
De qualquer forma, tudo que eu falei foi na base do que vi nos códigos. Não tem como eu testar aqui para ver se funciona...
Ah e lembre-se de uma coisa muito importante: Antes de fazer as tais mudanças, sempre faça um backup dos arquivos!
No aguardo.
Att,
Moderador DiF
-
O post de DiF em Como remover ou esconder o link da tag "video"? foi marcado como solução
@showme
Na verdade não. o XMLHttpRequest é uma api para o uso do ajax, ou seja, a requisição assíncrona.
Se quiser ler mais sobre veja este link: https://developer.mozilla.org/pt-BR/docs/Web/API/XMLHTTPRequest
Não tem a ver com o bloqueio ou fragmentação de arquivo.
Não existe uma forma de encryptar um link de um video e rodar no player do html 5 só com linguagem client-side.
O melhor método é o que eu descrevi acima, usando a linguagem de servidor php.
O front-end as vezes depende o back-end para ter o resultado esperado.
De qualquer forma, não recomendo usar o mega.nz para hospedar e rodar seus videos. Pois eles deletam os arquivos com frequência. Se ainda não deletaram, uma hora vão. Por isso recomendo que você contrate um servidor para hospedar seu site e os vídeos. Assim você aumenta o desempenho( não depende de um site de terceiro para rodar os videos) e tem o total controle sobre eles.
Em suma, apenas com front-end provavelmente você não vai conseguir fazer o que quer. Pois o atributo SRC do video necessita de um link. E se inspecionar o elemento, qualquer usuário pode ver o link que está no código. Por isso a necessidade de usar o php para chamar o arquivo encryptado e rodar no player com este link. Obviamente você define uma regra no .htaccess para não acessarem o link mesmo que tentem.
-
O post de DiF em Há como vincular uma imagem para o compartilhamento do link no facebook? foi marcado como solução
@Has Wilson Olá.
O php não possui isso. Mas provavelmente o que você quer tem na própria api do facebook: https://developers.facebook.com/docs/plugins/share-button/
https://developers.facebook.com/docs/sharing/best-practices/
Basicamente se você não tem uma imagem de header para cada "post" que quer compartilhar no facebook, basta definir uma imagem qualquer hospedada no seu servidor.
Exemplo tirado no link acima:
<meta property="og:url" content="https://www.your-domain.com/your-page.html" /> <meta property="og:type" content="website" /> <meta property="og:title" content="Your Website Title" /> <meta property="og:description" content="Your description" /> <meta property="og:image" content="https://www.your-domain.com/path/image.jpg" /> A parte que interessa é: property="og:image"
No content, você define a imagem de capa do seu compartilhamento.
-
O post de DiF em Insert em muitos para muitos foi marcado como solução
@Vengicx7 Basicamente é isso que o colega mencionou acima.
A tabela produto_materiaprima é dependente das outras duas.
Se tiver os relacionamentos e índices feitos corretamente
Você precisa ter já os produtos e as materias primas cadastradas, aí então fazer um insert na tabela produto_materiaprima que vai conter apenas campos chave estrangeira além da primária ser auto incrementada.
Exemplo:
Produto
ID nome_produto 1 Celular
Tabela materia Prima
ID componente 1 Tela led 2 placa fenolite 3 circuito integrado 4 plástico 5 alumínio Tabela roduto_materiaprima
ID ID_produto ID_materia_prima 1 1 1 2 1 2 3 1 3 4 1 4 5 1 5 Perceba que o id produto é o mesmo em todas as linhas. isso significa que o mesmo produto possui as matérias primas que estão cadastradas ali.
Para a consulta, se estiver bem feito, basta fazer um INNER JOIN, entre a tabela produto e matéria prima para pegar o nome do produto e das matérias.
O controle do cadastro, você faz pela linguagem de programação...
-
O post de DiF em Meu Youtube não loga na minha conta foi marcado como solução
@Sr. Neon Acredito que isso possa ser um bug momentâneo.
Acabei de perceber que no meu aparece deslogado, e quanto tento fazer o login volta para a página inicial. Porém se vou no google ou abro o Gmail, está logado. Portanto tudo me leva a concluir que neste exato momento o youtube bugou ou está passando por uma instabilidade.
Achei que era só comigo... mas como aconteceu com você também, presumo que isso é um problema geral.
Só nos resta aguardar.
-
O post de DiF em Como especificar uma class ? foi marcado como solução
@MyNameIsMech Ou você simplesmente pode usar o "this" isso faz referência ao próprio objeto que é criado.
Então por exemplo imagine que você tem 3 elementos DIV, contendo uma estrutura interna, onde cada um tem um texto escondido.
O objetivo é especificar qual dos elementos DIV você quer mostrar certo?
Para isso veja esta estrutura:
<div class="wrap"> <div><a href="#" class="btn">Mostrar/Ocultar</a></div> <div class="box"> <div class="inner-box">Texto escondido!</div> </div> </div> No CSS: você pode usar o display none OU Visibility.
Eu uso o visibility.
.active{ visibility: visible; }
No javascript puro, você provavelmente teria que fazer um laço de for para contar todos os elementos.. e acessar um deles.
Mas no jQuery a sua vida é extremamente melhorada!
Bastante fazer 3 linhas!
$('.wrap a').click(function () { $(this).parent().next().toggleClass('active'); }); Basicamente, o código acima funciona da seguinte maneira:
Ao clicar o elemento <a>, o jquery entende que você quer adicionar uma classe "active" ao elemento parente do próprio elemento instanciado.
Vemos isso ali em: $(this).parent().next() O parent() é referente ao DIV, ou seja, por isso que foi necessário colocar o elemento <a> dentro de um elemento <div>.
O next() é referente a posição do elemento div que você quer mostrar. Como está abaixo é next(). Mas se estivesse acima, seria prev().
O toogleClass() faz com que alterne a classe em algum elemento. Ele coloca ou tira.
Veja o exemplo funcionando online: http://jsfiddle.net/Lq2pw6j7/32/
-
O post de DiF em Insert into em php para cadastro foi marcado como solução
@Glouk
Para fazer esse sistema de login baseado nas permissões, tens que começar projetando seu banco de dados de forma correta.
Por exemplo:
Tabela usuario
id - INT 11 auto increment Chave primária nome - Varchar 250 email - Varchar 250 senha - Varchar 250 <-- nesse campo, podes inserir a senha criptografada pelo php status - INT 11 chave estrangeira
Tabela status
id - INT 11 auto increment Chave primária nome - Varchar 250
Repare que temos ali as duas tabelas "principais" onde uma possui os dados do usuário e outra do status da conta, ou seja , se é desativado, ativado comum ou ativado admin.
Na maneira simples de fazer você só precisa fazer a ligação do relacionamento 1:N do o campo ID, da tabala "status" com o campo "status" da tabela usuário.
Para fazer esse relacionamento, certifique-se de primeiro definir o índice na tabela que vai " comandar " a consulta do sistema. Nesse caso, a tabela é a usuário. Então é nessa tabela que você vai criar o índice, atribuindo o tipo dela como "INDEX" e selecionando o campo status, porque é ele que vai ser a chave estrangeira.
Com o índice feito, o jeito mais prático de criar o relacionamento é pelo modo Designer. Se estiver em português, vai estar como " Desenhador". Vai encontrar essa opção quando clicar no nome do seu banco de dados
Uma dica, para saber se fez certo o relacionamento, vai aparecer a opção de ON CASCADE para update e delete. Esta opção serve para somente apagar um registro, se for apagado em outra tabela o relacionado a este.
Antes de iniciar no php, popule as suas tabelas com alguns dados fictícios só para testar.
Basicamente a instrução SQL que vai fazer seria algo como:
SELECT usuario.id, usuario.nome, usuario.email, usuario.senha, usuario.status, status.nome as nomeStatus FROM usuario INNER JOIN status ON status.id = usuario.status WHERE usuario.id = 1 Lembrando que esse é só a base da instrução.
Isso iria retornar os dados do usuário id um e mostraria também o nome do status da conta e o valor ID do campo.
Por exemplo:
ID nome email senha status nomeStatus 1 Fulano [email protected] 12345 3 Conta ativada, usuario administrador
Veja que temos ali todos os dados que precisamos!
Com isso usamos no php.
Falado de uma maneira simples, você vai usar a condicional switch case para validar o status da conta e redirecionar para a página correta.
<?php session_start(); $email = $_POST["email"]; $senha = $_POST["senha"]; include "conexao.php"; $query = mysqli_query($conexao, "SELECT usuario.id, usuario.nome, usuario.email, usuario.senha, usuario.status FROM usuario INNER JOIN status ON status.id = usuario.status WHERE usuario.email = '$email' AND usuario.senha = '$senha'"); $num = mysqli_num_rows($query); //se zero, é porque ele errou a senha ou o login if ($num == 0): echo "<script> alert('Usuario ou senha Incorreta'); history.go(-1); </script>"; exit; else: $usuario = mysqli_fetch_object($query); switch ($usuario->status): case 1: //armazena na variável o número ID do usuário $idUsuario = $usuario->id; //armazena na sessão o ID do usuário logado $_SESSION["id_usuario"] = $idUsuario; //armazena na sessão o nome do login. //aqui pode ser e-mail, login, nome do usuário e etc. $_SESSION["email"] = $usuario->email; //manda o usuário para a páginas depois de logado header ("Location: conta_desativada.php"); break; case 2: //armazena na variável o número ID do usuário $idUsuario = $usuario->id; //armazena na sessão o ID do usuário logado $_SESSION["id_usuario"] = $idUsuario; //armazena na sessão o nome do login. //aqui pode ser e-mail, login, nome do usuário e etc. $_SESSION["email"] = $usuario->email; //manda o usuário para a páginas depois de logado header ("Location: area_usuario_comum.php"); break; case 3: //armazena na variável o número ID do usuário $idUsuario = $usuario->id; //armazena na sessão o ID do usuário logado $_SESSION["id_usuario"] = $idUsuario; //armazena na sessão o nome do login. //aqui pode ser e-mail, login, nome do usuário e etc. $_SESSION["email"] = $usuario->email; //manda o usuário para a páginas depois de logado header ("Location: area_usuario_administrador.php"); break; endswitch; endif; Por fim, para que o autenticador dê certo e redirecione para as paginas certas ou leva de volta para o login é crucial que você precisa usar este código em cada página na qual é feito o redirecionamento. No exemplo seria conta_desativada.php, area_usuario_comum.php e area_usuario_administrador.php:
<?php session_start(); setcookie("ck_authorized", "true", 0, "/"); /*testa se a sessão tem valor. Refere-se a linha lá no arquivo de login onde é inserido o login na sessão. */ if(!isset($_SESSION["email"])): header("location: index.php"); else: $login = $_SESSION["email"]; endif; ?>
Considerações finais e dicas:
Para o "login" prefira sempre utilizar o email. Porque os usuários não esquecem seus e-mails!
Devo lembrar para não simplesmente copiar ele. Estude para entender.
Repare que no código eu testo com 1, 2 e 3.
Isso porque no banco de dados quando faz o primeiro registro ele automaticamente começa com 1. Então
No caso seria:
1 = Conta desativada
2 = Conta ativada, usuario comum
3 = Conta ativada, usuario administrador
Bem é por aí a coisa. Vai tentando.
Boa sorte.
-
O post de DiF em Enviar formulário sem direcionamento. foi marcado como solução
@Glouk Ok, fiz um teste aqui. Inicialmente pelos códigos presentes aqui não funcionou de primeira. Então debuguei eles e notei os erros simples.
No php, está sendo recebido com
$min = $_POST["min"]; Mas na verdade deveria ser:
$min = $_POST["minuto"]; Outra coisa, que percebi, é que o method, na verdade é "type", me deu um branco hj e postei isso, por isso eu corrijo que é type.
$(document).ready(function(){ $(".atualizar").on("click", function(event){ event.preventDefault(); var dados = $("#meu").serialize(); $.ajax({ url: "receber.php", data: dados, dataType: "html", type: "post" }).done(function(retorno){ alert(retorno); }).fail(function(retorno){ alert(retorno); }); }); }); Basicamente o que eu alterei ali foi é que foi acrescentado o parametro event e a função preventDefault() além do "type" da forma correta.
Depois que fiz as mudanças testei e funcionou corretamente.
Então confirmo que o código agora funciona perfeitamente para alterar os dados.
Sugiro revisar tudo do inicio ao fim.
Por exemplo, no formulário HTML, veja se todos os "names" dos campos select estão certos na parte PHP onde recebe os dados.
Veja se o nome dos campos no banco de dados coincidem com os do formulário...
No else do código php, coloque o
echo mysqli_error($conexao); para ver se mostra alguma mensagem de erro. No meu teste, descobri que eu tinha colocado o nome do campo episodio como "ep" e ai ele dizia que a coluna era inexistente.
Depois que mudei.. bingo. Funcionou muito bem.
Tente de tudo, só assim a gente aprende!
Em último caso, se não funcionar de jeito nenhum, faça um backup do seu banco de dados em formato .SQL. e pegue seus arquivos todos, compacte faça um upload em um site de armazenamento e poste aqui. Aí eu posso testar o seu banco de dados, os seus códigos... e etc..
-
O post de DiF em Recebendo formulario php em html foi marcado como solução
@Glouk Então, a sua ideia é que ao emitir os dados deste formulário, apareça como na imagem acima.
Isso eu entendi.
O maior problema daí é que os dados não são "permanentes", ou seja, quando emitir no botão atualizar, você envia os dado ao arquivo php e resgata em uma variável.
Porém ao fechar a janela os dados serão perdidos. Por isso é necessário um banco de dados.
No caso você pode criar um bem simples por exemplo:
Tabela uma tabela chamada podcasts com a seguinte estrutura:
ID (INT 11 Auto increment Primary Key)
data ( DATETIME)
episodio(INT 11)
A tabela populada ficaria da seguinte forma ao emitir os dados do seu formulário:
ID data episodio 1 2018-07-20 20:30:00 2 Repare que a data já possui a hora. Este campo no banco de dados é o Datetime.
Quando você emitir o formulário, é feito um update set nos campos da tabela, substituindo o valor anterior ou adicionando um, caso ele estejam "vazio".
Não sei qual é a sua ideia sobre os outros episódios, se você pensa em deixar um registro para buscas depois, este jeito não serve. Mas se é só para "atualizar" o seu anuncio, pode ser assim apenas editando os campos.
Ok, Agora que já os dados armazenados, podemos fazer a consulta:
SELECT data, episodio FROM podcasts Como só teria um registro então não precisa especificar clausulas como where.
Os dados que serão retornados no PHP serão:
A data e número do episódio.
Lembrando que a data no banco de dados vem no padrão AAAA-MM-DD H:M:S por isso será necessário extrair as partes da data de da hora para inserir no seu javascript de countdown.
No PHP podes fazer assim:
$busca = mysqli_query($conexao, "SELECT data, episodio FROM podcasts"); $podcast = mysqli_fetch_object($busca); //Coloca a data do banco de dados em formato datetime na variável $data = new DateTime($podcast->data); //extrai as partes da data e da hora $ano = $data->format("Y"); $mes = $data->format("m"); $dia = $data->format("d"); $hora = $data->format("H"); $min = $data->format("i"); Com estas variáveis você coloca no seu javascript:
$('.cd100').countdown100({ /*Set Endtime here*/ /*Endtime must be > current time*/ endtimeYear: <?php echo $ano ?>, endtimeMonth: <?php echo $mes ?>, endtimeDate: <?php echo $dia ?>, endtimeHours: <?php echo $hora ?>, endtimeMinutes: <?php echo $min ?>, endtimeSeconds: 0, timeZone: "America/Sao_Paulo" // ex: timeZone: "America/New_York" //go to " http://momentjs.com/timezone/ " to get timezone }); Devo lembrar que isso só é possível do jeito que mencionei se você cadastrar no banco de dados pelo menos um registro e toda vez que alterar o episódio você faz um update nesta tabela usando o formulário que você criou.
Quanto ao ajax, esta é uma técnica javascript, que permite fazer requisições assíncronas de forma que possa eliminar o famoso "refresh" ou seja, fazer ações sem atualizar a página ou sair dela.
Isso você usaria no formulário, onde não irias mais utilizar o "action", pois isso seria feito via javascript.
Por exemplo:
$(".atualizar").on("click", function(){ var formDados = $(".seuFormulario").serialize(); $.ajax({ url: "recebeDados.php", data: formDados, dataType: "HTML", method: "POST" }).done(function(retorno){ alert(retorno); }).fail(function(retorno){ alert(retorno); }); }); Basicamente estamos dizendo ali que ao clicar no botão "Atualizar", é requisitado o arquivo recebeDados.php e é emitido os valores dos campos do formulário para este arquivo php.
a função done() faz com que possa mostrar uma mensagem quando a requisição foi bem sucedida. Já a função fail() faz o inverso.
E por fim, o arquivo recebeDados.php receberia os dados da seguinte forma para atualizar:
$dia = $_POST["dia"]; $mes = $_POST["mes"]; $ano = $_POST["ano"]; $hora = $_POST["hora"]; $min = $_POST["min"]; $ep = $_POST["ep"]; //inclui a conexão com o BD include "conexao.php"; //Define formato para o banco de dados: AAA-MM-DD H:M:S $dataBanco = date($ano."-".$mes."-".$dia." ".$time3.":".$time4.":"."00"); //faz a atualização $Atualizar = mysqli_query($conexao, "UPDATE podcasts SET data='$dataBanco', episodio='$ep' WHERE id=1"); if($atualizar): echo "O podcast foi atualizado com sucesso!"; else: echo "Algo deu errado :( tente novamente!"; endif; Basicamente, ali estamos dizendo que foi recebido os dados do formulário e guardou cada um em uma variável.
Criamos uma nova variável para concatenar o data para o formato datetime com hora e data juntos.
Depois executa-se a query da atualização e os retornos ali dentro do IF, serão mostrados lá no alert() da função done() ou fail() pela variável "retorno".
Bem é por aí a coisa.
-
O post de DiF em como traduzir site inteiro! foi marcado como solução
@fspjonny
Basicamente você vai criar uma session com o nome "lang" E nesse session será um array de dados, onde cada variável será uma tradução do idioma.
Então você terá um arquivo php, que faz a verificação da sessão de qual idioma foi selecionado e inclui tudo sobre aquele idioma inclusive se tiver arquivos CSS diferentes.
Vou exemplificar com algumas imagens do meu próprio projeto. Não darei os códigos integralmente em alguns deles, mas serve como ponto de partida para você criar o seu próprio sistema!
No seu INDEX você chama o arquivo que contém a verificação primeiro e depois insere as variáveis com o textos no lugares certos veja esta imagem:
Perceba que eu destaquei em amarelo, na primeira linha abrimos a session e damos um require_once no arquivo de funções que eu criei.
Veja mais abaixo que no menu, ao invés de eu ter colocado o texto, coloquei um echo $lang["MENU_HOSTEL"] e assim sucessivamente nos demais.
Agora veja como eu criei o arquivo functions.php que é responsável por testar a sessão de idioma:
Repare que na primeira linha eu defini um header, é somente um FIX para o IE, nos novos navegadores podes omitir isso.
Criei duas funções para carregar arquivos CSS e javascript. Porque eu tinha CSS diferente para cada idioma.
A partir da linha 20 você vê o teste do idioma e session.
Repare que na linha 32, faço um switch case, onde se a pessoa escolher o português, será carregado os textos em português, se ele escolher o inglês, será carregado os textos em inglês e naturalmente o css da parte inglês. Como eu mencionei, neste projeto em específico eu tive que criar um fragmento de CSS para cada idiioma, pois mudavam algumas coisas, então pode ser que você não precise criar estes CSSs, bastando apenas o arquivo php de tradução.
Vou mostrar como fica os arquivos que contem os textos.
Para não ficar muito grande, vou mostrar só em português e em inglês.
Em português:
Agora o mesmo em inglês:
Perceba que as variáveis nos arquivos de tradução são os mesmos, o que muda é o texto!
Por fim, no lugar onde você clica para mudar o idioma o link que você usará é:
index.php?lang=br
index.php?lang=en
index.php?lang=deu
Enfim é por aí a coisa.
-
O post de DiF em Dados incorretos no post do formulário foi marcado como solução
O GET tem a capacidade de 1024 caracteres para ser enviado. OU seja, quando precisa enviar pequena quantidade de informação.
Não há perigo usar o GET para enviar o valor ID do registro na qual quer excluir.
Outra coisa que me dei conta, é que ele tem um campo hidden com o mesmo name para todos. seria óbvio pegar sempre o último. Então nem a minha solução anterior iria funcionar kkkkkkkk
Só vai funcionar por GET OU , se ele colocar um name diferente para cada registro..
-
O post de DiF em problema em resolver um exercicio foi marcado como solução
Caro usuário,
Seja bem-vindo ao Fórum do Clube do Hardware.
No intuito de servir como fonte de pesquisa no caso de instituições de ensino, informamos que incorrer no resolvimento por completo de questões relacionadas a disciplinas escolares de cursos técnicos e faculdades podem ser revistas e removidas pela Equipe de Moderação do Clube do Hardware.
Para sanar dúvidas sobre esse tipo de problema, por gentileza, publique o passo a passo do desenvolvimento da questão, projeto, monografia ou conteúdo em dúvida para que possamos analisar se a resposta está correta ou não, ou para que possa ser auxiliado com a dúvida no desenvolvimento do exercício.
Infelizmente, não há como resolver os trabalhos pelos usuários. O objetivo do Fórum do Clube do Hardware é auxiliar seus usuários a encontrar soluções para que possam sanar suas dúvidas, e não de trazer soluções prontas para seus usuários.. Além disso, copiar e colar respostas que não são de autoria própria do qualquer usuário é considerado plágio, o que é ilegal.
Esperamos que compreenda.
Atenciosamente,
Equipe Clube do Hardware
-
O post de DiF em Usar Include ou IFrame? foi marcado como solução
@fredkissfree
Olá, É como você viu.
Há diversas formas de fazer isso.
Uma é criar o mesmo menu em todas as páginas, outra é criar um arquivo php contendo o menu e usar o include.
Outros criam a estrutura e dentro dela, carrega os conteúdos via javascript com a requisição assíncrona(ajax)
Só use iframes quando houver necessidade de incluir na sua página, uma outra página externa.
Quanto a parte de colocar o site em inglês, você vai usar criar um arquivo php para conter todos os textos da páginas em inglês e usar a session. pois aí na estrutura, você inclui com php a session que tem aquela palavra ou frase.
A partir daí, você pode criar outros arquivos parecidos com outros idiomas.
Para fazer a mudança, você testa com um bloco de Switch case, para cada idioma.
-
O post de DiF em Background vídeo com imagem foi marcado como solução
@fredkissfree Você pode combinar o uso de media querie com o plugin de video background do jQuery.
Pesquisa Google sobre video background
NO caso específico desse site, Pareceu ser um gif de fundo de imagem com uma música em mp3 em loop infinito.
Sobre o Clube do Hardware
No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais
Direitos autorais
Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais