Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

gleidsonb12

Sistema de login com senha criptografara

Recommended Posts

Eu desenvolvi um sistema de login que envia a senha cadastrada no formulário já criptografara em md5, até ai tudo bem, eu consigo enviar os dados corretamente para o banco de dados, inclusive com a senha criptografara, mas o problema é na hora de fazer o login, quando insiro os dados de login, exatamente como foram cadastrados, o sistema não reconhece os caracteres digitados, pq no BD está diferente por conta da criptografia.

 

O código que envia os dados para o BD é o seguinte:

 

<?php

include "_conexao/conexao.php";

if (isset($_POST['nomecompleto'])&&($_POST['endereco'])&&($_POST['telefone'])&&($_POST['postograduacao'])&&($_POST['re'])&&($_POST['nomedeguerra'])&&($_POST['opm'])&&($_POST['senha'])){

    $nomecompleto = $_POST['nomecompleto'];
    $endereco = $_POST['endereco'];
    $telefone = $_POST['telefone'];
    $postograduacao = $_POST['postograduacao'];
    $re = $_POST['re'];
    $nomedeguerra = $_POST['nomedeguerra'];
    $opm = $_POST['opm'];
    $senha = $_POST['senha'];
    $senhacripto = md5($senha);

    $sql = (mysqli_query($conexao, "INSERT INTO cadastro(re,nomecompleto,nomedeguerra,postograduacao,endereco,telefone,unidade,senha) VALUES ('$re','$nomecompleto','$nomedeguerra','$postograduacao','$endereco','$telefone','$opm', '$senhacripto')"));

    echo "<script>
            alert('Cadastro realizado com sucesso!');
            </script>";
}


?>

 

E esse aqui é o da página de validação, que recebe os dados do formulário de login e compara com os dados do BD, mas não está reconhecendo o campo senha:

 

 

<?php
if((isset($_POST['re'])) && (isset($_POST['senha']))) {
    $usuario = mysqli_real_escape_string($conexao, $_POST['re']);
    $senha = mysqli_real_escape_string($conexao, $_POST['senha']);
    $senhacripto = md5($senha);

    $sql = mysqli_query($conexao, "SELECT * FROM cadastro WHERE re = '$usuario' && senha = '$senhacripto' LIMIT 1");
    $row = mysqli_num_rows($sql);

    if ($row > 0) {
        $_SESSION["usuario"] = $_POST["re"];
        $_SESSION["senha"] = $_POST["senha"];
        echo "<script>logado()</script>";
    } else {
        echo "<script>deslogado()</script>";
    }
}
?>

 

Alguma dica de onde estou errando para o sistema não reconhecer a senha do usuário?

 

PS: quando envio a senha sem criptografia o sistema funciona perfeitamente, mas com criptografia dá esse problema.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Talvez a ordem das coisas esteja esquisita, tente assim:

$senha_post = md5($_POST['senha']);
$senha_banco = mysqli_real_escape_string($conexao, $senha_post);

Porque o mysql_real_escape_string pode estar adicionando algo na senha antes do md5(), e fazendo a diferença.

 

Se não for isso, mande como fica no banco de dados e o HTML também.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não deu certo @Kosonome... meus arquivos estão assim:

 

valida.php:

 

<?php
session_start();
include "conexao.php";
?>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title>Logando Usuário</title>
    <script type="text/javascript">
        function logado(){
            window.location='../servicos.php';
        }

        function deslogado(){
            window.location='../index.php';
        }
    </script>
</head>
<body>
<?php
if((isset($_POST['re'])) && (isset($_POST['senha']))) {
    $usuario = mysqli_real_escape_string($conexao, $_POST['re']);
    $senha = mysqli_real_escape_string($conexao, $_POST['senha']);
    $senhacripto = md5($senha);

    $sql = mysqli_query($conexao, "SELECT * FROM cadastro WHERE re = '$usuario' && senha = '$senhacripto' LIMIT 1");
    $row = mysqli_num_rows($sql);

    if ($row > 0) {
        $_SESSION["usuario"] = $_POST["re"];
        $_SESSION["senha"] = $_POST["senha"];
        echo "<script>logado()</script>";
    } else {
        echo "<script>deslogado()</script>";
    }
}
?>
</body>
</html>

 

