Ir para conteúdo

Omar~

Members
  • Total de itens

    1325
  • Registro em

  • Última visita

  • Dias vencidos

    15

Tudo que Omar~ postou

  1. Omar~

    zipar arquivo ao fazer upload

    Use uma classe nativa do php a ZipArchive Você nem precisa mover os arquivos com move_uploaded_file <?php /* Verificar antes se exitem arquivos Verifificar a integridade dos arquivos */ $nome_e_diretorio_do_arquivo_zip = 'pasta/qualquer_nome.zip'; $zip = new ZipArchive(); if ($zip->open($nome_e_diretorio_do_arquivo_zip, ZipArchive::CREATE) === true) { for ($controle = 0; $controle < count($arquivo['name']); $controle++) { $zip->addFromString($arquivo['name'][$controle], file_get_contents($arquivo['tmp_name'][$controle])); } $zip->close(); }
  2. Omar~

    Obter dados de único nome MYSQL

    Bom, se eu entendi e o caso for que o status não possa ser"OK". A coisa é meio óbvia: SELECT nome, pedido, status FROM cadastros WHERE status != 'Ok' Todos os dados de nome, pedido, status na tabela cadastros que não tiver com o status definido como Ok serão retornados
  3. Omar~

    Com dificuldade em uma classe

    <?php class MinhaClasse { private $atributo; public function meuMetodo($paramA, $paramB) { $this->atributo = $paramA . ', ' . $paramB; return ([$this->atributo, $paramA, $paramB]); } public function outroMetodo($paramC) { return ([$this->atributo, $paramC]); } } $obj = new MinhaClasse(); $a = $obj->meuMetodo('Bom dia', 'Boa tarde'); $b = $obj->outroMetodo('Boa Noite'); echo "<pre>"; var_dump($a, $b); echo "</pre><hr />"; function MinhaFuncao($paramA, $paramB) { return ([$paramA, $paramB]); } echo "<pre>"; var_dump(MinhaFuncao('Olá', 'Mundo')); echo "</pre>";
  4. Omar~

    Pegar ultimo id inserido e cadastrar em uma outra tabela

    lastInsertId é um método da classe PDO portanto basta que apenas use o objeto PDO para chamar o método logo depois de mandar executar a query. Exemplo $objetoPdo = new PDO( ... bla... bla... bla $conexao = $objetoPdo->prepare( ... bla... bla... bla $conexao->execute( ... bla... bla... bla if ($conexao->rowCount()) { $ultimoID = $objetoPdo->lastInsertId(); }
  5. Omar~

    Variável dinamica

    Mas então explique o objetivo a se obtido, variáveis não se altera dentro de um escopo global. O laço de loop for (para enquanto...) podemos reescrever a mesma varável e usar-la de forma diferente dentro do próprio loop, mas daí tem que saber o que se é para fazer.
  6. Omar~

    Com dificuldade em uma classe

    Envie os dados que precisa por parâmetro para o método. Se precisar reaproveitar eles em outros métodos use atributos... Se não precisar reaproveitar use funções ao invés de classes
  7. Omar~

    Variável dinamica

    Dinâmica como? Não ficou claro o resultado que você espera.... Seria algo como isso, nesse caso usamos uma array para criar um índice a cada volta: <?php $exemplo = []; for ($dia = 0; $dia < 7; $dia++) { $exemplo[$dia] = $resultadoBD->horario_$dia } echo '<pre>'; var_dump($exemplo);
  8. Omar~

    Melhorar desempenho do site

    O problema da lentidão está na "segunda"; melhor nas várias outras vezes que o código faz consulta, é loop dentro de loop fazendo consulta... Faça as querys separadas do e dentro do loop compare os dados. Para falar a verdade ambas querys são as mesmas e não há necessidade de re-executar a mesma coisa, ainda mais ficar fazendo querys dentro de loop Quanto mais voltas o loop faz mais querys são lançadas, mais custoso é para o servidor processar, menos desempenho você tem. Vejamos um exemplo que com uma única query você pode criar diferentes arrays para cada situação: <?php $ENG_REL_EPIS = [ /* Simulando um resultado da query "ORDER BY DATA ASC" */ ['NOME' => 'Bruno', 'to_date' => '2021-06-05'], ['NOME' => 'Carlos', 'to_date' => '2021-06-06'], ['NOME' => 'André', 'to_date' => '2021-06-07'], ]; echo '<pre>'; var_dump($ENG_REL_EPIS); /* Resultado da consulta ordenada por DATA */ echo '</pre>'; $emNome = []; foreach ($ENG_REL_EPIS as $nome) { foreach ($nome as $chave => $value) { if (!isset($emNome[$chave])) { $emNome[$chave] = []; } $emNome[$chave][] = $chave; } } array_multisort($emNome['NOME'], SORT_DESC, $ENG_REL_EPIS); echo '<hr /><pre>'; var_dump($ENG_REL_EPIS); /* 1 query e os mesmos resultado da consulta ordenados por NOME */ echo '</pre>';
  9. Algo simples, um ouvinte de eventos no seletor e pronto. Mas devo ressaltar que ao inserir o valor em um input text não é o ideal, pois o usuário "seleciona laranja depois vai ao input e escreve limão" removendo a lógica da questão. Nesse contexto o input pode ser oculto e ao invés de só inserir o valor no input manipulamos outro elemento "não editável" para informar o valor selecionado. <select name="qualquer_coisa" id="seletor"> <option value="">Selecione uma opção</option> <option value="1">Opção A</option> <option value="2">Opção B</option> <option value="3">Opção C</option> </select> <input type="hidden" name="outra_coisa" id="caixa_de_texto" /> <div></div> <!-- Use o CSS para personalizar esse divisor para que ele se pareça com um input-type-text --> <script> var seletor = document.getElementById('seletor'); var texto = document.getElementById('caixa_de_texto'); function alterarInput(evento) { var alvo = evento.target; var divTexto = texto.nextElementSibling; // O próximo elemento HTML depois do input texto.value = alvo.value; // Alterando o valor do input para o valor selecionado divTexto.innerText = (alvo.value.length ? alvo.value : ''); // Colocando o valor na div } seletor.selectedIndex = 0; // Sempre quando carregar a página o seletor muda para primeira opção seletor.addEventListener('change', alterarInput, false); </script> Questão de string e inteiros. Uma vez como valores de elementos mesmo sendo números na verdade são strings então. Para converter um número em INT com javascript você usa a função parseInt console.log( parseInt('123') ); Para converter um número em INT com o php você usa a nomenclatura (int) <?php $inteiro = (int) '123';
  10. Omar~

    Erro ao passar array de dados

    Malz apenas tinha o upado... https://drive.google.com/file/d/1LJdV04j7wGu-WthcLrlCBOIR35Y1Tq1V/view?usp=sharing
  11. Omar~

    Erro ao passar array de dados

    O que eu vi e percebi que você está tentando fazer, me corrija se eu estiver errado.... Em um arquivo você chama o método home da class Admins esse por sua vez como é herdeira da class Controller usa o método model para incluir outro arquivo de class, até aqui tudo bem (só deixando em destaque o atributo adminModel que está inexistente em ambas classes). Logo em seguida você aciona o método view da class Controller para anexar um arquivo no caso o home.php, e acredito que seja nesse arquivo que você quer acessar os dados carregados pelo método home. Um problema está no método view. Esse método tem por função anexar um arquivo, porém você não pode passar parâmetros seja por include seja por require para esse arquivo, isso não é possível de fazer. Outra questão está na herança como view pertence a classe mãe "Controller" ela não tem acesso a dados de sua filha no caso a class Admins a não ser que você mande esses dados por parâmetro assim como você fez (mesmo que isso perde no conceito de abstração, mas não vem ao caso). Veja que as coisas deram certo nesse exemplo: https://drive.google.com/file/d/1LJdV04j7wGu-WthcLrlCBOIR35Y1Tq1V/view?usp=sharing Acho que seu problema foi que os métodos de suas classes fazem mais do que deviam fazer, em uma classe no geral podemos dizer que um método escreve a letra i e o outro método coloca o pingo nesse i. Dê uma enxugada nos métodos se um olha se o e-mail está correto ele já fez mais do que o necessário deixe a próxima tarefa para outro método até mesmo se use de classes específicas para cada coisa, se uma classe faz leitura no banco não há necessidade dele validar strings etc... Siga esse truque se um método possui mais até 11 linhas é bom se está com até 22 ele está no seu limite, mais que isso aí o método não está trabalhando como se deve. Incluir arquivos usando classes, não que isso seja errado, mas prefiro usar funções para tal finalidade e classes para coisas corriqueiras da aplicação. Abaixo uma função que se por exemplo você faz: $a = new MinhaClasse(); Sem mesmo você incluir o arquivo a função sabe que o código precisa da classe e faz o anexo dela Requer manipulação do diretório no FindClass para correto funcionamento. Ou seja essa função vai até o diretório class/ [ $findDir ] / $class .php
  12. Omar~

    Erro ao passar array de dados

    Faz do seguinte poste todo o código da classe Admins e Controller e como você faz a instância. Pode ser que o problema não seja nesse contexto que estamos tratando e sim outra coisa, nesse caso possuir todo o código pode ajudar a chegar a raiz do problema. Ou simplesmente diga qual o objetivo a alcançar, talvez possamos chegar a um jeito mais fácil porque essa é a questão da orientação a objeto simplificar o complicado.
  13. Omar~

    Erro ao passar array de dados

    De fato você está vendo o atributo é um array, mas não retorna nada porque o array está vazio, você tem que criar antes. Perceba que mandei criar algo antes de usar.... Em resumo o que disse seria public function home() { $this->dados = [ // Ao invés de usar uma variável aqui você usa um atributo 'admins' => $this->adminModel->lerAdmin() ]; /* Não sei o que isso faz, mas se for um redirecionamento você perde todo conteúdo da classe Então isso deveria está em um método diferente onde você só aplicaria um redirecionamento quando realmente for necessário */ $this->view('paginas/admins/home', $this->dados); } Portanto uma vez que o método home for executado você terá algo no atributo dados. Então basta que tenha outro método para retornar o atributo dados. Devemos olhar que as chaves que vão compor o conteúdo serão definidos pelo método lerAdmin, se ele não retornar nada $this->dados será um array com a chave admins que estará vazio.
  14. Omar~

    Erro ao passar array de dados

    Fica complicado dizer qual é o problema pois dizer que o problema é uma coisa, mas na verdade pode ser outra. Os trechos de código apresentados não diz a causa. Assim como os 2 métodos não sabemos se são da mesma classe o que é importante saber. O que podemos então presumir que você está tentando acessar o array $dados no método home. Se você quer acessa basta que $dados seja um atributo e algum método o retorne. <?php class exemplo { private $dados = []; public function criarArray() { $this->dados = ['a' => '1', 'b' => '2', 'c' => '3']; } public function verArray() { return $this->dados; } } $e = new exemplo(); var_dump($e->verArray()); //echo $e->verArray()['a']; // (Seu problema aqui) Não posso ver a chave porque ela ainda não existe echo "<hr />"; $e->criarArray(); var_dump($e->verArray()); echo "<hr />"; var_dump($e->verArray()['a']); echo $e->verArray()['a']; echo $e->verArray()['x']; // Seu erro representado aqui a chave não existe Por fim sempre use a função var_dump para analisar dados ao invés de echo
  15. Omar~

    Loja Virtual V12

    Rapaz isso é tão simples que penso que esse sistema foi desenvolvido por um completo amador. Está ligado ao charset portanto nenhum arquivo adicional irá resolver, o negócio vai ser corrigir a codificação. É algo extremamente fácil de resolver porém requer nem que seja um mínimo de conhecimento técnico. Portanto se você não entende as mínimas sugiro que contrate algum dev para fazer essa correção, o que não é caro mediante a facilidade do trabalho. Mas caso queira você mesmo fazer vejamos algumas soluções possíveis: ** Começando verifique o charset dentro da tag <header> geralmente você vai poder encontrar no arquivo index. Mas em alguns casos a estrutura HTML pode ser gerada por função, métodos ou mesmo inclusões. O negócio vai ser encontrar a tag <meta> que cuida em dizer ao browser qual codificação a página deve ser renderizada. A tag na melhor alternativa ficaria <meta charset="UTF-8"> ** Em segunda hipótese seria a própria codificação de arquivos, esse contexto todos os arquivos que compõe a aplicação deve ser verificados. Se você usa linux, abra todos os arquivos com o GEDIT e os salve novamente. mas se sua máquina usa windows use o programa Notepad++ e abra todos os arquivos com ele. Com todos os programas abertos no notepad++ siga esse procedimento em todos os aquivos, clicando em formatar > converter para utf-8 (sem bom) pressione "ctrl + A" com todos caracteres selecionados clique em editar > conversão de linhas > converter para unix. Feche e salve. Esse processo deve ser realizado em tdos arquivos. ** Outra forma seria ir em arquivo a aquivo procurar onde texto são renderizados para o browser e alterar os caracteres acentuados por entidades html exemplo. echo "olá mundo"; sendo o caractere "á" o que vai gerar o erro de codificação echo "ol&acute; mundo"; substituindo o caractere do problema por sua entidade representacional. Ficando apresentado no html olá mundo echo htmlentities("olá mundo"); resolvendo de forma mais bruta usando uma função do PHP pra fazer essa conversão para entidade representacional.. Ficando apresentado no html olá mundo Depois de realizado um ou mais desses processos é só hospedar esses arquivos no lugar dos outros (Não se esqueça de testar antes em um servidor local, e fazer o backup dos que estão em nuvem)
  16. Omar~

    Até onde posso confiar na classe finfo

    Boas?! Como o próprio título diz posso realmente confiar em obter o mime-type do arquivo através da classe finfo? Ao logo dos anos sempre para uploads de arquivos para o servidor, como os sistemas que eu desenvolvi um upload só podia ser realizado por um administrador, apenas verificava a extensão do arquivo através da chave "type" na super global $_FILES. Mas sempre soube que não podia confiar em tal. No mais simples podemos enganar a chave "type" criando um arquivo de texto qualquer e salvando com a extensão .JPG se consultamos por exemplo $_FILES['upload']['type'] teremos então o mime-type image/jpg mesmo o arquivo de fato sendo um .TXT (A proposta não se trata só de imagens mas qualquer tipo de arquivo, apenas usei uma imagem para exemplificar) Mas usando a classe finfo essa obtive o correto modelo de arquivo. <?php $finfo = new finfo(FILEINFO_MIME); $mimeType = $finfo->file($_FILES['upload']['tmp_name']); echo "<pre>"; var_dump( substr($mimeType, 0, strpos($mimeType, ';')), $_FILES['upload']['type'] ); Mas seria possível enganar o método? Obs.: Se houver como não poste código nesse contexto, apenas quero saber de possíveis vulnerabilidades dessa classe nativa que até então nunca utilizei.
  17. Devemos ressaltar que esse erro é porque alguma coisa já foi para o browser e agora você tentar enviar algum cabeçalho. É comum isso acontecer devido a função include um arquivo enviou e você inclui outro que mexe em alo a respeito cabeçalho http e então tem esse erro gerado. Como o matheus disse isso ocorre na maioria dos casos por causa de "qualquer tipo de caractere antes a abertura da tag do PHP". Entenda que um arquivo incluído é como se fosse mesmo arquivo que executou a função include. Se qualquer arquivo antecessor possui um caractere antes de <?php ou fechamento de ?> + algum caractere se der include em outro arquivo saiba que o cabeçalho já foi enviado. Uma forma também de descobrir esses tipos de caracteres é através de ferramentas próprias, uma delas é o NetBeans IDE ou PhpStorm que podem identificar qualquer tipo de caractere mesmo aqueles que são invisíveis para o windows. Um péssimo editor de código que é muito popular é o "Visual Studio Code" esse é mestre em criar anomalias em arquivos. Vale também lembrar que se você manda algo para o cabeçalho você não pode mandar outra coisa (O que possivelmente não é seu caso como já mencionado). A solução para re-envio é armazenar o buffer de saída ao qual só vai entregar o cabeçalho quando tudo estiver pronto usando o ob_start para esse armazenamento. Der uma lida nesse ARTIGO para mais detalhes.
  18. Omar~

    Até onde posso confiar na classe finfo

    Blz @Matheus Tavares Gostei de certos pontos que você citou, como varrer o binário do arquivo em busca de códigos, mas penso que isso poderia custar muito em desempenho e sacrificar a usabilidade. Sobre usar um diretório reconfigurando o apache com htaccess para não processar PHP (Dessa eu não sabia que era possível ^^) Mas o fato que mais me predeu atenção é salvar os arquivos em outro servidor. Quanto ao caso de nome do arquivo, imagem em geral até mesmo sua extensão isso é "LEI ter de se fazer" então sempre apliquei essas condutas, no caso de imagem ou sempre a recrio "até mesmo para fazer a correção da orientação" consigo me livrar de códigos maliciosos na mesma. A questão do mime-type era justamente o que fazer com o arquivo que o usuário enviar, sem que ele possa enganar dizendo que um arquivo é uma coisa quando na verdade é outra. Na aplicação aqui o usuário pode enviar "qualquer coisa". Se for imagem > recrio ela e salvo Se for arquivo comprimido (zip/7z/bz/ra) > Salvo o mesmo sem fazer verificações apenas altero seu nome quando salvo "Acredito eu que não seja possível embutir código nesse tipo de arquivo". Talvez esse seja o ponto que eu esteja pecando na vulnerabilidade. Se for qualquer outro tipo > estou compactando com ZipArchive uma vez que isso é gerado pelo meu código e apenas pego o conteúdo temporário e insiro dentro do arquivo ZIP criado, acredito que não há problemas. Como você mesmo disse... Minha preocupação não está com o usuário fazer download de um suposto arquivo contaminado (mesmo que deveria) e sim na segurança da aplicação. Pois em meu testes justamente enviei um arquivo para quebrar meu código PHP disfarçado de outro tipo de arquivo o que deu certo, e como dessa vez a aplicação que estou a fazer vai poder receber arquivos até do "zé da silva" me fez prender a atenção sobre a integridade do código nesse requisito... Mesmo porque sou paranoico-e-meio-tanto com segurança. A questão mesmo era confiar na classe, a qual é a primeira vez que uso, então passei o dia todo rodando a internet em busca de experiências com a mesma. Até porque a documentação do PHP é muito branda sobre essa classe.
  19. Omar~

    Manter o usuário logado

    Bom, a minha questão lá de usar um hash foi apenas para não usar coluna id do usuário eu sim uma string contendo números e letras aleatória única para cada usuário, dessa forma futuramente posso usar o coluna ID no backend sem que um usuário jamais saiba o id de outro usuario, assim evitando falsificação de dados. Então eu gero um hash só para cada usuário que uso no logar do seu ID para composição de dados no HTML. Aí você estaria criando o token do login se recriar toda a vez, pode ser útil usando em cookie para uma autentificação de dois ou três fatores. Vamos supor que o usuário A logou em um determinado IP`usando um sansung galaxy o token foi gerado como cookie e você registrou esse cookie e os dados no banco, se usuário B tentar roubar esse cookie e querer falsificar o login do usuário A, no entanto ele está vamos supor em um AMD Linux-Ubuntu além do IP incompatível logo você não deixa logar. Então nesse caso não importa o roubo de cookies não importa a falsificação dos cookies, a única forma de usuário B entrar com o login de usuário A é através de seus dados de acesso como e-mail e senha. A unica forma de gerar algo igual é 2 códigos serem processados na mesma fração de segundo, e nenhum servidor que eu saiba faz 2 coisas simultâneas, então eu acho seguro sim.
  20. Omar~

    Salvar dados na tabela com JAVASCRIPT

    Aqui eu estou supondo que haja apenas uma postagem ou várias a avaliar por página. Se for várias apenas os form's devem ser gerados dentro de um loop das postagens. Vou resumir, apesar de ser algo bem simples requer algumas manipulações do front para termos a coisa dinâmica, mas nada complicado. <?php $postID = 99; ?> <form method="post" action="" id="ajax_form_<?= $postID ?>"> <input type="hidden" name="alvo_da_postagem" value="<?= $postID ?>" /> <input type="text" name="avaliar" value="" /> <!-- Mude para type="hidden" está como text para você testar aí --> <a data-value="1" class="voto">Sim</a> <a data-value="2" class="voto">Não</a> </form> <script> var botoes = document.getElementsByClassName('voto'); // Obtenho os botões de avaliação if (typeof botoes !== 'undefined' && botoes !== null) { // Depois eu digo o porque disso for (var i = 0; i < botoes.length; i++) { botoes[i].addEventListener('click', salvarForm, false); // Adiciono evento click a cada botão } } function salvarForm(e) { var alvo = e.target; // Obtenho o correto botão clicado var pai = alvo.parentNode; // Obtenho o elemento pai é o form "alvo.parentNode" /* O primeiro elemento filho é um input que irá identificar o id da postagem "children[0]" Encontro o input para adicionar o valor da avaliação que é o segundo filho "children[1]" Então nesse filho que é o que tenho de manipular adiciono o valor do atributo data do botão clicado */ pai.children[1].value = alvo.dataset.value; /* AQUI então você salva o form por ajax Caso precise identificar o id do formulário lembre-se que já o encontramos então caso precise o "pai.id" será o mesmo valor que o foi renderizado no HTML id="ajax_form_<?= $postID ?>" */ } </script> Então no arquivo que vai receber os dados do form você terá o $_POST['alvo_da_postagem'] >>>> Que é o id da postagem para avaliar $_POST['avaliar'] >>>> Que é data-value clicado pelo usuário Nesse mesmo arquivo ao salvar a avaliação poderemos manipular o HTML Como o #ID do form está assim ajax_form_<?= $postID ?> e $_POST['alvo_da_postagem'] será o mesmo que $postID então podemos chegar ao formulário para manipular qualquer um de seus elementos filhos no caso remover o ouvinte de eventos click do botão clicado Assim sendo não podendo clicar novamente no mesmo ou em ambos, sei lá como vai querer fazer... document.getElementById('ajax_form_<?= $_POST['alvo_da_postagem'] ?>') Ao caso do usuário recarregar a página fechar e reabrir a página sempre estará disponível os botões de avaliação. Por isso a importância de também haver registro de qual postagem aquele usuário postou Aqui eu estarei apenas usando a própria tabela que você apresentou, mas poderá criar outra apenas para essa finalidade de checagem CREATE TABLE `avali_comentario` ( `id` int(11) NOT NULL AUTO_INCREMENT, `comentario_id` int(11) NOT NULL, `usuario_id` int(11) NOT NULL DEFAULT '1' COMMENT 'ID do usuario que avaliou', `up` int(11) NOT NULL, `down` int(11) NOT NULL, PRIMARY KEY (`id`) ) ENGINE=MyISAM DEFAULT CHARSET=latin1; Nesse meu caso é só checar se o usuário já fez sua avaliação no post que se segue: SELECT comentario_id, usuario_id FROM avali_comentario WHERE comentario_id = '$ID_DO_COMENTARIO' AND usuario_id = '$ID_DO_USUARIO' Se por exemplo essa query retornar algum valor podemos apenas escrever o html sem executar a função dos botões <?php $retornoDaQuery = true; /* Supondo que o usuario já votou porque a query retornou algum valor */ ?> <a <?= ($retornoDaQuery ? 'data-value="1" class="voto"' : null) ?>>Sim</a> <a <?= ($retornoDaQuery ? 'data-value="2" class="voto"' : null) ?>>Não</a> Assim sendo se os botões não tem as propriedades necessárias o voto não acontece ou até mesmo poderíamos colocar um IF se sim nem escreveríamos o html deles. Por isso a identificação da existência pelo typeof antes de adicionar ouvintes nos botões se eles não existirem vai gerar erro de console.
  21. Omar~

    Salvar dados na tabela com JAVASCRIPT

    Tem sim (pelo ip físico da máquina do usuário dizem que tem como obter o DNS também, mas não sei como). Há uma possibilidade de erro (duplicar o mesmo), mas se colocar-mos IP + dados da máquina + sistema operacional você terá uma margem bem alta de precisão, pode acontecer de duplicar, mas seria extremamente raro. Veja essa classe com ela você pode obter o IP o SO e até o browser que o usuário esteja usando. No entanto de qualquer forma terá que registrar em algum lugar no servidor, seja um banco de dados, um XML JSON, TXT etc... Não importa tem que registrar em algum lugar para saber se o usuário já fez a sua avaliação.
  22. Omar~

    Salvar dados na tabela com JAVASCRIPT

    Use AJAX para carregar um arquivo que irá registrar a avaliação. Nesse arquivo não use redirecionamento. Ao clicar no botão pode enviar a informação do que foi clicado por protocolo GET ou POST, tanto faz o que conta mesmo é como esse dado será tratado no back-end. Só um detalhe usar um cookie pode não ser o mais ideal, uma vez que o usuário pode está com cookies bloqueados no browser o mesmo limpar o cache ele vai poder avaliar novamente. Sugiro uma tabela para registrar o que o usuário já avaliou. Mas caso não seja um problema o usuário poder avaliar diversas vezes a mesma coisa, desconsidere....
  23. Omar~

    Manter o usuário logado

    Que nada cara é cedo para desistir... Ao logar você cria a session e o cokkie Caso ele entre novamente, checa se o cookie existe e a session não Se entramos nessa condicional chamamos o método checarAcesso Se ele retornar verdadeiro, criamos a sessão e pronto o usuário estará logado Veja esse meu projeto como eu aplico essa questão de forma bem simples https://github.com/Spell-Master/source-map/blob/master/modules/actions/user/login_v.php#L66 https://github.com/Spell-Master/source-map/blob/master/system/class/helper/SmUser.php#L30 https://github.com/Spell-Master/source-map/blob/master/index.php#L21
  24. Omar~

    Manter o usuário logado

    Bem, eu desconheço uma forma de herdar um objeto de uma classe para ser usado em um método estático. Para falar a verdade nunca nem vi a necessidade. Já o contrário é muito comum de se ver.... Se fosse comigo e fosse uma necessidade indispensável eu optaria por abandonar a herança e apenas criar um objeto para a classe mãe instanciando quando necessário. Mais ou menos nesse conceito: Em todo caso se a confusão chegasse a esse ponto com certeza eu estaria revendo a arquitetura das classes para não está fugindo da ideia de orientação a objeto.
  25. Omar~

    Manter o usuário logado

    Isso depende de projeto para projeto... Depende de quais dados significam um usuário logado dentro de uma sessão No genérico vamos supor que o usuário logou.... Então além da session eu registro um cookie (esse permanece salvo nos arquivos temporários do browser que ele esteja usando) Então existe ambos "usuário logado"... Se ele fechar o browser a session some mas o cookie permanece. O "pulo do gato" seria no caso comparar se o cookie existe e a sessão não. Se o cookie existir e a session não é que o o usuário deve permanecer logado logo então no cookie devo armazenar alguma informação que identifique esse usuário. Vejamos (isso seria feito antes de tudo digamos no index.php): <?php if (isset($_COOKIE['usuario']) && !isset($_SESSION['usuario'])) { // Aqui você faz a coisa acontecer } Nesse caso o cookie "usuario" existe e a session não, ou seja eu tenho a informação do cookie então vamos supor que eu busque esse usuário no banco de dados e defina sua session com essa informação contida no cookie. Como isso é realizado antes de tudo, ao usuário acessar automaticamente será logado, suas informações carregadas o restante do código... "como vem depois" simplesmente identifica o usuário. Mas tenha cuidado um cookie até mesmo uma session são salvas na máquina do usuário. Por exemplo "como 99% usam uma coluna ID no bando" se o administrador do sistema é (id 1) e através dessa informação esse usuário tem acesso a tudo (só estou exemplificando).... Nada impede que alguém mau intencionado crie uma session ou um cookie em sua máquina com essa informação.... Assim logando automaticamente quando acessar como se fosse o administrador. Mas daí entramos no caso de autentificação de 2...3...4...5... fatores e por aí vai e isso é outra conversa.
×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.