我想使用PDO在php中创建一个登录页面,我创建了这个包含登录功能登录的类。
<? php
class Utente {
private $db;
function __construct($conn) {
$this - > db = $conn;
}
public static
function login($nome_utente, $password) {
$nome_utente = $_POST['nome_utente'];
$password = $_POST['password'];
if ($nome_utente == '') {
echo "Fill the name";
}
try {
$stmt = $this - > db - > prepare("SELECT * FROM utente WHERE nome_utente = :nome_utente AND password=:password");
$stmt - > execute();
$utenteRow = $stmt - > fetch(PDO::FETCH_NUM);
if ($utenteRow > 0) {
echo "You are logged in";
} else echo "The username doesnt match with the password!";
} catch (PDOException $e) {
echo $e - > getMessage();
}
}
}?>
<!-- begin snippet: js hide: false console: true babel: false -->
<form action="" method="POST">
Name
<input type="text" name="nome_utente" />PAS
<input type="text" name="password" />
<input type="submit" name="submit" value="login" />
</form>
现在我想调用这个函数来查看login的结果。我在另一个php文件中创建这个新类来调用它:
<?php
class Call
{
public function call()
{
$var=Utente::login();
return $var;
}
}
?>
问题是当我用类Call执行secon文件时,我看到一个空白页面。我做错了什么吗?有人能告诉我如何以正确的方式登录用户吗?谢谢!
答案 0 :(得分:3)
你不是一个阶级而是一个职能。类的使用方式不同。
Editor > Embed In > Navigation Controller
然后你必须这样使用它
class Utente {
private $db;
function __construct($conn) {
$this->db = $conn;
}
public function login($nome_utente, $password)
{
$stmt = $this->db->prepare("SELECT * FROM utente WHERE nome_utente = ?");
$stmt->execute([$nome_utente]);
$row = $stmt->fetch();
if ($row && password_verify($password, $row['password']) {
return $row;
}
}
但它可能对你来说太复杂了,所以你最好忘记一段时间的课程并坚持使用
答案 1 :(得分:0)
主要问题是您没有存储状态:登录脚本完成后,没有设置/更改任何内容,因此在下一个请求中,服务器不知道有登录用户。
成功登录后,您应该将状态存储在例如session变量中。然后,如果设置了会话变量以及值是什么,您可以检查何时启动脚本。
除此之外,您永远不应存储纯文本密码,例如参见How can I store my users' passwords safely?
关于你上一个剧本/班级。你在哪里用它?另请注意,login()
方法不会返回任何内容,因此$var
将为空。
编辑顺便说一句,您应该在调用时向您的Utente::login()
方法发送2个参数,或者从方法定义中删除这些参数,因为您仍然不使用它们