cadastro.php:

 

 

<?php
session_start();
if(!isset($_SESSION["usuario"]) && !isset($_SESSION["senha"])){
    header("Location: index.php");
    exit;
}
?>

<?php

include "_conexao/conexao.php";

if (isset($_POST['nomecompleto'])&&($_POST['endereco'])&&($_POST['telefone'])&&($_POST['postograduacao'])&&($_POST['re'])&&($_POST['nomedeguerra'])&&($_POST['opm'])&&($_POST['senha'])){

    $nomecompleto = $_POST['nomecompleto'];
    $endereco = $_POST['endereco'];
    $telefone = $_POST['telefone'];
    $postograduacao = $_POST['postograduacao'];
    $re = $_POST['re'];
    $nomedeguerra = $_POST['nomedeguerra'];
    $opm = $_POST['opm'];
    $senha = $_POST['senha'];
    //$senhacripto = md5($senha);

    $sql = (mysqli_query($conexao, "INSERT INTO cadastro(re,nomecompleto,nomedeguerra,postograduacao,endereco,telefone,unidade,senha) VALUES ('$re','$nomecompleto','$nomedeguerra','$postograduacao','$endereco','$telefone','$opm', '$senha')"));

    echo "<script>
            alert('Cadastro realizado com sucesso!');
            </script>";
}


?>

<!DOCTYPE html>
<html lang="pt-br">
<head>
    <meta charset="utf-8">

    <meta name="description" content="Policia Militar do Estado de Rondônia">
    <meta name="keywords" content="policia, militar, rondonia, crp3, crpiii, gleidson benfica fernandes">
    <meta name="author" content="Gleidson Benfica Fernandes">
    <meta name="google" content="notranslate">
    <meta name="reply-to" content="gleidsonb12@gmail.com">

    <title>Coordenadoria Regional de Policiamento III</title>

    <!-- Customizados -->
    <link href="_css/login.css" rel="stylesheet">
    <script src="_js/siga.js"></script>
    <link rel="stylesheet" href="//maxcdn.bootstrapcdn.com/font-awesome/4.3.0/css/font-awesome.min.css">
    <link href="_css/cadastro.css" rel="stylesheet">

    <!-- Bootstrap -->
    <link href="_bootstrap/css/bootstrap.min.css" rel="stylesheet">
    <link href="_bootstrap/css/bootstrap-theme.css" rel="stylesheet">
    <link href="_bootstrap/dist/css/bootstrap-submenu.min.css" rel="stylesheet" >
    <link href="_bootstrap/dist/css/bootstrap-submenu.min.css" rel="stylesheet" >

    <script src="_bootstrap/js/jquery.min.js"></script>
    <script src="_bootstrap/js/bootstrap.min.js"></script>
    <script src="_bootstrap/dist/js/bootstrap-submenu.min.js" defer></script>
    <script src="_bootstrap/js/highlight.min.js" defer></script>
    <script src="_bootstrap/js/bootstrap.js" defer></script>
    <script src="_bootstrap/dist/js/bootstrap-submenu.min.js" defer></script>
    <script src="_bootstrap/dist/js/bootstrap-submenu.js" defer></script>
    <script src="_bootstrap/js/docs.js" defer></script>
    <script src="_bootstrap/js/bootstrap.min.js"></script>

</head>

<body>

<div class="main">

<div id="navbar">
    <nav class="navbar navbar-default navbar-fixed-top" role="navigation">
        <div class="navbar-header">
            <button type="button" class="navbar-toggle" data-toggle="collapse" data-target="#navbar-collapse-1">
                <span class="sr-only"></span>
                <span class="icon-bar"></span>
                <span class="icon-bar"></span>
                <span class="icon-bar"></span>
            </button>
            <a class="navbar-brand" href="#">CRP III</a>
        </div>

        <div class="collapse navbar-collapse" id="navbar-collapse-1">
            <ul class="nav navbar-nav">
                <li><a href="servicos.php">Serviços</a></li>
                <li class="active"><a href="cadastro.php">Cadastro</a></li>
                <li><a href="sair.php">Sair</a></li>
            </ul>
        </div><!-- /.navbar-collapse -->
    </nav>
