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