sergio.costa Posted January 12, 2023 at 09:12 PM Report Share #629732 Posted January 12, 2023 at 09:12 PM Boas noites pessoal. Comecei agora a usar PHP e estou com dificuldade em perceber um erro que me está a acontecer. Ando a criar uns exemplos para praticar a linguagem e deparei-me com o seguinte erro: Citação Warning: Undefined variable $pdo_user in C:\xampp\htdocs\SQL_Config\SQL_User_Querys.php on line 26 Fatal error: Uncaught Error: Call to a member function prepare() on null in C:\xampp\htdocs\SQL_Config\SQL_User_Querys.php:26 Stack trace: #0 C:\xampp\htdocs\Login\Try-login.php(44): Verificar_tentativas('Scosta') #1 {main} thrown in C:\xampp\htdocs\SQL_Config\SQL_User_Querys.php on line 26 Sempre que chamo a função dá este erro. Se eu colocar as variáveis dentro da função funciona bem mas se forem declaradas fora diz que o objeto $pdo_user não esta definido. Estou certo que um erro de principiante e não estou a chegar lá. <?php // Definir Comunicação //Definir Credenciais $HOST_NAME ="localhost"; $DB_NAME="secure-login"; $DB_USER="root"; $DB_PASSWORD=""; // Instanciar Conexão PDO $pdo_user = new PDO( "mysql: host=$HOST_NAME; dbname=$DB_NAME;", $DB_USER, $DB_PASSWORD); //Verificar tentativas de login falhadas function Verificar_tentativas ($user){ //Uma hora atras $hora_Atras = time() - 60; //preparar query // $query = "SELECT COUNT(`User`) FROM login_attemps WHERE `User` = :User AND `Time` > :Hora;"; $query = "SELECT * FROM login_Attempts;"; $stmt = $pdo_user->prepare($query); //Preparar Valores // $stmt->bindValue("User", $User); // $stmt->bindValue("Hora", $hora_Atras); //Executar $stmt->execute(); if ($stmt->rowCount() >= 1){ $result = $stmt->fetchAll(PDO::FETCH_ASSOC); // if($result['COUNT(`User`)']>= 5){ // } } return $result; } ?> Fico desde já agradecido a qualquer ajuda que me possam dar. Sem mais Sérgio Costa Link to comment Share on other sites More sharing options...
Solution Ivo Vicente Posted January 12, 2023 at 09:36 PM Solution Report Share #629733 Posted January 12, 2023 at 09:36 PM Viva @sergio.costa A variável não é encontrada porque é declarada fora da function logo não lhes podes aceder porque está fora do escopo (scope) Tens pelo menos duas maneiras de resolver o teu problema <?php // Aceitas a variavel de ligação nos parametros da função function Verificar_tentativas ($connection, $user){ .... $stmt = $connection->prepare($query); .... } // Invocas com a variavel Verificar_tentativas($pdo_user, $user); ou <?php // Usas a keyword global para a função ir ao escopo global buscar a variavel function Verificar_tentativas ($user){ global $pdo_user; .... } Espero que resolva o teu problema, e te permita continuar a aprender. Já agora, não uses maiúsculas para começar o nome da função, e deixo aqui 2 links uteis (em inglês) se estas a começar PHP https://phptherightway.com/ https://github.com/jupeter/clean-code-php 1 Report Feito é melhor que perfeito Link to comment Share on other sites More sharing options...
sergio.costa Posted January 15, 2023 at 03:49 PM Author Report Share #629771 Posted January 15, 2023 at 03:49 PM Boa tarde, Obrigado pela ajuda... realmente não me tinha lembrado desse pormenor. Estava com a ideia contraria de que as funções podiam aceder as vairiaveis de escopo global... Obrigado mais uma vez pela ajuda e pelas dicas. Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now