</div> <!-- fim do menu -->

<form class="form-horizontal" method="post" action="cadastro.php">
    <fieldset>
        <!-- Form Name -->

        <div class="col-md-6 col-md-offset-3">

            <legend>Cadastrar novo usuário</legend>

            <!-- Text input-->
            <div class="col-md-12">
                <input id="nomecompleto" name="nomecompleto" type="text" placeholder="Nome Completo" class="form-control input-md" required>
            </div>

            <!-- Text input-->
            <div class="col-md-8">
                <input id="endereco" name="endereco" type="text" placeholder="Endereço" class="form-control input-md" required>
            </div>

            <!-- Text input-->
            <div class="col-md-4">
                <input id="telefone" name="telefone" type="text" placeholder="Telefone" class="form-control input-md" required>
            </div>

            <!-- Select Basic -->
                <div class="col-md-4">
                    <select id="postograduacao" name="postograduacao" class="form-control" required>
                        <option value="" disabled selected>Posto ou Graduação</option>
                        <option value="CEL PM">CEL PM</option>
                        <option value="TC PM">TC PM</option>
                        <option value="MAJ PM">MAJ PM</option>
                        <option value="CAP PM">CAP PM</option>
                        <option value="1º TEN PM">1º TEN PM</option>
                        <option value="2º TEN PM">2º TEN PM</option>
                        <option value="ASP OF PM">ASP OF PM</option>
                        <option value="SUB TEN PM">SUB TEN PM</option>
                        <option value="1º SGT PM">1º SGT PM</option>
                        <option value="2º SGT PM">2º SGT PM</option>
                        <option value="3º SGT PM">3º SGT PM</option>
                        <option value="AL SGT PM">AL SGT PM</option>
                        <option value="CB PM">CB PM</option>
                        <option value="AL CB PM">AL CB PM</option>
                        <option value="SD PM">SD PM</option>
                    </select>
                </div>

            <!-- Text input-->
                <div class="col-md-4">
                    <input id="re" name="re" type="number" placeholder=" Digite o RE (ex: 01234-5)" class="form-control input-md" required>
                </div>

            <!-- Text input-->
                <div class="col-md-4">
                    <input id="nomedeguerra" name="nomedeguerra" type="text" placeholder="Nome de Guerra" class="form-control input-md" required>
                </div>

            <!-- Select Basic -->
                <div class="col-md-4">
                    <select id="opm" name="opm" class="form-control" required>
                        <option value="3º BPM - Vilhena">3º BPM - Vilhena</option>
                        <option value="PCSv/3º BPM - Vilhena">PCSv/3º BPM - Vilhena</option>
                        <option value="Pel Chq/2º Cia Pol Ost/3º BPM - Vilhena">Pel Chq/2º Cia Pol Ost/3º BPM - Vilhena</option>
                        <option value="Pel Tran/2º Cia Pol Ost/3º BPM - Vilhena">Pel Tran/2º Cia Pol Ost/3º BPM - Vilhena</option>
                        <option value="1ª Cia Pol Ost/3º BPM - Vilhena">1ª Cia Pol Ost/3º BPM - Vilhena</option>
                        <option value="2ª Cia Pol Ost/3º BPM - Vilhena">2ª Cia Pol Ost/3º BPM - Vilhena</option>
                        <option value="3ª Cia PO Fron/3º BPM - Colorado do Oeste">3ª Cia PO Fron/3º BPM - Colorado do Oeste</option>
                        <option value="4ª Cia PO Fron/3º BPM - Cerejeiras">4ª Cia PO Fron/3º BPM - Cerejeiras</option>
                        <option value="1º Gp Pol Ost/1º Pel Pol Ost/3º BPM - Nova Conquista">1º Gp Pol Ost/1º Pel Pol Ost/3º BPM - Nova Conquista</option>
                        <option value="Pel PO Fron/2ª Cia/3º BPM - Chupinguaia">Pel PO Fron/2ª Cia/3º BPM - Chupinguaia</option>
                        <option value="2º Gp PO Fron/Pel PO Fron/2ª Cia Pol Ost/3º BPM - Novo Plano">2º Gp PO Fron/Pel PO Fron/2ª Cia Pol Ost/3º BPM - Novo Plano</option>
                        <option value="3º Gp PO Fron/Pel PO Fron/2ª Cia Pol Ost/3º BPM - Guaporé">3º Gp PO Fron/Pel PO Fron/2ª Cia Pol Ost/3º BPM - Guaporé</option>
                        <option value="4º Gp PO Fron/Pel PO Fron/2ª Cia Pol Ost/3º BPM - Boa Esperança">4º Gp PO Fron/Pel PO Fron/2ª Cia Pol Ost/3º BPM - Boa Esperança</option>
                        <option value="3º Gp PO Fron/3º Pel PO Fron/3ª Cia PO Fron/3º BPM - Cabixi">3º Gp PO Fron/3º Pel PO Fron/3ª Cia PO Fron/3º BPM - Cabixi</option>
                        <option value="2º Gp PO Fron/4º Pel PO Fron/4ª Cia PO Fron/3º BPM - Corumbiara">2º Gp PO Fron/4º Pel PO Fron/4ª Cia PO Fron/3º BPM - Corumbiara</option>
                        <option value="2º Gp PO Fron/3º Pel PO Fron/4ª Cia PO Fron/3º BPM - Pimenteiras">2º Gp PO Fron/3º Pel PO Fron/4ª Cia PO Fron/3º BPM - Pimenteiras</option>
                    </select>
                </div>

            <!-- Text input-->
            <div class="col-md-4">
                <input id="senha" name="senha" type="password" placeholder="Senha" class="form-control input-md">
            </div>

            <!-- Button -->
            <div class="col-md-4">
                <input type="submit" id="enviar" name="enviar" class="btn btn-default" value="Enviar" />
            </div>

        </div> <!-- fim da div offset -->


    </fieldset>
