我有一个index.php和一个单击提交按钮时打开的登录功能。现在无论何时点击按钮,用户都不会登录,因为没有任何事情发生,我无法弄清楚问题。
index.php的小片段:
Username:<br> <img src="/images/figure.png" alt="Icon" height="42" width="42>">
<input type="text" name="username"><br>
Passwort:<br> <img src="/images/Key_lock.png" alt="Icon" height="42" width="42>">
<input type="password" name="passwort"><br>
<input type="submit" login="loginfunc()" value="Login">
</form>
和我的loginfunc
<?php
session_start();
include 'globals.php';
if(empty($_POST["username"]) || empty($_POST["passwort"]))
{
echo "Bitte tragen Sie ihr Passwort und Benutzername ein";
}
else {
$query = "SELECT * FROM benutzer WHERE username = '$username'";
$result = mysqli_query($con, $query);
if(mysqli_num_rows($result) > 0)
{
while($row = mysqli_fetch_array($result))
{
if(password_verify($passwort, $row["password"]))
{
session_start();
$_SESSION['username'] = $username;
header("Location:dashboard.php");
}
else
{
echo "Kevin";
}
}
}
else
{
}
}
?>
答案 0 :(得分:1)
你永远不会向你的PHP代码发送数据(顺便说一句,这不是一个功能,基于你在这里发布的内容)。您在提交按钮上的login=loginfunc()
不是有效的HTML,也没有做任何事情。此外,PHP是一种服务器端语言。你不能在这样的客户端上调用它。
您需要在action
代码上设置form
参数,如下所示:
<form method="POST" action="functions/loginfunc.php">
此外,您对SQL injection持开放态度。您需要使用预准备语句,而不是将变量连接到查询中。请参阅How can I prevent SQL injection in PHP?。
您还有其他问题,例如两次调用session_start()
,并从外观上看,一些未定义的变量($username
和$passwort
,对于初学者而言)。
以上所有内容都是您不应该“推出自己的”登录/身份验证逻辑的原因;这很容易弄错。尽可能使用现有的库。
根据您的(现已删除)&#34;回答&#34; 进行编辑您似乎对HTML和PHP的工作原理有一些基本的误解。这条线
include_once("functions/loginfunc.php");
不定义function
;它只会导致loginfunc.php
中的任何内容立即执行。无论如何,您无法直接从HTML调用PHP函数。而且,您的按钮上的login=loginfunc()
属性也不会 - 或告诉浏览器执行任何操作。浏览器不会在代码中的某处找到名为login
的内容;它只是忽略了这一点。
我对你的最好建议是:
不尝试创建自己的登录功能。安全和正确地完成它是非常困难的。而且,坦率地说,这个问题清楚地表明你对HTML,PHP或其他相关问题的了解不够。请理解:我不是想侮辱你;我试图帮助你避免被可怕的黑客攻击。
在继续阅读之前,先阅读并学习一些基本的HTML和PHP教程。如果您不知道如何定义函数,则无法在PHP(或大多数其他语言)中执行任何有意义的操作。