我的代码中有一只猪。我是新手,我正在努力奋斗。
我有几个问题,首先一个问题是我正在尝试使用连接到SQL数据库的登录表单,但是当输入不正确的数据或没有数据时不会出错,但是它看起来要登录
其次,我试图在用户登录时显示每个页面上的用户名,这有效,但仅适用于已手动输入数据库的用户。通过我的注册表单添加的任何用户都不会显示,尽管他们在phpmyadmin中显示。
第一个问题的登录页面代码是:
<?php
echo '<h3>Sign in</h3>';
if($_SERVER['REQUEST_METHOD'] != 'POST')
{
/*the form hasn't been posted yet, display it
note that the action="" will cause the form to post to the same page it is on */
echo '<form method="post" action="">
Username: <input type="text" name="Username" />
Password: <input type="password" name="Password" />
<input type="submit" value="Sign in" />
</form>';
}
else
{
//the form has been posted without errors, so save it
//notice the use of mysql_real_escape_string, keep everything safe!
$username = mysql_real_escape_string($_POST['Username']);
$password = mysql_real_escape_string($_POST['Password']);
$sql = "SELECT * FROM Users WHERE Username = '$username' AND Password = '$password'";
$result = mysql_query($sql);
if(!$result)
{
//something went wrong, display the error
echo 'Something went wrong while signing in. Please try again later.';
header("location:index.php");
//echo mysql_error(); //debugging purposes, uncomment when needed
}
else
{
{
{
//set the $_SESSION['signed_in'] variable to TRUE
$_SESSION['signed_in'] = true;
//we also put the user_id and user_name values in the $_SESSION, so we can use it at various pages
while($row = mysql_fetch_assoc($result))
{
$_SESSION['UserID'] = $row['UserID'];
$_SESSION['Username'] = $row['Username'];
}
echo 'Welcome, ' . $_SESSION['Username'] . ' <a href="index2.php">Proceed to the forum Home page</a>.';
}
}
}
}
?>
感谢您的任何建议。
答案 0 :(得分:0)
当存在实际的mysql错误时,函数mysql_query()
返回FALSE
。这可能是语法错误,无效约束插入或输入数据类型不匹配。如果任何插入的用户名和密码组合可能有效,则表示不会出现任何错误。
在您的情况下,如果用户名或密码错误,则表示返回0行(无数据)不的错误即可。因此,在您的代码中,变量$result
永远不会FALSE
,这就是您的代码永远不会进入错误循环的原因。
为了解决这个问题,您需要更改代码以检查返回的行数是否大于0,而不是检查结果是否为TRUE
。您可以使用mysql_num_rows()
函数来实现此目的。
更改后的代码应如下所示
$result = mysql_query($sql);
$num_rows = mysql_num_rows($result);
if($num_rows < 0){
//put some code for error
}
进一步说明:
如果您不想使用PDO,可以使用mysqli而不是mysql。你也容易受到sql注入攻击。如果您查看prepared statements以及如何使数据进入您的服务器更安全,那将是非常好的。