</form>

</body>
</html>

 

index.php:

 

 

<!DOCTYPE html>
<html lang="pt-br">
<head>
    <meta charset="utf-8">

    <meta name="description" content="Policia Militar do Estado de Rondônia">
    <meta name="keywords" content="policia, militar, rondonia, crp3, crpiii, gleidson benfica fernandes">
    <meta name="author" content="Gleidson Benfica Fernandes">
    <meta name="google" content="notranslate">
    <meta name="reply-to" content="gleidsonb12@gmail.com">

    <title>Coordenadoria Regional de Policiamento III</title>

    <!-- Customizados -->
    <link href="_css/login.css" rel="stylesheet">
    <script src="_js/siga.js"></script>
    <link rel="stylesheet" href="//maxcdn.bootstrapcdn.com/font-awesome/4.3.0/css/font-awesome.min.css">

    <!-- Bootstrap -->
    <link href="_bootstrap/css/bootstrap.min.css" rel="stylesheet">
    <link href="_bootstrap/css/bootstrap-theme.css" rel="stylesheet">
    <link href="_bootstrap/dist/css/bootstrap-submenu.min.css" rel="stylesheet" >
    <link href="_bootstrap/dist/css/bootstrap-submenu.min.css" rel="stylesheet" >

    <script src="_bootstrap/js/jquery.min.js"></script>
    <script src="_bootstrap/js/bootstrap.min.js"></script>
    <script src="_bootstrap/dist/js/bootstrap-submenu.min.js" defer></script>
    <script src="_bootstrap/js/highlight.min.js" defer></script>
    <script src="_bootstrap/js/bootstrap.js" defer></script>
    <script src="_bootstrap/dist/js/bootstrap-submenu.min.js" defer></script>
    <script src="_bootstrap/dist/js/bootstrap-submenu.js" defer></script>
    <script src="_bootstrap/js/docs.js" defer></script>
    <script src="_bootstrap/js/bootstrap.min.js"></script>

</head>

<body>

