PHP代码问题-登录和注册

PHP代码问题-登录和注册,php,mysql,Php,Mysql,我是PHP和MySQL的新手,我用这段代码创建了一个注册和登录页面 数据库为dbusersdbusers,包含: id(主键,自动递增,整数(10)) 用户名(唯一,Varchar(16)) 密码(Varchar(16)) 电子邮件(Varchar(45)) 下面是register.php的代码(使用一个不相关的表单): 2) 为什么我总是得到一个无效的登录?有多个用户在上述数据库上成功创建(和写入),但我仍然得到相同的错误 提前谢谢 亚历克斯。1) 这些行验证是否可以从前面编写的SQL查询

我是PHP和MySQL的新手,我用这段代码创建了一个注册和登录页面

数据库为dbusersdbusers,包含:

  • id(主键,自动递增,整数(10))
  • 用户名(唯一,Varchar(16))
  • 密码(Varchar(16))
  • 电子邮件(Varchar(45))
下面是register.php的代码(使用一个不相关的表单): 2) 为什么我总是得到一个无效的登录?有多个用户在上述数据库上成功创建(和写入),但我仍然得到相同的错误

提前谢谢

亚历克斯。

1)
这些行验证是否可以从前面编写的SQL查询中找到登录名。如果是,则会将一些值添加到当前会话中。
->
是一个对象操作符-它使您能够访问对象方法和变量。在本例中,对象是
$obj
,它正在访问该对象中名为
id
的变量

如果您习惯于使用其他OOP语言,它将相当于这样的结构:
int MyId=MyObject.id

2)
可能有很多原因。首先,脚本容易受到SQL注入的攻击。其次,您还没有告诉我们用户是如何创建的。您的SQL查询告诉我们您的密码应该通过MySQL的password()函数传递-您是否以相同的方式创建用户密码

检查SQL查询是否会产生任何结果的一种简单方法是将其回显、复制并粘贴到数据库中(即通过phpMyAdmin)。如果是这样,问题就出在代码中

更新
Sergiy T.指出会话_start()是在输出发送到浏览器后放置的。因为您没有收到警告,所以您可能没有启用错误报告。在开发过程中,此选项应处于启用状态。
重要的是,session_start()放在任何输出之前(甚至是空白)

一路上的提示-停止使用
@
操作员抑制错误;这可能会在开发过程中暴露您的问题


再次-确保您的脚本不易受到SQL注入的攻击

语法用于PHP对象。id是$obj的一部分,您可以使用->语法访问它

至于为什么它不起作用,我看不出任何明显的问题,但是你的代码有很多问题。首先,您以明文形式存储密码,而不是清除表单中的输入。这就给SQL注入带来了巨大的问题,这只是对代码最简单和最明显的两种攻击


实现身份验证很困难,不建议任何单独工作的开发人员使用。这里没有重新发明轮子的好理由,有很多好的免费选项可以集成到任何项目中。我喜欢这个框架,但还有很多其他框架。

第一个问题已经有了答案

对于第二个问题,存在sql注入的可能性。可能有人只是选择了带有“或”的用户名或密码

而且
会话\u start()
可能有问题(请查看)

要使用基于cookie的会话,必须在将任何内容输出到浏览器之前调用会话_start()


密码是通过带有密码函数的register.php文件创建的。它们在dbusers数据库中以passs(双重检查)的形式写入。您应该将register.php添加到您的问题中-这会使问题变得更好。密码是通过带有密码函数的register.php文件创建的。它们以passs的形式写入(仔细检查)在dbusers数据库中。其他一切都在运行,问题必须在login.php或home.php中解决…我相信删除错误抑制程序并将SQL查询直接粘贴到数据库可能会暴露您的问题。我没有看到会话_start()的问题-很好的捕获。如果禁用了常规错误报告,这将不会在OP中显示。除非您正在使用一些输出缓冲,否则在调用
会话\u start()
之前,
标记将发送到浏览器。同意-但不鼓励使用输出缓冲来修复标题警告等问题。
// dbConfig.php is a file that contains your
// database connection information. This
// tutorial assumes a connection is made from
// this existing file.
include ("dbconfig.php");


//Input validation and the dbase code
if ( $_GET["op"] == "reg" )
{
$bInputFlag = false;
foreach ( $_POST as $field )
{
if ($field == "")
{
$bInputFlag = false;
}
else
{
$bInputFlag = true;
}
}
// If we had problems with the input, exit with error
if ($bInputFlag == false)
{
die( "Problem with your registration info. "
."Please go back and try again.");
}

// Fields are clear, add user to database
// Setup query
$q = "INSERT INTO `dbusers` (`username`,`password`,`email`) "
."VALUES ('".$_POST["username"]."', "
."PASSWORD('".$_POST["password"]."'), "
."'".$_POST["email"]."')";

// Run query
$r = mysql_query($q);

// Make sure query inserted user successfully
if ( !mysql_insert_id() )
{
die("Error: User not added to database.");
}
else
{
// Redirect to thank you page.
Header("Location: register.php?op=thanks");
}
} // end if


//The thank you page
elseif ( $_GET["op"] == "thanks" )
{
echo "<h2> Thanks for registering!</h2> ";
}

// EOF
?>
<body>

    <?php
    session_start();
    // dBase file
    include ("dbconfig.php");

    if ($_GET["op"] == "login")
    {
    if (!$_POST["username"] || !$_POST["password"])
    {
    die("You need to provide a username and password.");
    }

    // Create query
    $q = "SELECT * FROM `dbusers` "
    ."WHERE `username`='".$_POST["username"]."' "
    ."AND `password`=PASSWORD('".$_POST["password"]."') "
    ."LIMIT 1";

    // Run query
    $r = mysql_query($q);

    if ( $obj = @mysql_fetch_object($r) )
    {
    // Login good, create session variables
    $_SESSION["valid_id"] = $obj->id;
    $_SESSION["valid_user"] = $_POST["username"];
    $_SESSION["valid_time"] = time();

    // Redirect to member page
    Header("Location: home.php");
    }

    else
    {
    // Login not successful
    die("Sorry, could not log you in. Wrong login information.");
    }
    }
    ?>

</body>
<body>

<?php
    session_start();

    if (!$_SESSION["valid_user"])
    {
    // User not logged in, redirect to login page
    Header("Location: login.html");
    }

    // Display Member information
    echo "<p>User ID: " . $_SESSION["valid_id"];
    echo "<p>Username: " . $_SESSION["valid_user"];
    echo "<p>Logged in: " . date("m/d/Y", $_SESSION["valid_time"]);
?>

<div id="MENUBAR">
<ul id="LINKS" class="MenuBarHorizontal">
    <li><a class="MenuBarItemSubmenu">Clientes</a>
      <ul>
 if ( $obj = @mysql_fetch_object($r) )
        {
        // Login good, create session variables
        $_SESSION["valid_id"] = $obj->id;
        $_SESSION["valid_user"] = $_POST["username"];
        $_SESSION["valid_time"] = time();