登录脚本不起作用

时间:2016-06-18 10:50:36

标签: php mysqli

我正在处理登录脚本,但即使帐户信息正确,它也不允许我登录。我过去曾使用过这个登录脚本,但是它使用了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)

有人可以帮助我吗?

4 个答案:

答案 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']; 

另外,在脚本中启动一些错误日志。

相关问题