<div>
    <div class="main">

        <div class="container">
            <center>
                <div id="titulo">
                    <h1>S . I . G . A</h1>
                    <h4>Sistema Integrado de Gestão Adminsitrativa da PMRO</h4>
                </div>

                <div class="middle">
                    <div id="login">

                        <form action="_conexao/validar.php" method="POST">

                            <fieldset class="clearfix">

                                <p ><span class="fa fa-user"></span><input type="text"  Placeholder="Usuário" name="re" id="re" required></p> <!-- JS because of IE support; better: placeholder="Username" -->
                                <p><span class="fa fa-lock"></span><input type="password"  Placeholder="Senha" name="senha" id="senha" required></p> <!-- JS because of IE support; better: placeholder="Password" -->

                                <div>
                                    <span style="width:48%; text-align:left; display: inline-block; color:"><a  style="color: #ffffff;" href="" onclick="creditos()">Créditos</a></span>
                                    <span style="width:50%; text-align:right;  display: inline-block;"><input type="submit" value="Entrar"></span>
                                </div>

                            </fieldset>
                            <div class="clearfix"></div>
                        </form>

                        <div class="clearfix"></div>

                    </div> <!-- end login -->

                    <div class="logo"><img src="_img/pmro-brasao-sf.png" style="width: 160px"/>

                        <div class="clearfix"></div>
                    </div>

                </div>
            </center>
        </div>
    </div>
</div>
</body>
</html>

 

Se puderem ajudar a resolver o login com a senha criptografara... agradeço...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Seu código para mim parece que funcionaria, como não causa nenhum erro, você teria que ficar verificando como a $senhacripto está indo para o banco de dados. O jeito mais fácil é adicionando um:

var_dump($senhacripto); exit;

Tente no cadastro.php o código acima para fazer exibir como seria a senha com hash/criptografada. Faça a mesma coisa com o valida.php. Se forem iguais, está meio caminho andado.

 

Você pode tentar fazer exibir seu SQL também. Faça algo tipo isso:

$sql_query = "SELECT * FROM cadastro WHERE re = '$usuario' && senha = '$senhacripto' LIMIT 1";
var_dump($sql_query);
exit;

Com o SQL em mãos, você consegue jogar isso diretamente no banco de dados e ver o resultado. Também pode fazer isto para o cadastro.php na hora do INSERT para ver se está acontecendo algo de errado.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Funcionou @Kosonome, muito obrigado amigo... fiz como você me disse, e descobri que o valor que estava indo para o Banco de Dados era diferente do que eu estava cadastrando, simplesmente pq o "esperto" aqui colocou o campo senha do BD como varchar de 20, e a senha, após ser criptografara com md5 fica com 32 caracteres, logo, não caberia no campo senha, pois ficaria incompleta... Já aproveitei e criptografei duplamente a senha, com sha1 e md5, ficando a mesma com 40 caracteres no Banco de dados, que agora eu configurei o campo senha para varchar de 45...

 

Está sensacional agora... resolvido... obrigado pelas dicas @Kosonome, foram fundamentais para descobrir o problema.

 

Espero também poder contribuir com os companheiros do fórum, pois sempre que precisei encontrei auxilio aqui... muito obrigado a todos!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Procure utilizar as funções nativas de criptografia como o http://php.net/manual/pt_BR/function.password-hash.php

 

Porque?
Porque através do sha1 e md5 é facil um "ataque de força bruta" e assim fragilizando o seu sistema e "facilitando" o trabalho do fulano que estiver tentando invadir o seu sistema. Além disso, existem já diversas discussões e artigos provando por A mais B que hash md5 e sha1 para dados "sensiveis" como senhas é absolutamente "loucura" utilizar nos dias de hoje.

 

Através do password_hash você terá SEMPRE um hash diferente, mesmo quando o conteudo é igual e isso dificulta enormemente um ataque de força bruta e deixa o seu sistema muito mais seguro e além disso a possibilidade de conflito de hash é quase impossivel ao comparar com o md5 e sha1, mesmo se utilizados em conjunto.

Compartilhar este post


Link para o post
Compartilhar em outros sites
7 horas atrás, gleidsonb12 disse:

Funcionou @Kosonome, muito obrigado amigo... fiz como você me disse, e descobri que o valor que estava indo para o Banco de Dados era diferente do que eu estava cadastrando, simplesmente pq o "esperto" aqui colocou o campo senha do BD como varchar de 20, e a senha, após ser criptografara com md5 fica com 32 caracteres, logo, não caberia no campo senha, pois ficaria incompleta... Já aproveitei e criptografei duplamente a senha, com sha1 e md5, ficando a mesma com 40 caracteres no Banco de dados, que agora eu configurei o campo senha para varchar de 45...

 

