当前位置: 首页 > 知识库问答 >
问题:

PHP和SQLite:登录

沃博裕
2023-03-14

我需要用PHP和SQlite做一个登录表单。注册有效,我可以选择所有创建的用户并回显它们。当我试图检查用户名和密码(我通过$u POST获得的)是否匹配时:它回显我现在已登录。但当我输入错误的user/pw时,它会回显“invalid”-字符串,但也有以下错误:

Notice: Undefined variable: row in D:\xampp\htdocs\phpProjektSnippets\blogLogin.php on line 17

第17行是我得到if($row['username']的地方...

这是我的代码:

$db = new PDO('sqlite:mysqlitedb.db');
$db->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION );

$username = $_POST['username'];
$password = $_POST['password'];

$sql = "SELECT * FROM users WHERE user_name = :name AND user_password = :pass";
$statement = $db->prepare($sql);
$statement->execute(array('name' => $username, 'pass' => $password));

try {
    $statement = $db->prepare($sql);
    $statement->execute(array('name' => $username, 'pass' => $password));

    foreach ($statement as $row);

    if ($row['user_name'] == $username && $row['user_password'] == $password){
        echo "Welcome " .$row['user_name']. ", You are now logged in.<br/ >";
    }else{
        echo "User Name or Password is invalid";
    }  
}
catch(PDOException $e) {
    echo "Something went wrong: ".$e->getMessage();
}

这里怎么了?

共有3个答案

齐宗清
2023-03-14

问题在于这行中的分号:foreach($row形式的语句)

Foreach只是什么都不做,而不是后续的if

尉迟卓
2023-03-14

在你的问题上,增加了六个人的答案。

此行捕获您的代码错误

catch(PDOException $e) {
    echo "Something went wrong: ".$e->getMessage();
}

如果要在用户凭据无效的情况下写入错误,请使用If true…else…语句。

if(some argument){
    //do something if the argument result is true;
    }else{
    do something if the argument is not true;}

所以你的代码应该是这样的。

<?php
$db = new PDO('sqlite:mysqlitedb.db');
$db->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION );
$username = $_POST['username'];
$password = $_POST['password'];
$sql = "SELECT * FROM users WHERE user_name = :name AND user_password = :pass";

try {
    $statement = $db->prepare($sql);
    $statement->execute(array('name' => $username, 'pass' => $password));
    $row = $statement->fetch();
        if ($row['user_name'] == $username && $row['user_password'] == $password){
            echo "Welcome " .$row['user_name']. ", You are now logged in.<br/ >";
        }else{
            echo "User Name or Password is invalid";
        }           
}
catch(PDOException $e) {
    echo "Something went wrong: ".$e->getMessage();
}
?>

如果这是有效的,记得纠正你的散列问题。

也许这张图片可以更好地帮助你理解上面的代码

米嘉禧
2023-03-14

首先,您不应该使用与您的SQL查询类似的SQL查询。它易受SQL注入攻击,因此不安全!

请阅读关于如何在PHP中防止SQL注入的答案,以获得一些非常有用的技巧。

问题在于,用户向服务器提交的任何内容都会附加到SQL字符串中,这可能是恶意代码,使攻击者能够访问您的数据库或删除数据,或者可能发生其他不好的情况。有关更多信息,请参阅上面的链接。

在您的情况下,代码如下所示:

<?php
    $db = new PDO('sqlite:mysqlitedb.db');
    $db->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION );

    $username = $_POST['username'];
    $password = md5($_POST['password']);

    $sql = "SELECT * FROM users WHERE user_name = :name ";

    try {
        $statement = $db->prepare($sql);
        $statement->execute(array('name' => $username));

        foreach ($statement as $row){
           echo $row['user_name'] . '<br />';
        }
    }
    catch(PDOException $e) {
        echo "Something went wrong: ".$e->getMessage();
    }
?>

编辑:因为您使用$db配置了PDO-

 类似资料:
  • 主要内容:安装,PHP 接口 API,连接数据库,创建表,INSERT 操作,SELECT 操作,UPDATE 操作,DELETE 操作安装 自 PHP 5.3.0 起默认启用 SQLite3 扩展。可以在编译时使用 --without-sqlite3 禁用 SQLite3 扩展。 Windows 用户必须启用 php_sqlite3.dll 才能使用该扩展。自 PHP 5.3.0 起,这个 DLL 被包含在 PHP 的 Windows 分发版中。 如需了解详细的安装指导,建议查看我们的 PHP

  • 您好,我知道这个主题以前就有人提出过,但是没有人像我这样做过AJAX操作标准。我是AJAX和jQuery的新手 我这里的问题是,我不确定js函数“ajaxPostCallManip()”是否达到“login.php”!! 我发了几个警报,但没有出现...请帮帮忙 超文本标记语言代码 js代码 PHP代码

  • 问题内容: 通过ajax提交登录表单时,我只是遇到一些问题,我主要是PHP开发人员,在PHP中我并不经常使用Jquery + Ajax。 目前,如果我在提交表单后检查firebug POST数据,它的确会获取已添加到表单的用户名和密码,但是无论是否添加了错误的用户名和密码,或者是否添加了错误的页面,页面都只会重新加载它们是正确的,并且没有创建会话。 形式如下: 这是Ajax / Jquery: 这

  • 我是一名在netbeans工作的新java程序员,我正在尝试基于sqlite数据库进行登录。在数据库中,我有一个username列、一个password列和一个position列。登录的目的是,当用户输入用户名和密码并按下登录按钮时,程序将连接到sqlite数据库,访问数据库上的特定表,检查用户名和密码字段是否匹配,然后根据他们的位置(管理员、经理或教师),他们将转到不同的jframe。目前,我创

  • 问题内容: 是否可以将SQLite用于j2me应用程序?有没有人尝试过这样做? 问题答案: SQLite不是用Java编写的,因此,您需要的是通过一些类似于JNI的接口将其作为非标准Java API来使用,或者将大多数SQLite源代码转换为可能使用用于存储的JSR75文件连接。 第一种解决方案无异于在电话的J2ME实现中添加新的JSR,如果您不是电话制造商或它的紧密合作伙伴之一,这通常非常困难,

  • 问题内容: 我对单个文件数据库提供的简洁性感到着迷。可以使用哪些驱动程序/连接器库来连接SQLite并将其与Java一起使用。 我发现了一个包装器库http://www.ch-werner.de/javasqlite,但是还有其他更著名的项目吗? 问题答案: 在使用SQLite和Java 搜索信息时找到了你的问题。只是想我要补充我的回答,我也贴在我的博客。 我已经用Java编码了一段时间了。我也了