对登录问题感到困惑

时间:2016-09-08 06:01:59

标签: php

我有 index.php 页面,用户可以在其中登录。问题是虽然密码和用户名是正确的,但我无法登录。我做错了什么?

PHP代码:

$v = $db->prepare("select * from uyeler where uye_ad=? and uye_sifre=?");
if ($_POST) {
    $isim =isset( $_POST["isim"]);
    $sifre= isset($_POST["sifre"]);
    $v->execute(array($isim,$sifre));
    $x = $v->fetch(PDO::FETCH_ASSOC);
    $d=$v->rowCount();
    if($d) {
        echo "Giriş Yapıldı";
    } else {
        echo "sdds";
    }
}

HTML code:

<form action="" method="post">
    <table cellpadding="5" cellspacing="5">
        <tr>
            <td>Uye Ad</td>
            <td><input type="text" name="isim"></td>
        </tr>
        <tr>
            <td>Şifre</td>
            <td><input type="text" name="sifre"></td>
        </tr>
        <tr>
            <td><input type="submit"></td>
        </tr>
    </table>
</form>

2 个答案:

答案 0 :(得分:2)

好的,我可以从代码中看到,我可以说你是PHP的新手,我不专业,但我可以给你一些帮助。

您的代码存在很多问题,但我要提一句:

  • 您的查询超出了所有内容,查询请求尚未调用的变量,因此它应该在您从表单接收数据之后。

现在我编辑了代码并添加了一些东西以使其更好,但尚未测试它但是如果id不能与你合作我会的。

完整代码:

 <?php

   //connect to the database first 

    if (isset($_POST['submit'])) 
    {
        $isim = $_POST['username'];
        $sifre= $_POST['password'];

        $v = $db->prepare("SELECT * FROM uyeler where uye_ad=?");
        $v->execute(array($isim));
        $FetchUserPassword = $v->FETCH(PDO::FETCH_ASSOC);

        if (!empty($FetchUserPassword))
            {
                $password = $FetchUserPassword['uye_sifre']; // Save the fetched password inside variable 

                if( $sifre == $password )
                    {
                        echo "login done";
                    }
                else 
                    {
                        echo "Password is wrong";
                    }
            }
        else    
            {
                echo "Username is not exist";
            }

    }

?>

<form action="" method="post">
    <table cellpadding="5" cellspacing="5">
        <tr>
            <td>username</td>
            <td><input type="text" name="username"></td>
        </tr>
        <tr>
            <td>password</td>
            <td><input type="text" name="password"></td>
        </tr>
        <tr>
            <td><input type="submit" name="submit"></td>
        </tr>
    </table>
</form>

我会稍微添加一些内容(纪录片内容),这样它可以在将来帮助你。

重要说明创建“登录”页面时,代码结构应符合用户的用法:我的意思是什么?

你有一个很多人使用的登录页面,每个人都应该有用户名,在你的代码中你搜索的用户取决于他的用户名,但问题是你有很多用户认为它们可能具有相同的用户名,现在您将遇到一个大问题,因为查询将返回多行。

如何解决此问题有两种方法:

  • 不是通过用户名搜索用户是否存在,而是通过电子邮件搜索它们,因为它们中的每一个都应该通过电子邮件发送,通过这种方式,您将获取一个用户或者没有用户。
  • 第二种方法是使用户名是唯一的,这意味着,没有人应该使用相同的名称,您可以使用Jquery或甚至在注册页面验证是否使用了用户名。

第三,也是最后一件事:

  • 确保在用户注册时加密密码,以便在数据库被黑客入侵时保持密码加密和安全。

答案 1 :(得分:0)

您将行计数存储在$ d变量中。如果未找到匹配项,它将始终为零;如果在数据库表中找到数据,则大于零。 修改你的if条件:

if( isset($d)  && $d != 0 ){
        echo    "Giriş Yapıldı";
    }else {
        echo "sdds";
 }
相关问题