Está sensacional agora... resolvido... obrigado pelas dicas @Kosonome, foram fundamentais para descobrir o problema.

 

Espero também poder contribuir com os companheiros do fórum, pois sempre que precisei encontrei auxilio aqui... muito obrigado a todos!

 

Pior que eu só poderia ajudar se eu conhecesse o schema do seu banco de dados, nunca ia imaginar que estava com 20 caracteres. E como o Guilherme recomendou, use o password_hash(), é tipo 100 vezes mais seguro que um md5 simples.

Compartilhar este post


Link para o post
Compartilhar em outros sites

  • Conteúdo Similar

    • Por Rafael_Ferreira
      Não consigo carregar a imagem do captcha do meu formulário. Foi testado com o xampp e easyphp. Também não carregou a imagem de outros captcha. 
       
       
    • Por luiz monteiro
      Olá, tudo bem?
       
      Estou melhorando meu conhecimento em php e mysql e, me deparei com o seguinte. A tabela da base de dados tem um campo do tipo varchar(8) o qual armazena números. Eu não posso alterar o tipo desse campo. O que preciso é fazer um select para retornar o números que contenham zeros a direita ou a esquerda.
      O que tentei até agora
       
      Ex1
      $busca = $conexao->prepare("select campo form tabela where (campo = :campo) ");
      $busca->bindParam('campo', $_REQUEST['campo_form']);
       
      Se a direita da string $_REQUEST['campo_form'] termina ou inicia com zero ou zeros, a busca retorna vazio.
      Inseri dados numéricos, da seguinte maneira para testar: 01234567;  12345670: 12345678: 12340000... entre outros nessa coluna. Todos os valores que não terminam ou não iniciam com zero ou zeros, o select funciona.
       
       
      Ex2
      $busca = $conexao->prepare("select campo form tabela where (campo = 0340000) ");
      Esse número está cadastrado, mas não retorna.
       
      Ex3
      $busca = $conexao->prepare("select campo form tabela where (campo = '02340001' ) ");
      Esse número está cadastrado, mas não retorna.
       
       
      Ex4
      $busca = $conexao->prepare("select campo form tabela where (campo like 2340000) ");
      Esse número está cadastrado, mas não retorna.
       
      Ex5
      $busca = $conexao->prepare("select campo form tabela where (campo like '12340000') ");
      Esse número está cadastrado, mas não retorna.
       
      Ex6
      $busca = $conexao->prepare("select campo form tabela where (campo like '"12340000"' ) ");
      Esse número está cadastrado, mas não retorna.
       
       
      Ex7
      $busca = $conexao->prepare("select campo form tabela where (campo like :campo) ");
      $busca->bindParam('campo', $_REQUEST['campo_form'])
      Não retorna dados.
       
      O  $_REQUEST['campo_form'] é envio via AJAX de um formulário. 
      Usei o gettype para verificar o post, e ele retorna string.
      Fiz uma busca com número 12345678 para verificar o que o select retorna, e também retrona como string.
       
      Esse tipo de varchar foi usado porque os números que serão gravados nesse campo,  terão zeros a direita ou na esquerda. Os tipos number do mysql não gravam zeros, então estou usando esse. O problema é a busca.
      Agradeço desde já.
       
       
    • Por daemon
      Boa tarde,
       
      Eu tenho uma rotina que faz uma leitura do arquivo .xml de vários sites.

      Eu consigo pegar o tópico e a descrição, e mostrar a imagem que esta na pagina do link.
      Para isso utilizo esta função:
      function getPreviewImage($url) { // Obter o conteúdo da página $html = file_get_contents($url); // Criar um novo objeto DOMDocument $doc = new DOMDocument(); @$doc->loadHTML($html); // Procurar pela tag meta og:image $tags = $doc->getElementsByTagName('meta'); foreach ($tags as $tag) { if ($tag->getAttribute('property') == 'og:image') { return $tag->getAttribute('content'); } } // Se não encontrar og:image, procurar pela primeira imagem na página $tags = $doc->getElementsByTagName('img'); if ($tags->length > 0) { return $tags->item(0)->getAttribute('src'); } // Se não encontrar nenhuma imagem, retornar null return null; } // Uso: $url = "https://example.com/article"; $imageUrl = getPreviewImage($url); if ($imageUrl) { echo "<img src='$imageUrl' alt='Preview'>"; } else { echo "Nenhuma imagem encontrada"; }  
      Mas estou com um problema, esta funcão funciona quando coloco em uma pagina de teste.php. Preciso mostrar em uma página inicial diversas fotos de todos os links. (No caso acima só funciona 1).
    • Por violin101
      Caros amigos, saudações.
       
      Por favor, me permita tirar uma dúvida com os amigos.

      Tenho um Formulário onde o Usuário digita todos os Dados necessários.

      Minha dúvida:
      --> como faço após o usuário digitar os dados e salvar, o Sistema chamar uma Modal ou mensagem perguntando se deseja imprimir agora ?

      Grato,
       
      Cesar
    • Por Carcleo
      Tenho uma abela de usuarios e uma tabela de administradores e clientes.
      Gostaria de uma ajuda para implementar um cadastro
       
      users -> name, login, passord (pronta) admins -> user_id, registratiom, etc.. client -> user_id, registratiom, etc...
      Queria ajuda para extender de user as classes Admin e Client
      Olhem como estáAdmin
      <?php namespace App\Models; use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Database\Eloquent\Model; class Admin extends User {     use HasFactory;            protected $fillable = [         'name',         'email',         'password',         'registration'     ];      private string $registration;     public function create(         string $name,          string $email,          string $password,         string $registration     )     {         //parent::create(['name'=>$name, 'email'=>$email, 'password'=>$password]);         parent::$name = $name;         parent::$email = $email;         parent::$password = $password;         $this->registration = $registration;     } } User
      <?php namespace App\Models; // use Illuminate\Contracts\Auth\MustVerifyEmail; use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Foundation\Auth\User as Authenticatable; use Illuminate\Notifications\Notifiable; use Illuminate\Database\Eloquent\Relations\BelongsToMany; class User extends Authenticatable {     /** @use HasFactory<\Database\Factories\UserFactory> */     use HasFactory, Notifiable;     static string $name;     static string $email;     static string $password;     /**      * The attributes that are mass assignable.      *      * @var list<string>      */     protected $fillable = [         'name',         'email',         'password',     ];          /**      * The attributes that should be hidden for serialization.      *      * @var list<string>      */     protected $hidden = [         'remember_token',     ];     /**      * Get the attributes that should be cast.      *      * @return array<string, string>      */     protected function casts(): array     {         return [             'email_verified_at' => 'datetime',             'password' => 'hashed',         ];     }          public function roles() : BelongsToMany {         return $this->belongsToMany(Role::class);     }       public function hasHole(Array $roleName): bool     {                 foreach ($this->roles as $role) {             if ($role->name === $roleName) {                 return true;             }         }         return false;     }         public function hasHoles(Array $rolesName): bool     {                 foreach ($this->roles as $role) {             foreach ($rolesName as $rolee) {             if ($role->name === $rolee) {                 return true;             }          }         }         return false;     }         public function hasAbility(string $ability): bool     {         foreach ($this->roles as $role) {             if ($role->abilities->contains('name', $ability)) {                 return true;             }         }         return false;     }     } Como gravar um Admin na tabela admins sendo que ele é um User por extensão?
      Tentei assim mas é claro que está errado...
      public function store(Request $request, Admin $adminModel) {         $dados = $request->validate([             "name" => "required",             "email" => "required|email",             "password" => "required",             "registration" => "required"         ]);         $dados["password"] =  Hash::make($dados["password"]);                  $admin = Admin::where("registration",  $dados["registration"])->first();                  if ($admin)              return                    redirect()->route("admin.new")                             ->withErrors([                                 'fail' => 'Administrador já cadastrados<br>, favor verificar!'                   ]);                            $newAdmin = $adminModel->create(                                    $dados['name'],                                    $dados['email'],                                    $dados['password'],                                    $dados['registration']                                 );         dd($newAdmin);         $adminModel->save();         //$adminModel::create($admin);                  return redirect()->route("admin.new")->with("success",'Cadastrado com sucesso');     }  
×

Informação importante

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