我正在处理登录脚本,但即使帐户信息正确,它也不允许我登录。我过去曾使用过这个登录脚本,但是它使用了MySQL,所以我改变了一些事情,所以我会使用MySQLi,但它没有。
的config.php
<?php
$con = mysqli_connect("localhost","root","wachtwoord","huizenverkoop");
// Database verbinding controleren
if (mysqli_connect_errno()){
echo "Kan geen verbinding maken met MySQL: " . mysqli_connect_error();
}
?>
更新:login.php
include 'config.php';
if(isset($_SESSION['persoon'])!="")
{
header("Location: index.php");
}
if(isset($_POST['loginnu']))
{
$gebruikersnaam = mysqli_real_escape_string($con, $_POST['gebruikersnaam']);
$wachtwoord = mysqli_real_escape_string($con, $_POST['wachtwoord']);
$gebruikersnaam = trim($gebruikersnaam);
$wachtwoord = trim($wachtwoord);
$query = "SELECT id, gebruikersnaam, wachtwoord FROM persoon WHERE gebruikersnaam='$gebruikersnaam'";
$row = mysqli_query($con,$query);
$count = mysqli_num_rows($row);
if($count == 1 && $row['wachtwoord']==md5($wachtwoord)){
$_SESSION['persoon'] = $row['id'];
header("Location: index.php");
}else{
header("Location: login.php?fout=true");
}
}
if (@$_GET['fout'] == 'true'){
$melding = "De ingevulde gegevens kloppen niet.";
include('alert.php');
}
Gebruikersnaam表示用户名,wachtwoord表示密码。当我按下按钮&#34;登录&#34;它发送给我login.php?fout = true。 Fout意味着错误。
<form method="post">
<h1 class="box-titel">Inloggen</h1>
<div class="controle">
<input type="text" class="speciaal-tekstveld" name="gebruikersnaam" placeholder="Gebruikersnaam" required>
<input type="password" class="speciaal-tekstveld" name="wachtwoord" placeholder="Wachtwoord" required>
</div>
<input type="submit" class="grootknop" name="loginnu" value="Inloggen">
</form>
Persoon表:
id int(2)
gebruikersnaam varchar(50)
wachtwoord varchar(255)
有人可以帮助我吗?
答案 0 :(得分:1)
您需要获取数据,而不仅仅是查询数据。您当前正在尝试使用MySQLi对象,这是查询的结果,这不是一个包含数据库数据的数组,需要先获取它。你需要这样的东西
$query = "SELECT id, gebruikersnaam, wachtwoord FROM persoon WHERE gebruikersnaam='$gebruikersnaam'";
$result= mysqli_query($con,$query);
$row = mysqli_fetch_assoc($result); // Fetch the data!
$count = mysqli_num_rows($result);
if($count == 1 && $row['wachtwoord']==md5($wachtwoord)){
// ....
您还可以在查询中检查密码,从而减少部分代码。基本上,如果您可以在SQL中执行某些操作,请在SQL中执行。
除此之外,您不应使用md5
来存储密码。 PHP有一个内置的password_hash()
函数,它更加安全!
您还应该利用预准备语句来保护您的数据库免受SQL注入攻击。
阅读材料&amp;文档
答案 1 :(得分:0)
我认为你在mysqli连接方面遇到了麻烦。
这笔交易就在这一行:
$count = mysqli_num_rows($row);
if($count == 1 ...
您希望表格中至少有一行。如果你是shure,这样的行存在于数据库中,我认为$ count因错误而收到false。
答案 2 :(得分:0)
在您的代码中,$con
未定义,我假设您已定义它,因此您需要进行测试以确保您有连接。此外,您不会报告mysqli查询中的任何错误。您可以尝试以下各项来完成这些:
http://www.php.net/function.mysqli_connect
//check make sure you have it
if (!$con) {
echo "Error: Unable to connect to MySQL." . PHP_EOL;
echo "Debugging errno: " . mysqli_connect_errno() . PHP_EOL;
echo "Debugging error: " . mysqli_connect_error() . PHP_EOL;
exit;
}
并报告来自mysqli_query
的错误,当然您需要按照Qirel的建议获取该行:
$query = "SELECT id, gebruikersnaam, wachtwoord FROM persoon WHERE gebruikersnaam='$gebruikersnaam'";
$result = mysqli_query($con,$query) or die(mysqli_error($con));
$row = $result->fetch_row();
答案 3 :(得分:0)
可能存在三个问题。
1)在您的表单中包含action =&#34;&#34;如果你要重定向到同一页面..就好像,
<form method="post" action="">
2)$ con未根据您的代码定义。如果包含它而不是用配置文件更新你的代码。
3)获取行Like,
$res = $conn -> query("SELECT id, gebruikersnaam, wachtwoord FROM persoon WHERE gebruikersnaam='$gebruikersnaam'");
$row = mysqli_fetch_assoc($res);
echo $row['wachtwoord'];
另外,在脚本中启动一些错误日志。