0
I’m making a system using MVC (first time I use it in PHP), and when I will login appears:
Uncaught Argumentcounterror: Too few Arguments to Function Login::login(), 2 passed in C: wamp64 www php_pdo controller logincontroller.php on line 19 and Exactly 3 expected in C: wamp64 www php_pdo model login.php
Too few Arguments to Function Login::login(), 2 passed in C: wamp64 www php_pdo controller logincontroller.php on line 19 and Exactly 3 expected in C: wamp64 www php_pdo model login.php on line 29
In case the error says a parameter is missing, I tested the post
of the login, and is going the 2 values (password and user), and conexãO
is going too, but he still presents these mistakes..
Codes:
View: Sign-in.php:
<form method="post" action="" >
<input type="text" name="usuario" placeholder="Digite seu nome de usuário"><br>
<input type="password" name="senha" placeholder="Digite sua senha"><br>
<input type="submit" name="btn" value="Entrar"><br>
</form>
<?php
// caso haja post, esse if será executado
if($_POST){
// Aqui ele vai filtar o post, o ultimo parametro serve para tirar tags e caracteres especiais.
$usuario = filter_input(INPUT_POST, 'usuario', FILTER_SANITIZE_STRING);
$senha = filter_input(INPUT_POST, 'senha', FILTER_SANITIZE_STRING);
// aqui ele inclui a classe
require_once '../controller/logincontroller.php';
// aqui ele chama o método Login, por ser static não precisa criar um objeto.
LoginController::logar($usuario, $senha);
}
Controller logincontroller.php:
require_once '../model/login.php';
class LoginController {
static function logar($usuario, $senha){
$result = Login::login($usuario, $senha);
if ($result){
echo '<script> confirm("Bem vindo ao sistema!");
window.location("menu"); <script>';
// header("Location: menu");
} else {
echo '<script> confirm("Senha ou usuário incorreto!");
window.location("sign-in"); <script>';
}
}
}
Model login.php:
require_once '../projeto/connectionfactory.php';
class Login {
private $usuario;
private $senha;
private $con;
function __construct($usuario, $senha) {
$this->usuario = $usuario;
$this->senha = $senha;
$this->con = ConnectionFactory::getConnection();
}
static function login($usuario, $senha, $con) {
// isso é para tratar erros
try {
// aqui cria a transação, tudo que for feito dentro, fica protegido
$con->beginTransaction();
// puxar senha
$stmt = $con->prepare("select senha from tbl_login where usuario = :usuario");
$stmt->bindParam('usuario', $usuario);
$stmt->execute();
$hash = null;
while ($obj = $stmt->fetch(PDO::FETCH_ASSOC)) {
$hash = $obj['senha'];
}
if (password_verify($senha, $hash)) {
return true;
} else {
return false;
}
} catch (PDOException $e) {
echo $e->getMessage();
}
}
}
Project connectionfactory.php:
class ConnectionFactory{
static function getConnection(){
$db = 'tec_find';
$user = 'root';
$psw = '';
try {
$con = new PDO("mysql:host=localhost;dbname=$db", $user, $psw);
$con->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
return $con;
} catch (Exception $ex) {
echo $ex->getMessage();
}
}
static function testarConnection(){
if(ConnectionFactory::getConnection()){
// entra sempre aqui
echo 'Conectado';
} else {
echo 'Conectado';
}
}
}
pulp structure:
Thanks, I didn’t even notice that.
– Leandro